From 685392b0979b721116f1a00b051cf76f1125d30a Mon Sep 17 00:00:00 2001
From: Xavi Ferrer <xavi@delape.net>
Date: Mon, 2 Nov 2020 16:59:03 +0100
Subject: [PATCH] prevent scroll down on history fetch.

---
 src/conversejs/converse.js     | 2 +-
 src/conversejs/converse.min.js | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/conversejs/converse.js b/src/conversejs/converse.js
index dd2e74c..9d0d385 100644
--- a/src/conversejs/converse.js
+++ b/src/conversejs/converse.js
@@ -93211,7 +93211,7 @@ const ChatBoxView = view_View.extend({
    *  - An optional message that serves as the cause for needing to scroll down.
    */
   maybeScrollDown(message) {
-    if ((message === null || message === void 0 ? void 0 : message.get('sender')) === 'me' || !this.model.isHidden()) {
+    if (message.get("sender") === "me" && !message.get('is_archived') || !this.model.isHidden()) {
       this.debouncedScrollDown();
     }
   },
diff --git a/src/conversejs/converse.min.js b/src/conversejs/converse.min.js
index 90c402e..de4f599 100644
--- a/src/conversejs/converse.min.js
+++ b/src/conversejs/converse.min.js
@@ -474,7 +474,7 @@ const Cm=function(e){this.views={},this.keys=()=>Object.keys(this.views),this.ge
  * @module converse-chatview
  * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
- */const{Strophe:hv,dayjs:fv}=Yc.env,pv=Yc.env.utils,gv=jd.extend({length:200,className:"chatbox hidden",is_chatroom:!1,events:{"click .chatbox-navback":"showControlBox","click .new-msgs-indicator":"viewUnreadMessages","click .send-button":"onFormSubmitted","click .toggle-clear":"clearMessages","input .chat-textarea":"inputChanged","keydown .chat-textarea":"onKeyDown","keyup .chat-textarea":"onKeyUp","paste .chat-textarea":"onPaste"},async initialize(){this.initDebounced(),this.listenTo(this.model,"change:composing_spoiler",this.renderMessageForm),this.listenTo(this.model,"change:hidden",e=>e.get("hidden")?this.hide():this.show()),this.listenTo(this.model,"change:status",this.onStatusMessageChanged),this.listenTo(this.model,"destroy",this.remove),this.listenTo(this.model,"show",this.show),this.listenTo(this.model,"vcard:change",this.renderHeading),this.model.contact&&this.listenTo(this.model.contact,"destroy",this.renderHeading),this.model.rosterContactAdded&&this.model.rosterContactAdded.then(()=>{this.listenTo(this.model.contact,"change:nickname",this.renderHeading),this.renderHeading()}),this.listenTo(this.model.presence,"change:show",this.onPresenceChanged),this.render(),this.listenTo(this.model.messages,"add",this.onMessageAdded),this.listenTo(this.model.messages,"remove",this.renderChatHistory),this.listenTo(this.model.messages,"rendered",this.maybeScrollDown),this.listenTo(this.model.messages,"reset",this.renderChatHistory),this.listenTo(this.model.notifications,"change",this.renderNotifications),this.listenTo(this.model,"change:show_help_messages",this.renderHelpMessages),await this.updateAfterMessagesFetched(),this.model.maybeShow(),qc.trigger("chatBoxViewInitialized",this)},initDebounced(){this.markScrolled=Tc(this._markScrolled,100),this.debouncedScrollDown=Tc(this.scrollDown,100),qc.settings.get("debounced_content_rendering")?(this.renderChatHistory=Tc(()=>this.renderChatContent(!1),100),this.renderNotifications=Tc(()=>this.renderChatContent(!0),100)):(this.renderChatHistory=()=>this.renderChatContent(!1),this.renderNotifications=()=>this.renderChatContent(!0))},render(){const e=Lm(Object.assign(this.model.toJSON(),{markScrolled:e=>this.markScrolled(e)}));return Wa(e,this.el),this.content=this.el.querySelector(".chat-content"),this.notifications=this.el.querySelector(".chat-content__notifications"),this.msgs_container=this.el.querySelector(".chat-content__messages"),this.help_container=this.el.querySelector(".chat-content__help"),this.renderChatContent(),this.renderMessageForm(),this.renderHeading(),this},onMessageAdded(e){this.renderChatHistory(),pv.isNewMessage(e)&&("me"===e.get("sender")?this.model.set("scrolled",!1):this.model.get("scrolled",!0)&&this.showNewMessagesIndicator())},getNotifications(){return this.model.notifications.get("chat_state")===Lc.COMPOSING?dd("%1$s is typing",this.model.getDisplayName()):this.model.notifications.get("chat_state")===Lc.PAUSED?dd("%1$s has stopped typing",this.model.getDisplayName()):this.model.notifications.get("chat_state")===Lc.GONE?dd("%1$s has gone away",this.model.getDisplayName()):""},getHelpMessages:()=>["<strong>/clear</strong>: ".concat(dd("Remove messages")),"<strong>/close</strong>: ".concat(dd("Close this chat")),"<strong>/me</strong>: ".concat(dd("Write in the third person")),"<strong>/help</strong>: ".concat(dd("Show this menu"))],renderHelpMessages(){Wa(Ga(uv(),this.model,this.getHelpMessages(),!this.model.get("show_help_messages"),this.model.get("type")),this.help_container)},renderChatContent(e=!1){this.tpl_chat_content||(this.tpl_chat_content=e=>Ga(lv(),this,e.messages,e.notifications));const t=this.model.messages.models,n=e?t:Array.from(t);Wa(this.tpl_chat_content({messages:n,notifications:this.getNotifications()}),this.msgs_container)},renderToolbar(){if(!qc.settings.get("show_toolbar"))return this;const e=Object.assign({model:this.model,chatview:this},this.model.toJSON(),this.getToolbarOptions());return Wa((e=>{const t=qc.settings.get("message_limit"),n=qc.settings.get("visible_toolbar_buttons").call,r=qc.settings.get("visible_toolbar_buttons").emoji,i=qc.settings.get("show_send_button"),s=qc.settings.get("visible_toolbar_buttons").spoiler,o=qc.settings.get("show_toolbar");return Ga(Vm(),e.chatview,e.model,e.composing_spoiler,e.hidden_occupants,e.is_groupchat,n,r,e.show_occupants_toggle,i,s,o,t)})(e),this.el.querySelector(".chat-toolbar")),qc.trigger("renderToolbar",this),this},renderMessageForm(){var e,t;const n=this.el.querySelector(".message-form-container");var r;Wa((r=Object.assign(this.model.toJSON(),{hint_value:null===(e=this.el.querySelector(".spoiler-hint"))||void 0===e?void 0:e.value,label_message:this.model.get("composing_spoiler")?dd("Hidden message"):dd("Message"),label_spoiler_hint:dd("Optional hint"),message_value:null===(t=this.el.querySelector(".chat-textarea"))||void 0===t?void 0:t.value,show_send_button:qc.settings.get("show_send_button"),show_toolbar:qc.settings.get("show_toolbar"),unread_msgs:dd("You have unread messages")}),Ga(Wm(),r.unread_msgs,r.label_spoiler_hint||"",r.hint_value||"",r.composing_spoiler?"":"hidden",r.show_send_button?"chat-textarea-send-button":"",r.composing_spoile?"spoiler":"",r.label_message,r.message_value||"")),n),this.el.addEventListener("focusin",e=>this.emitFocused(e)),this.el.addEventListener("focusout",e=>this.emitBlurred(e)),this.renderToolbar()},showControlBox(){Lc.chatboxviews.get("controlbox").show(),this.hide()},showUserDetailsModal(e){e.preventDefault(),void 0===this.user_details_modal&&(this.user_details_modal=new Lc.UserDetailsModal({model:this.model})),this.user_details_modal.show(e)},onDragOver(e){e.preventDefault()},onDrop(e){0!=e.dataTransfer.files.length&&(e.preventDefault(),this.model.sendFiles(e.dataTransfer.files))},async renderHeading(){const e=await this.generateHeadingTemplate();Wa(e,this.el.querySelector(".chat-head-chatbox"))},async getHeadingStandaloneButton(e){const t=await e;return Ga(cv(),t.a_class,t.icon_class,t.handler,t.i18n_title)},async getHeadingDropdownItem(e){const t=await e;return Ga(av(),t.a_class,t.handler,t.i18n_title,t.icon_class,t.i18n_text)},async generateHeadingTemplate(){var e;const t=null===(e=this.model)||void 0===e?void 0:e.vcard,n=t?t.toJSON():{},r=await this.getHeadingButtons(),i=r.filter(e=>e.standalone),s=r.filter(e=>!e.standalone);return(e=>{const t={alt_text:dd("The User's Profile Image"),extra_classes:"",height:40,width:40};return Ga(Um(),e.status?"":"chatbox-title--no-desc",e._converse.api.settings.get("singleton")?"":Ga(Hm()),e.type!==e._converse.HEADLINES_TYPE?Ga(qm(),bf(Object.assign({},e,t))):"",e.jid,e.url?Ga(Bm(),e.url,e.display_name):e.display_name,e.dropdown_btns.length?Ga(Fm(),e.dropdown_btns):"",e.standalone_btns.length?(e=>e.standalone_btns.reverse().map(e=>oh(e,"")))(e):"",e.status?Ga(zm(),e.status):"")})(Object.assign(n,this.model.toJSON(),{_converse:Lc,dropdown_btns:s.map(e=>this.getHeadingDropdownItem(e)),standalone_btns:i.map(e=>this.getHeadingStandaloneButton(e)),display_name:this.model.getDisplayName()}))},getHeadingButtons(){const e=[{a_class:"show-user-details-modal",handler:e=>this.showUserDetailsModal(e),i18n_text:dd("Details"),i18n_title:dd("See more information about this person"),icon_class:"fa-id-card",name:"details",standalone:"overlayed"===qc.settings.get("view_mode")}];return qc.settings.get("singleton")||e.push({a_class:"close-chatbox-button",handler:e=>this.close(e),i18n_text:dd("Close"),i18n_title:dd("Close and end this conversation"),icon_class:"fa-times",name:"close",standalone:"overlayed"===qc.settings.get("view_mode")}),Lc.api.hook("getHeadingButtons",this,e)},getToolbarOptions:()=>({}),async updateAfterMessagesFetched(){await this.model.messages.fetched,this.renderChatContent(),this.insertIntoDOM(),this.scrollDown(),qc.trigger("afterMessagesFetched",this.model)},maybeScrollDown(e){"me"!==(null==e?void 0:e.get("sender"))&&this.model.isHidden()||this.debouncedScrollDown()},scrollDown(e){var t,n;if(null==e||null===(t=e.preventDefault)||void 0===t||t.call(e),null==e||null===(n=e.stopPropagation)||void 0===n||n.call(e),this.model.get("scrolled")&&pv.safeSave(this.model,{scrolled:!1,scrollTop:null}),this.msgs_container.scrollTo){const e=this.msgs_container.scrollTop?"smooth":"auto";this.msgs_container.scrollTo({top:this.msgs_container.scrollHeight,behavior:e})}else this.msgs_container.scrollTop=this.msgs_container.scrollHeight;this.onScrolledDown()},maintainScrollTop(){const e=this.model.get("scrollTop");e?this.msgs_container.scrollTop=e:this.scrollDown()},insertIntoDOM(){return Lc.chatboxviews.insertRowColumn(this.el),qc.trigger("chatBoxInsertedIntoDOM",this),this},addSpinner(e=!1){if(null===this.el.querySelector(".spinner")){const t=pv.getElementFromTemplateResult(Tf());e?(this.content.insertAdjacentElement("beforeend",t),this.scrollDown()):this.content.insertAdjacentElement("afterbegin",t)}},clearSpinner(){this.content.querySelectorAll(".spinner").forEach(pv.removeElement)},onStatusMessageChanged(e){this.renderHeading(),qc.trigger("contactStatusMessageChanged",{contact:e.attributes,message:e.get("status")})},shouldShowOnTextMessage(){return!Lc.isUniView()&&!pv.isVisible(this.el)},markFollowups(e){const t=e.getAttribute("data-from"),n=e.previousElementSibling,r=fv(e.getAttribute("data-isodate")),i=e.nextElementSibling;pv.hasClass("chat-msg--action",e)||pv.hasClass("chat-msg--action",n)||pv.hasClass("chat-info",e)||pv.hasClass("chat-info",n)||n.getAttribute("data-from")!==t||!r.isBefore(fv(n.getAttribute("data-isodate")).add(10,"minutes"))||e.getAttribute("data-encrypted")!==n.getAttribute("data-encrypted")||pv.addClass("chat-msg--followup",e),i&&(!pv.hasClass("chat-msg--action",e)&&pv.hasClass("chat-info",e)&&i.getAttribute("data-from")===t&&fv(i.getAttribute("data-isodate")).isBefore(r.add(10,"minutes"))&&e.getAttribute("data-encrypted")===i.getAttribute("data-encrypted")?pv.addClass("chat-msg--followup",i):pv.removeClass("chat-msg--followup",i))},parseMessageForCommands(e){const t=e.replace(/^\s*/,"").match(/^\/(.*)\s*$/);if(t){if("clear"===t[1])return this.clearMessages(),!0;if("close"===t[1])return this.close(),!0;if("help"===t[1])return this.model.set({show_help_messages:!0}),!0}},async onFormSubmitted(e){var t;e.preventDefault();const n=this.el.querySelector(".chat-textarea"),r=n.value.trim();if(qc.settings.get("message_limit")&&r.length>qc.settings.get("message_limit")||!r.replace(/\s/g,"").length)return;if(!Lc.connection.authenticated){const e=dd("Sorry, the connection has been lost, and your message could not be sent");return qc.alert("error",dd("Error"),e),void qc.connection.reconnect()}let i,s={};this.model.get("composing_spoiler")&&(s=this.el.querySelector("form.sendXMPPMessage input.spoiler-hint"),i=s.value),pv.addClass("disabled",n),n.setAttribute("disabled","disabled"),null===(t=this.el.querySelector("converse-emoji-dropdown"))||void 0===t||t.hideMenu();const o=this.parseMessageForCommands(r),a=o?null:await this.model.sendMessage(r,i);(o||a)&&(s.value="",n.value="",pv.removeClass("correcting",n),n.style.height="auto",this.updateCharCounter(n.value)),a&&qc.trigger("messageSend",a),"overlayed"===qc.settings.get("view_mode")&&(this.msgs_container.parentElement.style.display="none"),n.removeAttribute("disabled"),pv.removeClass("disabled",n),"overlayed"===qc.settings.get("view_mode")&&(this.msgs_container.parentElement.style.display=""),this.model.setChatState(Lc.ACTIVE,{silent:!0}),n.focus()},updateCharCounter(e){if(qc.settings.get("message_limit")){const t=this.el.querySelector(".message-limit"),n=qc.settings.get("message_limit")-e.length;t.textContent=n,n<1?pv.addClass("error",t):pv.removeClass("error",t)}},onPaste(e){if(0!==e.clipboardData.files.length)return e.preventDefault(),void this.model.sendFiles(Array.from(e.clipboardData.files));this.updateCharCounter(e.clipboardData.getData("text/plain"))},autocompleteInPicker(e,t){const n=this.el.querySelector("converse-emoji-dropdown"),r=this.el.querySelector("converse-emoji-picker");if(r&&n)return r.model.set({ac_position:e.selectionStart,autocompleting:t,query:t}),n.showMenu(),!0},onEmojiReceivedFromPicker(e){const t=this.el.querySelector("converse-emoji-picker").model,n=t.get("autocompleting"),r=t.get("ac_position");this.insertIntoTextArea(e,n,!1,r)},onKeyUp(e){this.updateCharCounter(e.target.value)},onKeyDown(e){if(!e.ctrlKey){if(!e.shiftKey&&!e.altKey&&!e.metaKey)if(e.keyCode===Yc.keycodes.TAB){const t=pv.getCurrentWord(e.target,null,/(:.*?:)/g);t.startsWith(":")&&this.autocompleteInPicker(e.target,t)&&(e.preventDefault(),e.stopPropagation())}else{if(e.keyCode===Yc.keycodes.FORWARD_SLASH)return;if(e.keyCode===Yc.keycodes.ESCAPE)return this.onEscapePressed(e);if(e.keyCode===Yc.keycodes.ENTER)return this.onEnterPressed(e);if(e.keyCode!==Yc.keycodes.UP_ARROW||e.target.selectionEnd){if(e.keyCode===Yc.keycodes.DOWN_ARROW&&e.target.selectionEnd===e.target.value.length&&pv.hasClass("correcting",this.el.querySelector(".chat-textarea")))return this.editLaterMessage()}else{const e=this.el.querySelector(".chat-textarea");if(!e.value||pv.hasClass("correcting",e))return this.editEarlierMessage()}}[Yc.keycodes.SHIFT,Yc.keycodes.META,Yc.keycodes.META_RIGHT,Yc.keycodes.ESCAPE,Yc.keycodes.ALT].includes(e.keyCode)||this.model.get("chat_state")!==Lc.COMPOSING&&this.model.setChatState(Lc.COMPOSING)}},getOwnMessages(){return this.model.messages.filter({sender:"me"})},onEnterPressed(e){return this.onFormSubmitted(e)},onEscapePressed(e){e.preventDefault();const t=this.model.messages.findLastIndex("correcting"),n=t>=0?this.model.messages.at(t):null;n&&n.save("correcting",!1),this.insertIntoTextArea("",!0,!1)},async onMessageRetractButtonClicked(e){if("me"!==e.get("sender"))return Pn.error("onMessageRetractButtonClicked called for someone else's message!");const t=dd("Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere."),n=[dd("Are you sure you want to retract this message?")];qc.settings.get("show_retraction_warning")&&(n[1]=t),await qc.confirm(dd("Confirm"),n)&&this.model.retractOwnMessage(e)},onMessageEditButtonClicked(e){var t;const n=this.model.messages.findWhere("correcting"),r=null===(t=this.el.querySelector(".chat-textarea"))||void 0===t?void 0:t.value;(!r||n&&n.get("message")===r||confirm(dd("You have an unsent message which will be lost if you continue. Are you sure?")))&&(n!==e?(null==n||n.save("correcting",!1),e.save("correcting",!0),this.insertIntoTextArea(pv.prefixMentions(e),!0,!0)):(e.save("correcting",!1),this.insertIntoTextArea("",!0,!1)))},editLaterMessage(){let e,t=this.model.messages.findLastIndex("correcting");if(t>=0)for(this.model.messages.at(t).save("correcting",!1);t<this.model.messages.length-1;){t+=1;const n=this.model.messages.at(t);if(n.get("editable")){e=n;break}}e?(this.insertIntoTextArea(pv.prefixMentions(e),!0,!0),e.save("correcting",!0)):this.insertIntoTextArea("",!0,!1)},editEarlierMessage(){let e,t=this.model.messages.findLastIndex("correcting");if(t>=0)for(this.model.messages.at(t).save("correcting",!1);t>0;){t-=1;const n=this.model.messages.at(t);if(n.get("editable")){e=n;break}}e=e||this.getOwnMessages().reverse().find(e=>e.get("editable")),e&&(this.insertIntoTextArea(pv.prefixMentions(e),!0,!0),e.save("correcting",!0))},inputChanged(e){const t=e.target.scrollHeight+"px";e.target.style.height!=t&&(e.target.style.height="auto",e.target.style.height=t)},async clearMessages(e){return e&&e.preventDefault&&e.preventDefault(),!0===confirm(dd("Are you sure you want to clear the messages from this conversation?"))&&await this.model.clearMessages(),this},insertIntoTextArea(e,t=!1,n=!1,r){const i=this.el.querySelector(".chat-textarea");if(n?pv.addClass("correcting",i):pv.removeClass("correcting",i),t)i.value=r&&"string"==typeof t?i.value.replace(new RegExp(t,"g"),(n,i)=>i==r-t.length?e+" ":n):e;else{let t=i.value;t&&" "!==t[t.length-1]&&(t+=" "),i.value=t+e+" "}this.updateCharCounter(i.value),pv.placeCaretAtEnd(i)},onPresenceChanged(e){const t=e.get("show"),n=this.model.getDisplayName();let r;pv.isVisible(this.el)&&("offline"===t?r=dd("%1$s has gone offline",n):"away"===t?r=dd("%1$s has gone away",n):"dnd"===t?r=dd("%1$s is busy",n):"online"===t&&(r=dd("%1$s is online",n)),r&&this.model.createMessage({message:r,type:"info"}))},async close(e){return e&&e.preventDefault&&e.preventDefault(),Lc.router.history.getFragment()==="converse/chat?jid="+this.model.get("jid")&&Lc.router.navigate(""),qc.connection.connected()&&(this.model.setChatState(Lc.INACTIVE),this.model.sendChatState()),await this.model.close(),this.remove(),qc.trigger("chatBoxClosed",this),this},emitBlurred(e){this.el.contains(document.activeElement)||this.el.contains(e.relatedTarget)||qc.trigger("chatBoxBlurred",this,e)},emitFocused(e){this.el.contains(e.relatedTarget)||qc.trigger("chatBoxFocused",this,e)},focus(){const e=this.el.getElementsByClassName("chat-textarea")[0];return e&&document.activeElement!==e&&e.focus(),this},maybeFocus(){qc.settings.get("auto_focus")&&this.focus()},hide(){return this.el.classList.add("hidden"),this},afterShown(){this.model.clearUnreadMsgCounter(),this.model.setChatState(Lc.ACTIVE),this.scrollDown(),this.maybeFocus()},show(){pv.isVisible(this.el)?this.maybeFocus():(qc.trigger("beforeShowingChatView",this),qc.settings.get("animate")?pv.fadeIn(this.el,()=>this.afterShown()):(pv.showElement(this.el),this.afterShown()))},showNewMessagesIndicator(){pv.showElement(this.el.querySelector(".new-msgs-indicator"))},hideNewMessagesIndicator(){const e=this.el.querySelector(".new-msgs-indicator");null!==e&&e.classList.add("hidden")},_markScrolled:function(e){let t=!0,n=null;this.msgs_container.scrollTop+this.msgs_container.clientHeight>=this.msgs_container.scrollHeight-62?(t=!1,this.onScrolledDown()):0===this.msgs_container.scrollTop?qc.trigger("chatBoxScrolledUp",this):n=e.target.scrollTop,pv.safeSave(this.model,{scrolled:t,scrollTop:n})},viewUnreadMessages(){this.model.save({scrolled:!1,scrollTop:null}),this.scrollDown()},onScrolledDown(){this.hideNewMessagesIndicator(),!this.model.isHidden()&&this.model.clearUnreadMsgCounter(),qc.trigger("chatBoxScrolledDown",{chatbox:this.model})},onWindowStateChanged(e){"visible"===e?this.model.isHidden()||this.model.get("num_unread",0)&&this.model.clearUnreadMsgCounter():"hidden"===e&&(this.model.setChatState(Lc.INACTIVE,{silent:!0}),this.model.sendChatState())}});let mv;Yc.plugins.add("converse-chatview",{dependencies:["converse-chatboxviews","converse-chat","converse-disco","converse-modal"],initialize(){qc.settings.extend({auto_focus:!0,debounced_content_rendering:!0,filter_url_query_params:null,image_urls_regex:null,message_limit:0,muc_hats:["xep317"],role_affiliation_hat_conversions:{},show_images_inline:!0,show_message_avatar:!0,show_retraction_warning:!0,show_send_button:!0,show_toolbar:!0,time_format:"HH:mm",use_system_emojis:!0,visible_toolbar_buttons:{call:!1,clear:!0,emoji:!0,spoiler:!0}}),Lc.ChatBoxView=gv,Lc.UserDetailsModal=Kd.extend({id:"user-details-modal",events:{"click button.refresh-contact":"refreshContact","click .fingerprint-trust .btn input":"toggleDeviceTrust"},initialize(){Kd.prototype.initialize.apply(this,arguments),this.model.rosterContactAdded.then(()=>this.registerContactEventHandlers()),this.listenTo(this.model,"change",this.render),this.registerContactEventHandlers(),qc.trigger("userDetailsModalInitialized",this.model)},toHTML(){var e;const t=null===(e=this.model)||void 0===e?void 0:e.vcard,n=t?t.toJSON():{};return ov(Object.assign(this.model.toJSON(),n,{_converse:Lc,allow_contact_removal:qc.settings.get("allow_contact_removal"),display_name:this.model.getDisplayName(),is_roster_contact:void 0!==this.model.contact,removeContact:e=>this.removeContact(e),view:this,utils:pv}))},registerContactEventHandlers(){void 0!==this.model.contact&&(this.listenTo(this.model.contact,"change",this.render),this.listenTo(this.model.contact.vcard,"change",this.render),this.model.contact.on("destroy",()=>{delete this.model.contact,this.render()}))},async refreshContact(e){e&&e.preventDefault&&e.preventDefault();const t=this.el.querySelector(".fa-refresh");pv.addClass("fa-spin",t);try{await qc.vcard.update(this.model.contact.vcard,!0)}catch(e){Pn.fatal(e),this.alert(dd("Sorry, something went wrong while trying to refresh"),"danger")}pv.removeClass("fa-spin",t)},removeContact(e){if(e&&e.preventDefault&&e.preventDefault(),!qc.settings.get("allow_contact_removal"))return;!0===confirm(dd("Are you sure you want to remove this contact?"))&&(this.modal.hide(),setTimeout(()=>{this.model.contact.removeFromRoster(()=>this.model.contact.destroy(),e=>{Pn.error(e),qc.alert("error",dd("Error"),[dd("Sorry, there was an error while trying to remove %1$s as a contact.",this.model.contact.getDisplayName())])})},1))}}),qc.listen.on("chatBoxViewsInitialized",()=>{const e=Lc.chatboxviews;Lc.chatboxes.on("add",async t=>{e.get(t.get("id"))||t.get("type")!==Lc.PRIVATE_CHAT_TYPE||(await t.initialized,e.add(t.get("id"),new Lc.ChatBoxView({model:t})))})}),qc.listen.on("windowStateChanged",(function(e){Lc.chatboxviews&&Lc.chatboxviews.forEach(t=>{"controlbox"!==t.model.get("id")&&t.onWindowStateChanged(e.state)})})),qc.listen.on("connected",()=>qc.disco.own.features.add(hv.NS.SPOILER)),Object.assign(qc,{chatviews:{get:e=>void 0===e?Object.values(Lc.chatboxviews.getAll()):"string"==typeof e?Lc.chatboxviews.get(e):e.map(e=>Lc.chatboxviews.get(e))}})}});let vv=0;function _v(e){mv=e}function bv(){mv=null,vv=0}const yv=Symbol("haunted.phase"),wv=Symbol("haunted.hook"),Sv=Symbol("haunted.update"),xv=Symbol("haunted.commit"),Ev=Symbol("haunted.effects"),Av=Symbol("haunted.layoutEffects");class Cv{constructor(e,t){this.update=e,this.host=t,this[wv]=new Map,this[Ev]=[],this[Av]=[]}run(e){_v(this);let t=e();return bv(),t}_runEffects(e){let t=this[e];_v(this);for(let e of t)e.call(this);bv()}runEffects(){this._runEffects(Ev)}runLayoutEffects(){this._runEffects(Av)}teardown(){this[wv].forEach(e=>{"function"==typeof e.teardown&&e.teardown()})}}const jv=Promise.resolve().then.bind(Promise.resolve());function Tv(){let e,t=[];function n(){e=null;let n=t;t=[];for(var r=0,i=n.length;r<i;r++)n[r]()}return function(r){t.push(r),null==e&&(e=jv(n))}}const Ov=Tv(),kv=Tv();class Nv{constructor(e,t){this.renderer=e,this.host=t,this.state=new Cv(this.update.bind(this),t),this[yv]=null,this._updateQueued=!1}update(){this._updateQueued||(Ov(()=>{let e=this.handlePhase(Sv);kv(()=>{this.handlePhase(xv,e),kv(()=>{this.handlePhase(Ev)})}),this._updateQueued=!1}),this._updateQueued=!0)}handlePhase(e,t){switch(this[yv]=e,e){case xv:return this.commit(t),void this.runEffects(Av);case Sv:return this.render();case Ev:return this.runEffects(Ev)}this[yv]=null}render(){return this.state.run(()=>this.renderer.call(this.host,this.host))}runEffects(e){this.state._runEffects(e)}teardown(){this.state.teardown()}}function Iv(e){class t extends Nv{constructor(e,t,n){super(e,n||t),this.frag=t}commit(t){e(t,this.frag)}}return function(e,n,r){const i=(r||n||{}).baseElement||HTMLElement,{observedAttributes:s=[],useShadowDOM:o=!0,shadowRootInit:a={}}=r||n||{};class c extends i{constructor(){super(),!1===o?this._scheduler=new t(e,this):(this.attachShadow({mode:"open",...a}),this._scheduler=new t(e,this.shadowRoot,this))}static get observedAttributes(){return e.observedAttributes||s||[]}connectedCallback(){this._scheduler.update()}disconnectedCallback(){this._scheduler.teardown()}attributeChangedCallback(e,t,n){if(t===n)return;let r=""===n||n;Reflect.set(this,((e="")=>e.replace(/-+([a-z])?/g,(e,t)=>t?t.toUpperCase():""))(e),r)}}const l=new Proxy(i.prototype,{getPrototypeOf:e=>e,set(e,t,n,r){let i;if(t in e){if(i=Object.getOwnPropertyDescriptor(e,t),i&&i.set)return i.set.call(r,n),!0;Reflect.set(e,t,n)}return i="symbol"==typeof t||"_"===t[0]?{enumerable:!0,configurable:!0,writable:!0,value:n}:function(e){let t=e;return Object.freeze({enumerable:!0,configurable:!0,get:()=>t,set(e){t=e,this._scheduler.update()}})}(n),Object.defineProperty(r,t,i),i.set&&i.set.call(r,n),!0}});return Object.setPrototypeOf(c.prototype,l),c}}class Mv{constructor(e,t){this.id=e,this.state=t}}function Rv(e,...t){let n=vv++,r=mv[wv],i=r.get(n);return i||(i=new e(n,mv,...t),r.set(n,i)),i.update(...t)}function Dv(e){return Rv.bind(null,e)}function Pv(e){return Dv(class extends Mv{constructor(t,n,r,i){super(t,n),e(n,this)}update(e,t){this.callback=e,this.lastValues=this.values,this.values=t}call(){this.values&&!this.hasChanged()||this.run()}run(){this.teardown(),this._teardown=this.callback.call(this.state)}teardown(){"function"==typeof this._teardown&&this._teardown()}hasChanged(){return!this.lastValues||this.values.some((e,t)=>this.lastValues[t]!==e)}})}function Lv(e,t){e[Ev].push(t)}Pv(Lv);const zv=Dv(class extends Mv{constructor(e,t,n){super(e,t),this._updater=this._updater.bind(this),this._ranEffect=!1,this._unsubscribe=null,Lv(t,this)}update(e){if(this.state.virtual)throw new Error("can't be used with virtual components");return this.Context!==e&&(this._subscribe(e),this.Context=e),this.value}call(){this._ranEffect||(this._ranEffect=!0,this._unsubscribe&&this._unsubscribe(),this._subscribe(this.Context),this.state.update())}_updater(e){this.value=e,this.state.update()}_subscribe(e){const t={Context:e,callback:this._updater};this.state.host.dispatchEvent(new CustomEvent("haunted.context",{detail:t,bubbles:!0,cancelable:!0,composed:!0}));const{unsubscribe:n,value:r}=t;this.value=n?r:e.defaultValue,this._unsubscribe=n}teardown(){this._unsubscribe&&this._unsubscribe()}});Dv(class extends Mv{constructor(e,t,n,r){super(e,t),this.value=n(),this.values=r}update(e,t){return this.hasChanged(t)&&(this.values=t,this.value=e()),this.value}hasChanged(e=[]){return e.some((e,t)=>this.values[t]!==e)}});Pv((function(e,t){e[Av].push(t)})),Dv(class extends Mv{constructor(e,t,n){super(e,t),this.updater=this.updater.bind(this),"function"==typeof n&&(n=n()),this.makeArgs(n)}update(){return this.args}updater(e){if("function"==typeof e){const t=e,[n]=this.args;e=t(n)}this.makeArgs(e),this.state.update()}makeArgs(e){this.args=Object.freeze([e,this.updater])}}),Dv(class extends Mv{constructor(e,t,n,r,i){super(e,t),this.dispatch=this.dispatch.bind(this),this.currentState=void 0!==i?i(r):r}update(e){return this.reducer=e,[this.currentState,this.dispatch]}dispatch(e){this.currentState=this.reducer(this.currentState,e),this.state.update()}});const Fv=Array.prototype.includes;const{component:Bv,createContext:qv}=function({render:e}){const t=Iv(e),n=function(e){return t=>{const n={Provider:class extends HTMLElement{constructor(){super(),this.listeners=new Set,this.addEventListener("haunted.context",this)}disconnectedCallback(){this.removeEventListener("haunted.context",this)}handleEvent(e){const{detail:t}=e;t.Context===n&&(t.value=this.value,t.unsubscribe=this.unsubscribe.bind(this,t.callback),this.listeners.add(t.callback),e.stopPropagation())}unsubscribe(e){this.listeners.delete(e)}set value(e){this._value=e;for(let t of this.listeners)t(e)}get value(){return this._value}},Consumer:e((function({render:e}){return e(zv(n))})),defaultValue:t};return n}}(t);return{component:t,createContext:n}}({render:Wa});!function(){const e=new WeakMap,t=new WeakMap;class n extends Nv{constructor(e,t){super(e,t),this.state.virtual=!0}render(){return this.state.run(()=>this.renderer.apply(this.host,this.args))}commit(e){this.host.setValue(e),this.host.commit()}teardown(){super.teardown();let n=t.get(this);e.delete(n)}}}();function Hv(){const e=Wv(['\n            <p class="brand-subtitle">','</p>\n            <p class="brand-subtitle"><a target="_blank" rel="nofollow" href="https://conversejs.org">Open Source</a> XMPP chat client brought to you by <a target="_blank" rel="nofollow" href="https://opkode.com">Opkode</a> </p>\n            <p class="brand-subtitle"><a target="_blank" rel="nofollow" href="https://hosted.weblate.org/projects/conversejs/#languages">Translate</a> it into your own language</p>']);return Hv=function(){return e},e}function Uv(){const e=Wv(['<p class="byline">messaging freedom</p>']);return Uv=function(){return e},e}function $v(){const e=Wv(['\n        <a class="brand-heading" href="https://conversejs.org" target="_blank" rel="noopener">\n            <span class="brand-name-wrapper ','">\n                <svg class="converse-svg-logo"\n                    xmlns:svg="http://www.w3.org/2000/svg"\n                    xmlns="http://www.w3.org/2000/svg"\n                    xmlns:xlink="http://www.w3.org/1999/xlink"\n                    viewBox="0 0 364 364">\n                    <title>Converse</title>\n                    <g class="cls-1" id="g904">\n                        <g data-name="Layer 2">\n                            <g data-name="Layer 7">\n                                <path\n                                    class="cls-3"\n                                    d="M221.46,103.71c0,18.83-29.36,18.83-29.12,0C192.1,84.88,221.46,84.88,221.46,103.71Z" />\n                                <path\n                                    class="cls-4"\n                                    d="M179.9,4.15A175.48,175.48,0,1,0,355.38,179.63,175.48,175.48,0,0,0,179.9,4.15Zm-40.79,264.5c-.23-17.82,27.58-17.82,27.58,0S138.88,286.48,139.11,268.65ZM218.6,168.24A79.65,79.65,0,0,1,205.15,174a12.76,12.76,0,0,0-6.29,4.65L167.54,222a1.36,1.36,0,0,1-2.46-.8v-35.8a2.58,2.58,0,0,0-3.06-2.53c-15.43,3-30.23,7.7-42.73,19.94-38.8,38-29.42,105.69,16.09,133.16a162.25,162.25,0,0,1-91.47-67.27C-3.86,182.26,34.5,47.25,138.37,25.66c46.89-9.75,118.25,5.16,123.73,62.83C265.15,120.64,246.56,152.89,218.6,168.24Z" />\n                            </g>\n                        </g>\n                    </g>\n                </svg>\n                <span class="brand-name">\n                    <span class="brand-name__text">converse<span class="subdued">.js</span></span>\n                    ',"\n                </span>\n            </span>\n        </a>\n        ","\n        "]);return $v=function(){return e},e}function Wv(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function Vv(){const e=Jv(['<a class="chatbox-btn close-chatbox-button fa fa-times"></a>']);return Vv=function(){return e},e}function Gv(){const e=Jv(['\n    <div class="flyout box-flyout">\n        <div class="chat-head controlbox-head">\n            ','\n        </div>\n        <div class="controlbox-panes"></div>\n    </div>']);return Gv=function(){return e},e}function Jv(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}qc.elements.define("converse-brand-heading",Bv(e=>{const t="fullscreen"===qc.settings.get("view_mode");return Ga($v(),t?"brand-name-wrapper--fullscreen":"",t?Ga(Uv()):"",t?Ga(Hv(),e.version_name):"")},{useShadowDOM:!1}));var Xv=n(136),Qv=n.n(Xv);function Yv(){const e=s_(['\n    <converse-brand-heading></converse-brand-heading>\n    <form id="converse-login" class="converse-form" method="post">\n        <div class="conn-feedback fade-in ','">\n            <p class="feedback-subject">','</p>\n            <p class="feedback-message ','">',"</p>\n        </div>\n        ","\n    </form>\n"]);return Yv=function(){return e},e}function Kv(){const e=s_(["<p>","</p>"]);return Kv=function(){return e},e}function Zv(){const e=s_(['<input class="btn btn-primary login-anon" type="submit" value="','">']);return Zv=function(){return e},e}function e_(){const e=s_(["\n        ","\n        ","\n        ","\n    "]);return e_=function(){return e},e}function t_(){const e=s_(['\n        <div class="form-group">\n            <label for="converse-login-jid">',':</label>\n            <input id="converse-login-jid"\n                ?autofocus=','\n                required\n                class="form-control"\n                type="text"\n                name="jid"\n                placeholder="','"/>\n        </div>\n        ',"\n        ",'\n        <fieldset class="buttons">\n            <input class="btn btn-primary" type="submit" value="','"/>\n        </fieldset>\n        ',"\n    "]);return t_=function(){return e},e}function n_(){const e=s_(['\n        <fieldset class="switch-form">\n            <p>','</p>\n            <p><a class="register-account toggle-register-login" href="#converse/register">',"</a></p>\n        </fieldset>\n    "]);return n_=function(){return e},e}function r_(){const e=s_(['\n        <div class="form-group">\n            <label for="converse-login-password">','</label>\n            <input id="converse-login-password" class="form-control" required="required" type="password" name="password" placeholder="','"/>\n        </div>\n    ']);return r_=function(){return e},e}function i_(){const e=s_(['\n        <div class="form-group form-check login-trusted">\n            <input id="converse-login-trusted" type="checkbox" class="form-check-input" name="trusted" ?checked=','>\n            <label for="converse-login-trusted" class="form-check-label login-trusted__desc">','</label>\n            <i class="fa fa-info-circle" data-toggle="popover"\n                data-title="Trusted device?"\n                data-content="','"></i>\n        </div>\n    ']);return i_=function(){return e},e}function s_(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}const o_=e=>{const t=dd("Log in"),n=dd("XMPP Address");return Ga(t_(),n,!!qc.settings.get("auto_focus"),e.placeholder_username,e.authentication!==e.EXTERNAL?(()=>{const e=dd("Password");return Ga(r_(),e,e)})():"",e.show_trust_checkbox?(e=>{const t=dd("To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It's important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available."),n=dd("This is a trusted device");return Ga(i_(),e._converse.config.get("trusted"),n,t)})(e):"",t,(e=>{const t=e._converse;return t.allow_registration&&!qc.settings.get("auto_login")&&t.pluggable.plugins["converse-register"].enabled(t)})(e)?(()=>{const e=dd("Create an account"),t=dd("Don't have a chat account?");return Ga(n_(),t,e)})():"")};var a_=e=>Ga(Yv(),e.conn_feedback_subject?e.conn_feedback_class:"hidden",e.conn_feedback_subject,e.conn_feedback_message?"":"hidden",e.conn_feedback_message,"CONNECTING"===e._converse.CONNECTION_STATUS[e.connection_status]?Tf({classes:"hor_centered"}):(e=>{const t=dd("Disconnected"),n=dd("Click here to log in anonymously");return Ga(e_(),e.authentication==e.LOGIN||e.authentication==e.EXTERNAL?o_(e):"",e.authentication==e.ANONYMOUS?Ga(Zv(),n):"",e.authentication==e.PREBIND?Ga(Kv(),t):"")})(e));function c_(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l_(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
+ */const{Strophe:hv,dayjs:fv}=Yc.env,pv=Yc.env.utils,gv=jd.extend({length:200,className:"chatbox hidden",is_chatroom:!1,events:{"click .chatbox-navback":"showControlBox","click .new-msgs-indicator":"viewUnreadMessages","click .send-button":"onFormSubmitted","click .toggle-clear":"clearMessages","input .chat-textarea":"inputChanged","keydown .chat-textarea":"onKeyDown","keyup .chat-textarea":"onKeyUp","paste .chat-textarea":"onPaste"},async initialize(){this.initDebounced(),this.listenTo(this.model,"change:composing_spoiler",this.renderMessageForm),this.listenTo(this.model,"change:hidden",e=>e.get("hidden")?this.hide():this.show()),this.listenTo(this.model,"change:status",this.onStatusMessageChanged),this.listenTo(this.model,"destroy",this.remove),this.listenTo(this.model,"show",this.show),this.listenTo(this.model,"vcard:change",this.renderHeading),this.model.contact&&this.listenTo(this.model.contact,"destroy",this.renderHeading),this.model.rosterContactAdded&&this.model.rosterContactAdded.then(()=>{this.listenTo(this.model.contact,"change:nickname",this.renderHeading),this.renderHeading()}),this.listenTo(this.model.presence,"change:show",this.onPresenceChanged),this.render(),this.listenTo(this.model.messages,"add",this.onMessageAdded),this.listenTo(this.model.messages,"remove",this.renderChatHistory),this.listenTo(this.model.messages,"rendered",this.maybeScrollDown),this.listenTo(this.model.messages,"reset",this.renderChatHistory),this.listenTo(this.model.notifications,"change",this.renderNotifications),this.listenTo(this.model,"change:show_help_messages",this.renderHelpMessages),await this.updateAfterMessagesFetched(),this.model.maybeShow(),qc.trigger("chatBoxViewInitialized",this)},initDebounced(){this.markScrolled=Tc(this._markScrolled,100),this.debouncedScrollDown=Tc(this.scrollDown,100),qc.settings.get("debounced_content_rendering")?(this.renderChatHistory=Tc(()=>this.renderChatContent(!1),100),this.renderNotifications=Tc(()=>this.renderChatContent(!0),100)):(this.renderChatHistory=()=>this.renderChatContent(!1),this.renderNotifications=()=>this.renderChatContent(!0))},render(){const e=Lm(Object.assign(this.model.toJSON(),{markScrolled:e=>this.markScrolled(e)}));return Wa(e,this.el),this.content=this.el.querySelector(".chat-content"),this.notifications=this.el.querySelector(".chat-content__notifications"),this.msgs_container=this.el.querySelector(".chat-content__messages"),this.help_container=this.el.querySelector(".chat-content__help"),this.renderChatContent(),this.renderMessageForm(),this.renderHeading(),this},onMessageAdded(e){this.renderChatHistory(),pv.isNewMessage(e)&&("me"===e.get("sender")?this.model.set("scrolled",!1):this.model.get("scrolled",!0)&&this.showNewMessagesIndicator())},getNotifications(){return this.model.notifications.get("chat_state")===Lc.COMPOSING?dd("%1$s is typing",this.model.getDisplayName()):this.model.notifications.get("chat_state")===Lc.PAUSED?dd("%1$s has stopped typing",this.model.getDisplayName()):this.model.notifications.get("chat_state")===Lc.GONE?dd("%1$s has gone away",this.model.getDisplayName()):""},getHelpMessages:()=>["<strong>/clear</strong>: ".concat(dd("Remove messages")),"<strong>/close</strong>: ".concat(dd("Close this chat")),"<strong>/me</strong>: ".concat(dd("Write in the third person")),"<strong>/help</strong>: ".concat(dd("Show this menu"))],renderHelpMessages(){Wa(Ga(uv(),this.model,this.getHelpMessages(),!this.model.get("show_help_messages"),this.model.get("type")),this.help_container)},renderChatContent(e=!1){this.tpl_chat_content||(this.tpl_chat_content=e=>Ga(lv(),this,e.messages,e.notifications));const t=this.model.messages.models,n=e?t:Array.from(t);Wa(this.tpl_chat_content({messages:n,notifications:this.getNotifications()}),this.msgs_container)},renderToolbar(){if(!qc.settings.get("show_toolbar"))return this;const e=Object.assign({model:this.model,chatview:this},this.model.toJSON(),this.getToolbarOptions());return Wa((e=>{const t=qc.settings.get("message_limit"),n=qc.settings.get("visible_toolbar_buttons").call,r=qc.settings.get("visible_toolbar_buttons").emoji,i=qc.settings.get("show_send_button"),s=qc.settings.get("visible_toolbar_buttons").spoiler,o=qc.settings.get("show_toolbar");return Ga(Vm(),e.chatview,e.model,e.composing_spoiler,e.hidden_occupants,e.is_groupchat,n,r,e.show_occupants_toggle,i,s,o,t)})(e),this.el.querySelector(".chat-toolbar")),qc.trigger("renderToolbar",this),this},renderMessageForm(){var e,t;const n=this.el.querySelector(".message-form-container");var r;Wa((r=Object.assign(this.model.toJSON(),{hint_value:null===(e=this.el.querySelector(".spoiler-hint"))||void 0===e?void 0:e.value,label_message:this.model.get("composing_spoiler")?dd("Hidden message"):dd("Message"),label_spoiler_hint:dd("Optional hint"),message_value:null===(t=this.el.querySelector(".chat-textarea"))||void 0===t?void 0:t.value,show_send_button:qc.settings.get("show_send_button"),show_toolbar:qc.settings.get("show_toolbar"),unread_msgs:dd("You have unread messages")}),Ga(Wm(),r.unread_msgs,r.label_spoiler_hint||"",r.hint_value||"",r.composing_spoiler?"":"hidden",r.show_send_button?"chat-textarea-send-button":"",r.composing_spoile?"spoiler":"",r.label_message,r.message_value||"")),n),this.el.addEventListener("focusin",e=>this.emitFocused(e)),this.el.addEventListener("focusout",e=>this.emitBlurred(e)),this.renderToolbar()},showControlBox(){Lc.chatboxviews.get("controlbox").show(),this.hide()},showUserDetailsModal(e){e.preventDefault(),void 0===this.user_details_modal&&(this.user_details_modal=new Lc.UserDetailsModal({model:this.model})),this.user_details_modal.show(e)},onDragOver(e){e.preventDefault()},onDrop(e){0!=e.dataTransfer.files.length&&(e.preventDefault(),this.model.sendFiles(e.dataTransfer.files))},async renderHeading(){const e=await this.generateHeadingTemplate();Wa(e,this.el.querySelector(".chat-head-chatbox"))},async getHeadingStandaloneButton(e){const t=await e;return Ga(cv(),t.a_class,t.icon_class,t.handler,t.i18n_title)},async getHeadingDropdownItem(e){const t=await e;return Ga(av(),t.a_class,t.handler,t.i18n_title,t.icon_class,t.i18n_text)},async generateHeadingTemplate(){var e;const t=null===(e=this.model)||void 0===e?void 0:e.vcard,n=t?t.toJSON():{},r=await this.getHeadingButtons(),i=r.filter(e=>e.standalone),s=r.filter(e=>!e.standalone);return(e=>{const t={alt_text:dd("The User's Profile Image"),extra_classes:"",height:40,width:40};return Ga(Um(),e.status?"":"chatbox-title--no-desc",e._converse.api.settings.get("singleton")?"":Ga(Hm()),e.type!==e._converse.HEADLINES_TYPE?Ga(qm(),bf(Object.assign({},e,t))):"",e.jid,e.url?Ga(Bm(),e.url,e.display_name):e.display_name,e.dropdown_btns.length?Ga(Fm(),e.dropdown_btns):"",e.standalone_btns.length?(e=>e.standalone_btns.reverse().map(e=>oh(e,"")))(e):"",e.status?Ga(zm(),e.status):"")})(Object.assign(n,this.model.toJSON(),{_converse:Lc,dropdown_btns:s.map(e=>this.getHeadingDropdownItem(e)),standalone_btns:i.map(e=>this.getHeadingStandaloneButton(e)),display_name:this.model.getDisplayName()}))},getHeadingButtons(){const e=[{a_class:"show-user-details-modal",handler:e=>this.showUserDetailsModal(e),i18n_text:dd("Details"),i18n_title:dd("See more information about this person"),icon_class:"fa-id-card",name:"details",standalone:"overlayed"===qc.settings.get("view_mode")}];return qc.settings.get("singleton")||e.push({a_class:"close-chatbox-button",handler:e=>this.close(e),i18n_text:dd("Close"),i18n_title:dd("Close and end this conversation"),icon_class:"fa-times",name:"close",standalone:"overlayed"===qc.settings.get("view_mode")}),Lc.api.hook("getHeadingButtons",this,e)},getToolbarOptions:()=>({}),async updateAfterMessagesFetched(){await this.model.messages.fetched,this.renderChatContent(),this.insertIntoDOM(),this.scrollDown(),qc.trigger("afterMessagesFetched",this.model)},maybeScrollDown(e){("me"!==e.get("sender")||e.get("is_archived"))&&this.model.isHidden()||this.debouncedScrollDown()},scrollDown(e){var t,n;if(null==e||null===(t=e.preventDefault)||void 0===t||t.call(e),null==e||null===(n=e.stopPropagation)||void 0===n||n.call(e),this.model.get("scrolled")&&pv.safeSave(this.model,{scrolled:!1,scrollTop:null}),this.msgs_container.scrollTo){const e=this.msgs_container.scrollTop?"smooth":"auto";this.msgs_container.scrollTo({top:this.msgs_container.scrollHeight,behavior:e})}else this.msgs_container.scrollTop=this.msgs_container.scrollHeight;this.onScrolledDown()},maintainScrollTop(){const e=this.model.get("scrollTop");e?this.msgs_container.scrollTop=e:this.scrollDown()},insertIntoDOM(){return Lc.chatboxviews.insertRowColumn(this.el),qc.trigger("chatBoxInsertedIntoDOM",this),this},addSpinner(e=!1){if(null===this.el.querySelector(".spinner")){const t=pv.getElementFromTemplateResult(Tf());e?(this.content.insertAdjacentElement("beforeend",t),this.scrollDown()):this.content.insertAdjacentElement("afterbegin",t)}},clearSpinner(){this.content.querySelectorAll(".spinner").forEach(pv.removeElement)},onStatusMessageChanged(e){this.renderHeading(),qc.trigger("contactStatusMessageChanged",{contact:e.attributes,message:e.get("status")})},shouldShowOnTextMessage(){return!Lc.isUniView()&&!pv.isVisible(this.el)},markFollowups(e){const t=e.getAttribute("data-from"),n=e.previousElementSibling,r=fv(e.getAttribute("data-isodate")),i=e.nextElementSibling;pv.hasClass("chat-msg--action",e)||pv.hasClass("chat-msg--action",n)||pv.hasClass("chat-info",e)||pv.hasClass("chat-info",n)||n.getAttribute("data-from")!==t||!r.isBefore(fv(n.getAttribute("data-isodate")).add(10,"minutes"))||e.getAttribute("data-encrypted")!==n.getAttribute("data-encrypted")||pv.addClass("chat-msg--followup",e),i&&(!pv.hasClass("chat-msg--action",e)&&pv.hasClass("chat-info",e)&&i.getAttribute("data-from")===t&&fv(i.getAttribute("data-isodate")).isBefore(r.add(10,"minutes"))&&e.getAttribute("data-encrypted")===i.getAttribute("data-encrypted")?pv.addClass("chat-msg--followup",i):pv.removeClass("chat-msg--followup",i))},parseMessageForCommands(e){const t=e.replace(/^\s*/,"").match(/^\/(.*)\s*$/);if(t){if("clear"===t[1])return this.clearMessages(),!0;if("close"===t[1])return this.close(),!0;if("help"===t[1])return this.model.set({show_help_messages:!0}),!0}},async onFormSubmitted(e){var t;e.preventDefault();const n=this.el.querySelector(".chat-textarea"),r=n.value.trim();if(qc.settings.get("message_limit")&&r.length>qc.settings.get("message_limit")||!r.replace(/\s/g,"").length)return;if(!Lc.connection.authenticated){const e=dd("Sorry, the connection has been lost, and your message could not be sent");return qc.alert("error",dd("Error"),e),void qc.connection.reconnect()}let i,s={};this.model.get("composing_spoiler")&&(s=this.el.querySelector("form.sendXMPPMessage input.spoiler-hint"),i=s.value),pv.addClass("disabled",n),n.setAttribute("disabled","disabled"),null===(t=this.el.querySelector("converse-emoji-dropdown"))||void 0===t||t.hideMenu();const o=this.parseMessageForCommands(r),a=o?null:await this.model.sendMessage(r,i);(o||a)&&(s.value="",n.value="",pv.removeClass("correcting",n),n.style.height="auto",this.updateCharCounter(n.value)),a&&qc.trigger("messageSend",a),"overlayed"===qc.settings.get("view_mode")&&(this.msgs_container.parentElement.style.display="none"),n.removeAttribute("disabled"),pv.removeClass("disabled",n),"overlayed"===qc.settings.get("view_mode")&&(this.msgs_container.parentElement.style.display=""),this.model.setChatState(Lc.ACTIVE,{silent:!0}),n.focus()},updateCharCounter(e){if(qc.settings.get("message_limit")){const t=this.el.querySelector(".message-limit"),n=qc.settings.get("message_limit")-e.length;t.textContent=n,n<1?pv.addClass("error",t):pv.removeClass("error",t)}},onPaste(e){if(0!==e.clipboardData.files.length)return e.preventDefault(),void this.model.sendFiles(Array.from(e.clipboardData.files));this.updateCharCounter(e.clipboardData.getData("text/plain"))},autocompleteInPicker(e,t){const n=this.el.querySelector("converse-emoji-dropdown"),r=this.el.querySelector("converse-emoji-picker");if(r&&n)return r.model.set({ac_position:e.selectionStart,autocompleting:t,query:t}),n.showMenu(),!0},onEmojiReceivedFromPicker(e){const t=this.el.querySelector("converse-emoji-picker").model,n=t.get("autocompleting"),r=t.get("ac_position");this.insertIntoTextArea(e,n,!1,r)},onKeyUp(e){this.updateCharCounter(e.target.value)},onKeyDown(e){if(!e.ctrlKey){if(!e.shiftKey&&!e.altKey&&!e.metaKey)if(e.keyCode===Yc.keycodes.TAB){const t=pv.getCurrentWord(e.target,null,/(:.*?:)/g);t.startsWith(":")&&this.autocompleteInPicker(e.target,t)&&(e.preventDefault(),e.stopPropagation())}else{if(e.keyCode===Yc.keycodes.FORWARD_SLASH)return;if(e.keyCode===Yc.keycodes.ESCAPE)return this.onEscapePressed(e);if(e.keyCode===Yc.keycodes.ENTER)return this.onEnterPressed(e);if(e.keyCode!==Yc.keycodes.UP_ARROW||e.target.selectionEnd){if(e.keyCode===Yc.keycodes.DOWN_ARROW&&e.target.selectionEnd===e.target.value.length&&pv.hasClass("correcting",this.el.querySelector(".chat-textarea")))return this.editLaterMessage()}else{const e=this.el.querySelector(".chat-textarea");if(!e.value||pv.hasClass("correcting",e))return this.editEarlierMessage()}}[Yc.keycodes.SHIFT,Yc.keycodes.META,Yc.keycodes.META_RIGHT,Yc.keycodes.ESCAPE,Yc.keycodes.ALT].includes(e.keyCode)||this.model.get("chat_state")!==Lc.COMPOSING&&this.model.setChatState(Lc.COMPOSING)}},getOwnMessages(){return this.model.messages.filter({sender:"me"})},onEnterPressed(e){return this.onFormSubmitted(e)},onEscapePressed(e){e.preventDefault();const t=this.model.messages.findLastIndex("correcting"),n=t>=0?this.model.messages.at(t):null;n&&n.save("correcting",!1),this.insertIntoTextArea("",!0,!1)},async onMessageRetractButtonClicked(e){if("me"!==e.get("sender"))return Pn.error("onMessageRetractButtonClicked called for someone else's message!");const t=dd("Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere."),n=[dd("Are you sure you want to retract this message?")];qc.settings.get("show_retraction_warning")&&(n[1]=t),await qc.confirm(dd("Confirm"),n)&&this.model.retractOwnMessage(e)},onMessageEditButtonClicked(e){var t;const n=this.model.messages.findWhere("correcting"),r=null===(t=this.el.querySelector(".chat-textarea"))||void 0===t?void 0:t.value;(!r||n&&n.get("message")===r||confirm(dd("You have an unsent message which will be lost if you continue. Are you sure?")))&&(n!==e?(null==n||n.save("correcting",!1),e.save("correcting",!0),this.insertIntoTextArea(pv.prefixMentions(e),!0,!0)):(e.save("correcting",!1),this.insertIntoTextArea("",!0,!1)))},editLaterMessage(){let e,t=this.model.messages.findLastIndex("correcting");if(t>=0)for(this.model.messages.at(t).save("correcting",!1);t<this.model.messages.length-1;){t+=1;const n=this.model.messages.at(t);if(n.get("editable")){e=n;break}}e?(this.insertIntoTextArea(pv.prefixMentions(e),!0,!0),e.save("correcting",!0)):this.insertIntoTextArea("",!0,!1)},editEarlierMessage(){let e,t=this.model.messages.findLastIndex("correcting");if(t>=0)for(this.model.messages.at(t).save("correcting",!1);t>0;){t-=1;const n=this.model.messages.at(t);if(n.get("editable")){e=n;break}}e=e||this.getOwnMessages().reverse().find(e=>e.get("editable")),e&&(this.insertIntoTextArea(pv.prefixMentions(e),!0,!0),e.save("correcting",!0))},inputChanged(e){const t=e.target.scrollHeight+"px";e.target.style.height!=t&&(e.target.style.height="auto",e.target.style.height=t)},async clearMessages(e){return e&&e.preventDefault&&e.preventDefault(),!0===confirm(dd("Are you sure you want to clear the messages from this conversation?"))&&await this.model.clearMessages(),this},insertIntoTextArea(e,t=!1,n=!1,r){const i=this.el.querySelector(".chat-textarea");if(n?pv.addClass("correcting",i):pv.removeClass("correcting",i),t)i.value=r&&"string"==typeof t?i.value.replace(new RegExp(t,"g"),(n,i)=>i==r-t.length?e+" ":n):e;else{let t=i.value;t&&" "!==t[t.length-1]&&(t+=" "),i.value=t+e+" "}this.updateCharCounter(i.value),pv.placeCaretAtEnd(i)},onPresenceChanged(e){const t=e.get("show"),n=this.model.getDisplayName();let r;pv.isVisible(this.el)&&("offline"===t?r=dd("%1$s has gone offline",n):"away"===t?r=dd("%1$s has gone away",n):"dnd"===t?r=dd("%1$s is busy",n):"online"===t&&(r=dd("%1$s is online",n)),r&&this.model.createMessage({message:r,type:"info"}))},async close(e){return e&&e.preventDefault&&e.preventDefault(),Lc.router.history.getFragment()==="converse/chat?jid="+this.model.get("jid")&&Lc.router.navigate(""),qc.connection.connected()&&(this.model.setChatState(Lc.INACTIVE),this.model.sendChatState()),await this.model.close(),this.remove(),qc.trigger("chatBoxClosed",this),this},emitBlurred(e){this.el.contains(document.activeElement)||this.el.contains(e.relatedTarget)||qc.trigger("chatBoxBlurred",this,e)},emitFocused(e){this.el.contains(e.relatedTarget)||qc.trigger("chatBoxFocused",this,e)},focus(){const e=this.el.getElementsByClassName("chat-textarea")[0];return e&&document.activeElement!==e&&e.focus(),this},maybeFocus(){qc.settings.get("auto_focus")&&this.focus()},hide(){return this.el.classList.add("hidden"),this},afterShown(){this.model.clearUnreadMsgCounter(),this.model.setChatState(Lc.ACTIVE),this.scrollDown(),this.maybeFocus()},show(){pv.isVisible(this.el)?this.maybeFocus():(qc.trigger("beforeShowingChatView",this),qc.settings.get("animate")?pv.fadeIn(this.el,()=>this.afterShown()):(pv.showElement(this.el),this.afterShown()))},showNewMessagesIndicator(){pv.showElement(this.el.querySelector(".new-msgs-indicator"))},hideNewMessagesIndicator(){const e=this.el.querySelector(".new-msgs-indicator");null!==e&&e.classList.add("hidden")},_markScrolled:function(e){let t=!0,n=null;this.msgs_container.scrollTop+this.msgs_container.clientHeight>=this.msgs_container.scrollHeight-62?(t=!1,this.onScrolledDown()):0===this.msgs_container.scrollTop?qc.trigger("chatBoxScrolledUp",this):n=e.target.scrollTop,pv.safeSave(this.model,{scrolled:t,scrollTop:n})},viewUnreadMessages(){this.model.save({scrolled:!1,scrollTop:null}),this.scrollDown()},onScrolledDown(){this.hideNewMessagesIndicator(),!this.model.isHidden()&&this.model.clearUnreadMsgCounter(),qc.trigger("chatBoxScrolledDown",{chatbox:this.model})},onWindowStateChanged(e){"visible"===e?this.model.isHidden()||this.model.get("num_unread",0)&&this.model.clearUnreadMsgCounter():"hidden"===e&&(this.model.setChatState(Lc.INACTIVE,{silent:!0}),this.model.sendChatState())}});let mv;Yc.plugins.add("converse-chatview",{dependencies:["converse-chatboxviews","converse-chat","converse-disco","converse-modal"],initialize(){qc.settings.extend({auto_focus:!0,debounced_content_rendering:!0,filter_url_query_params:null,image_urls_regex:null,message_limit:0,muc_hats:["xep317"],role_affiliation_hat_conversions:{},show_images_inline:!0,show_message_avatar:!0,show_retraction_warning:!0,show_send_button:!0,show_toolbar:!0,time_format:"HH:mm",use_system_emojis:!0,visible_toolbar_buttons:{call:!1,clear:!0,emoji:!0,spoiler:!0}}),Lc.ChatBoxView=gv,Lc.UserDetailsModal=Kd.extend({id:"user-details-modal",events:{"click button.refresh-contact":"refreshContact","click .fingerprint-trust .btn input":"toggleDeviceTrust"},initialize(){Kd.prototype.initialize.apply(this,arguments),this.model.rosterContactAdded.then(()=>this.registerContactEventHandlers()),this.listenTo(this.model,"change",this.render),this.registerContactEventHandlers(),qc.trigger("userDetailsModalInitialized",this.model)},toHTML(){var e;const t=null===(e=this.model)||void 0===e?void 0:e.vcard,n=t?t.toJSON():{};return ov(Object.assign(this.model.toJSON(),n,{_converse:Lc,allow_contact_removal:qc.settings.get("allow_contact_removal"),display_name:this.model.getDisplayName(),is_roster_contact:void 0!==this.model.contact,removeContact:e=>this.removeContact(e),view:this,utils:pv}))},registerContactEventHandlers(){void 0!==this.model.contact&&(this.listenTo(this.model.contact,"change",this.render),this.listenTo(this.model.contact.vcard,"change",this.render),this.model.contact.on("destroy",()=>{delete this.model.contact,this.render()}))},async refreshContact(e){e&&e.preventDefault&&e.preventDefault();const t=this.el.querySelector(".fa-refresh");pv.addClass("fa-spin",t);try{await qc.vcard.update(this.model.contact.vcard,!0)}catch(e){Pn.fatal(e),this.alert(dd("Sorry, something went wrong while trying to refresh"),"danger")}pv.removeClass("fa-spin",t)},removeContact(e){if(e&&e.preventDefault&&e.preventDefault(),!qc.settings.get("allow_contact_removal"))return;!0===confirm(dd("Are you sure you want to remove this contact?"))&&(this.modal.hide(),setTimeout(()=>{this.model.contact.removeFromRoster(()=>this.model.contact.destroy(),e=>{Pn.error(e),qc.alert("error",dd("Error"),[dd("Sorry, there was an error while trying to remove %1$s as a contact.",this.model.contact.getDisplayName())])})},1))}}),qc.listen.on("chatBoxViewsInitialized",()=>{const e=Lc.chatboxviews;Lc.chatboxes.on("add",async t=>{e.get(t.get("id"))||t.get("type")!==Lc.PRIVATE_CHAT_TYPE||(await t.initialized,e.add(t.get("id"),new Lc.ChatBoxView({model:t})))})}),qc.listen.on("windowStateChanged",(function(e){Lc.chatboxviews&&Lc.chatboxviews.forEach(t=>{"controlbox"!==t.model.get("id")&&t.onWindowStateChanged(e.state)})})),qc.listen.on("connected",()=>qc.disco.own.features.add(hv.NS.SPOILER)),Object.assign(qc,{chatviews:{get:e=>void 0===e?Object.values(Lc.chatboxviews.getAll()):"string"==typeof e?Lc.chatboxviews.get(e):e.map(e=>Lc.chatboxviews.get(e))}})}});let vv=0;function _v(e){mv=e}function bv(){mv=null,vv=0}const yv=Symbol("haunted.phase"),wv=Symbol("haunted.hook"),Sv=Symbol("haunted.update"),xv=Symbol("haunted.commit"),Ev=Symbol("haunted.effects"),Av=Symbol("haunted.layoutEffects");class Cv{constructor(e,t){this.update=e,this.host=t,this[wv]=new Map,this[Ev]=[],this[Av]=[]}run(e){_v(this);let t=e();return bv(),t}_runEffects(e){let t=this[e];_v(this);for(let e of t)e.call(this);bv()}runEffects(){this._runEffects(Ev)}runLayoutEffects(){this._runEffects(Av)}teardown(){this[wv].forEach(e=>{"function"==typeof e.teardown&&e.teardown()})}}const jv=Promise.resolve().then.bind(Promise.resolve());function Tv(){let e,t=[];function n(){e=null;let n=t;t=[];for(var r=0,i=n.length;r<i;r++)n[r]()}return function(r){t.push(r),null==e&&(e=jv(n))}}const Ov=Tv(),kv=Tv();class Nv{constructor(e,t){this.renderer=e,this.host=t,this.state=new Cv(this.update.bind(this),t),this[yv]=null,this._updateQueued=!1}update(){this._updateQueued||(Ov(()=>{let e=this.handlePhase(Sv);kv(()=>{this.handlePhase(xv,e),kv(()=>{this.handlePhase(Ev)})}),this._updateQueued=!1}),this._updateQueued=!0)}handlePhase(e,t){switch(this[yv]=e,e){case xv:return this.commit(t),void this.runEffects(Av);case Sv:return this.render();case Ev:return this.runEffects(Ev)}this[yv]=null}render(){return this.state.run(()=>this.renderer.call(this.host,this.host))}runEffects(e){this.state._runEffects(e)}teardown(){this.state.teardown()}}function Iv(e){class t extends Nv{constructor(e,t,n){super(e,n||t),this.frag=t}commit(t){e(t,this.frag)}}return function(e,n,r){const i=(r||n||{}).baseElement||HTMLElement,{observedAttributes:s=[],useShadowDOM:o=!0,shadowRootInit:a={}}=r||n||{};class c extends i{constructor(){super(),!1===o?this._scheduler=new t(e,this):(this.attachShadow({mode:"open",...a}),this._scheduler=new t(e,this.shadowRoot,this))}static get observedAttributes(){return e.observedAttributes||s||[]}connectedCallback(){this._scheduler.update()}disconnectedCallback(){this._scheduler.teardown()}attributeChangedCallback(e,t,n){if(t===n)return;let r=""===n||n;Reflect.set(this,((e="")=>e.replace(/-+([a-z])?/g,(e,t)=>t?t.toUpperCase():""))(e),r)}}const l=new Proxy(i.prototype,{getPrototypeOf:e=>e,set(e,t,n,r){let i;if(t in e){if(i=Object.getOwnPropertyDescriptor(e,t),i&&i.set)return i.set.call(r,n),!0;Reflect.set(e,t,n)}return i="symbol"==typeof t||"_"===t[0]?{enumerable:!0,configurable:!0,writable:!0,value:n}:function(e){let t=e;return Object.freeze({enumerable:!0,configurable:!0,get:()=>t,set(e){t=e,this._scheduler.update()}})}(n),Object.defineProperty(r,t,i),i.set&&i.set.call(r,n),!0}});return Object.setPrototypeOf(c.prototype,l),c}}class Mv{constructor(e,t){this.id=e,this.state=t}}function Rv(e,...t){let n=vv++,r=mv[wv],i=r.get(n);return i||(i=new e(n,mv,...t),r.set(n,i)),i.update(...t)}function Dv(e){return Rv.bind(null,e)}function Pv(e){return Dv(class extends Mv{constructor(t,n,r,i){super(t,n),e(n,this)}update(e,t){this.callback=e,this.lastValues=this.values,this.values=t}call(){this.values&&!this.hasChanged()||this.run()}run(){this.teardown(),this._teardown=this.callback.call(this.state)}teardown(){"function"==typeof this._teardown&&this._teardown()}hasChanged(){return!this.lastValues||this.values.some((e,t)=>this.lastValues[t]!==e)}})}function Lv(e,t){e[Ev].push(t)}Pv(Lv);const zv=Dv(class extends Mv{constructor(e,t,n){super(e,t),this._updater=this._updater.bind(this),this._ranEffect=!1,this._unsubscribe=null,Lv(t,this)}update(e){if(this.state.virtual)throw new Error("can't be used with virtual components");return this.Context!==e&&(this._subscribe(e),this.Context=e),this.value}call(){this._ranEffect||(this._ranEffect=!0,this._unsubscribe&&this._unsubscribe(),this._subscribe(this.Context),this.state.update())}_updater(e){this.value=e,this.state.update()}_subscribe(e){const t={Context:e,callback:this._updater};this.state.host.dispatchEvent(new CustomEvent("haunted.context",{detail:t,bubbles:!0,cancelable:!0,composed:!0}));const{unsubscribe:n,value:r}=t;this.value=n?r:e.defaultValue,this._unsubscribe=n}teardown(){this._unsubscribe&&this._unsubscribe()}});Dv(class extends Mv{constructor(e,t,n,r){super(e,t),this.value=n(),this.values=r}update(e,t){return this.hasChanged(t)&&(this.values=t,this.value=e()),this.value}hasChanged(e=[]){return e.some((e,t)=>this.values[t]!==e)}});Pv((function(e,t){e[Av].push(t)})),Dv(class extends Mv{constructor(e,t,n){super(e,t),this.updater=this.updater.bind(this),"function"==typeof n&&(n=n()),this.makeArgs(n)}update(){return this.args}updater(e){if("function"==typeof e){const t=e,[n]=this.args;e=t(n)}this.makeArgs(e),this.state.update()}makeArgs(e){this.args=Object.freeze([e,this.updater])}}),Dv(class extends Mv{constructor(e,t,n,r,i){super(e,t),this.dispatch=this.dispatch.bind(this),this.currentState=void 0!==i?i(r):r}update(e){return this.reducer=e,[this.currentState,this.dispatch]}dispatch(e){this.currentState=this.reducer(this.currentState,e),this.state.update()}});const Fv=Array.prototype.includes;const{component:Bv,createContext:qv}=function({render:e}){const t=Iv(e),n=function(e){return t=>{const n={Provider:class extends HTMLElement{constructor(){super(),this.listeners=new Set,this.addEventListener("haunted.context",this)}disconnectedCallback(){this.removeEventListener("haunted.context",this)}handleEvent(e){const{detail:t}=e;t.Context===n&&(t.value=this.value,t.unsubscribe=this.unsubscribe.bind(this,t.callback),this.listeners.add(t.callback),e.stopPropagation())}unsubscribe(e){this.listeners.delete(e)}set value(e){this._value=e;for(let t of this.listeners)t(e)}get value(){return this._value}},Consumer:e((function({render:e}){return e(zv(n))})),defaultValue:t};return n}}(t);return{component:t,createContext:n}}({render:Wa});!function(){const e=new WeakMap,t=new WeakMap;class n extends Nv{constructor(e,t){super(e,t),this.state.virtual=!0}render(){return this.state.run(()=>this.renderer.apply(this.host,this.args))}commit(e){this.host.setValue(e),this.host.commit()}teardown(){super.teardown();let n=t.get(this);e.delete(n)}}}();function Hv(){const e=Wv(['\n            <p class="brand-subtitle">','</p>\n            <p class="brand-subtitle"><a target="_blank" rel="nofollow" href="https://conversejs.org">Open Source</a> XMPP chat client brought to you by <a target="_blank" rel="nofollow" href="https://opkode.com">Opkode</a> </p>\n            <p class="brand-subtitle"><a target="_blank" rel="nofollow" href="https://hosted.weblate.org/projects/conversejs/#languages">Translate</a> it into your own language</p>']);return Hv=function(){return e},e}function Uv(){const e=Wv(['<p class="byline">messaging freedom</p>']);return Uv=function(){return e},e}function $v(){const e=Wv(['\n        <a class="brand-heading" href="https://conversejs.org" target="_blank" rel="noopener">\n            <span class="brand-name-wrapper ','">\n                <svg class="converse-svg-logo"\n                    xmlns:svg="http://www.w3.org/2000/svg"\n                    xmlns="http://www.w3.org/2000/svg"\n                    xmlns:xlink="http://www.w3.org/1999/xlink"\n                    viewBox="0 0 364 364">\n                    <title>Converse</title>\n                    <g class="cls-1" id="g904">\n                        <g data-name="Layer 2">\n                            <g data-name="Layer 7">\n                                <path\n                                    class="cls-3"\n                                    d="M221.46,103.71c0,18.83-29.36,18.83-29.12,0C192.1,84.88,221.46,84.88,221.46,103.71Z" />\n                                <path\n                                    class="cls-4"\n                                    d="M179.9,4.15A175.48,175.48,0,1,0,355.38,179.63,175.48,175.48,0,0,0,179.9,4.15Zm-40.79,264.5c-.23-17.82,27.58-17.82,27.58,0S138.88,286.48,139.11,268.65ZM218.6,168.24A79.65,79.65,0,0,1,205.15,174a12.76,12.76,0,0,0-6.29,4.65L167.54,222a1.36,1.36,0,0,1-2.46-.8v-35.8a2.58,2.58,0,0,0-3.06-2.53c-15.43,3-30.23,7.7-42.73,19.94-38.8,38-29.42,105.69,16.09,133.16a162.25,162.25,0,0,1-91.47-67.27C-3.86,182.26,34.5,47.25,138.37,25.66c46.89-9.75,118.25,5.16,123.73,62.83C265.15,120.64,246.56,152.89,218.6,168.24Z" />\n                            </g>\n                        </g>\n                    </g>\n                </svg>\n                <span class="brand-name">\n                    <span class="brand-name__text">converse<span class="subdued">.js</span></span>\n                    ',"\n                </span>\n            </span>\n        </a>\n        ","\n        "]);return $v=function(){return e},e}function Wv(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function Vv(){const e=Jv(['<a class="chatbox-btn close-chatbox-button fa fa-times"></a>']);return Vv=function(){return e},e}function Gv(){const e=Jv(['\n    <div class="flyout box-flyout">\n        <div class="chat-head controlbox-head">\n            ','\n        </div>\n        <div class="controlbox-panes"></div>\n    </div>']);return Gv=function(){return e},e}function Jv(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}qc.elements.define("converse-brand-heading",Bv(e=>{const t="fullscreen"===qc.settings.get("view_mode");return Ga($v(),t?"brand-name-wrapper--fullscreen":"",t?Ga(Uv()):"",t?Ga(Hv(),e.version_name):"")},{useShadowDOM:!1}));var Xv=n(136),Qv=n.n(Xv);function Yv(){const e=s_(['\n    <converse-brand-heading></converse-brand-heading>\n    <form id="converse-login" class="converse-form" method="post">\n        <div class="conn-feedback fade-in ','">\n            <p class="feedback-subject">','</p>\n            <p class="feedback-message ','">',"</p>\n        </div>\n        ","\n    </form>\n"]);return Yv=function(){return e},e}function Kv(){const e=s_(["<p>","</p>"]);return Kv=function(){return e},e}function Zv(){const e=s_(['<input class="btn btn-primary login-anon" type="submit" value="','">']);return Zv=function(){return e},e}function e_(){const e=s_(["\n        ","\n        ","\n        ","\n    "]);return e_=function(){return e},e}function t_(){const e=s_(['\n        <div class="form-group">\n            <label for="converse-login-jid">',':</label>\n            <input id="converse-login-jid"\n                ?autofocus=','\n                required\n                class="form-control"\n                type="text"\n                name="jid"\n                placeholder="','"/>\n        </div>\n        ',"\n        ",'\n        <fieldset class="buttons">\n            <input class="btn btn-primary" type="submit" value="','"/>\n        </fieldset>\n        ',"\n    "]);return t_=function(){return e},e}function n_(){const e=s_(['\n        <fieldset class="switch-form">\n            <p>','</p>\n            <p><a class="register-account toggle-register-login" href="#converse/register">',"</a></p>\n        </fieldset>\n    "]);return n_=function(){return e},e}function r_(){const e=s_(['\n        <div class="form-group">\n            <label for="converse-login-password">','</label>\n            <input id="converse-login-password" class="form-control" required="required" type="password" name="password" placeholder="','"/>\n        </div>\n    ']);return r_=function(){return e},e}function i_(){const e=s_(['\n        <div class="form-group form-check login-trusted">\n            <input id="converse-login-trusted" type="checkbox" class="form-check-input" name="trusted" ?checked=','>\n            <label for="converse-login-trusted" class="form-check-label login-trusted__desc">','</label>\n            <i class="fa fa-info-circle" data-toggle="popover"\n                data-title="Trusted device?"\n                data-content="','"></i>\n        </div>\n    ']);return i_=function(){return e},e}function s_(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}const o_=e=>{const t=dd("Log in"),n=dd("XMPP Address");return Ga(t_(),n,!!qc.settings.get("auto_focus"),e.placeholder_username,e.authentication!==e.EXTERNAL?(()=>{const e=dd("Password");return Ga(r_(),e,e)})():"",e.show_trust_checkbox?(e=>{const t=dd("To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It's important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available."),n=dd("This is a trusted device");return Ga(i_(),e._converse.config.get("trusted"),n,t)})(e):"",t,(e=>{const t=e._converse;return t.allow_registration&&!qc.settings.get("auto_login")&&t.pluggable.plugins["converse-register"].enabled(t)})(e)?(()=>{const e=dd("Create an account"),t=dd("Don't have a chat account?");return Ga(n_(),t,e)})():"")};var a_=e=>Ga(Yv(),e.conn_feedback_subject?e.conn_feedback_class:"hidden",e.conn_feedback_subject,e.conn_feedback_message?"":"hidden",e.conn_feedback_message,"CONNECTING"===e._converse.CONNECTION_STATUS[e.connection_status]?Tf({classes:"hor_centered"}):(e=>{const t=dd("Disconnected"),n=dd("Click here to log in anonymously");return Ga(e_(),e.authentication==e.LOGIN||e.authentication==e.EXTERNAL?o_(e):"",e.authentication==e.ANONYMOUS?Ga(Zv(),n):"",e.authentication==e.PREBIND?Ga(Kv(),t):"")})(e));function c_(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l_(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
 /**
  * @module converse-controlbox
  * @copyright 2020, the Converse.js contributors
-- 
GitLab