2 lines
360 KiB
JavaScript
2 lines
360 KiB
JavaScript
"use strict";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[826],{962:(e,t,s)=>{s.d(t,{$_:()=>M,$h:()=>i,EI:()=>A,GQ:()=>E,H2:()=>S,Hm:()=>w,IX:()=>f,JG:()=>r,Mv:()=>o,NW:()=>x,RK:()=>u,Rc:()=>n,S8:()=>T,S9:()=>L,VL:()=>d,Zf:()=>F,cG:()=>h,cl:()=>I,dm:()=>k,gD:()=>N,iC:()=>a,kd:()=>y,l8:()=>c,li:()=>U,mc:()=>l,o6:()=>_,pM:()=>p,rV:()=>D,rX:()=>R,sA:()=>v,uv:()=>b,vX:()=>P,xt:()=>m,yW:()=>C,yl:()=>g});const a="TinodeWeb/"+(s(119).l||"0.17"),i="AQEAAAABAAD_rAp4DJh05a1HAwFT3A6K",n={hosted:"web.tinode.co",local:"localhost:6060"},o=n.hosted,r=!0,l=3e3,c=1500,d=2,h=96,p=16,u="JRWPS",m="N",g=640,_=13,f=384,b=4096,v=32,w=24,y=262144,E=1<<23,C=1024,S=64,M=36,k=4,T=60,A=360,N=20,D=80,I=30,P=84,R=2e3,F=6e5,U="mailto:support@tinode.co",x="https://tinode.co/privacy.html",L="https://tinode.co/terms.html"},434:(e,t,s)=>{var a=s(363),i=s.n(a);const n=ReactDOM;var o=s.n(n);const r=ReactIntl,l=JSON.parse('{"de":{"action_block_contact":"Kontakt blockieren","action_cancel":"Abbrechen","action_clear_messages":"Nachrichten leeren","action_delete_messages":"Nachrichten für alle löschen","action_leave_chat":"Unterhaltung verlassen","action_report_chat":"Unterhaltung melden","archived_contacts":"Archivierte Kontakte ({count})","badge_danger":"Verdächtig","badge_owner":"Besitzer","badge_staff":"Verwaltung","badge_verified":"Verifiziert","badge_you":"Sie","block_contact_warning":"Möchten Sie diesen Kontakt wirklich blockieren?","blocked_contacts_link":"Blockierte Kontakte ({count})","button_add_another":"Hinzufügen","button_add_members":"Mitglieder hinzufügen","button_cancel":"Abbrechen","button_confirm":"Bestätigen","button_create":"Erstellen","button_delete_account":"Konto löschen","button_edit":"Bearbeiten","button_logout":"Abmelden","button_ok":"OK","button_reset":"Zurücksetzen","button_send_request":"Anfrage senden","button_sign_in":"Anmelden","button_sign_up":"Anmelden","button_subscribe":"Abbonieren","button_update":"Aktualisieren","cannot_initiate_file_upload":"Datei kann nicht hochgeladen werden.","channel":"Sender","channel_prompt":"Dies ist ein Sender","chat_invitation":"Sie sind eingeladen, an einem neuen Chat teilzunehmen. Was möchten Sie tun?","chat_invitation_accept":"Akzeptieren","chat_invitation_block":"Blockieren","chat_invitation_ignore":"Ignorieren","clear_messages_warning":"Sind Sie sicher, dass Sie diese Unterhaltung für alle leeren wollen? Das kann nicht rückgängig gemacht werden.","code_doesnot_match":"Code stimmt nicht überein","contacts_not_found":"Sie haben keine Unterhaltungen<br />¯∖_(ツ)_/¯","contacts_not_found_short":"Keine Kontakte für \'\'{query}\'\'","credential_email_prompt":"E-Mail Adresse für Registrierung","delete_account":"Konto löschen","delete_account_warning":"Möchten Sie das Konto wirklich löschen? Das kann nicht rückgängig gemacht werden","delete_messages_warning":"Sind Sie sicher, dass Sie diese Unterhaltung für alle löschen wollen? Das kann nicht rückgängig gemacht werden.","deleted_content":"Inhalt gelöscht","download_action":"herunterladen","drafty_attachment":"Dateianhang","drafty_form":"Formular:","drafty_image":"Bild","email_dative":"E-Mail","email_prompt":"E-Mail, z.B. lisam@beispiel.de","enable_peers_messaging":"Aktivieren","enter_confirmation_code_prompt":"Geben Sie den Bestätigungscode ein, der per {method} geschickt wurde:","error_invalid_id":"ungültige ID","file_attachment_too_large":"Die Dateigröße {size} überschreitet das Limit von {limit}.","forgot_password_link":"Passwort vergessen?","full_name_prompt":"Vollständiger Name, z.B. Lisa Musterfrau","granted_permissions":"Erteilt","group_has_no_members":"Keine Mitglieder","group_user_id_prompt":"Gruppe oder Benutzer ID","image_caption_prompt":"Bildunterschrift","invalid_content":"ungültiger Inhalt","invalid_security_token":"Ungültiger Sicherheitsschlüssel","label_client":"Client:","label_content_type":"Inhaltsart:","label_default_access_mode":"Standard Zugriffsmodus:","label_file_name":"Dateiname:","label_group_members":"Gruppenmitglieder:","label_incognito_mode":"inkognito-Modus:","label_message_sound":"Benachrichtigungston:","label_muting_topic":"Stumm geschaltet:","label_other_user":"Andere","label_password":"Passwort","label_permissions":"Berechtigungen:","label_private":"Privater Kommentar","label_push_notifications":"Benachrichtigungsmeldungen:","label_push_notifications_disabled":"Benachrichtigungsmeldungen (erfordert HTTPS):","label_reset_password":"Passwort per E-Mail wiederherstellen:","label_sdk":"SDK:","label_server":"Server:","label_server_address":"Server Adresse:","label_server_to_use":"Server verwenden:","label_size":"Größe:","label_topic_name":"Name","label_user_contacts":"Kontakte:","label_user_id":"ID:","label_wire_transport":"Übertragung per Kabel:","label_you":"Sie:","label_your_name":"Ihr Name","label_your_permissions":"Ihre Berechtigungen:","last_seen_timestamp":"Zuletzt gesehen","leave_chat_warning":"Möchten Sie diese Unterhaltung wirklich verlassen?","link_contact_us":"Kontakt","link_privacy_policy":"Datenschutzerklärung","link_terms_of_service":"Nutzungsbedingungen","login_prompt":"Anmelden","menu_item_archive_topic":"Archivieren","menu_item_block":"Blockieren","menu_item_clear_messages":"Nachrichten leeren","menu_item_clear_messages_for_all":"Für alle leeren","menu_item_delete":"Löschen","menu_item_delete_for_all":"Für alle löschen","menu_item_delete_topic":"Entfernen","menu_item_edit_permissions":"Berechtigungen ändern","menu_item_info":"Info","menu_item_member_delete":"Entfernen","menu_item_mute":"Unterhaltung stumm schalten","menu_item_restore_topic":"Wiederherstellen","menu_item_send_retry":"Wiederholen","menu_item_unblock":"Blockierung aufheben","menu_item_unmute":"Stumm schalten beenden","message_sending":"wird gesendet...","message_sending_failed":"fehlgeschlagen","messages_not_readable":"Neue Nachrichten können nicht gelesen werden","messaging_disabled_prompt":"Nachrichtenübermittlung deaktiviert","more_online_members":"+{overflow} mehr","new_message_prompt":"Neue Nachricht","new_password_placeholder":"Geben Sie ein neues Passwort ein","no_connection":"Keine Verbindung","no_contacts":"Sie haben keine Kontakte :-(","numeric_confirmation_code_prompt":"Nur zahlen","online_now":"jetzt online","password_prompt":"Passwort","password_unchanged_prompt":"unverändert","peers_messaging_disabled":"Gruppennachrichten sind deaktiviert","permission_admin":"Bestätigen ({val})","permission_delete":"Entfernen ({val})","permission_join":"Beitreten ({val})","permission_owner":"Besitzer ({val})","permission_pres":"Benachrichtigt werden ({val})","permission_read":"Lesen ({val})","permission_share":"Teilen ({val})","permission_write":"Schreiben ({val})","phone_dative":"Telefon","private_editing_placeholder":"Nur für Sie sichtbar","push_init_failed":"Initialisierung von Push-Benachrichtigungen fehlgeschlagen","reconnect_countdown":"Getrennt. Wiederverbinden in {seconds}…","reconnect_now":"Jetzt probieren","reload_update":"Neu laden","report_chat_warning":"Möchten Sie diese Unterhaltung wirklich blockieren und melden?","requested_permissions":"Angefordert","save_attachment":"Speichern","search_for_contacts":"Nutzen Sie die Suche um Kontakte zu finden","search_no_results":"Die Suche hatte keine Ergebnisse","search_placeholder":"Liste: email:lisa@beispiel.de, tel:17025550003...","sidepanel_title_acc_notifications":"Benachrichtigungen","sidepanel_title_acc_support":"Unterstützung","sidepanel_title_account_settings":"Konto-Einstellungen","sidepanel_title_archive":"Archivierte Unterhaltungen","sidepanel_title_blocked":"Blockierte Unterhaltungen","sidepanel_title_cred":"Anmeldeinformationen bestätigen","sidepanel_title_login":"Anmelden","sidepanel_title_newtpk":"Neue Unterhaltung starten","sidepanel_title_register":"Konto erstellen","sidepanel_title_reset":"Passwort zurücksetzen","sidepanel_title_settings":"Einstellungen","stay_logged_in":"Angemeldet bleiben","tabtitle_find_user":"Suchen","tabtitle_group_by_id":"nach ID","tabtitle_new_group":"Neue Gruppe","tags_editor_no_tags":"Schlagworte hinzufügen","tags_not_found":"Keine Schlagworte definiert. Erstellen Sie welche.","title_all_contacts":"Alle Kontakte","title_group_members":"Gruppenmitglieder","panel_title_info":"Info","title_manage_tags":"Verwalten","title_not_found":"Nicht gefunden","title_permissions":"Berechtigungen","title_tag_manager":"Schlagworte (Nutzer entdecken)","topic_block_warning":"Möchten Sie diese Unterhaltung wirklich blockieren?","topic_delete_warning":"Möchten Sie diese Unterhaltung wirklich löschen?","topic_name_editing_placeholder":"Freiform Name der Gruppe","unnamed_topic":"Unbenannt","update_available":"Aktualisierung verfügbar.","upload_finishing":"wird abgeschlossen...","user_not_found":"Nicht gefunden","validate_credential_action":"bestätigen","description_editing_placeholder":"Beschreibung (optional)","label_description":"Beschreibung","button_security":"Sicherheit","panel_title_general":"Allgemein","panel_title_security":"Sicherheit","panel_title_crop":"Zum Anpassen ziehen","panel_title_members":"Mitglieder","permissions_anonymous":"Anonym","permissions_authenticated":"Authentifiziert","topic_delete":"Chat löschen","permissions_user":"Benutzerberechtigungen","password_reset_email_sent":"Eine E-Mail wurde an {email} gesendet. Folgen Sie den Anweisungen in der E-Mail, um Ihr Passwort zurückzusetzen.","label_unarchive_topic":"Archiviert:","menu_item_reply":"Antwort","menu_item_forward":"Nach vorne","forward_to":"Weiterleiten","forward_to_search_placeholder":"Kontakte durchsuchen","label_new_password":"Neues Kennwort","drafty_unknown":"Nicht unterstützt","calls_incoming":"Eingehender Anruf","calls_outgoing":"Ausgehender Anruf","calls_you_label":"Du","menu_item_video_call":"Videoanruf","already_in_call":"Du redest schon!","call_cancelled":"abgebrochen","call_missed":"verpasster","call_declined":"abgelehnt","call_disconnected":"getrennt","label_use_secure_connection":"Verwenden Sie eine sichere Verbindung","phone_or_email_prompt":"Telefonnummer oder E-Mail","cred_confirmed_successfully":"Erfolgreich bestätigt"},"en":{"action_block_contact":"Block Contact","action_cancel":"cancel","action_clear_messages":"Clear Messages","action_delete_messages":"Clear Messages for All","action_leave_chat":"Leave Conversation","action_report_chat":"Report Conversation","archived_contacts":"Archived contacts ({count})","badge_danger":"Untrustworthy","badge_owner":"owner","badge_staff":"Staff-managed","badge_verified":"Verified/official","badge_you":"you","block_contact_warning":"Are you sure you want to block this contact?","blocked_contacts_link":"Blocked contacts ({count})","button_add_another":"Add another","button_add_members":"Add members","button_cancel":"Cancel","button_confirm":"Confirm","button_create":"Create","button_delete_account":"Delete account","button_edit":"Edit","button_logout":"Logout","button_ok":"OK","button_reset":"Reset","button_send_request":"Send request","button_sign_in":"Sign in","button_sign_up":"Sign up","button_subscribe":"Subscribe","button_update":"Update","cannot_initiate_file_upload":"Cannot initiate file upload.","channel":"channel","channel_prompt":"This is a channel","chat_invitation":"You are invited to start a new chat. What would you like to do?","chat_invitation_accept":"Accept","chat_invitation_block":"Block","chat_invitation_ignore":"Ignore","clear_messages_warning":"Are you sure you want to clear all messages? It cannot be undone.","code_doesnot_match":"Code does not match","contacts_not_found":"You have no chats<br />¯∖_(ツ)_/¯","contacts_not_found_short":"No contacts match \'\'{query}\'\'","credential_email_prompt":"Your registration email","delete_account":"Delete account","delete_account_warning":"Are you sure you want to delete your account? It cannot be undone.","delete_messages_warning":"Are you sure you want to delete all messages for everyone? It cannot be undone.","deleted_content":"content deleted","download_action":"download","drafty_attachment":"Attachment","drafty_form":"Form:","drafty_image":"Picture","email_dative":"email","email_prompt":"Email, e.g. jdoe@example.com","enable_peers_messaging":"Enable","enter_confirmation_code_prompt":"Enter confirmation code sent to you by {method}:","error_invalid_id":"Invalid ID","file_attachment_too_large":"The file size {size} exceeds the {limit} limit.","forgot_password_link":"Forgot password?","full_name_prompt":"Full name, e.g. John Doe","granted_permissions":"Granted","group_has_no_members":"No members","group_user_id_prompt":"Group or User ID","image_caption_prompt":"Image caption","invalid_content":"invalid content","invalid_security_token":"Invalid security token","label_client":"Client:","label_content_type":"Content type:","label_default_access_mode":"Default access mode:","label_file_name":"File name:","label_group_members":"Group members:","label_incognito_mode":"Incognito mode:","label_message_sound":"Message sound:","label_muting_topic":"Muted:","label_other_user":"Other","label_password":"Password","label_permissions":"Permissions:","label_private":"Private comment","label_push_notifications":"Notification alerts:","label_push_notifications_disabled":"Notification alerts (requires HTTPS):","label_reset_password":"Send a password reset email:","label_sdk":"SDK:","label_server":"Server:","label_server_address":"Server address:","label_server_to_use":"Server to use:","label_size":"Size:","label_topic_name":"Name","label_user_contacts":"Contacts:","label_user_id":"ID:","label_wire_transport":"Wire transport:","label_you":"You:","label_your_name":"Your name","label_your_permissions":"Your permissions:","last_seen_timestamp":"Last seen","leave_chat_warning":"Are you sure you want to leave this conversation?","link_contact_us":"Contact Us","link_privacy_policy":"Privacy Policy","link_terms_of_service":"Terms of Service","login_prompt":"Login","menu_item_archive_topic":"Archive","menu_item_block":"Block","menu_item_clear_messages":"Clear messages","menu_item_clear_messages_for_all":"Clear for All","menu_item_delete":"Delete","menu_item_delete_for_all":"Delete for All","menu_item_delete_topic":"Delete","menu_item_edit_permissions":"Edit permissions","menu_item_info":"Info","menu_item_member_delete":"Remove","menu_item_mute":"Mute","menu_item_reply":"Reply","menu_item_restore_topic":"Restore","menu_item_send_retry":"Retry","menu_item_unblock":"Unblock","menu_item_unmute":"Unmute","message_sending":"sending...","message_sending_failed":"failed","messages_not_readable":"no access to messages","messaging_disabled_prompt":"Messaging disabled","more_online_members":"+{overflow} more","new_message_prompt":"New message","new_password_placeholder":"Enter new password","no_connection":"No connection","no_contacts":"You have no contacts :-(","numeric_confirmation_code_prompt":"Numbers only","online_now":"online now","password_prompt":"Password","password_unchanged_prompt":"Unchanged","peers_messaging_disabled":"Peer\'s messaging is disabled.","permission_admin":"Approve ({val})","permission_delete":"Delete ({val})","permission_join":"Join ({val})","permission_owner":"Owner ({val})","permission_pres":"Get notified ({val})","permission_read":"Read ({val})","permission_share":"Share ({val})","permission_write":"Write ({val})","phone_dative":"phone","private_editing_placeholder":"Visible to you only","push_init_failed":"Failed to initialize push notifications","reconnect_countdown":"Disconnected. Reconnecting in {seconds}…","reconnect_now":"Try now","reload_update":"Reload","report_chat_warning":"Are you sure you want to block and report this conversation?","requested_permissions":"Requested","save_attachment":"save","search_for_contacts":"Use search to find contacts","search_no_results":"Search returned no results","search_placeholder":"List like email:alice@example.com, tel:17025550003...","sidepanel_title_acc_notifications":"Notifications","sidepanel_title_acc_support":"Support","sidepanel_title_account_settings":"Account Settings","sidepanel_title_archive":"Archived Chats","sidepanel_title_blocked":"Blocked Chats","sidepanel_title_cred":"Confirm Credentials","sidepanel_title_login":"Sign In","sidepanel_title_newtpk":"Start New Chat","sidepanel_title_register":"Create Account","sidepanel_title_reset":"Reset Password","sidepanel_title_settings":"Settings","stay_logged_in":"Stay logged in","tabtitle_find_user":"find","tabtitle_group_by_id":"by id","tabtitle_new_group":"new group","tags_editor_no_tags":"Add some tags","tags_not_found":"No tags defined. Add some.","title_all_contacts":"All Contacts","title_group_members":"Group Members","title_manage_tags":"Manage","title_not_found":"Not found","title_permissions":"Permissions","title_tag_manager":"Tags (search & discovery)","topic_block_warning":"Are you sure you want to block this conversation?","topic_delete_warning":"Are you sure you want to delete this conversation?","topic_name_editing_placeholder":"Freeform name of the group","unnamed_topic":"Unnamed","update_available":"Update available.","upload_finishing":"finishing...","user_not_found":"Not found","validate_credential_action":"confirm","description_editing_placeholder":"Optional description","label_description":"Description","button_security":"Security","panel_title_crop":"Drag to Adjust","panel_title_general":"General","panel_title_members":"Members","panel_title_security":"Security","panel_title_info":"Info","permissions_anonymous":"Anonymous","permissions_authenticated":"Authenticated","topic_delete":"Delete Conversation","permissions_user":"User\'s Permissions","password_reset_email_sent":"An email has been sent to {email}. Follow the directions in the email to reset your password.","label_unarchive_topic":"Archived:","menu_item_forward":"Forward","forward_to":"Forward to","forward_to_search_placeholder":"Search contacts","label_new_password":"New password","drafty_unknown":"Unsupported","calls_incoming":"Incoming call","calls_outgoing":"Outgoing call","calls_you_label":"You","menu_item_video_call":"Video call","already_in_call":"You already in an ongoing call!","call_cancelled":"cancelled","call_missed":"missed","call_declined":"declined","call_disconnected":"disconnected","label_use_secure_connection":"Use secure connection","phone_or_email_prompt":"Phone number or email","cred_confirmed_successfully":"Confirmed successfully"},"es":{"action_block_contact":"Bloquear contacto","action_cancel":"cancelar","action_clear_messages":"Borrar mensajes","action_delete_messages":"Borrar mensajes para todos","action_leave_chat":"Dejar conversación","action_report_chat":"Reportar conversación","archived_contacts":"Contactos archivados ({count})","badge_danger":"Suspicaz","badge_owner":"propietario","badge_staff":"Administración","badge_verified":"Verificado","badge_you":"tú","block_contact_warning":"¿Estás seguro de que quieres bloquear a este contacto?","blocked_contacts_link":"Contactos bloqueados ({count})","button_add_another":"Añadir contacto","button_add_members":"Añadir miembros","button_cancel":"Cancelar","button_confirm":"Confirmar","button_create":"Crear","button_delete_account":"Eliminar cuenta","button_edit":"Editar","button_logout":"Cerrar sesión","button_ok":"OK","button_reset":"Restablecer","button_send_request":"Enviar petición","button_sign_in":"Entrar","button_sign_up":"Regístrate","button_subscribe":"Suscribirse","button_update":"Actualizar","cannot_initiate_file_upload":"No se pudo iniciar la carga del archivo.","channel":"canal","channel_prompt":"Este es un canal","chat_invitation":"Estás invitado a participar en un nuevo chat. ¿Qué te gustaría hacer?","chat_invitation_accept":"Aceptar","chat_invitation_block":"Bloquear","chat_invitation_ignore":"Ignorar","clear_messages_warning":"¿Estás seguro de que quieres eliminar todos los mensajes? Esta acción es irreversible.","code_doesnot_match":"El código no coincide","contacts_not_found":"No tienes chats<br />¯∖_(ツ)_/¯","contacts_not_found_short":"Ningún contacto coincide con \'\'{query}\'\'","credential_email_prompt":"Tu correo electrónico de registro","delete_account":"Eliminar cuenta","delete_account_warning":"¿Estás seguro de que deseas eliminar permanentemente tu cuenta? Esta acción es irreversible.","delete_messages_warning":"¿Estás seguro de que quieres eliminar todos los mensajes para todos? Esta acción es irreversible.","deleted_content":"este mensaje fue eliminado","download_action":"descargar","drafty_attachment":"Archivo","drafty_form":"Formulario:","drafty_image":"Imagen","email_dative":"correo electrónico","email_prompt":"Correo electrónico, p.ej. juan@example.com","enable_peers_messaging":"Habilitar","enter_confirmation_code_prompt":"Introduzca el código de confirmación enviado a tu {method}:","error_invalid_id":"ID inválido","file_attachment_too_large":"El tamaño del archivo {size} excede el límite de {limit}.","forgot_password_link":"¿Olvidaste tu contraseña?","full_name_prompt":"Nombre completo, p.ej. Juan González Hernández","granted_permissions":"Otorgados","group_has_no_members":"No hay miembros","group_user_id_prompt":"ID del grupo o usuario","image_caption_prompt":"Añade un comentario","invalid_content":"contenido inválido","invalid_security_token":"Token de seguridad inválido","label_client":"Cliente:","label_content_type":"Tipo de contenido:","label_default_access_mode":"Modo de acceso predeterminado:","label_file_name":"Nombre del archivo:","label_group_members":"Miembros del grupo:","label_incognito_mode":"Modo incógnito:","label_message_sound":"Sonido de mensaje:","label_muting_topic":"Silenciado:","label_other_user":"Otros","label_password":"Contraseña","label_permissions":"Permisos:","label_private":"Comentario privado","label_push_notifications":"Alertas de notificaciones:","label_push_notifications_disabled":"Alertas de notificaciones (requiere HTTPS):","label_reset_password":"Enviar un correo electrónico de restablecimiento de contraseña:","label_sdk":"SDK:","label_server":"Servidor:","label_server_address":"Dirección del servidor:","label_server_to_use":"Servidor para usar:","label_size":"Tamaño:","label_topic_name":"Nombre del tema","label_user_contacts":"Contactos:","label_user_id":"ID:","label_wire_transport":"Transporte de alambre:","label_you":"Tú:","label_your_name":"Tu nombre","label_your_permissions":"Tus permisos:","last_seen_timestamp":"Últ. vez","leave_chat_warning":"¿Estás seguro de que quieres dejar esta conversación?","link_contact_us":"Contáctanos","link_privacy_policy":"Política de privacidad","link_terms_of_service":"Términos de uso","login_prompt":"Nombre de usuario","menu_item_archive_topic":"Archivar","menu_item_block":"Bloquear","menu_item_clear_messages":"Borrar mensajes","menu_item_clear_messages_for_all":"Borrar para todos","menu_item_delete":"Eliminar","menu_item_delete_for_all":"Eliminar para todos","menu_item_delete_topic":"Eliminar","menu_item_edit_permissions":"Editar permisos","menu_item_info":"Información","menu_item_member_delete":"Eliminar","menu_item_mute":"Silenciar","menu_item_restore_topic":"Restaurar","menu_item_send_retry":"Inténtalo de nuevo","menu_item_unblock":"Desbloquear","menu_item_unmute":"Anular el silencio","message_sending":"enviando...","message_sending_failed":"no se pudo enviar el mensaje","messages_not_readable":"sin acceso a mensajes","messaging_disabled_prompt":"El envío de mensajes está deshabilitado","more_online_members":"+{overflow} más","new_message_prompt":"Nuevo mensaje","new_password_placeholder":"Introduzca una nueva contraseña","no_connection":"Sin conexión","no_contacts":"No tienes contactos :-(","numeric_confirmation_code_prompt":"Sólo números","online_now":"en línea","password_prompt":"Contraseña","password_unchanged_prompt":"Sin cambios","peers_messaging_disabled":"La mensajería Peer está deshabilitada.","permission_admin":"Approbar ({val})","permission_delete":"Eliminar ({val})","permission_join":"Unirse ({val})","permission_owner":"Propietario ({val})","permission_pres":"Ser notificado ({val})","permission_read":"Leer ({val})","permission_share":"Compartir ({val})","permission_write":"Escribir ({val})","phone_dative":"teléfono","private_editing_placeholder":"Sólo visible para tí","push_init_failed":"Error al inicializar las notificaciones push","reconnect_countdown":"Desconectado. Reconectando en {seconds}…","reconnect_now":"Reintentar","reload_update":"Recargar","report_chat_warning":"¿Estás seguro de que quieres bloquear y reportar a esta conversación?","requested_permissions":"Solicitados","save_attachment":"guardar","search_for_contacts":"Usa la búsqueda para encontrar contactos","search_no_results":"La búsqueda no arrojó resultados","search_placeholder":"Ej. email:alice@example.com, tel:17025550003...","sidepanel_title_acc_notifications":"Notificaciones","sidepanel_title_acc_support":"Soporte","sidepanel_title_account_settings":"Ajustes de la cuenta","sidepanel_title_archive":"Chats archivados","sidepanel_title_blocked":"Chats bloqueados","sidepanel_title_cred":"Confirmar credenciales","sidepanel_title_login":"Iniciar sesión","sidepanel_title_newtpk":"Iniciar un nuevo chat","sidepanel_title_register":"Crear cuenta","sidepanel_title_reset":"Restablecer contraseña","sidepanel_title_settings":"Ajustes","stay_logged_in":"Permanecer conectado","tabtitle_find_user":"encontrar","tabtitle_group_by_id":"por ID","tabtitle_new_group":"nuevo grupo","tags_editor_no_tags":"Añadir etiquetas","tags_not_found":"No hay etiquetas definidas. Añade unas.","title_all_contacts":"Todos los contactos","title_group_members":"Miembros del grupo","title_manage_tags":"Gestionar","title_not_found":"No encontrado","title_permissions":"Permisos","title_tag_manager":"Etiquetas (descubrimiento de usuarios)","topic_block_warning":"¿Estás seguro de que quieres bloquear esta conversación","topic_delete_warning":"¿Estás seguro de que quieres eliminar esta conversación?","topic_name_editing_placeholder":"Nombre del grupo","unnamed_topic":"Sin nombre","update_available":"Actualización disponible.","upload_finishing":"terminando...","user_not_found":"Usuario no encontrado","validate_credential_action":"confirmar","description_editing_placeholder":"Descripción (opcional)","label_description":"Descripción","button_security":"Seguridad","panel_title_crop":"Arrastra para ajustar","panel_title_general":"General","panel_title_members":"Miembros","panel_title_security":"Seguridad","panel_title_info":"Información","permissions_anonymous":"Anónimo","permissions_authenticated":"Autenticado","topic_delete":"Eliminar chat","permissions_user":"Permisos del usuario","password_reset_email_sent":"Se ha enviado un correo electrónico a {email}. Siga las instrucciones del correo electrónico para restablecer su contraseña.","label_unarchive_topic":"Archivado:","menu_item_reply":"Respuesta","menu_item_forward":"Reenviar","forward_to":"Reenviar a","forward_to_search_placeholder":"Buscar contactos","label_new_password":"Nueva contraseña","drafty_unknown":"No soportado","calls_incoming":"Llamada entrante","calls_outgoing":"Llamada saliente","calls_you_label":"Tú","menu_item_video_call":"Videollamada","already_in_call":"¡Ya estás hablando!","call_cancelled":"cancelada","call_missed":"perdida","call_declined":"rechazada","call_disconnected":"desconectada","label_use_secure_connection":"Usar conexión segura","phone_or_email_prompt":"Número de teléfono o correo electrónico","cred_confirmed_successfully":"Confirmado con éxito"},"fr":{"action_block_contact":"Bloquer le Contact","action_cancel":"annuler","action_clear_messages":"Effacer les Messages","action_delete_messages":"Effacer les Messages pour Tous","action_leave_chat":"Quitter la Conversation","action_report_chat":"Signaler la Conversation","archived_contacts":"Contacts archivés ({count})","badge_danger":"Non fiable","badge_owner":"propriétaire","badge_staff":"Géré par le Staff","badge_verified":"Vérifié / Officiel","badge_you":"vous","block_contact_warning":"Êtes-vous sûr de bloquer le contact ?","blocked_contacts_link":"Contacts bloqués ({count})","button_add_another":"Ajouter un autre","button_add_members":"Ajouter des membres","button_cancel":"Annuler","button_confirm":"Confirmer","button_create":"Créer","button_delete_account":"Supprimer le compte","button_edit":"Modifier","button_logout":"Déconnexion","button_ok":"OK","button_reset":"Remettre à Zéro","button_send_request":"Envoyer une demande","button_sign_in":"Connexion","button_sign_up":"Créer un compte","button_subscribe":"S\'abonner","button_update":"Mettre à jour","cannot_initiate_file_upload":"Impossible de démarrer l\'envoi.","channel":"canal","channel_prompt":"C\'est un canal","chat_invitation":"Vous êtes invité à démarrer une conversation. Que voulez vous faire ?","chat_invitation_accept":"Accepter","chat_invitation_block":"Bloquer","chat_invitation_ignore":"Ignorer","clear_messages_warning":"Êtes-vous sûr de vouloir effacer tous les messages ? Aucun retour possible.","code_doesnot_match":"Le code ne correspond pas","contacts_not_found":"Vous n\'avez aucune conversation<br />¯∖_(ツ)_/¯","contacts_not_found_short":"Aucun contact ne correspond à \'\'{query}\'\'","credential_email_prompt":"Votre email d\'enregistrement","delete_account":"Supprimer le compte","delete_account_warning":"Êtes-vous sûr de vouloir supprimer votre compte ? Aucun retour possible.","delete_messages_warning":"Êtes-vous sûr de vouloir supprimer tous les messages pour tous ? Aucun retour possible.","deleted_content":"contenu supprimé","download_action":"télécharger","drafty_attachment":"Pièce(s) jointe(s)","drafty_form":"Formulaire:","drafty_image":"Image","email_dative":"email","email_prompt":"Email, par exemple jdoe@exemple.com","enable_peers_messaging":"Activer","enter_confirmation_code_prompt":"Entrez le code de confirmation envoyé par {method}:","error_invalid_id":"Identifiant invalide","file_attachment_too_large":"Le fichier de taille {size} dépasse la limite de {limit}.","forgot_password_link":"Mot de passe oublié ?","full_name_prompt":"Nom complet, par exemple John Doe","granted_permissions":"Accordé","group_has_no_members":"Aucun membre","group_user_id_prompt":"Identifiant d\'utilisateur ou de groupe","image_caption_prompt":"Description de l\'image","invalid_content":"contenu invalide","invalid_security_token":"Token de sécurité invalide","label_client":"Client :","label_content_type":"Type de contenu :","label_default_access_mode":"Mode d\'accès par défaut :","label_file_name":"Nom du fichier :","label_group_members":"Membres du groupe :","label_incognito_mode":"Mode incognito :","label_message_sound":"Son du message :","label_muting_topic":"Mué :","label_other_user":"Autre","label_password":"Mot de passe","label_permissions":"Permissions :","label_private":"Commentaire privé","label_push_notifications":"Notifications :","label_push_notifications_disabled":"Notifications (requière HTTPS):","label_reset_password":"Envoyer un mail de remise à zéro de mot de passe :","label_sdk":"SDK :","label_server":"Serveur :","label_server_address":"Adresse du serveur :","label_server_to_use":"Serveur à utiliser :","label_size":"Taille :","label_topic_name":"Nom","label_user_contacts":"Contacts :","label_user_id":"ID :","label_wire_transport":"Transport par cable :","label_you":"Vous :","label_your_name":"Votre nom","label_your_permissions":"Vos permissions :","last_seen_timestamp":"Vu pour la dernière fois","leave_chat_warning":"Êtes-vous sûr de vouloir quitter cette conversation ?","link_contact_us":"Contactez Nous","link_privacy_policy":"Politique de confidentialité","link_terms_of_service":"Conditions d\'utilisation","login_prompt":"Connexion","menu_item_archive_topic":"Archiver","menu_item_block":"Bloquer","menu_item_clear_messages":"Effacer les messages","menu_item_clear_messages_for_all":"Effacer pour Tous","menu_item_delete":"Supprimer","menu_item_delete_for_all":"Supprimer pour Tous","menu_item_delete_topic":"Supprimer","menu_item_edit_permissions":"Modifier les permissions","menu_item_info":"Informations","menu_item_member_delete":"Supprimer","menu_item_mute":"Rendre muer","menu_item_reply":"Répondre","menu_item_restore_topic":"Restorer","menu_item_send_retry":"Réessayer","menu_item_unblock":"Débloquer","menu_item_unmute":"Recevoir à nouveau","message_sending":"envoi en cours...","message_sending_failed":"échoué","messages_not_readable":"aucun accès aux messages","messaging_disabled_prompt":"Discussion désactivée","more_online_members":"+{overflow} de plus","new_message_prompt":"Nouveau message","new_password_placeholder":"Entrez un nouveau mot de passe","no_connection":"Aucune connexion","no_contacts":"Vous n\'avez pas de contacts :-(","numeric_confirmation_code_prompt":"Nombres seulement","online_now":"en ligne","password_prompt":"Mot de passe","password_unchanged_prompt":"Non changé","peers_messaging_disabled":"La messagerie point à point est désactivée.","permission_admin":"Approver ({val})","permission_delete":"Supprimer ({val})","permission_join":"Rejoindre ({val})","permission_owner":"Propriétaire ({val})","permission_pres":"Recevoir une notification ({val})","permission_read":"Lire ({val})","permission_share":"Partager ({val})","permission_write":"Ecrire ({val})","phone_dative":"téléphone","private_editing_placeholder":"Visible par vous seulement","push_init_failed":"Impossible d\'initialiser les notifications push","reconnect_countdown":"Déconnecté. Reconnexion dans {seconds}…","reconnect_now":"Essayer maintenant","reload_update":"Recharger","report_chat_warning":"Êtes-vous sûr de vouloir bloquer et signaler cette conversation ?","requested_permissions":"Demandé","save_attachment":"sauvegarder","search_for_contacts":"Utilisez la recherche pour trouver des contacts","search_no_results":"La recherche n\'a donné aucun résultat","search_placeholder":"Liste comme email:alice@exemple.com, tel:17025550003...","sidepanel_title_acc_notifications":"Notifications","sidepanel_title_acc_support":"Support","sidepanel_title_account_settings":"Paramètres du compte","sidepanel_title_archive":"Conversations Archivées","sidepanel_title_blocked":"Conversations Bloquées","sidepanel_title_cred":"Confirmer les identifiants","sidepanel_title_login":"Se Connecter","sidepanel_title_newtpk":"Démarrer une nouvelle Conversation","sidepanel_title_register":"Créer un compte","sidepanel_title_reset":"Remettre à Zéro le Mot de Passe","sidepanel_title_settings":"Paramètres","stay_logged_in":"Rester connecté","tabtitle_find_user":"trouver","tabtitle_group_by_id":"par identifiant","tabtitle_new_group":"nouveau groupe","tags_editor_no_tags":"Ajouter des étiquettes","tags_not_found":"Aucune étiquette définie. Ajoutez en.","title_all_contacts":"Tous les Contacts","title_group_members":"Membres du Groupe","title_manage_tags":"Gérer","title_not_found":"Pas trouvé","title_permissions":"Permissions","title_tag_manager":"Etiquettes (recherche & découverte)","topic_block_warning":"Êtes-vous sûr de vouloir bloquer cette conversation ?","topic_delete_warning":"Êtes-vous sûr de vouloir supprimer cette conversation ?","topic_name_editing_placeholder":"Nom libre du groupe","unnamed_topic":"Non nommé","update_available":"Mise à jour disponible.","upload_finishing":"fin...","user_not_found":"Pas trouvé","validate_credential_action":"confirmer","description_editing_placeholder":"Description facultative","label_description":"Description","button_security":"Sécurité","panel_title_crop":"Déplacez pour ajuster","panel_title_general":"Général","panel_title_members":"Membres","panel_title_security":"Sécurité","panel_title_info":"Informations","permissions_anonymous":"Anonyme","permissions_authenticated":"Authentifié","topic_delete":"Supprimer la Conversation","permissions_user":"Permissions d\'Utilisateur","password_reset_email_sent":"Un email a été envoyé à {email}. Suivez les instructions du mail pour remettre à zéro votre mot de passe.","label_unarchive_topic":"Archivé:","menu_item_forward":"Transférer","forward_to":"Transférer à","forward_to_search_placeholder":"Rechercher des contacts","label_new_password":"Nouveau mot de passe","drafty_unknown":"Non supporté","already_in_call":"Vous êtes déjà dans un appel en cours!","call_cancelled":"annulé","call_declined":"refusé","call_missed":"manqué","calls_incoming":"Appel entrant","calls_outgoing":"Appel sortant","calls_you_label":"Tu","menu_item_video_call":"Appel vidéo","call_disconnected":"débranché","label_use_secure_connection":"Utiliser une connexion sécurisée","phone_or_email_prompt":"Numéro de téléphone ou email","cred_confirmed_successfully":"Confirmé avec succès"},"ko":{"action_block_contact":"연락차단","action_cancel":"취소","action_clear_messages":"메시지지우기","action_delete_messages":"모든메시지지우기","action_leave_chat":"대화나누기","action_report_chat":"대화기록","archived_contacts":"보관된연락처({수})","badge_danger":"의심 많은","badge_owner":"소유자","badge_staff":"직원 관리하에","badge_verified":"확인 됨","badge_you":"당신","block_contact_warning":"이연락처를차단하시겠습니까?","blocked_contacts_link":"차단된연락처({수})","button_add_another":"다른항목추가","button_add_members":"회원추가","button_cancel":"취소","button_confirm":"확인","button_create":"작성","button_delete_account":"계정삭제","button_edit":"편집","button_logout":"로그아웃","button_ok":"OK","button_reset":"재설정","button_send_request":"요청보내기","button_sign_in":"로그인","button_sign_up":"가입","button_subscribe":"구독","button_update":"업데이트","cannot_initiate_file_upload":"파일업로드를시작할수없습니다.","channel":"채널","channel_prompt":"이 채널입니다","chat_invitation":"새로운대화를시작하도록초대되었습니다.무엇을하시겠습니까?","chat_invitation_accept":"수락","chat_invitation_block":"차단","chat_invitation_ignore":"무시","clear_messages_warning":"모든메시지를지우시겠습니까?실행취소할수없습니다.","code_doesnot_match":"코드가일치하지않습니다","contacts_not_found":"채팅이없습니다<br/>¯∖_(ツ)_/¯","contacts_not_found_short":"\'{문의}\'와일치하는연락처가없습니다.","credential_email_prompt":"등록이메일","delete_account":"계정삭제","delete_account_warning":"계정을삭제하시겠습니까?실행취소할수없습니다.","delete_messages_warning":"모든사람의모든메시지를삭제하시겠습니까?실행취소할수없습니다.","deleted_content":"내용이 삭제되었습니다","download_action":"다운로드","drafty_attachment":"부착","drafty_form":"형태:","drafty_image":"이미지","email_dative":"이메일","email_prompt":"이메일(예:hong@example.com)","enable_peers_messaging":"활성화","enter_confirmation_code_prompt":"{방법}으로보낸확인코드를입력하십시오:","error_invalid_id":"잘못된ID","file_attachment_too_large":"파일크기{크기}이(가){제한}제한을초과합니다.","forgot_password_link":"비밀번호를잊으셨습니까?","full_name_prompt":"전체이름(예:홍길동)","granted_permissions":"승낙하다","group_has_no_members":"회원없음","group_user_id_prompt":"그룹또는사용자ID","image_caption_prompt":"이미지설명","invalid_content":"잘못된내용","invalid_security_token":"유효하지않은보안토큰","label_client":"클라이언트: ","label_content_type":"컨텐츠유형: ","label_default_access_mode":"기본액세스모드: ","label_file_name":"파일이름: ","label_group_members":"그룹회원: ","label_incognito_mode":"시크릿모드: ","label_message_sound":"메시지소리: ","label_muting_topic":"음소거: ","label_other_user":"기타","label_password":"비밀번호","label_permissions":"권한: ","label_private":"개인코멘트","label_push_notifications":"통지경보: ","label_push_notifications_disabled":"통지경보(HTTPS필요): ","label_reset_password":"비밀번호재설정이메일보내기: ","label_sdk":"SDK:","label_server":"서버: ","label_server_address":"서버주소: ","label_server_to_use":"사용할서버:","label_size":"크기: ","label_topic_name":"이름","label_user_contacts":"연락처: ","label_user_id":"ID:","label_wire_transport":"와이어수송:","label_you":"당신: ","label_your_name":"이름","label_your_permissions":"권한: ","last_seen_timestamp":"마지막으로본","leave_chat_warning":"이대화를나가시겠습니까?","link_contact_us":"문의처","link_privacy_policy":"개인정보보호정책","link_terms_of_service":"서비스약관","login_prompt":"로그인","menu_item_archive_topic":"보관","menu_item_block":"차단","menu_item_clear_messages":"메시지지우기","menu_item_clear_messages_for_all":"모두지우기","menu_item_delete":"삭제","menu_item_delete_for_all":"모두삭제","menu_item_delete_topic":"삭제","menu_item_edit_permissions":"편집권한","menu_item_info":"정보","menu_item_member_delete":"제거","menu_item_mute":"음소거","menu_item_restore_topic":"복원","menu_item_send_retry":"다시시도","menu_item_unblock":"차단해제","menu_item_unmute":"음소거해제","message_sending":"보내기...","message_sending_failed":"실패","messages_not_readable":"메시지에 액세스 할 수 없습니다","messaging_disabled_prompt":"메시지비활성화","more_online_members":"+{넘침}더보기","new_message_prompt":"새메시지","new_password_placeholder":"새비밀번호입력","no_connection":"연결없음","no_contacts":"연락처가없습니다 (._.)","numeric_confirmation_code_prompt":"숫자만","online_now":"현재접속중","password_prompt":"비밀번호","password_unchanged_prompt":"변경되지않음","peers_messaging_disabled":"동료의메시지가비활성화되었습니다.","permission_admin":"승인({val})","permission_delete":"삭제({val})","permission_join":"참여({val})","permission_owner":"소유자({val})","permission_pres":"알림받기({val})","permission_read":"읽기({val})","permission_share":"공유({val})","permission_write":"쓰기({val})","phone_dative":"전화","private_editing_placeholder":"나만볼수있습니다","push_init_failed":"푸시알림을초기화하지못했습니다","reconnect_countdown":"연결이끊어졌습니다.다시연결하는중{초}…","reconnect_now":"지금시도","reload_update":"재로드","report_chat_warning":"이대화를차단하고기록하시겠습니까?","requested_permissions":"요청","save_attachment":"저장","search_for_contacts":"검색을사용하여연락처찾기","search_no_results":"검색결과가없습니다","search_placeholder":"email:alice@example.com,tel:17025550003...와같은목록","sidepanel_title_acc_notifications":"알림","sidepanel_title_acc_support":"지원","sidepanel_title_account_settings":"계정설정","sidepanel_title_archive":"보관된채팅","sidepanel_title_blocked":"차단된채팅","sidepanel_title_cred":"자격증명확인","sidepanel_title_login":"로그인","sidepanel_title_newtpk":"새채팅시작","sidepanel_title_register":"계정만들기","sidepanel_title_reset":"비밀번호재설정","sidepanel_title_settings":"설정","stay_logged_in":"로그인상태유지","tabtitle_find_user":"찾기","tabtitle_group_by_id":"id로","tabtitle_new_group":"새그룹","tags_editor_no_tags":"일부태그추가","tags_not_found":"태그가정의되지않았습니다.일부를추가하십시오.","title_all_contacts":"모든연락처","title_group_members":"그룹구성원","title_manage_tags":"관리","title_not_found":"찾을수없음","title_permissions":"권한","title_tag_manager":"태그(사용자검색)","topic_block_warning":"이대화를차단하시겠습니까?","topic_delete_warning":"이대화를삭제하시겠습니까?","topic_name_editing_placeholder":"그룹의자유형이름","unnamed_topic":"이름없는","update_available":"업데이트가능.","upload_finishing":"마무리...","user_not_found":"찾을수없음","validate_credential_action":"확인","description_editing_placeholder":"설명(선택 사항)","label_description":"설명","button_security":"보안","panel_title_crop":"드래그하여 조정","panel_title_general":"일반","panel_title_members":"구성원","panel_title_security":"보안","panel_title_info":"정보","permissions_anonymous":"익명","permissions_authenticated":"인증됨","topic_delete":"채팅 삭제","permissions_user":"사용자 권한","password_reset_email_sent":"이메일이 {email}(으)로 전송되었습니다. 이메일의 지침에 따라 비밀번호를 재설정하세요.","label_unarchive_topic":"보관됨:","menu_item_reply":"회신하다","menu_item_forward":"리디렉션","forward_to":"메시지를 리디렉션","forward_to_search_placeholder":"연락처 검색","label_new_password":"새 비밀번호","drafty_unknown":"지원되지 않음","calls_incoming":"수신 전화","calls_outgoing":"발신 전화","calls_you_label":"너","menu_item_video_call":"영상 통화","already_in_call":"당신은 이미 말하고 있습니다!","call_cancelled":"취소 된","call_missed":"부재중","call_declined":"통화 거부","call_disconnected":"연결 끊김","label_use_secure_connection":"보안 연결 사용","phone_or_email_prompt":"전화번호 또는 이메일","cred_confirmed_successfully":"성공적으로 확인됨"},"ro":{"action_block_contact":"Blochează contact","action_cancel":"anulează","action_clear_messages":"Șterge mesajele","action_delete_messages":"Șterge toate mesajele","action_leave_chat":"Ieși din conversație","action_report_chat":"Raportează conversația","archived_contacts":"Contacte arhivate ({count})","badge_danger":"Suspicios","badge_owner":"owner","badge_staff":"Administrare","badge_verified":"Verificat","badge_you":"tu","block_contact_warning":"Ești sigur că dorești să blochezi acest contact?","blocked_contacts_link":"Contact blocate ({count})","button_add_another":"Adaugă","button_add_members":"Adaugă persoane","button_cancel":"Anulează","button_confirm":"Confirmă","button_create":"Creează","button_delete_account":"Șterge cont","button_edit":"Editează","button_logout":"Deconectare","button_ok":"OK","button_reset":"Resetează","button_send_request":"Trimite cerere","button_sign_in":"Conectează-te","button_sign_up":"Creează cont","button_subscribe":"Subscribe","button_update":"Actualizează","cannot_initiate_file_upload":"Nu se poate face încărcarea.","channel":"canal","channel_prompt":"Acesta este un canal","chat_invitation":"Ai primit invitație într-o conversație. Accepți?","chat_invitation_accept":"Da, accept","chat_invitation_block":"Blochează","chat_invitation_ignore":"Ignoră","clear_messages_warning":"Ești sigur că dorești să ștergi mesajele? Acestea nu pot fi recuperate.","code_doesnot_match":"Codul furnizat nu este valid","contacts_not_found":"Nu ai contacte salvate<br />¯∖_(ツ)_/¯","contacts_not_found_short":"Niciun contact găsit după criteriile \'\'{query}\'\'","credential_email_prompt":"Adresa de e-mail","delete_account":"Șterge contul","delete_account_warning":"Ești sigur că dorești să ștergi contul? Acesta nu va putea fi recuperat.","delete_messages_warning":"Ești sigur că dorești să șterge mesajele din toate conversațiile? Acestea nu pot fi recuperate.","deleted_content":"conținut șters","download_action":"download","drafty_attachment":"Atasament","drafty_form":"Formă:","drafty_image":"Imagine","email_dative":"email","email_prompt":"Adresa de e-mail","enable_peers_messaging":"Activează","enter_confirmation_code_prompt":"Introu codul de confirmare trimis pe {method}:","error_invalid_id":"ID Invalid","file_attachment_too_large":"Dimensiunea fișiterului {size} depășește limita de {limit}.","forgot_password_link":"Ți-ai uitat parola?","full_name_prompt":"Numele tău","granted_permissions":"Oferite","group_has_no_members":"În acest grup nu se află persoane","group_user_id_prompt":"Grup sau user ID","image_caption_prompt":"Titlul imaginii","invalid_content":"conținut invalid","invalid_security_token":"Codul de securitate este invalid","label_client":"Client:","label_content_type":"Tip conținut:","label_default_access_mode":"Default access mode:","label_file_name":"Nume fișier:","label_group_members":"Membrii grupului:","label_incognito_mode":"Mod incognito:","label_message_sound":"Sunet de mesaj:","label_muting_topic":"Mod silențios (muted):","label_other_user":"Altele","label_password":"Parola","label_permissions":"Permisiuni:","label_private":"Comentariu privat","label_push_notifications":"Alerte de notificare:","label_push_notifications_disabled":"Alerte de notificare (necesită HTTPS):","label_reset_password":"Resetează parola:","label_sdk":"SDK:","label_server":"Server:","label_server_address":"Adresa serverului:","label_server_to_use":"Server de utilizat:","label_size":"Size:","label_topic_name":"Nume","label_user_contacts":"Contacte:","label_user_id":"ID:","label_wire_transport":"Transportul legat:","label_you":"Tu:","label_your_name":"Numele tău","label_your_permissions":"Permisiuniile tale:","last_seen_timestamp":"Văzut ultima dată","leave_chat_warning":"Ești sigur că dorești să ieși din conersație?","link_contact_us":"Contactează-ne","link_privacy_policy":"Politica de Confidențialitate","link_terms_of_service":"Termenii Serviciului","login_prompt":"Conectează-te","menu_item_archive_topic":"Arhivează","menu_item_block":"Blochează","menu_item_clear_messages":"Șterge mesajele","menu_item_clear_messages_for_all":"Ștergele pe toate","menu_item_delete":"Șterge","menu_item_delete_for_all":"Ștergele pe toate","menu_item_delete_topic":"Șterge","menu_item_edit_permissions":"Editează permisiuni","menu_item_info":"Info","menu_item_member_delete":"Șterge persoană","menu_item_mute":"Mute","menu_item_restore_topic":"Restabili","menu_item_send_retry":"Reîncearcă","menu_item_unblock":"Deblochează","menu_item_unmute":"Unmute","message_sending":"se trimite...","message_sending_failed":"eroare","messages_not_readable":"Mesajele nu pot fi citite","messaging_disabled_prompt":"Mesageria este dezactivată","more_online_members":"+{overflow} mai mult","new_message_prompt":"Mesaj nou","new_password_placeholder":"Introdu parolă","no_connection":"Nu există conexiune","no_contacts":"Nu ai contacte adăugate :-(","numeric_confirmation_code_prompt":"Doar cifre","online_now":"online acum","password_prompt":"Parola","password_unchanged_prompt":"Neschimbată","peers_messaging_disabled":"Mesageria de tip Peer este dezactivată.","permission_admin":"Aprobare ({val})","permission_delete":"Ștergere ({val})","permission_join":"Participare ({val})","permission_owner":"Deținător ({val})","permission_pres":"Notificare ({val})","permission_read":"Citire ({val})","permission_share":"Distribuire ({val})","permission_write":"Scriere ({val})","phone_dative":"telefon","private_editing_placeholder":"Vizibil doar ție","push_init_failed":"Nu s-a reușit inițializarea tip push notifications","reconnect_countdown":"Deconectat. Se încearcă conectarea în {seconds}…","reconnect_now":"Încearcă din nou","reload_update":"Reîncarcă","report_chat_warning":"Ești sigur că dorești să blochezi și să raportezi această conversație?","requested_permissions":"Necesare","save_attachment":"salvează","search_for_contacts":"Caută în contacte","search_no_results":"Nu s-au găsit rezultate","search_placeholder":"Caută după e-mail sau număr telefon...","sidepanel_title_acc_notifications":"Notificări","sidepanel_title_acc_support":"Ajutor","sidepanel_title_account_settings":"Setările Contului","sidepanel_title_archive":"Conversații Arhivate","sidepanel_title_blocked":"Conversații Blocate","sidepanel_title_cred":"Confirmă credențiale","sidepanel_title_login":"Conectează-te","sidepanel_title_newtpk":"Creeză un nou Chat","sidepanel_title_register":"Creează Cont","sidepanel_title_reset":"Resetează Parola","sidepanel_title_settings":"Setări","stay_logged_in":"Rămâi conectat","tabtitle_find_user":"caută","tabtitle_group_by_id":"după id","tabtitle_new_group":"grup nou","tags_editor_no_tags":"Adaugă tag-uri","tags_not_found":"Niciun tag definit. Adaugă.","title_all_contacts":"Toate Contactele","title_group_members":"Persoanele din grup","title_manage_tags":"Administrează","title_not_found":"Nu a fost găsit","title_permissions":"Permisiuni","title_tag_manager":"Tag-uri (user discovery)","topic_block_warning":"Ești sigur că dorești să blochezi această conversație?","topic_delete_warning":"Ești sigur că dorești să șterge această conversație?","topic_name_editing_placeholder":"Numele grupului","unnamed_topic":"Nedenumit","update_available":"Actualizare disponibilă.","upload_finishing":"se încarcă...","user_not_found":"Utilizatorul nu a fost găsit","validate_credential_action":"confirmă","description_editing_placeholder":"Descriere (opțional)","label_description":"Descriere","button_security":"Securitate","panel_title_crop":"Trageți pentru a ajusta","panel_title_general":"Generale","panel_title_members":"Membri","panel_title_security":"Securitate","panel_title_info":"Info","permissions_anonymous":"Anonim","permissions_authenticated":"Autentificat","topic_delete":"Ștergeți Chat","permissions_user":"Permisiunile utilizatorului","password_reset_email_sent":"Un e-mail a fost trimis către {email}. Urmați instrucțiunile din e-mail pentru a vă reseta parola.","label_unarchive_topic":"Arhivat:","menu_item_reply":"A raspunde","menu_item_forward":"Redirecţiona","forward_to":"Redirecționați către","forward_to_search_placeholder":"Căutați contacte","label_new_password":"Parolă Nouă","drafty_unknown":"Neacceptat","calls_incoming":"Apel primit","calls_outgoing":"Apel efectuat","calls_you_label":"Tu","menu_item_video_call":"Apel video","already_in_call":"Deja vorbesti!","call_cancelled":"anulat","call_missed":"pierdut","call_declined":"refuzat","call_disconnected":"deconectat","label_use_secure_connection":"Utilizați conexiune securizată","phone_or_email_prompt":"Număr de telefon sau e-mail","cred_confirmed_successfully":"Confirmat cu succes"},"ru":{"action_block_contact":"Заблокировать контакт","action_cancel":"отменить","action_clear_messages":"Удалить сообщения","action_delete_messages":"Удалить сообщения","action_leave_chat":"Уйти из чата","action_report_chat":"Сообщить о нарушении","archived_contacts":"Чаты в архиве ({count})","badge_danger":"Подозрительный","badge_owner":"влад.","badge_staff":"Администрация","badge_verified":"Верифицированный","badge_you":"вы","block_contact_warning":"Вы действительно заблокировать этот контакт?","blocked_contacts_link":"Заблокированные ({count})","button_add_another":"Добавить","button_add_members":"Добавить","button_cancel":"Отменить","button_confirm":"Подтвердить","button_create":"Создать","button_delete_account":"Удалить аккаунт","button_edit":"Изменить","button_logout":"Выйти","button_ok":"OK","button_reset":"Изменить","button_send_request":"Отправить","button_sign_in":"Войти","button_sign_up":"Создать аккаунт","button_subscribe":"Подписаться","button_update":"Применить","cannot_initiate_file_upload":"Ошибка загрузки файла.","channel":"канал","channel_prompt":"Создать канал","chat_invitation":"Вас пригласили начать новый чат. Как вы хотите поступить?","chat_invitation_accept":"Принять","chat_invitation_block":"Заблокировать","chat_invitation_ignore":"Игнорировать","clear_messages_warning":"Вы действительно хотите удалить все сообщения в чате? Их будет невозможно восстановить.","code_doesnot_match":"Код не совпадает","contacts_not_found":"Чатов нет<br />¯∖_(ツ)_/¯","contacts_not_found_short":"Нет контактов для запроса \'\'{query}\'\'","credential_email_prompt":"Регистрационный емейл","delete_account":"Удалить аккаунт","delete_account_warning":"Вы уверены, что ходите удалить свой аккаунт? Его невозможно будет восстановить.","delete_messages_warning":"Вы действительно хотите удалить все сообщения?","deleted_content":"удалено","download_action":"скачать","drafty_attachment":"Аттачмент","drafty_form":"Форма:","drafty_image":"Картинка","email_dative":"емейлу","email_prompt":"Email, напр. ivan@example.com","enable_peers_messaging":"Разблокировать.","enter_confirmation_code_prompt":"Код подтверждения, полученный по {method}:","error_invalid_id":"Неверный ID","file_attachment_too_large":"Размер файла {size} превышает {limit} лимит.","forgot_password_link":"Напомнить пароль","full_name_prompt":"Полное имя, напр. Иван Петров","granted_permissions":"Получены","group_has_no_members":"Нет участников","group_user_id_prompt":"ID чата или пользователя","image_caption_prompt":"Подпись к фото","invalid_content":"сообщение не читается","invalid_security_token":"Токен некорректен","label_client":"Клиент:","label_content_type":"Тип:","label_default_access_mode":"Доступ по умолчанию:","label_file_name":"Имя файла:","label_group_members":"Участники чата:","label_incognito_mode":"Режим инкогнито:","label_message_sound":"Звук нового сообщения:","label_muting_topic":"Без уведомлений","label_other_user":"Второй","label_password":"Пароль","label_permissions":"Права доступа:","label_private":"Комментарий","label_push_notifications":"Уведомления:","label_push_notifications_disabled":"Уведомления (требуют HTTPS):","label_reset_password":"Отправить емейл для смены пароля:","label_sdk":"SDK:","label_server":"Сервер:","label_server_address":"Адрес сервера:","label_server_to_use":"Использовать сервер:","label_size":"Размер:","label_topic_name":"Название","label_user_contacts":"Конакты:","label_user_id":"ID:","label_wire_transport":"Соединение:","label_you":"Вы:","label_your_name":"Ваше имя","label_your_permissions":"Ваши права доступа:","last_seen_timestamp":"Был активен","leave_chat_warning":"Вы действительно хотите покинуть этот чат?","link_contact_us":"Связаться с нами","link_privacy_policy":"Политика конфиденциальности","link_terms_of_service":"Условия сервиса","login_prompt":"Логин","menu_item_archive_topic":"В архив","menu_item_block":"Заблокировать","menu_item_clear_messages":"Удалить сообщения","menu_item_clear_messages_for_all":"Удалить для всех","menu_item_delete":"Удалить","menu_item_delete_for_all":"Удалить для всех","menu_item_delete_topic":"Удалить чат","menu_item_edit_permissions":"Права доступа","menu_item_info":"Информация","menu_item_member_delete":"Отписать","menu_item_mute":"Не уведомлять","menu_item_restore_topic":"Разархивировать","menu_item_send_retry":"Отправить заново","menu_item_unblock":"Разблокировать","menu_item_unmute":"Уведомлять","message_sending":"в пути...","message_sending_failed":"ошибка","messages_not_readable":"нет доступа к сообщениям","messaging_disabled_prompt":"Отправка недоступна","more_online_members":"+еще {overflow}","new_message_prompt":"Новое сообщение","new_password_placeholder":"Введите новый пароль","no_connection":"Нет связи","no_contacts":"Ничего нет :-(","numeric_confirmation_code_prompt":"Только цифры","online_now":"онлайн","password_prompt":"Пароль","password_unchanged_prompt":"Не изменен","peers_messaging_disabled":"Чат заблокирован у корреспондента.","permission_admin":"Подтверждать ({val})","permission_delete":"Удалять ({val})","permission_join":"Подписываться ({val})","permission_owner":"Владелец ({val})","permission_pres":"Уведомлять ({val})","permission_read":"Читать ({val})","permission_share":"Приглашать ({val})","permission_write":"Писать ({val})","phone_dative":"телефону","private_editing_placeholder":"Виден только вам","push_init_failed":"Ошибка инициализации пуш уведомлений","reconnect_countdown":"Нет связи. Подключение через {seconds}…","reconnect_now":"Подключить сейчас.","reload_update":"Обновить","report_chat_warning":"Вы действительно хотите сообщить о нарушении и заблокировать этот чат?","requested_permissions":"Требуются","save_attachment":"сохранить","search_for_contacts":"Поиск контактов","search_no_results":"Ничего не найдено","search_placeholder":"Список, напр. email:alice@example.com, tel:+17025550003...","sidepanel_title_acc_notifications":"Уведомления","sidepanel_title_acc_support":"Поддержка","sidepanel_title_account_settings":"Настройки аккаунта","sidepanel_title_archive":"Архив чатов","sidepanel_title_blocked":"Заблокированные чаты","sidepanel_title_cred":"Подтвердить","sidepanel_title_login":"Авторизация","sidepanel_title_newtpk":"Новый чат","sidepanel_title_register":"Зарегистрироваться","sidepanel_title_reset":"Сменить пароль","sidepanel_title_settings":"Настройки","stay_logged_in":"Запомнить","tabtitle_find_user":"найти","tabtitle_group_by_id":"по id","tabtitle_new_group":"создать","tags_editor_no_tags":"Добавьте теги","tags_not_found":"Тегов нет. Добавьте","title_all_contacts":"Все контакты","title_group_members":"Участники","title_manage_tags":"Редактировать","title_not_found":"Не найден","title_permissions":"Права доступа","title_tag_manager":"Теги для поиска","topic_block_warning":"Вы действительно хотите заблокировать этот чат?","topic_delete_warning":"Вы действительно хотите удалить этот чат?","topic_name_editing_placeholder":"Название чата","unnamed_topic":"Без названия","update_available":"Есть новая версия приложения.","upload_finishing":"завершение...","user_not_found":"Не найден","validate_credential_action":"подтвердить","description_editing_placeholder":"Описание (не обязательно)","label_description":"Описание","button_security":"Безопасность","panel_title_crop":"Обрезать картинку","panel_title_general":"Общие настройки","panel_title_members":"Участники","panel_title_security":"Безопасность","panel_title_info":"Подробности","permissions_anonymous":"Анонимный","permissions_authenticated":"Авторизованный","topic_delete":"Удалить чат","permissions_user":"Права доступа","password_reset_email_sent":"Сообщение было отправлено на адрес {email}. Следуйте инструкциям в сообщении, чтобы изменить пароль.","label_unarchive_topic":"Архивирован:","menu_item_reply":"Ответить","menu_item_forward":"Переслать","forward_to":"Переслать","forward_to_search_placeholder":"Поиск контактов","label_new_password":"Новый пароль","drafty_unknown":"Не поддерживается","calls_incoming":"Входящий звонок","calls_outgoing":"Исходящий звонок","calls_you_label":"Вы","menu_item_video_call":"Видеозвонок","already_in_call":"Вы уже звоните кому-то!","call_cancelled":"отменен","call_missed":"пропущен","call_declined":"отклонен","call_disconnected":"разъединен","label_use_secure_connection":"Безопасное соединение","phone_or_email_prompt":"Телефон или емейл","cred_confirmed_successfully":"Подтверждено успешно"},"zh-TW":{"action_block_contact":"封鎖聯絡人","action_cancel":"取消","action_clear_messages":"清除訊息","action_delete_messages":"為所有人清除訊息","action_leave_chat":"離開對話","action_report_chat":"檢舉對話","archived_contacts":"已封存的聯絡人 ({count})","badge_danger":"不可信","badge_owner":"擁有者","badge_staff":"員工管理","badge_verified":"已驗證/官方","badge_you":"您","block_contact_warning":"您確定要封鎖此聯絡人嗎?","blocked_contacts_link":"已封鎖的聯絡人 ({count})","button_add_another":"新增其他人","button_add_members":"新增成員","button_cancel":"取消","button_confirm":"確認","button_create":"建立","button_delete_account":"刪除帳號","button_edit":"編輯","button_logout":"登出","button_ok":"OK","button_reset":"重設","button_send_request":"傳送要求","button_sign_in":"登入","button_sign_up":"註冊","button_subscribe":"訂閱","button_update":"更新","cannot_initiate_file_upload":"無法為檔案上傳初始化。","channel":"頻道","channel_prompt":"這是頻道","chat_invitation":"您已被邀請開始新對話。您接下來要做什麼呢?","chat_invitation_accept":"接受","chat_invitation_block":"封鎖","chat_invitation_ignore":"忽略","clear_messages_warning":"您確定要清除所有訊息嗎?此操作無法復原。","code_doesnot_match":"代碼不相符","contacts_not_found":"您沒有任何對話<br />¯∖_(ツ)_/¯","contacts_not_found_short":"沒有符合 \'\'{query}\'\' 的聯絡人","credential_email_prompt":"您的註冊電子郵件地址","delete_account":"刪除帳號","delete_account_warning":"您確定要刪除您的帳戶嗎?此操作無法撤消。","delete_messages_warning":"您確定要為所有人刪除所有訊息嗎?此操作無法復原。","deleted_content":"內容已被刪除","download_action":"下載","drafty_attachment":"附加檔案","drafty_form":"表單:","drafty_image":"圖片","email_dative":"電子郵件地址","email_prompt":"電子郵件地址,例如:jdoe@example.com","enable_peers_messaging":"啟用","enter_confirmation_code_prompt":"輸入透過 {method} 傳送給您的確認碼:","error_invalid_id":"ID 無效","file_attachment_too_large":"檔案大小 {size} 超出 {limit} 限制。","forgot_password_link":"忘記密碼?","full_name_prompt":"全名,例如:王小明","granted_permissions":"已授權","group_has_no_members":"無成員","group_user_id_prompt":"群組或使用者 ID","image_caption_prompt":"圖片說明","invalid_content":"內容無效","invalid_security_token":"安全權杖無效","label_client":"客戶端:","label_content_type":"類型:","label_default_access_mode":"預設存取模式:","label_file_name":"檔名:","label_group_members":"群組成員:","label_incognito_mode":"無痕模式:","label_message_sound":"訊息提示聲:","label_muting_topic":"靜音:","label_other_user":"其他","label_password":"密碼","label_permissions":"權限:","label_private":"私人留言","label_push_notifications":"通知:","label_push_notifications_disabled":"通知 (需要 HTTPS):","label_reset_password":"傳送重設密碼郵件:","label_sdk":"SDK:","label_server":"伺服器:","label_server_address":"伺服器位址:","label_server_to_use":"使用的伺服器:","label_size":"大小:","label_topic_name":"名稱","label_user_contacts":"聯絡人:","label_user_id":"ID:","label_wire_transport":"Wire transport:","label_you":"您:","label_your_name":"您的名字","label_your_permissions":"您的權限:","last_seen_timestamp":"最後上線","leave_chat_warning":"您確定要離開此對話嗎?","link_contact_us":"聯絡我們","link_privacy_policy":"隱私權政策","link_terms_of_service":"服務條款","login_prompt":"登入","menu_item_archive_topic":"封存","menu_item_block":"封鎖","menu_item_clear_messages":"清除訊息","menu_item_clear_messages_for_all":"為所有人清除訊息","menu_item_delete":"刪除","menu_item_delete_for_all":"為所有人刪除","menu_item_delete_topic":"刪除","menu_item_edit_permissions":"編輯權限","menu_item_info":"Info","menu_item_member_delete":"移除","menu_item_mute":"靜音","menu_item_restore_topic":"恢復","menu_item_send_retry":"重試","menu_item_unblock":"解除封鎖","menu_item_unmute":"解除靜音","message_sending":"正在傳送...","message_sending_failed":"失敗","messages_not_readable":"沒有存取訊息的權限","messaging_disabled_prompt":"停用訊息","more_online_members":"+{overflow}","new_message_prompt":"新訊息","new_password_placeholder":"輸入新的密碼","no_connection":"無連線","no_contacts":"您沒有任何聯絡人 :-(","numeric_confirmation_code_prompt":"僅數字","online_now":"上線中","password_prompt":"密碼","password_unchanged_prompt":"未修改","peers_messaging_disabled":"Peer 已停用訊息。","permission_admin":"核可 ({val})","permission_delete":"刪除 ({val})","permission_join":"加入 ({val})","permission_owner":"擁有者 ({val})","permission_pres":"收到通知 ({val})","permission_read":"讀取 ({val})","permission_share":"分享 ({val})","permission_write":"撰寫 ({val})","phone_dative":"phone","private_editing_placeholder":"僅您可見","push_init_failed":"初始化通知失敗。","reconnect_countdown":"已斷線。將在 {seconds} 秒後重新連線…","reconnect_now":"現在重試","reload_update":"重新載入","report_chat_warning":"您確定要封鎖並檢舉此對話嗎?","requested_permissions":"重新請求","save_attachment":"儲存","search_for_contacts":"使用搜尋來尋找聯絡人","search_no_results":"搜尋無結果","search_placeholder":"例如 email:alice@example.com, tel:17025550003... 的清單","sidepanel_title_acc_notifications":"通知","sidepanel_title_acc_support":"支援","sidepanel_title_account_settings":"帳號設定","sidepanel_title_archive":"已封存的對話","sidepanel_title_blocked":"已封鎖的對話","sidepanel_title_cred":"確認認證","sidepanel_title_login":"登入","sidepanel_title_newtpk":"開始新對話","sidepanel_title_register":"建立帳號","sidepanel_title_reset":"重設密碼","sidepanel_title_settings":"設定","stay_logged_in":"保持登入","tabtitle_find_user":"尋找","tabtitle_group_by_id":"以 id","tabtitle_new_group":"新群組","tags_editor_no_tags":"新增一些標籤","tags_not_found":"未定義任何標籤。請新增一些標籤。","title_all_contacts":"所有聯絡人","title_group_members":"群組成員","title_manage_tags":"管理","title_not_found":"找不到","title_permissions":"權限","title_tag_manager":"標籤 (使用者探索)","topic_block_warning":"您確定要封鎖此對話嗎?","topic_delete_warning":"您確定要刪除此對話嗎?","topic_name_editing_placeholder":"群組的任意名稱","unnamed_topic":"未命名","update_available":"有可用的更新。","upload_finishing":"正在完成...","user_not_found":"找不到","validate_credential_action":"確認","description_editing_placeholder":"說明(可選)","label_description":"說明","button_security":"安全性","panel_title_crop":"拖動調整","panel_title_general":"一般","panel_title_members":"成員","panel_title_security":"安全性","panel_title_info":"資訊","permissions_anonymous":"匿名","permissions_authenticated":"已認證","topic_delete":"刪除聊天","permissions_user":"用戶權限","password_reset_email_sent":"一封電子郵件已發送至 {email}。按照電子郵件中的說明重置密碼。","label_unarchive_topic":"存檔聊天:","menu_item_reply":"回答","menu_item_forward":"重定向","forward_to":"重定向消息","forward_to_search_placeholder":"搜索聯繫人","label_new_password":"新密碼","drafty_unknown":"不支持","calls_incoming":"來電","calls_outgoing":"撥出電話","calls_you_label":"你","menu_item_video_call":"視頻電話","already_in_call":"你已經在說話了!","call_cancelled":"取消","call_missed":"未接","call_declined":"被拒","call_disconnected":"斷開連接","label_use_secure_connection":"使用安全連接","phone_or_email_prompt":"電話號碼或電子郵件","cred_confirmed_successfully":"確認成功"},"zh":{"action_block_contact":"屏蔽联系人","action_cancel":"取消","action_clear_messages":"删除讯息","action_delete_messages":"删除所有帖子","action_leave_chat":"离开","action_report_chat":"检举垃圾邮件","archived_contacts":"已归档联系人 ({count})","badge_danger":"可疑的","badge_owner":"所有者","badge_staff":"在员工管理下","badge_verified":"值得信赖","badge_you":"你","block_contact_warning":"您确定要阻止此联系人吗?","blocked_contacts_link":"封锁的联络人 ({count})","button_add_another":"加上另一个","button_add_members":"添加成员","button_cancel":"取消","button_confirm":"确认","button_create":"创建","button_delete_account":"删除帐户","button_edit":"编辑","button_logout":"登出","button_ok":"好","button_reset":"重置","button_send_request":"发送请求","button_sign_in":"登录","button_sign_up":"注册","button_subscribe":"订阅","button_update":"更新","cannot_initiate_file_upload":"无法初始化文件上传。","channel":"频道","channel_prompt":"这是一个频道","chat_invitation":"你受邀开始新会话。你想怎么做?","chat_invitation_accept":"接受","chat_invitation_block":"屏蔽","chat_invitation_ignore":"忽略","clear_messages_warning":"您确定要清除所有消息吗?无法撤消。","code_doesnot_match":"代码不匹配","contacts_not_found":"你尚无会话<br />¯∖_(ツ)_/¯","contacts_not_found_short":"无联系人匹配\'\'{query}\'\'","credential_email_prompt":"你的注册邮箱","delete_account":"删除帐户","delete_account_warning":"您确定要删除您的帐户吗?无法撤消。","delete_messages_warning":"您确定要删除所有消息吗?无法撤消。","deleted_content":"内容已删除","download_action":"下载","drafty_attachment":"附件","drafty_form":"形式:","drafty_image":"图像","email_dative":"电子邮件","email_prompt":"电子邮件,例如 zhang@example.com","enable_peers_messaging":"启用","enter_confirmation_code_prompt":"输入通过{method}发送的验证码:","error_invalid_id":"无效 ID","file_attachment_too_large":"文件大小 {size} 超过 {limit} 限制。","forgot_password_link":"忘记密码?","full_name_prompt":"全名,例如张伟","granted_permissions":"已授予","group_has_no_members":"无成员","group_user_id_prompt":"群组或用户 ID","image_caption_prompt":"图片标题","invalid_content":"无效内容","invalid_security_token":"无效的安全令牌","label_client":"客户端:","label_content_type":"内容类型:","label_default_access_mode":"蓦然访问模式:","label_file_name":"文件名:","label_group_members":"群组成员:","label_incognito_mode":"无痕模式:","label_message_sound":"消息提示音:","label_muting_topic":"已静音:","label_other_user":"其他","label_password":"密码","label_permissions":"权限:","label_private":"私人评论","label_push_notifications":"通知提醒:","label_push_notifications_disabled":"通知提醒(需要 HTTPS):","label_reset_password":"发送密码重置邮件:","label_sdk":"开发包:","label_server":"服务器:","label_server_address":"服务器地址:","label_server_to_use":"使用的服务器:","label_size":"大小:","label_topic_name":"名称","label_user_contacts":"往来:","label_user_id":"地址:","label_wire_transport":"线路传输:","label_you":"你:","label_your_name":"你的姓名","label_your_permissions":"你的权限:","last_seen_timestamp":"最后可见","leave_chat_warning":"您确定要退出此对话吗?","link_contact_us":"联系我们","link_privacy_policy":"隐私政策","link_terms_of_service":"条款和条件","login_prompt":"登录","menu_item_archive_topic":"归档","menu_item_block":"屏蔽","menu_item_clear_messages":"清空消息","menu_item_clear_messages_for_all":"全部清除","menu_item_delete":"删除","menu_item_delete_for_all":"全部删除","menu_item_delete_topic":"删除","menu_item_edit_permissions":"编辑权限","menu_item_info":"信息","menu_item_member_delete":"移除","menu_item_mute":"静音","menu_item_restore_topic":"从存档中恢复","menu_item_send_retry":"重试","menu_item_unblock":"取消屏蔽","menu_item_unmute":"取消静音","message_sending":"正在发送...","message_sending_failed":"发送失败","messages_not_readable":"无消息访问权限","messaging_disabled_prompt":"消息已禁用","more_online_members":"还有{overflow}个","new_message_prompt":"新消息","new_password_placeholder":"输入新密码","no_connection":"无连接","no_contacts":"你尚无联系人 (._.)","numeric_confirmation_code_prompt":"仅数字","online_now":"在线","password_prompt":"密码","password_unchanged_prompt":"未改变","peers_messaging_disabled":"成员间消息已禁用。","permission_admin":"批准 ({val})","permission_delete":"删除 ({val})","permission_join":"加入 ({val})","permission_owner":"所有者 ({val})","permission_pres":"获取通知 ({val})","permission_read":"读取 ({val})","permission_share":"分享 ({val})","permission_write":"写入 ({val})","phone_dative":"电话","private_editing_placeholder":"仅自己可见","push_init_failed":"初始化推送通知失败","reconnect_countdown":"连接已断开。{seconds} 秒后重新连接…","reconnect_now":"立即尝试","reload_update":"重新载入","report_chat_warning":"您确定要停止并报告此对话吗?","requested_permissions":"已请求","save_attachment":"保存","search_for_contacts":"使用搜索寻找联系人","search_no_results":"搜索返回任何结果","search_placeholder":"列表如 email:alice@example.com, tel:+17025550003...","sidepanel_title_acc_notifications":"通知","sidepanel_title_acc_support":"支持","sidepanel_title_account_settings":"帐号设定","sidepanel_title_archive":"已存档会话","sidepanel_title_blocked":"被阻止的聊天","sidepanel_title_cred":"确认凭据","sidepanel_title_login":"登录","sidepanel_title_newtpk":"开始新会话","sidepanel_title_register":"创建账户","sidepanel_title_reset":"重置密码","sidepanel_title_settings":"设置","stay_logged_in":"保持登录","tabtitle_find_user":"搜索","tabtitle_group_by_id":"通过 id","tabtitle_new_group":"新群组","tags_editor_no_tags":"添加一些标签","tags_not_found":"尚未定义标签。添加一些。","title_all_contacts":"全部联系人","title_group_members":"群组成员","title_manage_tags":"管理标签","title_not_found":"无法找到","title_permissions":"权限","title_tag_manager":"标签(用户发现)","topic_block_warning":"您确定要阻止此对话吗?","topic_delete_warning":"您确定要删除此对话吗?","topic_name_editing_placeholder":"群组自由格式名称","unnamed_topic":"未命名","update_available":"更新可用。","upload_finishing":"正在结束...","user_not_found":"未找到","validate_credential_action":"确认","description_editing_placeholder":"说明(可选)","label_description":"说明","button_security":"安全","panel_title_crop":"拖动调整","panel_title_general":"常用设定","panel_title_members":"成员","panel_title_security":"安全","panel_title_info":"信息","permissions_anonymous":"匿名","permissions_authenticated":"已认证","topic_delete":"删除聊天","permissions_user":"用户权限","password_reset_email_sent":"一封电子邮件已发送至 {email}。按照电子邮件中的说明重置密码。","label_unarchive_topic":"存档:","menu_item_reply":"回复","menu_item_forward":"重定向","forward_to":"重定向消息","forward_to_search_placeholder":"搜索联系人","label_new_password":"新密码","drafty_unknown":"不支持","calls_incoming":"来电","calls_outgoing":"拨出电话","calls_you_label":"你","menu_item_video_call":"视频电话","already_in_call":"你已经在说话了!","call_cancelled":"取消","call_missed":"未接","call_declined":"被拒","call_disconnected":"断开连接","label_use_secure_connection":"使用安全连接","phone_or_email_prompt":"电话号码或电子邮件","cred_confirmed_successfully":"确认成功"}}'),c=function(e){const t=[];let s=0;for(let a=0;a<e.length;a++){let i=e.charCodeAt(a);i<128?t[s++]=i:i<2048?(t[s++]=i>>6|192,t[s++]=63&i|128):55296==(64512&i)&&a+1<e.length&&56320==(64512&e.charCodeAt(a+1))?(i=65536+((1023&i)<<10)+(1023&e.charCodeAt(++a)),t[s++]=i>>18|240,t[s++]=i>>12&63|128,t[s++]=i>>6&63|128,t[s++]=63&i|128):(t[s++]=i>>12|224,t[s++]=i>>6&63|128,t[s++]=63&i|128)}return t},d={byteToCharMap_:null,charToByteMap_:null,byteToCharMapWebSafe_:null,charToByteMapWebSafe_:null,ENCODED_VALS_BASE:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",get ENCODED_VALS(){return this.ENCODED_VALS_BASE+"+/="},get ENCODED_VALS_WEBSAFE(){return this.ENCODED_VALS_BASE+"-_."},HAS_NATIVE_SUPPORT:"function"==typeof atob,encodeByteArray(e,t){if(!Array.isArray(e))throw Error("encodeByteArray takes an array as a parameter");this.init_();const s=t?this.byteToCharMapWebSafe_:this.byteToCharMap_,a=[];for(let t=0;t<e.length;t+=3){const i=e[t],n=t+1<e.length,o=n?e[t+1]:0,r=t+2<e.length,l=r?e[t+2]:0,c=i>>2,d=(3&i)<<4|o>>4;let h=(15&o)<<2|l>>6,p=63&l;r||(p=64,n||(h=64)),a.push(s[c],s[d],s[h],s[p])}return a.join("")},encodeString(e,t){return this.HAS_NATIVE_SUPPORT&&!t?btoa(e):this.encodeByteArray(c(e),t)},decodeString(e,t){return this.HAS_NATIVE_SUPPORT&&!t?atob(e):function(e){const t=[];let s=0,a=0;for(;s<e.length;){const i=e[s++];if(i<128)t[a++]=String.fromCharCode(i);else if(i>191&&i<224){const n=e[s++];t[a++]=String.fromCharCode((31&i)<<6|63&n)}else if(i>239&&i<365){const n=((7&i)<<18|(63&e[s++])<<12|(63&e[s++])<<6|63&e[s++])-65536;t[a++]=String.fromCharCode(55296+(n>>10)),t[a++]=String.fromCharCode(56320+(1023&n))}else{const n=e[s++],o=e[s++];t[a++]=String.fromCharCode((15&i)<<12|(63&n)<<6|63&o)}}return t.join("")}(this.decodeStringToByteArray(e,t))},decodeStringToByteArray(e,t){this.init_();const s=t?this.charToByteMapWebSafe_:this.charToByteMap_,a=[];for(let t=0;t<e.length;){const i=s[e.charAt(t++)],n=t<e.length?s[e.charAt(t)]:0;++t;const o=t<e.length?s[e.charAt(t)]:64;++t;const r=t<e.length?s[e.charAt(t)]:64;if(++t,null==i||null==n||null==o||null==r)throw Error();const l=i<<2|n>>4;if(a.push(l),64!==o){const e=n<<4&240|o>>2;if(a.push(e),64!==r){const e=o<<6&192|r;a.push(e)}}}return a},init_(){if(!this.byteToCharMap_){this.byteToCharMap_={},this.charToByteMap_={},this.byteToCharMapWebSafe_={},this.charToByteMapWebSafe_={};for(let e=0;e<this.ENCODED_VALS.length;e++)this.byteToCharMap_[e]=this.ENCODED_VALS.charAt(e),this.charToByteMap_[this.byteToCharMap_[e]]=e,this.byteToCharMapWebSafe_[e]=this.ENCODED_VALS_WEBSAFE.charAt(e),this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[e]]=e,e>=this.ENCODED_VALS_BASE.length&&(this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(e)]=e,this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(e)]=e)}}},h=function(e){return function(e){const t=c(e);return d.encodeByteArray(t,!0)}(e).replace(/\./g,"")},p=function(e){try{return d.decodeString(e,!0)}catch(e){console.error("base64Decode failed: ",e)}return null};function u(){return"object"==typeof indexedDB}function m(){return new Promise(((e,t)=>{try{let s=!0;const a="validate-browser-context-for-indexeddb-analytics-module",i=self.indexedDB.open(a);i.onsuccess=()=>{i.result.close(),s||self.indexedDB.deleteDatabase(a),e(!0)},i.onupgradeneeded=()=>{s=!1},i.onerror=()=>{var e;t((null===(e=i.error)||void 0===e?void 0:e.message)||"")}}catch(e){t(e)}}))}const g=()=>function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if(void 0!==s.g)return s.g;throw new Error("Unable to locate global object.")}().__FIREBASE_DEFAULTS__,_=()=>{try{return g()||(()=>{if("undefined"==typeof process||void 0===process.env)return;const e=process.env.__FIREBASE_DEFAULTS__;return e?JSON.parse(e):void 0})()||(()=>{if("undefined"==typeof document)return;let e;try{e=document.cookie.match(/__FIREBASE_DEFAULTS__=([^;]+)/)}catch(e){return}const t=e&&p(e[1]);return t&&JSON.parse(t)})()}catch(e){return void console.info(`Unable to get __FIREBASE_DEFAULTS__ due to: ${e}`)}};class f{constructor(){this.reject=()=>{},this.resolve=()=>{},this.promise=new Promise(((e,t)=>{this.resolve=e,this.reject=t}))}wrapCallback(e){return(t,s)=>{t?this.reject(t):this.resolve(s),"function"==typeof e&&(this.promise.catch((()=>{})),1===e.length?e(t):e(t,s))}}}class b extends Error{constructor(e,t,s){super(t),this.code=e,this.customData=s,this.name="FirebaseError",Object.setPrototypeOf(this,b.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,v.prototype.create)}}class v{constructor(e,t,s){this.service=e,this.serviceName=t,this.errors=s}create(e,...t){const s=t[0]||{},a=`${this.service}/${e}`,i=this.errors[e],n=i?function(e,t){return e.replace(w,((e,s)=>{const a=t[s];return null!=a?String(a):`<${s}?>`}))}(i,s):"Error",o=`${this.serviceName}: ${n} (${a}).`;return new b(a,o,s)}}const w=/\{\$([^}]+)}/g;function y(e,t){if(e===t)return!0;const s=Object.keys(e),a=Object.keys(t);for(const i of s){if(!a.includes(i))return!1;const s=e[i],n=t[i];if(E(s)&&E(n)){if(!y(s,n))return!1}else if(s!==n)return!1}for(const e of a)if(!s.includes(e))return!1;return!0}function E(e){return null!==e&&"object"==typeof e}function C(e){return e&&e._delegate?e._delegate:e}class S{constructor(e,t,s){this.name=e,this.instanceFactory=t,this.type=s,this.multipleInstances=!1,this.serviceProps={},this.instantiationMode="LAZY",this.onInstanceCreated=null}setInstantiationMode(e){return this.instantiationMode=e,this}setMultipleInstances(e){return this.multipleInstances=e,this}setServiceProps(e){return this.serviceProps=e,this}setInstanceCreatedCallback(e){return this.onInstanceCreated=e,this}}const M="[DEFAULT]";class k{constructor(e,t){this.name=e,this.container=t,this.component=null,this.instances=new Map,this.instancesDeferred=new Map,this.instancesOptions=new Map,this.onInitCallbacks=new Map}get(e){const t=this.normalizeInstanceIdentifier(e);if(!this.instancesDeferred.has(t)){const e=new f;if(this.instancesDeferred.set(t,e),this.isInitialized(t)||this.shouldAutoInitialize())try{const s=this.getOrInitializeService({instanceIdentifier:t});s&&e.resolve(s)}catch(e){}}return this.instancesDeferred.get(t).promise}getImmediate(e){var t;const s=this.normalizeInstanceIdentifier(null==e?void 0:e.identifier),a=null!==(t=null==e?void 0:e.optional)&&void 0!==t&&t;if(!this.isInitialized(s)&&!this.shouldAutoInitialize()){if(a)return null;throw Error(`Service ${this.name} is not available`)}try{return this.getOrInitializeService({instanceIdentifier:s})}catch(e){if(a)return null;throw e}}getComponent(){return this.component}setComponent(e){if(e.name!==this.name)throw Error(`Mismatching Component ${e.name} for Provider ${this.name}.`);if(this.component)throw Error(`Component for ${this.name} has already been provided`);if(this.component=e,this.shouldAutoInitialize()){if(function(e){return"EAGER"===e.instantiationMode}(e))try{this.getOrInitializeService({instanceIdentifier:M})}catch(e){}for(const[e,t]of this.instancesDeferred.entries()){const s=this.normalizeInstanceIdentifier(e);try{const e=this.getOrInitializeService({instanceIdentifier:s});t.resolve(e)}catch(e){}}}}clearInstance(e="[DEFAULT]"){this.instancesDeferred.delete(e),this.instancesOptions.delete(e),this.instances.delete(e)}async delete(){const e=Array.from(this.instances.values());await Promise.all([...e.filter((e=>"INTERNAL"in e)).map((e=>e.INTERNAL.delete())),...e.filter((e=>"_delete"in e)).map((e=>e._delete()))])}isComponentSet(){return null!=this.component}isInitialized(e="[DEFAULT]"){return this.instances.has(e)}getOptions(e="[DEFAULT]"){return this.instancesOptions.get(e)||{}}initialize(e={}){const{options:t={}}=e,s=this.normalizeInstanceIdentifier(e.instanceIdentifier);if(this.isInitialized(s))throw Error(`${this.name}(${s}) has already been initialized`);if(!this.isComponentSet())throw Error(`Component ${this.name} has not been registered yet`);const a=this.getOrInitializeService({instanceIdentifier:s,options:t});for(const[e,t]of this.instancesDeferred.entries()){s===this.normalizeInstanceIdentifier(e)&&t.resolve(a)}return a}onInit(e,t){var s;const a=this.normalizeInstanceIdentifier(t),i=null!==(s=this.onInitCallbacks.get(a))&&void 0!==s?s:new Set;i.add(e),this.onInitCallbacks.set(a,i);const n=this.instances.get(a);return n&&e(n,a),()=>{i.delete(e)}}invokeOnInitCallbacks(e,t){const s=this.onInitCallbacks.get(t);if(s)for(const a of s)try{a(e,t)}catch(e){}}getOrInitializeService({instanceIdentifier:e,options:t={}}){let s=this.instances.get(e);if(!s&&this.component&&(s=this.component.instanceFactory(this.container,{instanceIdentifier:(a=e,a===M?void 0:a),options:t}),this.instances.set(e,s),this.instancesOptions.set(e,t),this.invokeOnInitCallbacks(s,e),this.component.onInstanceCreated))try{this.component.onInstanceCreated(this.container,e,s)}catch(e){}var a;return s||null}normalizeInstanceIdentifier(e="[DEFAULT]"){return this.component?this.component.multipleInstances?e:M:e}shouldAutoInitialize(){return!!this.component&&"EXPLICIT"!==this.component.instantiationMode}}class T{constructor(e){this.name=e,this.providers=new Map}addComponent(e){const t=this.getProvider(e.name);if(t.isComponentSet())throw new Error(`Component ${e.name} has already been registered with ${this.name}`);t.setComponent(e)}addOrOverwriteComponent(e){this.getProvider(e.name).isComponentSet()&&this.providers.delete(e.name),this.addComponent(e)}getProvider(e){if(this.providers.has(e))return this.providers.get(e);const t=new k(e,this);return this.providers.set(e,t),t}getProviders(){return Array.from(this.providers.values())}}const A=[];var N;!function(e){e[e.DEBUG=0]="DEBUG",e[e.VERBOSE=1]="VERBOSE",e[e.INFO=2]="INFO",e[e.WARN=3]="WARN",e[e.ERROR=4]="ERROR",e[e.SILENT=5]="SILENT"}(N||(N={}));const D={debug:N.DEBUG,verbose:N.VERBOSE,info:N.INFO,warn:N.WARN,error:N.ERROR,silent:N.SILENT},I=N.INFO,P={[N.DEBUG]:"log",[N.VERBOSE]:"log",[N.INFO]:"info",[N.WARN]:"warn",[N.ERROR]:"error"},R=(e,t,...s)=>{if(t<e.logLevel)return;const a=(new Date).toISOString(),i=P[t];if(!i)throw new Error(`Attempted to log a message with an invalid logType (value: ${t})`);console[i](`[${a}] ${e.name}:`,...s)};let F,U;const x=new WeakMap,L=new WeakMap,O=new WeakMap,q=new WeakMap,B=new WeakMap;let j={get(e,t,s){if(e instanceof IDBTransaction){if("done"===t)return L.get(e);if("objectStoreNames"===t)return e.objectStoreNames||O.get(e);if("store"===t)return s.objectStoreNames[1]?void 0:s.objectStore(s.objectStoreNames[0])}return V(e[t])},set:(e,t,s)=>(e[t]=s,!0),has:(e,t)=>e instanceof IDBTransaction&&("done"===t||"store"===t)||t in e};function z(e){return e!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(U||(U=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(e)?function(...t){return e.apply(K(this),t),V(x.get(this))}:function(...t){return V(e.apply(K(this),t))}:function(t,...s){const a=e.call(K(this),t,...s);return O.set(a,t.sort?t.sort():[t]),V(a)}}function H(e){return"function"==typeof e?z(e):(e instanceof IDBTransaction&&function(e){if(L.has(e))return;const t=new Promise(((t,s)=>{const a=()=>{e.removeEventListener("complete",i),e.removeEventListener("error",n),e.removeEventListener("abort",n)},i=()=>{t(),a()},n=()=>{s(e.error||new DOMException("AbortError","AbortError")),a()};e.addEventListener("complete",i),e.addEventListener("error",n),e.addEventListener("abort",n)}));L.set(e,t)}(e),t=e,(F||(F=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])).some((e=>t instanceof e))?new Proxy(e,j):e);var t}function V(e){if(e instanceof IDBRequest)return function(e){const t=new Promise(((t,s)=>{const a=()=>{e.removeEventListener("success",i),e.removeEventListener("error",n)},i=()=>{t(V(e.result)),a()},n=()=>{s(e.error),a()};e.addEventListener("success",i),e.addEventListener("error",n)}));return t.then((t=>{t instanceof IDBCursor&&x.set(t,e)})).catch((()=>{})),B.set(t,e),t}(e);if(q.has(e))return q.get(e);const t=H(e);return t!==e&&(q.set(e,t),B.set(t,e)),t}const K=e=>B.get(e);function W(e,t,{blocked:s,upgrade:a,blocking:i,terminated:n}={}){const o=indexedDB.open(e,t),r=V(o);return a&&o.addEventListener("upgradeneeded",(e=>{a(V(o.result),e.oldVersion,e.newVersion,V(o.transaction))})),s&&o.addEventListener("blocked",(()=>s())),r.then((e=>{n&&e.addEventListener("close",(()=>n())),i&&e.addEventListener("versionchange",(()=>i()))})).catch((()=>{})),r}function G(e,{blocked:t}={}){const s=indexedDB.deleteDatabase(e);return t&&s.addEventListener("blocked",(()=>t())),V(s).then((()=>{}))}const $=["get","getKey","getAll","getAllKeys","count"],Q=["put","add","delete","clear"],X=new Map;function Y(e,t){if(!(e instanceof IDBDatabase)||t in e||"string"!=typeof t)return;if(X.get(t))return X.get(t);const s=t.replace(/FromIndex$/,""),a=t!==s,i=Q.includes(s);if(!(s in(a?IDBIndex:IDBObjectStore).prototype)||!i&&!$.includes(s))return;const n=async function(e,...t){const n=this.transaction(e,i?"readwrite":"readonly");let o=n.store;return a&&(o=o.index(t.shift())),(await Promise.all([o[s](...t),i&&n.done]))[0]};return X.set(t,n),n}j=(e=>({...e,get:(t,s,a)=>Y(t,s)||e.get(t,s,a),has:(t,s)=>!!Y(t,s)||e.has(t,s)}))(j);class J{constructor(e){this.container=e}getPlatformInfoString(){return this.container.getProviders().map((e=>{if(function(e){const t=e.getComponent();return"VERSION"===(null==t?void 0:t.type)}(e)){const t=e.getImmediate();return`${t.library}/${t.version}`}return null})).filter((e=>e)).join(" ")}}const Z="@firebase/app",ee="0.8.4",te=new class{constructor(e){this.name=e,this._logLevel=I,this._logHandler=R,this._userLogHandler=null,A.push(this)}get logLevel(){return this._logLevel}set logLevel(e){if(!(e in N))throw new TypeError(`Invalid value "${e}" assigned to \`logLevel\``);this._logLevel=e}setLogLevel(e){this._logLevel="string"==typeof e?D[e]:e}get logHandler(){return this._logHandler}set logHandler(e){if("function"!=typeof e)throw new TypeError("Value assigned to `logHandler` must be a function");this._logHandler=e}get userLogHandler(){return this._userLogHandler}set userLogHandler(e){this._userLogHandler=e}debug(...e){this._userLogHandler&&this._userLogHandler(this,N.DEBUG,...e),this._logHandler(this,N.DEBUG,...e)}log(...e){this._userLogHandler&&this._userLogHandler(this,N.VERBOSE,...e),this._logHandler(this,N.VERBOSE,...e)}info(...e){this._userLogHandler&&this._userLogHandler(this,N.INFO,...e),this._logHandler(this,N.INFO,...e)}warn(...e){this._userLogHandler&&this._userLogHandler(this,N.WARN,...e),this._logHandler(this,N.WARN,...e)}error(...e){this._userLogHandler&&this._userLogHandler(this,N.ERROR,...e),this._logHandler(this,N.ERROR,...e)}}("@firebase/app"),se="[DEFAULT]",ae={[Z]:"fire-core","@firebase/app-compat":"fire-core-compat","@firebase/analytics":"fire-analytics","@firebase/analytics-compat":"fire-analytics-compat","@firebase/app-check":"fire-app-check","@firebase/app-check-compat":"fire-app-check-compat","@firebase/auth":"fire-auth","@firebase/auth-compat":"fire-auth-compat","@firebase/database":"fire-rtdb","@firebase/database-compat":"fire-rtdb-compat","@firebase/functions":"fire-fn","@firebase/functions-compat":"fire-fn-compat","@firebase/installations":"fire-iid","@firebase/installations-compat":"fire-iid-compat","@firebase/messaging":"fire-fcm","@firebase/messaging-compat":"fire-fcm-compat","@firebase/performance":"fire-perf","@firebase/performance-compat":"fire-perf-compat","@firebase/remote-config":"fire-rc","@firebase/remote-config-compat":"fire-rc-compat","@firebase/storage":"fire-gcs","@firebase/storage-compat":"fire-gcs-compat","@firebase/firestore":"fire-fst","@firebase/firestore-compat":"fire-fst-compat","fire-js":"fire-js",firebase:"fire-js-all"},ie=new Map,ne=new Map;function oe(e,t){try{e.container.addComponent(t)}catch(s){te.debug(`Component ${t.name} failed to register with FirebaseApp ${e.name}`,s)}}function re(e){const t=e.name;if(ne.has(t))return te.debug(`There were multiple attempts to register component ${t}.`),!1;ne.set(t,e);for(const t of ie.values())oe(t,e);return!0}function le(e,t){const s=e.container.getProvider("heartbeat").getImmediate({optional:!0});return s&&s.triggerHeartbeat(),e.container.getProvider(t)}const ce=new v("app","Firebase",{"no-app":"No Firebase App '{$appName}' has been created - call Firebase App.initializeApp()","bad-app-name":"Illegal App name: '{$appName}","duplicate-app":"Firebase App named '{$appName}' already exists with different options or config","app-deleted":"Firebase App named '{$appName}' already deleted","no-options":"Need to provide options, when not being deployed to hosting via source.","invalid-app-argument":"firebase.{$appName}() takes either no argument or a Firebase App instance.","invalid-log-argument":"First argument to `onLog` must be null or a function.","idb-open":"Error thrown when opening IndexedDB. Original error: {$originalErrorMessage}.","idb-get":"Error thrown when reading from IndexedDB. Original error: {$originalErrorMessage}.","idb-set":"Error thrown when writing to IndexedDB. Original error: {$originalErrorMessage}.","idb-delete":"Error thrown when deleting from IndexedDB. Original error: {$originalErrorMessage}."});class de{constructor(e,t,s){this._isDeleted=!1,this._options=Object.assign({},e),this._config=Object.assign({},t),this._name=t.name,this._automaticDataCollectionEnabled=t.automaticDataCollectionEnabled,this._container=s,this.container.addComponent(new S("app",(()=>this),"PUBLIC"))}get automaticDataCollectionEnabled(){return this.checkDestroyed(),this._automaticDataCollectionEnabled}set automaticDataCollectionEnabled(e){this.checkDestroyed(),this._automaticDataCollectionEnabled=e}get name(){return this.checkDestroyed(),this._name}get options(){return this.checkDestroyed(),this._options}get config(){return this.checkDestroyed(),this._config}get container(){return this._container}get isDeleted(){return this._isDeleted}set isDeleted(e){this._isDeleted=e}checkDestroyed(){if(this.isDeleted)throw ce.create("app-deleted",{appName:this._name})}}function he(e,t={}){let s=e;if("object"!=typeof t){t={name:t}}const a=Object.assign({name:se,automaticDataCollectionEnabled:!1},t),i=a.name;if("string"!=typeof i||!i)throw ce.create("bad-app-name",{appName:String(i)});var n;if(s||(s=null===(n=_())||void 0===n?void 0:n.config),!s)throw ce.create("no-options");const o=ie.get(i);if(o){if(y(s,o.options)&&y(a,o.config))return o;throw ce.create("duplicate-app",{appName:i})}const r=new T(i);for(const e of ne.values())r.addComponent(e);const l=new de(s,a,r);return ie.set(i,l),l}function pe(e,t,s){var a;let i=null!==(a=ae[e])&&void 0!==a?a:e;s&&(i+=`-${s}`);const n=i.match(/\s|\//),o=t.match(/\s|\//);if(n||o){const e=[`Unable to register library "${i}" with version "${t}":`];return n&&e.push(`library name "${i}" contains illegal characters (whitespace or "/")`),n&&o&&e.push("and"),o&&e.push(`version name "${t}" contains illegal characters (whitespace or "/")`),void te.warn(e.join(" "))}re(new S(`${i}-version`,(()=>({library:i,version:t})),"VERSION"))}const ue="firebase-heartbeat-store";let me=null;function ge(){return me||(me=W("firebase-heartbeat-database",1,{upgrade:(e,t)=>{if(0===t)e.createObjectStore(ue)}}).catch((e=>{throw ce.create("idb-open",{originalErrorMessage:e.message})}))),me}async function _e(e,t){var s;try{const s=(await ge()).transaction(ue,"readwrite"),a=s.objectStore(ue);return await a.put(t,fe(e)),s.done}catch(e){if(e instanceof b)te.warn(e.message);else{const t=ce.create("idb-set",{originalErrorMessage:null===(s=e)||void 0===s?void 0:s.message});te.warn(t.message)}}}function fe(e){return`${e.name}!${e.options.appId}`}class be{constructor(e){this.container=e,this._heartbeatsCache=null;const t=this.container.getProvider("app").getImmediate();this._storage=new we(t),this._heartbeatsCachePromise=this._storage.read().then((e=>(this._heartbeatsCache=e,e)))}async triggerHeartbeat(){const e=this.container.getProvider("platform-logger").getImmediate().getPlatformInfoString(),t=ve();if(null===this._heartbeatsCache&&(this._heartbeatsCache=await this._heartbeatsCachePromise),this._heartbeatsCache.lastSentHeartbeatDate!==t&&!this._heartbeatsCache.heartbeats.some((e=>e.date===t)))return this._heartbeatsCache.heartbeats.push({date:t,agent:e}),this._heartbeatsCache.heartbeats=this._heartbeatsCache.heartbeats.filter((e=>{const t=new Date(e.date).valueOf();return Date.now()-t<=2592e6})),this._storage.overwrite(this._heartbeatsCache)}async getHeartbeatsHeader(){if(null===this._heartbeatsCache&&await this._heartbeatsCachePromise,null===this._heartbeatsCache||0===this._heartbeatsCache.heartbeats.length)return"";const e=ve(),{heartbeatsToSend:t,unsentEntries:s}=function(e,t=1024){const s=[];let a=e.slice();for(const i of e){const e=s.find((e=>e.agent===i.agent));if(e){if(e.dates.push(i.date),ye(s)>t){e.dates.pop();break}}else if(s.push({agent:i.agent,dates:[i.date]}),ye(s)>t){s.pop();break}a=a.slice(1)}return{heartbeatsToSend:s,unsentEntries:a}}(this._heartbeatsCache.heartbeats),a=h(JSON.stringify({version:2,heartbeats:t}));return this._heartbeatsCache.lastSentHeartbeatDate=e,s.length>0?(this._heartbeatsCache.heartbeats=s,await this._storage.overwrite(this._heartbeatsCache)):(this._heartbeatsCache.heartbeats=[],this._storage.overwrite(this._heartbeatsCache)),a}}function ve(){return(new Date).toISOString().substring(0,10)}class we{constructor(e){this.app=e,this._canUseIndexedDBPromise=this.runIndexedDBEnvironmentCheck()}async runIndexedDBEnvironmentCheck(){return!!u()&&m().then((()=>!0)).catch((()=>!1))}async read(){if(await this._canUseIndexedDBPromise){return await async function(e){var t;try{return(await ge()).transaction(ue).objectStore(ue).get(fe(e))}catch(e){if(e instanceof b)te.warn(e.message);else{const s=ce.create("idb-get",{originalErrorMessage:null===(t=e)||void 0===t?void 0:t.message});te.warn(s.message)}}}(this.app)||{heartbeats:[]}}return{heartbeats:[]}}async overwrite(e){var t;if(await this._canUseIndexedDBPromise){const s=await this.read();return _e(this.app,{lastSentHeartbeatDate:null!==(t=e.lastSentHeartbeatDate)&&void 0!==t?t:s.lastSentHeartbeatDate,heartbeats:e.heartbeats})}}async add(e){var t;if(await this._canUseIndexedDBPromise){const s=await this.read();return _e(this.app,{lastSentHeartbeatDate:null!==(t=e.lastSentHeartbeatDate)&&void 0!==t?t:s.lastSentHeartbeatDate,heartbeats:[...s.heartbeats,...e.heartbeats]})}}}function ye(e){return h(JSON.stringify({version:2,heartbeats:e})).length}var Ee;Ee="",re(new S("platform-logger",(e=>new J(e)),"PRIVATE")),re(new S("heartbeat",(e=>new be(e)),"PRIVATE")),pe(Z,ee,Ee),pe(Z,ee,"esm2017"),pe("fire-js","");pe("firebase","9.14.0","app");const Ce="@firebase/installations",Se="0.5.16",Me=1e4,ke="w:0.5.16",Te="FIS_v2",Ae=36e5,Ne=new v("installations","Installations",{"missing-app-config-values":'Missing App configuration value: "{$valueName}"',"not-registered":"Firebase Installation is not registered.","installation-not-found":"Firebase Installation not found.","request-failed":'{$requestName} request failed with error "{$serverCode} {$serverStatus}: {$serverMessage}"',"app-offline":"Could not process request. Application offline.","delete-pending-registration":"Can't delete installation while there is a pending registration request."});function De(e){return e instanceof b&&e.code.includes("request-failed")}function Ie({projectId:e}){return`https://firebaseinstallations.googleapis.com/v1/projects/${e}/installations`}function Pe(e){return{token:e.token,requestStatus:2,expiresIn:(t=e.expiresIn,Number(t.replace("s","000"))),creationTime:Date.now()};var t}async function Re(e,t){const s=(await t.json()).error;return Ne.create("request-failed",{requestName:e,serverCode:s.code,serverMessage:s.message,serverStatus:s.status})}function Fe({apiKey:e}){return new Headers({"Content-Type":"application/json",Accept:"application/json","x-goog-api-key":e})}function Ue(e,{refreshToken:t}){const s=Fe(e);return s.append("Authorization",function(e){return`FIS_v2 ${e}`}(t)),s}async function xe(e){const t=await e();return t.status>=500&&t.status<600?e():t}function Le(e){return new Promise((t=>{setTimeout(t,e)}))}const Oe=/^[cdef][\w-]{21}$/;function qe(){try{const e=new Uint8Array(17);(self.crypto||self.msCrypto).getRandomValues(e),e[0]=112+e[0]%16;const t=function(e){return(t=e,btoa(String.fromCharCode(...t)).replace(/\+/g,"-").replace(/\//g,"_")).substr(0,22);var t}(e);return Oe.test(t)?t:""}catch(e){return""}}function Be(e){return`${e.appName}!${e.appId}`}const je=new Map;function ze(e,t){const s=Be(e);He(s,t),function(e,t){const s=Ke();s&&s.postMessage({key:e,fid:t});We()}(s,t)}function He(e,t){const s=je.get(e);if(s)for(const e of s)e(t)}let Ve=null;function Ke(){return!Ve&&"BroadcastChannel"in self&&(Ve=new BroadcastChannel("[Firebase] FID Change"),Ve.onmessage=e=>{He(e.data.key,e.data.fid)}),Ve}function We(){0===je.size&&Ve&&(Ve.close(),Ve=null)}const Ge="firebase-installations-store";let $e=null;function Qe(){return $e||($e=W("firebase-installations-database",1,{upgrade:(e,t)=>{if(0===t)e.createObjectStore(Ge)}})),$e}async function Xe(e,t){const s=Be(e),a=(await Qe()).transaction(Ge,"readwrite"),i=a.objectStore(Ge),n=await i.get(s);return await i.put(t,s),await a.done,n&&n.fid===t.fid||ze(e,t.fid),t}async function Ye(e){const t=Be(e),s=(await Qe()).transaction(Ge,"readwrite");await s.objectStore(Ge).delete(t),await s.done}async function Je(e,t){const s=Be(e),a=(await Qe()).transaction(Ge,"readwrite"),i=a.objectStore(Ge),n=await i.get(s),o=t(n);return void 0===o?await i.delete(s):await i.put(o,s),await a.done,!o||n&&n.fid===o.fid||ze(e,o.fid),o}async function Ze(e){let t;const s=await Je(e.appConfig,(s=>{const a=function(e){return st(e||{fid:qe(),registrationStatus:0})}(s),i=function(e,t){if(0===t.registrationStatus){if(!navigator.onLine){return{installationEntry:t,registrationPromise:Promise.reject(Ne.create("app-offline"))}}const s={fid:t.fid,registrationStatus:1,registrationTime:Date.now()},a=async function(e,t){try{const s=await async function({appConfig:e,heartbeatServiceProvider:t},{fid:s}){const a=Ie(e),i=Fe(e),n=t.getImmediate({optional:!0});if(n){const e=await n.getHeartbeatsHeader();e&&i.append("x-firebase-client",e)}const o={fid:s,authVersion:Te,appId:e.appId,sdkVersion:ke},r={method:"POST",headers:i,body:JSON.stringify(o)},l=await xe((()=>fetch(a,r)));if(l.ok){const e=await l.json();return{fid:e.fid||s,registrationStatus:2,refreshToken:e.refreshToken,authToken:Pe(e.authToken)}}throw await Re("Create Installation",l)}(e,t);return Xe(e.appConfig,s)}catch(s){throw De(s)&&409===s.customData.serverCode?await Ye(e.appConfig):await Xe(e.appConfig,{fid:t.fid,registrationStatus:0}),s}}(e,s);return{installationEntry:s,registrationPromise:a}}return 1===t.registrationStatus?{installationEntry:t,registrationPromise:et(e)}:{installationEntry:t}}(e,a);return t=i.registrationPromise,i.installationEntry}));return""===s.fid?{installationEntry:await t}:{installationEntry:s,registrationPromise:t}}async function et(e){let t=await tt(e.appConfig);for(;1===t.registrationStatus;)await Le(100),t=await tt(e.appConfig);if(0===t.registrationStatus){const{installationEntry:t,registrationPromise:s}=await Ze(e);return s||t}return t}function tt(e){return Je(e,(e=>{if(!e)throw Ne.create("installation-not-found");return st(e)}))}function st(e){return 1===(t=e).registrationStatus&&t.registrationTime+Me<Date.now()?{fid:e.fid,registrationStatus:0}:e;var t}async function at({appConfig:e,heartbeatServiceProvider:t},s){const a=function(e,{fid:t}){return`${Ie(e)}/${t}/authTokens:generate`}(e,s),i=Ue(e,s),n=t.getImmediate({optional:!0});if(n){const e=await n.getHeartbeatsHeader();e&&i.append("x-firebase-client",e)}const o={installation:{sdkVersion:ke,appId:e.appId}},r={method:"POST",headers:i,body:JSON.stringify(o)},l=await xe((()=>fetch(a,r)));if(l.ok){return Pe(await l.json())}throw await Re("Generate Auth Token",l)}async function it(e,t=!1){let s;const a=await Je(e.appConfig,(a=>{if(!ot(a))throw Ne.create("not-registered");const i=a.authToken;if(!t&&function(e){return 2===e.requestStatus&&!function(e){const t=Date.now();return t<e.creationTime||e.creationTime+e.expiresIn<t+Ae}(e)}(i))return a;if(1===i.requestStatus)return s=async function(e,t){let s=await nt(e.appConfig);for(;1===s.authToken.requestStatus;)await Le(100),s=await nt(e.appConfig);const a=s.authToken;return 0===a.requestStatus?it(e,t):a}(e,t),a;{if(!navigator.onLine)throw Ne.create("app-offline");const t=function(e){const t={requestStatus:1,requestTime:Date.now()};return Object.assign(Object.assign({},e),{authToken:t})}(a);return s=async function(e,t){try{const s=await at(e,t),a=Object.assign(Object.assign({},t),{authToken:s});return await Xe(e.appConfig,a),s}catch(s){if(!De(s)||401!==s.customData.serverCode&&404!==s.customData.serverCode){const s=Object.assign(Object.assign({},t),{authToken:{requestStatus:0}});await Xe(e.appConfig,s)}else await Ye(e.appConfig);throw s}}(e,t),t}}));return s?await s:a.authToken}function nt(e){return Je(e,(e=>{if(!ot(e))throw Ne.create("not-registered");const t=e.authToken;return 1===(s=t).requestStatus&&s.requestTime+Me<Date.now()?Object.assign(Object.assign({},e),{authToken:{requestStatus:0}}):e;var s}))}function ot(e){return void 0!==e&&2===e.registrationStatus}async function rt(e,t=!1){const s=e;await async function(e){const{registrationPromise:t}=await Ze(e);t&&await t}(s);return(await it(s,t)).token}function lt(e){return Ne.create("missing-app-config-values",{valueName:e})}const ct="installations",dt=e=>{const t=le(e.getProvider("app").getImmediate(),ct).getImmediate();return{getId:()=>async function(e){const t=e,{installationEntry:s,registrationPromise:a}=await Ze(t);return a?a.catch(console.error):it(t).catch(console.error),s.fid}(t),getToken:e=>rt(t,e)}};re(new S(ct,(e=>{const t=e.getProvider("app").getImmediate(),s=function(e){if(!e||!e.options)throw lt("App Configuration");if(!e.name)throw lt("App Name");const t=["projectId","apiKey","appId"];for(const s of t)if(!e.options[s])throw lt(s);return{appName:e.name,projectId:e.options.projectId,apiKey:e.options.apiKey,appId:e.options.appId}}(t);return{app:t,appConfig:s,heartbeatServiceProvider:le(t,"heartbeat"),_delete:()=>Promise.resolve()}}),"PUBLIC")),re(new S("installations-internal",dt,"PRIVATE")),pe(Ce,Se),pe(Ce,Se,"esm2017");const ht="BDOU99-h67HcA6JeFXHbSNMu7e2yNNu3RzoMj8TM4W88jITfq7ZmPvIM1Iv-4_l2LxQcYwhqby2xGpWwzjfAnG4",pt="google.c.a.c_id";var ut,mt;function gt(e){const t=new Uint8Array(e);return btoa(String.fromCharCode(...t)).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}function _t(e){const t=(e+"=".repeat((4-e.length%4)%4)).replace(/\-/g,"+").replace(/_/g,"/"),s=atob(t),a=new Uint8Array(s.length);for(let e=0;e<s.length;++e)a[e]=s.charCodeAt(e);return a}!function(e){e[e.DATA_MESSAGE=1]="DATA_MESSAGE",e[e.DISPLAY_NOTIFICATION=3]="DISPLAY_NOTIFICATION"}(ut||(ut={})),function(e){e.PUSH_RECEIVED="push-received",e.NOTIFICATION_CLICKED="notification-clicked"}(mt||(mt={}));const ft="fcm_token_details_db",bt="fcm_token_object_Store";const vt="firebase-messaging-store";let wt=null;function yt(){return wt||(wt=W("firebase-messaging-database",1,{upgrade:(e,t)=>{if(0===t)e.createObjectStore(vt)}})),wt}async function Et(e){const t=St(e),s=await yt(),a=await s.transaction(vt).objectStore(vt).get(t);if(a)return a;{const t=await async function(e){if("databases"in indexedDB){const e=(await indexedDB.databases()).map((e=>e.name));if(!e.includes(ft))return null}let t=null;return(await W(ft,5,{upgrade:async(s,a,i,n)=>{var o;if(a<2)return;if(!s.objectStoreNames.contains(bt))return;const r=n.objectStore(bt),l=await r.index("fcmSenderId").get(e);if(await r.clear(),l)if(2===a){const e=l;if(!e.auth||!e.p256dh||!e.endpoint)return;t={token:e.fcmToken,createTime:null!==(o=e.createTime)&&void 0!==o?o:Date.now(),subscriptionOptions:{auth:e.auth,p256dh:e.p256dh,endpoint:e.endpoint,swScope:e.swScope,vapidKey:"string"==typeof e.vapidKey?e.vapidKey:gt(e.vapidKey)}}}else if(3===a){const e=l;t={token:e.fcmToken,createTime:e.createTime,subscriptionOptions:{auth:gt(e.auth),p256dh:gt(e.p256dh),endpoint:e.endpoint,swScope:e.swScope,vapidKey:gt(e.vapidKey)}}}else if(4===a){const e=l;t={token:e.fcmToken,createTime:e.createTime,subscriptionOptions:{auth:gt(e.auth),p256dh:gt(e.p256dh),endpoint:e.endpoint,swScope:e.swScope,vapidKey:gt(e.vapidKey)}}}}})).close(),await G(ft),await G("fcm_vapid_details_db"),await G("undefined"),function(e){if(!e||!e.subscriptionOptions)return!1;const{subscriptionOptions:t}=e;return"number"==typeof e.createTime&&e.createTime>0&&"string"==typeof e.token&&e.token.length>0&&"string"==typeof t.auth&&t.auth.length>0&&"string"==typeof t.p256dh&&t.p256dh.length>0&&"string"==typeof t.endpoint&&t.endpoint.length>0&&"string"==typeof t.swScope&&t.swScope.length>0&&"string"==typeof t.vapidKey&&t.vapidKey.length>0}(t)?t:null}(e.appConfig.senderId);if(t)return await Ct(e,t),t}}async function Ct(e,t){const s=St(e),a=(await yt()).transaction(vt,"readwrite");return await a.objectStore(vt).put(t,s),await a.done,t}function St({appConfig:e}){return e.appId}const Mt=new v("messaging","Messaging",{"missing-app-config-values":'Missing App configuration value: "{$valueName}"',"only-available-in-window":"This method is available in a Window context.","only-available-in-sw":"This method is available in a service worker context.","permission-default":"The notification permission was not granted and dismissed instead.","permission-blocked":"The notification permission was not granted and blocked instead.","unsupported-browser":"This browser doesn't support the API's required to use the Firebase SDK.","indexed-db-unsupported":"This browser doesn't support indexedDb.open() (ex. Safari iFrame, Firefox Private Browsing, etc)","failed-service-worker-registration":"We are unable to register the default service worker. {$browserErrorMessage}","token-subscribe-failed":"A problem occurred while subscribing the user to FCM: {$errorInfo}","token-subscribe-no-token":"FCM returned no token when subscribing the user to push.","token-unsubscribe-failed":"A problem occurred while unsubscribing the user from FCM: {$errorInfo}","token-update-failed":"A problem occurred while updating the user from FCM: {$errorInfo}","token-update-no-token":"FCM returned no token when updating the user to push.","use-sw-after-get-token":"The useServiceWorker() method may only be called once and must be called before calling getToken() to ensure your service worker is used.","invalid-sw-registration":"The input to useServiceWorker() must be a ServiceWorkerRegistration.","invalid-bg-handler":"The input to setBackgroundMessageHandler() must be a function.","invalid-vapid-key":"The public VAPID key must be a string.","use-vapid-key-after-get-token":"The usePublicVapidKey() method may only be called once and must be called before calling getToken() to ensure your VAPID key is used."});async function kt(e,t){var s;const a={method:"DELETE",headers:await At(e)};try{const s=await fetch(`${Tt(e.appConfig)}/${t}`,a),i=await s.json();if(i.error){const e=i.error.message;throw Mt.create("token-unsubscribe-failed",{errorInfo:e})}}catch(e){throw Mt.create("token-unsubscribe-failed",{errorInfo:null===(s=e)||void 0===s?void 0:s.toString()})}}function Tt({projectId:e}){return`https://fcmregistrations.googleapis.com/v1/projects/${e}/registrations`}async function At({appConfig:e,installations:t}){const s=await t.getToken();return new Headers({"Content-Type":"application/json",Accept:"application/json","x-goog-api-key":e.apiKey,"x-goog-firebase-installations-auth":`FIS ${s}`})}function Nt({p256dh:e,auth:t,endpoint:s,vapidKey:a}){const i={web:{endpoint:s,auth:t,p256dh:e}};return a!==ht&&(i.web.applicationPubKey=a),i}async function Dt(e){const t=await async function(e,t){const s=await e.pushManager.getSubscription();if(s)return s;return e.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:_t(t)})}(e.swRegistration,e.vapidKey),s={vapidKey:e.vapidKey,swScope:e.swRegistration.scope,endpoint:t.endpoint,auth:gt(t.getKey("auth")),p256dh:gt(t.getKey("p256dh"))},a=await Et(e.firebaseDependencies);if(a){if(function(e,t){const s=t.vapidKey===e.vapidKey,a=t.endpoint===e.endpoint,i=t.auth===e.auth,n=t.p256dh===e.p256dh;return s&&a&&i&&n}(a.subscriptionOptions,s))return Date.now()>=a.createTime+6048e5?async function(e,t){try{const s=await async function(e,t){var s;const a=await At(e),i=Nt(t.subscriptionOptions),n={method:"PATCH",headers:a,body:JSON.stringify(i)};let o;try{const s=await fetch(`${Tt(e.appConfig)}/${t.token}`,n);o=await s.json()}catch(e){throw Mt.create("token-update-failed",{errorInfo:null===(s=e)||void 0===s?void 0:s.toString()})}if(o.error){const e=o.error.message;throw Mt.create("token-update-failed",{errorInfo:e})}if(!o.token)throw Mt.create("token-update-no-token");return o.token}(e.firebaseDependencies,t),a=Object.assign(Object.assign({},t),{token:s,createTime:Date.now()});return await Ct(e.firebaseDependencies,a),s}catch(t){throw await It(e),t}}(e,{token:a.token,createTime:Date.now(),subscriptionOptions:s}):a.token;try{await kt(e.firebaseDependencies,a.token)}catch(e){console.warn(e)}return Pt(e.firebaseDependencies,s)}return Pt(e.firebaseDependencies,s)}async function It(e){const t=await Et(e.firebaseDependencies);t&&(await kt(e.firebaseDependencies,t.token),await async function(e){const t=St(e),s=(await yt()).transaction(vt,"readwrite");await s.objectStore(vt).delete(t),await s.done}(e.firebaseDependencies));const s=await e.swRegistration.pushManager.getSubscription();return!s||s.unsubscribe()}async function Pt(e,t){const s=await async function(e,t){var s;const a=await At(e),i=Nt(t),n={method:"POST",headers:a,body:JSON.stringify(i)};let o;try{const t=await fetch(Tt(e.appConfig),n);o=await t.json()}catch(e){throw Mt.create("token-subscribe-failed",{errorInfo:null===(s=e)||void 0===s?void 0:s.toString()})}if(o.error){const e=o.error.message;throw Mt.create("token-subscribe-failed",{errorInfo:e})}if(!o.token)throw Mt.create("token-subscribe-no-token");return o.token}(e,t),a={token:s,createTime:Date.now(),subscriptionOptions:t};return await Ct(e,a),a.token}function Rt(e){const t={from:e.from,collapseKey:e.collapse_key,messageId:e.fcmMessageId};return function(e,t){if(!t.notification)return;e.notification={};const s=t.notification.title;s&&(e.notification.title=s);const a=t.notification.body;a&&(e.notification.body=a);const i=t.notification.image;i&&(e.notification.image=i);const n=t.notification.icon;n&&(e.notification.icon=n)}(t,e),function(e,t){if(!t.data)return;e.data=t.data}(t,e),function(e,t){var s,a,i,n,o;if(!t.fcmOptions&&!(null===(s=t.notification)||void 0===s?void 0:s.click_action))return;e.fcmOptions={};const r=null!==(i=null===(a=t.fcmOptions)||void 0===a?void 0:a.link)&&void 0!==i?i:null===(n=t.notification)||void 0===n?void 0:n.click_action;r&&(e.fcmOptions.link=r);const l=null===(o=t.fcmOptions)||void 0===o?void 0:o.analytics_label;l&&(e.fcmOptions.analyticsLabel=l)}(t,e),t}function Ft(e,t){const s=[];for(let a=0;a<e.length;a++)s.push(e.charAt(a)),a<t.length&&s.push(t.charAt(a));return s.join("")}function Ut(e){return Mt.create("missing-app-config-values",{valueName:e})}Ft("hts/frbslgigp.ogepscmv/ieo/eaylg","tp:/ieaeogn-agolai.o/1frlglgc/o"),Ft("AzSCbw63g1R0nCw85jG8","Iaya3yLKwmgvh7cF0q4");class xt{constructor(e,t,s){this.deliveryMetricsExportedToBigQueryEnabled=!1,this.onBackgroundMessageHandler=null,this.onMessageHandler=null,this.logEvents=[],this.isLogServiceStarted=!1;const a=function(e){if(!e||!e.options)throw Ut("App Configuration Object");if(!e.name)throw Ut("App Name");const t=["projectId","apiKey","appId","messagingSenderId"],{options:s}=e;for(const e of t)if(!s[e])throw Ut(e);return{appName:e.name,projectId:s.projectId,apiKey:s.apiKey,appId:s.appId,senderId:s.messagingSenderId}}(e);this.firebaseDependencies={app:e,appConfig:a,installations:t,analyticsProvider:s}}_delete(){return Promise.resolve()}}async function Lt(e){var t;try{e.swRegistration=await navigator.serviceWorker.register("/firebase-messaging-sw.js",{scope:"/firebase-cloud-messaging-push-scope"}),e.swRegistration.update().catch((()=>{}))}catch(e){throw Mt.create("failed-service-worker-registration",{browserErrorMessage:null===(t=e)||void 0===t?void 0:t.message})}}async function Ot(e,t){if(!navigator)throw Mt.create("only-available-in-window");if("default"===Notification.permission&&await Notification.requestPermission(),"granted"!==Notification.permission)throw Mt.create("permission-blocked");return await async function(e,t){t?e.vapidKey=t:e.vapidKey||(e.vapidKey=ht)}(e,null==t?void 0:t.vapidKey),await async function(e,t){if(t||e.swRegistration||await Lt(e),t||!e.swRegistration){if(!(t instanceof ServiceWorkerRegistration))throw Mt.create("invalid-sw-registration");e.swRegistration=t}}(e,null==t?void 0:t.serviceWorkerRegistration),Dt(e)}async function qt(e,t,s){const a=function(e){switch(e){case mt.NOTIFICATION_CLICKED:return"notification_open";case mt.PUSH_RECEIVED:return"notification_foreground";default:throw new Error}}(t);(await e.firebaseDependencies.analyticsProvider.get()).logEvent(a,{message_id:s["google.c.a.c_id"],message_name:s["google.c.a.c_l"],message_time:s["google.c.a.ts"],message_device_time:Math.floor(Date.now()/1e3)})}async function Bt(e,t){const s=t.data;if(!s.isFirebaseMessaging)return;e.onMessageHandler&&s.messageType===mt.PUSH_RECEIVED&&("function"==typeof e.onMessageHandler?e.onMessageHandler(Rt(s)):e.onMessageHandler.next(Rt(s)));const a=s.data;var i;"object"==typeof(i=a)&&i&&pt in i&&"1"===a["google.c.a.e"]&&await qt(e,s.messageType,a)}const jt="@firebase/messaging",zt="0.11.0",Ht=e=>{const t=e.getProvider("messaging").getImmediate();return{getToken:e=>Ot(t,e)}};async function Vt(){try{await m()}catch(e){return!1}return"undefined"!=typeof window&&u()&&!("undefined"==typeof navigator||!navigator.cookieEnabled)&&"serviceWorker"in navigator&&"PushManager"in window&&"Notification"in window&&"fetch"in window&&ServiceWorkerRegistration.prototype.hasOwnProperty("showNotification")&&PushSubscription.prototype.hasOwnProperty("getKey")}function Kt(e=function(e="[DEFAULT]"){const t=ie.get(e);if(!t&&e===se)return he();if(!t)throw ce.create("no-app",{appName:e});return t}()){return Vt().then((e=>{if(!e)throw Mt.create("unsupported-browser")}),(e=>{throw Mt.create("indexed-db-unsupported")})),le(C(e),"messaging").getImmediate()}async function Wt(e,t){return Ot(e=C(e),t)}function Gt(e){return async function(e){if(!navigator)throw Mt.create("only-available-in-window");return e.swRegistration||await Lt(e),It(e)}(e=C(e))}function $t(e,t){return function(e,t){if(!navigator)throw Mt.create("only-available-in-window");return e.onMessageHandler=t,()=>{e.onMessageHandler=null}}(e=C(e),t)}re(new S("messaging",(e=>{const t=new xt(e.getProvider("app").getImmediate(),e.getProvider("installations-internal").getImmediate(),e.getProvider("analytics-internal"));return navigator.serviceWorker.addEventListener("message",(e=>Bt(t,e))),t}),"PUBLIC")),re(new S("messaging-internal",Ht,"PRIVATE")),pe(jt,zt),pe(jt,zt,"esm2017");const Qt=Tinode;class Xt extends i().PureComponent{render(){return this.props.visible?i().createElement("div",{className:"alert-container"},i().createElement("div",{className:"alert"},i().createElement("div",{className:"title"},this.props.title),i().createElement("div",{className:"content"},this.props.content),i().createElement("div",{className:"dialog-buttons"},this.props.onReject?i().createElement("button",{className:"outline",onClick:this.props.onReject},this.props.reject||i().createElement(r.FormattedMessage,{id:"button_cancel",defaultMessage:[{type:0,value:"Cancel"}]})):null,i().createElement("button",{className:"primary",onClick:this.props.onConfirm},this.props.confirm||i().createElement(r.FormattedMessage,{id:"button_ok",defaultMessage:[{type:0,value:"OK"}]}))))):null}}var Yt=s(962);const Jt=(0,r.defineMessages)({info:{id:"menu_item_info",defaultMessage:[{type:0,value:"Info"}]},clear_messages:{id:"menu_item_clear_messages",defaultMessage:[{type:0,value:"Clear messages"}]},clear_for_all:{id:"menu_item_clear_messages_for_all",defaultMessage:[{type:0,value:"Clear for All"}]},delete:{id:"menu_item_delete",defaultMessage:[{type:0,value:"Delete"}]},delete_for_all:{id:"menu_item_delete_for_all",defaultMessage:[{type:0,value:"Delete for All"}]},send_retry:{id:"menu_item_send_retry",defaultMessage:[{type:0,value:"Retry"}]},mute:{id:"menu_item_mute",defaultMessage:[{type:0,value:"Mute"}]},unmute:{id:"menu_item_unmute",defaultMessage:[{type:0,value:"Unmute"}]},reply:{id:"menu_item_reply",defaultMessage:[{type:0,value:"Reply"}]},forward:{id:"menu_item_forward",defaultMessage:[{type:0,value:"Forward"}]},topic_delete:{id:"menu_item_delete_topic",defaultMessage:[{type:0,value:"Delete"}]},topic_delete_warning:{id:"topic_delete_warning",defaultMessage:[{type:0,value:"Are you sure you want to delete this conversation? It cannot be undone."}]},delete_messages_warning:{id:"delete_messages_warning",defaultMessage:[{type:0,value:"Are you sure you want to delete all messages for everyone? It cannot be undone."}]},unblock:{id:"menu_item_unblock",defaultMessage:[{type:0,value:"Unblock"}]},block:{id:"menu_item_block",defaultMessage:[{type:0,value:"Block"}]},topic_block_warning:{id:"topic_block_warning",defaultMessage:[{type:0,value:"Are you sure you want to block this conversation?"}]},member_delete:{id:"menu_item_member_delete",defaultMessage:[{type:0,value:"Remove"}]},archive:{id:"menu_item_archive_topic",defaultMessage:[{type:0,value:"Archive"}]},unarchive:{id:"menu_item_restore_topic",defaultMessage:[{type:0,value:"Restore"}]},edit_permissions:{id:"menu_item_edit_permissions",defaultMessage:[{type:0,value:"Edit permissions"}]},clear_messages_warning:{id:"clear_messages_warning",defaultMessage:[{type:0,value:"Are you sure you want to clear all messages? It cannot be undone."}]}});class Zt extends i().Component{constructor(e){super(e),this.selfRef=i().createRef();const{formatMessage:t}=e.intl;this.handlePageClick=this.handlePageClick.bind(this),this.handleEscapeKey=this.handleEscapeKey.bind(this),this.handleClick=this.handleClick.bind(this),this.MenuItems={topic_info:{id:"topic_info",title:t(Jt.info),handler:null},messages_clear:{id:"messages_clear",title:t(Jt.clear_messages),handler:(s,a)=>e.onShowAlert(t(Jt.clear_messages),t(Jt.clear_messages_warning),(e=>{this.deleteMessages(!0,!1,s,a)}),null,!0,null)},messages_clear_hard:{id:"messages_clear_hard",title:t(Jt.clear_for_all),handler:(s,a)=>e.onShowAlert(t(Jt.clear_for_all),t(Jt.delete_messages_warning),(e=>this.deleteMessages(!0,!0,s,a)),null,!0,null)},message_delete:{id:"message_delete",title:t(Jt.delete),handler:(e,t)=>this.deleteMessages(!1,!1,e,t)},message_delete_hard:{id:"message_delete_hard",title:t(Jt.delete_for_all),handler:(e,t)=>this.deleteMessages(!1,!0,e,t)},menu_item_send_retry:{id:"menu_item_send_retry",title:t(Jt.send_retry),handler:(e,t)=>this.retryMessage(e,t)},menu_item_reply:{id:"menu_item_reply",title:t(Jt.reply),handler:(e,t)=>this.replyToMessage(e,t)},menu_item_forward:{id:"menu_item_forward",title:t(Jt.forward),handler:()=>{}},topic_unmute:{id:"topic_unmute",title:t(Jt.unmute),handler:this.topicPermissionSetter.bind(this,"+P")},topic_mute:{id:"topic_mute",title:t(Jt.mute),handler:this.topicPermissionSetter.bind(this,"-P")},topic_unblock:{id:"topic_unblock",title:t(Jt.unblock),handler:this.topicPermissionSetter.bind(this,"+JP")},topic_block:{id:"topic_block",title:t(Jt.block),handler:(s,a)=>e.onShowAlert(t(Jt.block),t(Jt.topic_block_warning),(()=>this.topicPermissionSetter("-JP",s,a).then((e=>(this.props.onTopicRemoved(s.topicName),e)))),null,!0,null)},topic_delete:{id:"topic_delete",title:t(Jt.topic_delete),handler:(s,a)=>e.onShowAlert(t(Jt.topic_delete),t(Jt.topic_delete_warning),(()=>{const e=this.props.tinode.getTopic(s.topicName);if(e)return e.delTopic(!0).catch((e=>{a&&a(e.message,"err")}));console.warn("Topic not found: ",s.topicName)}),null,!0,null)},topic_archive:{id:"topic_archive",title:t(Jt.archive),handler:(e,t)=>{const s=this.props.tinode.getTopic(e.topicName);if(s)return s.archive(!0).catch((e=>{t&&t(e.message,"err")}));console.warn("Topic not found: ",e.topicName)}},topic_restore:{id:"topic_restore",title:t(Jt.unarchive),handler:(e,t)=>{const s=this.props.tinode.getTopic(e.topicName);if(s)return s.archive(!1).catch((e=>{t&&t(e.message,"err")}));console.warn("Topic not found: ",e.topicName)}},permissions:{id:"permissions",title:t(Jt.edit_permissions),handler:null},member_delete:{id:"member_delete",title:t(Jt.member_delete),handler:(e,t)=>{const s=this.props.tinode.getTopic(e.topicName);if(s&&e.user)return s.delSubscription(e.user).catch((e=>{t&&t(e.message,"err")}));console.warn("Topic or user not found: '"+e.topicName+"', '"+e.user+"'")}},member_mute:{id:"member_mute",title:t(Jt.mute),handler:this.topicPermissionSetter.bind(this,"-P")},member_unmute:{id:"member_unmute",title:t(Jt.unmute),handler:this.topicPermissionSetter.bind(this,"+P")},member_block:{id:"member_block",title:t(Jt.block),handler:this.topicPermissionSetter.bind(this,"-JP")},member_unblock:{id:"member_unblock",title:t(Jt.unblock),handler:this.topicPermissionSetter.bind(this,"+JP")}}}componentDidMount(){document.addEventListener("mousedown",this.handlePageClick,!1),document.addEventListener("keyup",this.handleEscapeKey,!1)}componentWillUnmount(){document.removeEventListener("mousedown",this.handlePageClick,!1),document.removeEventListener("keyup",this.handleEscapeKey,!1)}handlePageClick(e){this.selfRef.current.contains(e.target)||(e.preventDefault(),e.stopPropagation(),this.props.hide())}handleEscapeKey(e){27===e.keyCode&&this.props.hide()}handleClick(e){e.preventDefault(),e.stopPropagation(),this.props.hide();let t=this.props.items[e.currentTarget.dataset.id];"string"==typeof t&&(t=this.MenuItems[t]),t?this.props.onAction(t.id,t.handler(this.props.params,this.props.onError),this.props.params):console.error("Invalid menu item ID",e.currentTarget.dataset.id)}deleteMessages(e,t,s,a){const i=this.props.tinode.getTopic(s.topicName);if(!i)return void console.warn("Topic not found: ",s.topicName);if(!e&&i.cancelSend(s.seq))return;return(e?i.delMessagesAll(t):i.delMessagesList([s.seq],t)).catch((e=>{a&&a(e.message,"err")}))}retryMessage(e,t){const s=this.props.tinode.getTopic(e.topicName);if(!s||!s.flushMessage(e.seq))return;const a=s.createMessage(e.content,!1);return s.publishDraft(a).catch((e=>{t&&t(e.message,"err")}))}topicPermissionSetter(e,t,s){const a=this.props.tinode.getTopic(t.topicName);if(!a)return void console.warn("Topic not found",t.topicName);let i=a.updateMode(t.user,e);return s&&(i=i.catch((e=>{s(e.message,"err")}))),i}replyToMessage(e,t){e.pickReply(e.seq,e.content,e.userFrom,e.userName,t)}render(){const e=[];let t=0;this.props.items.map((s=>{"string"==typeof s&&(s=this.MenuItems[s]),s&&s.title&&e.push("-"==s.title?i().createElement("li",{className:"separator",key:t}):i().createElement("li",{onClick:this.handleClick,"data-id":t,key:t},s.title)),t++}));const s=12*Yt.o6,a=Yt.o6*(.7+2.5*e.length),n={left:(this.props.bounds.right-this.props.clickAt.x<s?this.props.clickAt.x-this.props.bounds.left-s:this.props.clickAt.x-this.props.bounds.left)+"px",top:(this.props.bounds.bottom-this.props.clickAt.y<a?this.props.clickAt.y-this.props.bounds.top-a:this.props.clickAt.y-this.props.bounds.top)+"px"};return i().createElement("ul",{className:"menu",style:n,ref:this.selfRef},e)}}const es=(0,r.injectIntl)(Zt),ts={muted:"notifications_off",banned:"block",staff:"verified_user"};class ss extends i().PureComponent{render(){let e=null;return this.props.badges&&this.props.badges.length>0?(e=[],this.props.badges.map((t=>{const s=t.color?" "+t.color:"";t.icon?e.push(i().createElement("i",{className:"material-icons as-badge"+s,key:t.key||t.icon},ts[t.icon]||t.icon)):e.push(i().createElement("span",{className:"badge"+s,key:t.key||t.name},t.name))})),i().createElement(i().Fragment,null,e)):null}}var as=s(905);function is(e){const t=document.getElementById("shortcut-icon"),s=document.head||document.getElementsByTagName("head")[0],a=document.createElement("link");a.type="image/png",a.id="shortcut-icon",a.rel="shortcut icon",a.href="img/logo32x32"+(e>0?"a":"")+".png",t&&s.removeChild(t),s.appendChild(a),document.title=(e>0?"("+e+") ":"")+"Tinode"}function ns(e,t,s,a){let i=null;if((e=e&&e.trim())&&(i={fn:e}),"string"==typeof(a=a&&a.trim())&&(i=i||{},i.note=a||Qt.Tinode.DEL_CHAR),t){i=i||{};let e=s;const a=/^data:(image\/[-a-z0-9+.]+)?(;base64)?,/i.exec(t);a?(e=a[1],i.photo={data:t.substring(t.indexOf(",")+1),ref:Qt.Tinode.DEL_CHAR}):i.photo={data:Qt.Tinode.DEL_CHAR,ref:t},i.photo.type=(e||"image/jpeg").substring("image/".length)}return i}function os(e,t){if(e===t)return!0;if(!Array.isArray(e)||!Array.isArray(t))return!1;if(e.length!=t.length)return!1;e.sort(),t.sort();for(let s=0,a=e.length;s<a;s++)if(e[s]!==t[s])return!1;return!0}function rs(e,t){if("string"!=typeof e)return e;if(e=e.replace(/[^\x20-\x7E]/gim,"").trim(),!/^([a-z][a-z0-9+.-]*:|\/\/)/i.test(e))return e;if(/^blob:http/.test(e))return e;const s=Array.isArray(t)?t.join("|"):"http|https";return new RegExp("^(("+s+"):|//)","i").test(e)?e:null}function ls(e,t){if(!e)return null;const s=rs(e);if(s)return s;return new RegExp(`data:${t}/[a-z0-9.-]+;base64,`,"i").test(e.trim())?e:null}function cs(e){switch(e){case Qt.Tinode.MESSAGE_STATUS_SENDING:return{name:"access_time"};case Qt.Tinode.MESSAGE_STATUS_FAILED:return{name:"warning",color:"danger-color"};case Qt.Tinode.MESSAGE_STATUS_SENT:return{name:"done"};case Qt.Tinode.MESSAGE_STATUS_RECEIVED:return{name:"done_all"};case Qt.Tinode.MESSAGE_STATUS_READ:return{name:"done_all",color:"blue"}}return null}function ds(e){let t=!1;return{promise:e instanceof Error?Promise.reject(e):new Promise(((s,a)=>{e.then((e=>t?a({isCanceled:!0}):s(e)),(e=>a(t?{isCanceled:!0}:e)))})),cancel(){t=!0}}}function hs(e,t){return e&&e.substring(0,t)}class ps extends i().PureComponent{render(){let e;if(!0===this.props.avatar){const t=Qt.Tinode.isGroupTopicName(this.props.topic),s=(0,as.Cj)(this.props.topic,t);if(this.props.topic&&this.props.title&&this.props.title.trim()){const t=this.props.title.trim().charAt(0),a="lettertile "+s+(this.props.deleted?" disabled":"");e=i().createElement("div",{className:a},i().createElement("div",null,t))}else{const a="material-icons "+s+(this.props.deleted?" disabled":"");e=t?i().createElement("i",{className:a},"group"):i().createElement("i",{className:a},"person")}}else if(this.props.avatar){const t=this.props.tinode.authorizeURL(ls(this.props.avatar,"image")),s="avatar"+(this.props.deleted?" deleted":"");e=i().createElement("img",{className:s,alt:"avatar",src:t,onError:e=>{e.target.onerror=null,e.target.src="../img/broken_image.png"}})}else e=null;return e}}class us extends i().PureComponent{render(){return this.props.count>0?i().createElement("span",{className:"unread"},this.props.count>9?"9+":this.props.count):null}}var ms=s(861);class gs extends i().PureComponent{render(){const e=["declined","disconnected","missed"].includes(this.props.callState),t="material-icons medium "+(e?"red":"green"),s=this.props.incoming?e?"call_missed":"call_received":e?"call_missed_outgoing":"call_made";let a;if(e)switch(this.props.callState){case"declined":a=i().createElement(r.FormattedMessage,{id:"call_declined",defaultMessage:[{type:0,value:"declined"}]});break;case"missed":a=this.props.incoming?i().createElement(r.FormattedMessage,{id:"call_missed",defaultMessage:[{type:0,value:"missed"}]}):i().createElement(r.FormattedMessage,{id:"call_cancelled",defaultMessage:[{type:0,value:"cancelled"}]});break;default:a=i().createElement(r.FormattedMessage,{id:"call_disconnected",defaultMessage:[{type:0,value:"disconnected"}]})}else a=i().createElement("span",null,(0,as.nH)(this.props.duration/1e3));return i().createElement("div",{className:"call-message"},i().createElement("div",null,i().createElement("i",{className:"material-icons big gray"},"call")),i().createElement("div",{className:"flex-column narrow"},i().createElement("div",null,this.props.incoming?i().createElement(r.FormattedMessage,{id:"calls_incoming",defaultMessage:[{type:0,value:"Incoming call"}]}):i().createElement(r.FormattedMessage,{id:"calls_outgoing",defaultMessage:[{type:0,value:"Outgoing call"}]})),i().createElement("div",{className:"duration"},i().createElement("i",{className:t},s)," ",a)))}}class _s extends i().PureComponent{render(){const e=["declined","disconnected","missed"].includes(this.props.callState),t=this.props.incoming?e?"call_missed":"call_received":e?"call_missed_outgoing":"call_made";let s;if(e)switch(this.props.callState){case"declined":s=i().createElement(r.FormattedMessage,{id:"call_declined",defaultMessage:[{type:0,value:"declined"}]});break;case"missed":s=this.props.incoming?i().createElement(r.FormattedMessage,{id:"call_missed",defaultMessage:[{type:0,value:"missed"}]}):i().createElement(r.FormattedMessage,{id:"call_cancelled",defaultMessage:[{type:0,value:"cancelled"}]});break;default:s=i().createElement(r.FormattedMessage,{id:"call_disconnected",defaultMessage:[{type:0,value:"disconnected"}]})}else s=i().createElement("span",null,(0,as.nH)(this.props.duration/1e3));return i().createElement(i().Fragment,null,i().createElement("div",{className:"composed-material"},i().createElement("i",{className:"material-icons"},"call"),i().createElement("i",{className:"material-icons second"},t))," ",s)}}class fs extends i().PureComponent{constructor(e){super(e),this.state={src:"img/placeholder.png",style:Object.assign({padding:"4px"},this.props.style),className:this.props.className,alt:this.props.alt,onClick:this.props.onClick}}componentDidMount(){this.props.whenDone.promise.then((e=>this.setState({src:e.src,style:{...this.state.style,padding:0}}))).catch((()=>this.setState({src:"img/broken_image.png"})))}componentWillUnmount(){this.props.whenDone.cancel()}componentDidUpdate(e){e.whenDone!=this.props.whenDone&&(this.setState({src:"img/placeholder.png",style:{...this.state.style,padding:"4px"}}),this.props.whenDone.promise.then((e=>this.setState({src:e.src,style:{...this.state.style,padding:0}}))).catch((()=>this.setState({src:"img/broken_image.png"}))))}render(){return i().createElement("img",this.state)}}class bs extends i().PureComponent{render(){return i().createElement("div",{className:"uploader"},i().createElement("div",null,i().createElement("span",{style:{width:100*this.props.progress+"%"}})),this.props.progress<.999?i().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.props.onCancel()}},i().createElement("i",{className:"material-icons"},"close")," ",i().createElement(r.FormattedMessage,{id:"action_cancel",defaultMessage:[{type:0,value:"cancel"}]})):i().createElement(r.FormattedMessage,{id:"upload_finishing",defaultMessage:[{type:0,value:"finishing..."}]}))}}class vs extends i().PureComponent{constructor(e){super(e)}render(){return i().createElement("div",{className:"inline-image"},i().createElement("img",this.props),i().createElement("div",{className:"rounded-container"},i().createElement(bs,{progress:this.props.progress,onCancel:this.props.onCancelUpload})))}}var ws=s(405);const ys=(0,r.defineMessages)({drafty_form:{id:"drafty_form",defaultMessage:[{type:0,value:"Form:"}]},drafty_attachment:{id:"drafty_attachment",defaultMessage:[{type:0,value:"Attachment"}]},drafty_image:{id:"drafty_image",defaultMessage:[{type:0,value:"Picture"}]},drafty_unknown:{id:"drafty_unknown",defaultMessage:[{type:0,value:"Unsupported"}]}});function Es(e,t,s){if(!t)return s.src="img/broken_image.png",s.style={width:Yt.$_+"px",height:Yt.$_+"px"},e;s.className="inline-image";const a=(0,ws.rS)(t.width,t.height,this.viewportWidth>0?Math.min(this.viewportWidth-6.5*Yt.o6,34.5*Yt.o6):34.5*Yt.o6,24*Yt.o6,!1)||{dstWidth:Yt.sA,dstHeight:Yt.sA};return s.style={width:a.dstWidth+"px",height:a.dstHeight+"px",minWidth:a.dstWidth+"px",minHeight:a.dstHeight+"px"},Qt.Drafty.isProcessing(t)?e=vs:(s.src=this.authorizeURL(ls(s.src,"image")),s.alt=t.name,s.src?(Math.max(t.width||0,t.height||0)>Yt.$_&&(s.onClick=this.onImagePreview,s.className+=" image-clickable"),s.loading="lazy"):s.src="img/broken_image.png"),e}function Cs(e,t,s,a,n){if(n.includes("QQ"))return ks.call(this,e,t,s,a);if(!e)return s;let o=Qt.Drafty.tagName(e),r=Qt.Drafty.attrValue(e,t)||{};switch(r.key=a,e){case"AU":r.src&&(r.src=this.authorizeURL(ls(r.src,"audio")),r.duration=t.duration>0?0|t.duration:void 0,r.preview=t.preview,r.loading="lazy"),o=ms.Z,s=null;break;case"BR":s=null;break;case"EX":case"RW":break;case"HL":r.className="highlight";break;case"HD":o=null,s=null;break;case"IM":o=Es.call(this,o,t,r),s=null;break;case"BN":r.onClick=this.onFormButtonClick;let e=i().Children.map(s,(e=>"string"==typeof e?e:void 0));e&&0!=e.length||(e=[r.name]),r["data-title"]=e.join("");break;case"MN":r.className="mention",t&&(r.className+=" "+(0,as.Cj)(t.val,!1,!0));break;case"FM":r.className="bot-form";break;case"QQ":r.className="reply-quote",r.onClick=this.onQuoteClick;break;case"VC":o=gs,s=null,t&&(r.callState=t.state,r.incoming=t.incoming,r.duration=t.duration);break;default:if(!o){o=i().Fragment,r={key:a};let e=s;Array.isArray(s)&&s.join("").trim()||(e=[i().createElement("span",{key:"x1",className:"gray"},this.formatMessage(ys.drafty_unknown))]),s=[i().createElement("i",{key:"x0",className:"material-icons gray"},"extension")," "].concat(e)}}return o?i().createElement(o,r,s):s}function Ss(e,t,s,a){if(!e)return s;let n=Qt.Drafty.tagName(e);const o={key:a};switch(e){case"AU":n=i().Fragment,s=[i().createElement("i",{key:"au",className:"material-icons"},"mic")," ",(0,as.nH)(t.duration/1e3)];break;case"BR":n=i().Fragment,s=[" "];break;case"HL":o.className="highlight preview";break;case"LN":case"MN":n="span";break;case"IM":n=i().Fragment,s=[i().createElement("i",{key:"im",className:"material-icons"},"photo")," ",this.formatMessage(ys.drafty_image)];break;case"BN":n="span",o.className="flat-button faux";break;case"FM":n=i().Fragment,s=[i().createElement("i",{key:"fm",className:"material-icons"},"dashboard"),this.formatMessage(ys.drafty_form)].concat(" ",s||[]);break;case"RW":n=i().Fragment;break;case"EX":if(t){if("application/json"==t.mime)return null;delete t.val,delete t.ref}n=i().Fragment,s=[i().createElement("i",{key:"ex",className:"material-icons"},"attachment")," ",this.formatMessage(ys.drafty_attachment)];break;case"VC":n=_s,t&&(o.callState=t.state,o.incoming=t.incoming,o.duration=t.duration),s=null;break;case"QQ":case"HD":n=null,s=null;break;default:n||(n=i().Fragment,s=[i().createElement("i",{key:"x0",className:"material-icons gray"},"extension")," ",this.formatMessage(ys.drafty_unknown)])}return n?i().createElement(n,o,s):s}function Ms(e,t){return e.style={width:Yt.$_+"px",height:Yt.$_+"px",maxWidth:Yt.$_+"px",maxHeight:Yt.$_+"px"},e.className="inline-image",e.alt=this.formatMessage(ys.drafty_image),t||(e.src="img/broken_image.png"),e.title=e.alt,e}function ks(e,t,s,a){if(["BR","EX","IM","MN"].includes(e)){let n=Qt.Drafty.tagName(e),o=Qt.Drafty.attrValue(e,t)||{};switch(o.key=a,e){case"BR":s=null;break;case"IM":o=Ms.call(this,o,t),s=[i().createElement("img",o,null)," ",o.alt],n=i().Fragment,o={key:a};break;case"MN":n="span",o.className="mention",t&&(o.className+=" "+(0,as.Cj)(t.val,!1,!0));break;case"EX":let e;if(t){if("application/json"==t.mime)return null;e=t.name,delete t.val,delete t.ref}n=i().Fragment,s=[i().createElement("i",{key:"ex",className:"material-icons"},"attachment"),(0,as.TX)(e,16)||this.formatMessage(ys.drafty_attachment)]}return i().createElement(n,o,s)}return Ss.call(this,e,t,s,a)}function Ts(e){let t;if(e.val){const s=(0,ws.Jr)(e.val,e.mime);if(!s)throw new Error("Invalid image");t=Promise.resolve(s)}else{if(!e.ref)throw new Error("Missing image data");t=fetch(this.authorizeURL(ls(e.ref,"image"))).then((e=>{if(e.ok)return e.blob();throw new Error(`Image fetch unsuccessful: ${e.status} ${e.statusText}`)}))}return t.then((e=>(0,ws.EA)(e,Yt.$_,Yt.$_,-1,!0))).then((t=>(e.mime=t.mime,e.size=t.blob.size,e.width=t.width,e.height=t.height,delete e.ref,e.src=URL.createObjectURL(t.blob),(0,ws.w8)(t.blob)))).then((t=>(e.val=t.bits,e))).catch((t=>{throw delete e.val,delete e.src,e.width=Yt.$_,e.height=Yt.$_,t}))}function As(e,t,s,a,n){if("IM"==e){const e=Ms.call(this,{key:a},t);let n;try{n=ds(Ts.call(this,t))}catch(e){n=ds(e)}return e.whenDone=n,s=[i().createElement(fs,e,null)," ",e.alt],i().createElement(i().Fragment,{key:a},s)}if("QQ"==e){if(n.includes("QQ"))return i().createElement("span",{key:a},[i().createElement("i",{key:"qq",className:"material-icons"},"format_quote")," "]);const e=Qt.Drafty.attrValue("QQ",t)||{};return e.key=a,e.className="reply-quote",i().createElement(Qt.Drafty.tagName("QQ"),e,s)}return ks.call(this,e,t,s,a)}class Ns extends i().Component{constructor(e){super(e),this.handleClick=this.handleClick.bind(this),this.handleContextClick=this.handleContextClick.bind(this)}handleClick(e){e.preventDefault(),e.stopPropagation(),this.props.onSelected&&this.props.onSelected(this.props.item,this.props.index)}handleContextClick(e){e.preventDefault(),e.stopPropagation(),this.props.showContextMenu({topicName:this.props.item,y:e.pageY,x:e.pageX})}render(){let e=this.props.title;e?e.length>30&&(e=e.substring(0,28)+"…"):e=i().createElement("i",null,i().createElement(r.FormattedMessage,{id:"unnamed_topic",defaultMessage:[{type:0,value:"Unnamed"}]}));const t=this.props.now?"online":"offline",s=!this.props.avatar||this.props.avatar,a=this.props.badges?this.props.badges.slice():[],n=[];let o;this.props.isVerified&&n.push({icon:"verified",color:"verified-color"}),this.props.isStaff&&n.push({icon:"staff",color:"staff-color"}),this.props.isDangerous&&n.push({icon:"dangerous",color:"danger-color"}),this.props.acs&&(this.props.showMode&&a.push({name:this.props.acs.getMode(),key:"mode"}),this.props.acs.isMuted()&&n.push({icon:"muted"}),this.props.acs.isJoiner()||n.push({icon:"banned"})),"string"==typeof this.props.preview?o=this.props.preview:Qt.Drafty.isValid(this.props.preview)?o=i().createElement(i().Fragment,null,Qt.Drafty.format(this.props.preview,Ss,{formatMessage:this.props.intl.formatMessage,previewIsResponse:this.props.previewIsResponse})):this.props.preview&&(o=i().createElement(i().Fragment,null,i().createElement("i",{className:"material-icons gray"},"warning_amber")," ",i().createElement("i",{className:"gray"},i().createElement(r.FormattedMessage,{id:"invalid_content",defaultMessage:[{type:0,value:"invalid content"}]}))));const l=cs(this.props.received),c=l?i().createElement("i",{className:"material-icons small space-right"+(l.color?" "+l.color:"")},l.name):null,d="contact-title"+(this.props.deleted?" deleted":"");return i().createElement("li",{className:!this.props.showCheckmark&&this.props.selected?"selected":null,onClick:this.handleClick},i().createElement("div",{className:"avatar-box"},i().createElement(ps,{tinode:this.props.tinode,avatar:s,title:this.props.title,topic:this.props.item,deleted:this.props.deleted}),this.props.deleted?i().createElement("i",{className:"deleted material-icons"},"cancel"):this.props.showOnline?i().createElement("span",{className:t}):this.props.showCheckmark&&this.props.selected?i().createElement("i",{className:"checkmark material-icons"},"check_circle"):null),i().createElement("div",{className:"text-box"},i().createElement("div",null,i().createElement("span",{className:d},e),this.props.isChannel?i().createElement("img",{src:"/img/channel.png",className:"channel",alt:"channel"}):null,i().createElement(ss,{badges:n}),this.props.deleted?null:i().createElement(us,{count:this.props.unread})),this.props.showMode?i().createElement("span",null,i().createElement(ss,{badges:a})):this.props.small?null:i().createElement("div",{className:"contact-comment"},c,i().createElement("span",null,o||this.props.comment||" "))),this.props.showContextMenu?i().createElement("span",{className:"menuTrigger"},i().createElement("a",{href:"#",onClick:this.handleContextClick},i().createElement("i",{className:"material-icons"},"expand_more"))):null)}}const Ds=(0,r.injectIntl)(Ns);class Is extends i().PureComponent{constructor(e){super(e),this.handleClick=this.handleClick.bind(this)}handleClick(e){e.preventDefault(),e.stopPropagation(),this.props.onAction(this.props.action)}render(){const{formatMessage:e}=this.props.intl;return i().createElement("li",{onClick:this.handleClick,className:"action"},i().createElement("div",{className:"action-text"},e(this.props.title,this.props.values)))}}const Ps=(0,r.injectIntl)(Is),Rs=(0,r.defineMessages)({badge_you:{id:"badge_you",defaultMessage:[{type:0,value:"you"}]},badge_owner:{id:"badge_owner",defaultMessage:[{type:0,value:"owner"}]}});class Fs extends i().Component{render(){const{formatMessage:e}=this.props.intl,t=Array.isArray(this.props.topicSelected),s=[];let a=0;return this.props.contacts&&this.props.contacts.length>0&&this.props.contacts.map((n=>{if(n.action)s.push(i().createElement(Ps,{title:n.title,action:n.action,values:n.values,key:n.action,onAction:this.props.onAction}));else{const o=this.props.showMode?n.user:n.topic||n.user;if(this.props.filterFunc&&this.props.filter){const e=[o];if(n.private&&n.private.comment&&e.push((""+n.private.comment).toLowerCase()),n.public&&n.public.fn&&e.push((""+n.public.fn).toLowerCase()),!this.props.filterFunc(this.props.filter,e))return}const r=Qt.Tinode.isChannelTopicName(o),l=t?this.props.topicSelected.indexOf(o)>-1:this.props.topicSelected===o,c=[];this.props.showMode&&(o==this.props.myUserId&&c.push({name:e(Rs.badge_you),color:"green"}),n.acs&&n.acs.isOwner()&&c.push({name:e(Rs.badge_owner),color:"blue"}));const d=Array.isArray(n.private)?n.private.join(","):n.private?n.private.comment:null;let h,p,u,m;if(!this.props.showMode&&n.latestMessage){const e=n.latestMessage(!0);e&&(p=e.head?e.head.forwarded:null,m=e._status||n.msgStatus(e,!0),u=e.from!=this.props.myUserId,e.content&&(h="string"==typeof e.content?e.content.substr(0,Yt.rV):Qt.Drafty.preview(e.content,Yt.rV)))}s.push(i().createElement(Ds,{tinode:this.props.tinode,title:n.public?n.public.fn:null,avatar:(0,ws.PD)(n.public?n.public.photo:null),comment:d,preview:h,previewIsResponse:u,forwarded:p,received:m,unread:this.props.showUnread?n.unread:0,now:n.online&&this.props.connected,acs:n.acs,showMode:this.props.showMode,badges:c,showCheckmark:t,selected:l,showOnline:this.props.showOnline&&!r,isChannel:r,showContextMenu:this.props.showContextMenu,isVerified:n.trusted&&n.trusted.verified,isStaff:n.trusted&&n.trusted.staff,isDangerous:n.trusted&&n.trusted.danger,deleted:n._deleted,onSelected:this.props.onTopicSelected,item:o,index:s.length,key:o})),a++}}),this),i().createElement("div",{className:this.props.noScroll?null:"scrollable-panel"},0==a?i().createElement("div",{className:"center-medium-text",dangerouslySetInnerHTML:{__html:this.props.emptyListMessage}}):null,s.length>0?i().createElement("ul",{className:"contact-box"},s):null)}}const Us=(0,r.injectIntl)(Fs);class xs extends i().PureComponent{constructor(e){super(e),this.state={edited:!1,search:""},this.handleSearchChange=this.handleSearchChange.bind(this),this.handleSearch=this.handleSearch.bind(this),this.handleClear=this.handleClear.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this)}componentWillUnmount(){this.state.edited&&(this.setState({search:"",edited:!1}),this.props.onSearchContacts(Qt.Tinode.DEL_CHAR))}handleSearchChange(e){this.setState({search:e.target.value})}handleSearch(e){e.preventDefault();var t=this.state.search.trim();this.setState({edited:t.length>0}),this.props.onSearchContacts(t.length>0?t:Qt.Tinode.DEL_CHAR)}handleClear(e){e.preventDefault(),this.state.edited&&this.props.onSearchContacts(Qt.Tinode.DEL_CHAR),this.setState({search:"",edited:!1})}handleKeyDown(e){"Enter"===e.key?this.handleSearch(e):"Escape"===e.key&&this.handleClear()}render(){return i().createElement("div",{className:"panel-form"},i().createElement("div",{className:"panel-form-row"},i().createElement("i",{className:"material-icons search"},"search"),i().createElement("input",{className:"search",type:"text",placeholder:this.props.placeholder,value:this.state.search,onChange:this.handleSearchChange,onKeyDown:this.handleKeyDown,required:!0,autoFocus:!0}),this.state.search?i().createElement("a",{href:"#",onClick:this.handleClear},i().createElement("i",{className:"material-icons"},"highlight_off")):i().createElement("span",null,i().createElement("i",{className:"material-icons"}," "))))}}class Ls extends i().Component{constructor(e){super(e),this.state={query:null},this.handleEscapeKey=this.handleEscapeKey.bind(this),this.handleClose=this.handleClose.bind(this),this.handleSearchContacts=this.handleSearchContacts.bind(this),this.handleContactSelected=this.handleContactSelected.bind(this)}componentDidMount(){this.props.onInitFind()}handleEscapeKey(e){27===e.keyCode&&this.props.hide(!1)}handleClose(e){e.preventDefault(),this.props.hide(!1)}handleSearchContacts(e){this.setState({query:Qt.Tinode.isNullValue(e)?null:e}),this.props.onSearchContacts(e)}handleContactSelected(e){this.props.onTopicSelected(e),this.props.hide(!0)}render(){let e=null!=this.state.query?this.props.searchResults:this.props.contacts;return e=e.filter((e=>e.name!=this.props.topicSelected&&e.acs.isJoiner()&&e.acs.isWriter())),i().createElement("div",{className:"alert-container"},i().createElement("div",{className:"forward-dialog"},i().createElement("div",{className:"title with-control"},i().createElement("div",null,i().createElement(r.FormattedMessage,{id:"forward_to",defaultMessage:[{type:0,value:"Forward to"}],desription:"Title of the contact selector dialog when forwarding a message"})),i().createElement("div",null,i().createElement("a",{href:"#",onClick:this.handleClose},i().createElement("i",{className:"material-icons"},"close")))),i().createElement(r.FormattedMessage,{id:"forward_to_search_placeholder",defaultMessage:[{type:0,value:"Search contacts"}]},(e=>i().createElement(xs,{placeholder:e,onSearchContacts:this.handleSearchContacts}))),i().createElement(r.FormattedMessage,{id:"search_no_results",defaultMessage:[{type:0,value:"Search returned no results"}]},(t=>i().createElement(Us,{tinode:this.props.tinode,contacts:e,myUserId:this.props.myUserId,emptyListMessage:t,showOnline:!1,showUnread:!1,showContextMenu:!1,onTopicSelected:this.handleContactSelected})))))}}const Os={staff:"verified_user"},qs=(0,r.defineMessages)({badge_verified:{id:"badge_verified",defaultMessage:[{type:0,value:"Verified/official"}]},badge_staff:{id:"badge_staff",defaultMessage:[{type:0,value:"Staff-managed"}]},badge_danger:{id:"badge_danger",defaultMessage:[{type:0,value:"Untrustworthy"}]}});class Bs extends i().PureComponent{render(){const{formatMessage:e}=this.props.intl;let t=null;return this.props.trustedBadges&&this.props.trustedBadges.length>0?(t=[],this.props.trustedBadges.map((s=>{const a=this.props.short?null:e(qs["badge_"+s]),n="material-icons "+s+"-color";t.push(i().createElement("div",{className:"trusted-badge",key:s},i().createElement("i",{className:n},Os[s]||s)," ",a))})),i().createElement(i().Fragment,null,t)):null}}const js=(0,r.injectIntl)(Bs),zs="started",Hs=new Audio("audio/call-in.m4a");class Vs extends i().Component{constructor(e){super(e),this.state={topic:null,fullName:void 0,avatar:null,trustedBadges:[],previousMetaDesc:void 0},this.resetDesc=this.resetDesc.bind(this),this.onMetaDesc=this.onMetaDesc.bind(this),this.handleRejectCall=this.handleRejectCall.bind(this),this.handleAcceptCall=this.handleAcceptCall.bind(this),this.ringTimer=null}componentDidMount(){const e=this.props.tinode.getTopic(this.props.topic);e&&(this.resetDesc(e,this.props),2==this.props.callState&&(Hs.play().catch((e=>{})),this.ringTimer=setInterval((e=>{Hs.play().catch((e=>{}))}),2e3),this.props.onRinging(this.props.topic,this.props.seq)))}componentDidUpdate(e){const t=this.props.tinode.getTopic(e.topic);t&&(this.onMetaDesc!=t.onMetaDesc&&(this.previousMetaDesc=t.onMetaDesc,t.onMetaDesc=this.onMetaDesc),this.state.topic!=e.topic&&(this.setState({topic:e.topic}),this.resetDesc(t,e)))}componentWillUnmount(){null!=this.ringTimer&&(clearInterval(this.ringTimer),Hs.pause());const e=this.props.tinode.getTopic(this.props.topic);e&&(this.setState({topic:null}),e.onMetaDesc=this.previousMetaDesc)}resetDesc(e,t){e.getDefaultAccess(),e.getAccessMode();const s=[];if(e.trusted)for(const[t,a]of Object.entries(e.trusted))a&&s.push(t);this.setState({fullName:hs(e.public?e.public.fn:void 0,Yt.S8),avatar:(0,ws.PD)(e.public?e.public.photo:null),trustedBadges:s})}onMetaDesc(e){const t=this.props.tinode.getTopic(this.props.topic);t&&(this.resetDesc(t,this.props),this.previousMetaDesc&&this.previousMetaDesc!=this.onMetaDesc&&this.previousMetaDesc(e))}handleAcceptCall(){this.props.onAcceptCall(this.props.topic)}handleRejectCall(){this.props.onReject(this.props.topic,this.props.seq),this.props.onClose()}render(){return i().createElement("div",{className:"alert-container"},i().createElement("div",{className:"incoming-call"},i().createElement("div",{className:"caller-card incoming pulse"},i().createElement("div",{className:"avatar-box"},i().createElement(ps,{tinode:this.props.tinode,avatar:this.state.avatar||!0,topic:this.props.topic,title:this.state.fullName})),i().createElement("div",{className:"caller-name"},hs(this.state.fullName,Yt.gD),i().createElement(js,{short:!0,trustedBadges:this.state.trustedBadges}))),i().createElement("div",{className:"controls"},2==this.props.callState?i().createElement(i().Fragment,null,i().createElement("button",{className:"danger",onClick:this.handleRejectCall},i().createElement("i",{className:"material-icons"},"call_end")),i().createElement("button",{className:"positive",onClick:this.handleAcceptCall},i().createElement("i",{className:"material-icons"},"call"))):null)))}}class Ks extends i().PureComponent{render(){const e="load-spinner-box"+(this.props.large?" large":"")+(this.props.clear?" clear":"")+(this.props.centered?" centered":"");return this.props.show?i().createElement("div",{className:e},i().createElement("div",{className:"loader-spinner"})):null}}class Ws extends i().Component{constructor(e){super(e),this.state={source:e.avatar},this.handleFileReceived=this.handleFileReceived.bind(this)}componentDidUpdate(e){this.props.avatar!=e.avatar&&this.setState({source:this.props.avatar})}handleFileReceived(e){const t=e.target.files[0];this.props.onImageUpdated(t.type,URL.createObjectURL(t),t.name),e.target.value=""}render(){const e="file-input-avatar-"+(""+Math.random()).substring(0,4),t="avatar-upload"+(this.props.readOnly?" read-only":"");return i().createElement("div",{className:t},this.props.readOnly||!this.state.source?null:i().createElement("a",{href:"#",className:"clear-avatar",onClick:e=>{e.preventDefault(),this.props.onImageUpdated()}},i().createElement("i",{className:"material-icons"},"clear")),this.state.source?i().createElement("img",{src:this.props.tinode.authorizeURL(ls(this.state.source,"image")),className:"preview"}):this.props.readOnly&&this.props.uid?i().createElement("div",{className:"avatar-box"},i().createElement(ps,{tinode:this.props.tinode,avatar:!0,topic:this.props.uid,title:this.props.title})):i().createElement("div",{className:"blank"},Yt.IX,"×",Yt.IX),this.props.readOnly?null:i().createElement("input",{type:"file",id:e,className:"inputfile hidden",accept:"image/*",onChange:this.handleFileReceived}),this.props.readOnly?null:i().createElement("label",{htmlFor:e,className:"round"},i().createElement("i",{className:"material-icons"},"file_upload")),i().createElement(Ks,{show:this.props.uploading,large:!0,clear:!0,centered:!0}))}}class Gs extends i().PureComponent{constructor(e){super(e),this.handleChange=this.handleChange.bind(this)}handleChange(){this.props.onChange(this.props.name,!this.props.checked)}render(){let e,t=["material-icons"];Array.isArray(this.props.className)?t.push(...this.props.className):this.props.className&&t.push(this.props.className),this.props.onChange?this.props.checked?(t.push("blue","clickable"),e="check_box"):!1===this.props.checked?(t.push("blue","clickable"),e="check_box_outline_blank"):(t.push("lt-blue"),e="indeterminate_check_box"):e=this.props.checked?"check_box":"check_box_outline_blank";let s={className:t.join(" "),id:this.props.id};return this.props.onChange&&(s.onClick=this.handleChange),i().createElement("i",s,e)}}class $s extends i().PureComponent{render(){return i().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.props.onCancel()}},i().createElement("i",{className:"material-icons"},"close"))}}class Qs extends i().PureComponent{constructor(e){super(e),this.state={show:!1},this.hide=this.hide.bind(this)}componentDidUpdate(e){e.level!==this.props.level&&this.setState({show:!!this.props.level})}hide(){this.setState({show:!1}),this.props.onClearError&&this.props.onClearError()}render(){const e={err:"error",warn:"warning",info:"info"}[this.props.level]||"",t="info-box "+e;return i().createElement("div",{className:t},i().createElement("div",{className:"icon"},i().createElement("i",{className:"material-icons"},e)),i().createElement("span",null,this.props.text,this.props.action?i().createElement(i().Fragment,null,i().createElement("a",{href:"#",style:{whiteSpace:"nowrap"},onClick:e=>{e.preventDefault(),this.props.action()}},this.props.actionText)):null),i().createElement("div",{className:"cancel"},i().createElement($s,{onCancel:this.hide})))}}class Xs extends i().PureComponent{constructor(e){super(e),this.handleCancel=this.handleCancel.bind(this)}handleCancel(e){e.preventDefault(),this.props.onCancel(this.props.topic,this.props.index)}render(){const e=this.props.title||this.props.topic,t=this.props.invalid?"chip invalid":"chip";return i().createElement("div",{className:t},this.props.noAvatar?i().createElement("span",{className:"spacer"}):i().createElement("div",{className:"avatar-box"},i().createElement(ps,{tinode:this.props.tinode,avatar:this.props.avatar||!0,topic:this.props.topic,title:this.props.title})),i().createElement("span",null,e),this.props.onCancel&&!this.props.required?i().createElement("a",{href:"#",onClick:this.handleCancel},"×"):i().createElement("span",{className:"spacer"}))}}class Ys extends i().Component{constructor(e){super(e),this.state=Ys.deriveStateFromProps(e),this.state.input="",this.state.focused=!1,this.handleTextInput=this.handleTextInput.bind(this),this.removeChipAt=this.removeChipAt.bind(this),this.handleChipCancel=this.handleChipCancel.bind(this),this.handleFocusGained=this.handleFocusGained.bind(this),this.handleFocusLost=this.handleFocusLost.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this)}static deriveStateFromProps(e){return{placeholder:e.chips?"":e.prompt,sortedChips:Ys.sortChips(e.chips,e.staticMembers),chipIndex:Ys.indexChips(e.chips)}}componentDidUpdate(e,t){e.chips==this.props.chips&&e.staticMembers==this.props.staticMembers&&e.prompt==this.props.prompt||this.setState(Ys.deriveStateFromProps(this.props)),(!t||this.props.chips.length>t.sortedChips.length)&&this.setState({input:""})}static indexChips(e){const t={};let s=0;return e.map((e=>{t[e.user]=s,s++})),t}static sortChips(e,t){const s=[],a=[];return e.map((e=>{t&&t.includes(e.user)?s.push(e):a.push(e)})),s.concat(a)}handleTextInput(e){this.setState({input:e.target.value}),this.props.filterFunc&&this.props.filterFunc(e.target.value)}removeChipAt(e){const t=this.state.sortedChips[e];this.props.onChipRemoved(t.user,this.state.chipIndex[t.user])}handleChipCancel(e,t){this.removeChipAt(t)}handleFocusGained(){this.setState({focused:!0})}handleFocusLost(){this.setState({focused:!1}),this.props.onFocusLost&&this.props.onFocusLost(this.state.input)}handleKeyDown(e){if("Backspace"===e.key){if(0==this.state.input.length&&this.state.sortedChips.length>0){const e=this.state.sortedChips.length-1;this.state.sortedChips[e].user!==this.props.staticMembers&&this.removeChipAt(e)}}else"Enter"===e.key?this.props.onEnter&&this.props.onEnter(this.state.input):"Escape"===e.key&&this.props.onCancel&&this.props.onCancel()}render(){const e=[];let t=0;const s=this.props.staticMembers||[];this.state.sortedChips.map((a=>{e.push(i().createElement(Xs,{tinode:this.props.tinode,onCancel:this.handleChipCancel,avatar:(0,ws.PD)(a.public?a.public.photo:null),title:a.public?a.public.fn:void 0,noAvatar:this.props.avatarDisabled,topic:a.user,required:s.includes(a.user),invalid:a.invalid,index:t,key:a.user})),t++}));const a="chip-input"+(this.state.focused?" focused":""),n=!(this.props.tabIndex>0);return i().createElement("div",{className:a},e,i().createElement("input",{type:"text",placeholder:this.state.placeholder,onChange:this.handleTextInput,onFocus:this.handleFocusGained,onBlur:this.handleFocusLost,onKeyDown:this.handleKeyDown,value:this.state.input,tabIndex:this.props.tabIndex,autoFocus:n}))}}const Js=(0,r.defineMessages)({no_contacts:{id:"no_contacts",defaultMessage:[{type:0,value:"You have no contacts :-("}]},contacts_not_found_short:{id:"contacts_not_found_short",defaultMessage:[{type:0,value:"No contacts match '"},{type:1,value:"query"},{type:0,value:"'"}]}});class Zs extends i().Component{constructor(e){super(e),this.state={members:e.members,index:Zs.indexMembers(e.members),staticMembers:Zs.staticMembers(e.members,e.keepInitialMembers,e.requiredMember),contactFilter:"",noContactsMessage:e.intl.formatMessage(Js.no_contacts),selectedContacts:Zs.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 t={};return e.map((e=>{t[e.user]={delta:0,present:!0}})),t}static staticMembers(e,t,s){let a=[];return e.map((e=>{(t||e.user==s)&&a.push(e.user)})),a}static selectedContacts(e){let t=[];return e.map((e=>{t.push(e.user)})),t}handleContactSelected(e,t){let s=this.state.index[e];if(s){if(s.present)return;s.delta+=1,s.present=!0}else s={delta:1,present:!0};let a=this.state.members.slice();a.push(this.props.contacts[t]);const i=Zs.selectedContacts(a),n=this.state.index;n[e]=s,this.setState({members:a,index:n,selectedContacts:i})}handleMemberRemoved(e,t){const s=this.state.index[e];if(!s||!s.present)return;s.present=!1,s.delta-=1;let a=this.state.members.slice();a.splice(t,1);const i=Zs.selectedContacts(a),n=this.state.index;n[e]=s,this.setState({members:a,index:n,selectedContacts:i})}handleContactFilter(e){const{formatMessage:t}=this.props.intl,s=e?t(Js.contacts_not_found_short,{query:e}):t(Js.no_contacts);this.setState({contactFilter:e,noContactsMessage:s})}static doContactFiltering(e,t){if(e){for(let s=0;s<t.length;s++)if(t[s].indexOf(e)>=0)return!0;return!1}return!0}handleSubmit(){var e=this,t=[],s=[],a=[];Object.keys(this.state.index).map((function(i){e.state.index[i].present&&t.push(i),e.state.index[i].delta>0?s.push(i):e.state.index[i].delta<0&&a.push(i)})),this.props.onSubmit(t,s,a)}handleCancel(){this.props.onCancel()}render(){const{formatMessage:e}=this.props.intl;return i().createElement("div",{id:"group-manager"},i().createElement("div",{className:"panel-form-row"},i().createElement("label",{className:"small"},i().createElement(r.FormattedMessage,{id:"title_group_members",defaultMessage:[{type:0,value:"Group Members"}]}))),i().createElement("div",{className:"panel-form-row"},i().createElement(Ys,{tinode:this.props.tinode,chips:this.state.members,staticMembers:this.state.staticMembers,prompt:"add members",filterFunc:this.handleContactFilter,onChipRemoved:this.handleMemberRemoved})),i().createElement("div",{className:"panel-form-row"},i().createElement("label",{className:"small"},i().createElement(r.FormattedMessage,{id:"title_all_contacts",defaultMessage:[{type:0,value:"All Contacts"}]}))),i().createElement(Us,{tinode:this.props.tinode,contacts:this.props.contacts,myUserId:this.props.myUserId,topicSelected:this.state.selectedContacts,filter:this.state.contactFilter,filterFunc:Zs.doContactFiltering,emptyListMessage:this.state.noContactsMessage,showOnline:!1,showUnread:!1,onTopicSelected:this.handleContactSelected}),i().createElement("div",{id:"group-manager-buttons",className:"panel-form-row"},i().createElement("button",{className:"secondary",onClick:this.handleCancel},i().createElement(r.FormattedMessage,{id:"button_cancel",defaultMessage:[{type:0,value:"Cancel"}]})),i().createElement("button",{className:"primary",onClick:this.handleSubmit},i().createElement(r.FormattedMessage,{id:"button_ok",defaultMessage:[{type:0,value:"OK"}]}))))}}const ea=(0,r.injectIntl)(Zs),ta=(0,r.defineMessages)({joiner:{id:"permission_join",defaultMessage:[{type:0,value:"Join ("},{type:1,value:"val"},{type:0,value:")"}]},reader:{id:"permission_read",defaultMessage:[{type:0,value:"Read ("},{type:1,value:"val"},{type:0,value:")"}]},writer:{id:"permission_write",defaultMessage:[{type:0,value:"Write ("},{type:1,value:"val"},{type:0,value:")"}]},preser:{id:"permission_pres",defaultMessage:[{type:0,value:"Get notified ("},{type:1,value:"val"},{type:0,value:")"}]},approver:{id:"permission_admin",defaultMessage:[{type:0,value:"Approve ("},{type:1,value:"val"},{type:0,value:")"}]},sharer:{id:"permission_share",defaultMessage:[{type:0,value:"Share ("},{type:1,value:"val"},{type:0,value:")"}]},deleter:{id:"permission_delete",defaultMessage:[{type:0,value:"Delete ("},{type:1,value:"val"},{type:0,value:")"}]},owner:{id:"permission_owner",defaultMessage:[{type:0,value:"Owner ("},{type:1,value:"val"},{type:0,value:")"}]}});class sa extends i().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 t=this.state.mode;-1==t.indexOf(e)?t+=e:t=t.replace(e,""),this.setState({mode:t})}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,t="JRWPASDO",s={J:e(ta.joiner,{val:"J"}),R:e(ta.reader,{val:"R"}),W:e(ta.writer,{val:"W"}),P:e(ta.preser,{val:"P"}),A:e(ta.approver,{val:"A"}),S:e(ta.sharer,{val:"S"}),D:e(ta.deleter,{val:"D"}),O:e(ta.owner,{val:"O"})};let a=this.props.skip||"",n=this.state.mode,o=(this.props.compare||"").replace("N",""),l=[];for(let e=0;e<t.length;e++){let r=t.charAt(e);a.indexOf(r)>=0&&n.indexOf(r)<0||l.push(i().createElement("tr",{key:r},i().createElement("td",null,s[r]),i().createElement("td",{className:"checkbox"},a.indexOf(r)<0?i().createElement(Gs,{name:r,checked:n.indexOf(r)>=0,onChange:this.handleChange}):i().createElement(Gs,{name:r,checked:n.indexOf(r)>=0})),this.props.compare?i().createElement("td",{className:"checkbox"},i().createElement(Gs,{name:r,checked:o.indexOf(r)>=0})):null))}return i().createElement("div",{className:"panel-form-column"},this.props.userTitle?i().createElement("ul",{className:"contact-box small"},i().createElement(Ds,{tinode:this.props.tinode,item:this.props.item,title:this.props.userTitle,small:!0,avatar:(0,ws.PD)(this.props.userAvatar?this.props.userAvatar:null)})):null,i().createElement("label",{className:"small"},i().createElement(r.FormattedMessage,{id:"title_permissions",defaultMessage:[{type:0,value:"Permissions"}]})),i().createElement("table",{className:"permission-editor"},this.props.compare?i().createElement("thead",null,i().createElement("tr",null,i().createElement("th",null),i().createElement("th",null,this.props.modeTitle),i().createElement("th",null,this.props.compareTitle))):null,i().createElement("tbody",null,l)),i().createElement("br",null),i().createElement("div",{className:"dialog-buttons"},i().createElement("button",{className:"outline",onClick:this.handleCancel},i().createElement(r.FormattedMessage,{id:"button_cancel",defaultMessage:[{type:0,value:"Cancel"}]})),i().createElement("button",{className:"primary",onClick:this.handleSubmit},i().createElement(r.FormattedMessage,{id:"button_ok",defaultMessage:[{type:0,value:"OK"}]}))))}}const aa=(0,r.injectIntl)(sa);class ia extends i().Component{constructor(e){super(e),this.state={panX:0,panY:0,originX:0,originY:0,zoom:1,minZoom:0,maxZoom:2.5},this.overlay=i().createRef(),this.cutout=i().createRef(),this.preview=i().createRef(),this.boundingBox=i().createRef(),this.imageWidth=0,this.imageHeight=0,this.mouseX=0,this.mouseY=0,this.prevDistance=0,this.cutoutRect={},this.bBoxRect={},this.originX=0,this.originY=0,this.initScaling=this.initScaling.bind(this),this.onZoom=this.onZoom.bind(this),this.handleZoom=this.handleZoom.bind(this),this.mouseDown=this.mouseDown.bind(this),this.mouseUp=this.mouseUp.bind(this),this.mouseMove=this.mouseMove.bind(this),this.mouseTouch=this.mouseTouch.bind(this),this.positionAll=this.positionAll.bind(this),this.translate=this.translate.bind(this)}componentDidMount(){this.overlay.current.addEventListener("mousedown",this.mouseDown,{passive:!0}),this.overlay.current.addEventListener("touchstart",this.mouseDown,{passive:!0}),this.bBoxRect=this.boundingBox.current.getBoundingClientRect(),this.originX=this.bBoxRect.width/2,this.originY=this.bBoxRect.height/2,this.cutoutRect=this.cutout.current.getBoundingClientRect()}componentWillUnmount(){this.overlay.current.removeEventListener("mousedown",this.mouseDown),this.overlay.current.removeEventListener("touchstart",this.mouseDown)}positionAll(e,t,s){this.setState({panX:e,panY:t,zoom:s,originX:this.originX-e,originY:this.originY-t});const a=(this.originX-e)*s-this.originX,i=(this.originY-t)*s-this.originY;this.props.onChange((a+this.cutoutRect.left-this.bBoxRect.left)/s,(i+this.cutoutRect.top-this.bBoxRect.top)/s,this.cutoutRect.width/s,this.cutoutRect.height/s,s)}static checkBound(e,t,s,a){let i=Math.min(0,s[0]-t[0]-a,t[1]-s[1]+a);return(0==i||Math.min(0,s[0]-t[0],t[1]-s[1])<i)&&(e+=a),e}initScaling(){const e=this.preview.current.getBoundingClientRect();this.imageWidth=e.width,this.imageHeight=e.height;const t=Math.max(this.cutoutRect.width/e.width,this.cutoutRect.height/e.height);this.setState({minZoom:t,maxZoom:Math.max(2.5,t+1)});const s=Math.max(this.bBoxRect.width/e.width,this.bBoxRect.height/e.height),a=this.cutoutRect.left-this.bBoxRect.left-(e.width-this.cutoutRect.width)/2,i=this.cutoutRect.top-this.bBoxRect.top-(e.height-this.cutoutRect.height)/2;this.positionAll(a,i,s)}onZoom(e){this.handleZoom(e.target.value)}handleZoom(e){let t=this.state.panX,s=this.state.panY;const a=this.originX-(this.originX-t)*e,i=a+this.imageWidth*e,n=this.cutoutRect.left-this.bBoxRect.left,o=n+this.cutoutRect.width;n<a?t-=a-n:o>i&&(t+=o-i);const r=this.originY-(this.originY-s)*e,l=r+this.imageHeight*e,c=this.cutoutRect.top-this.bBoxRect.top,d=c+this.cutoutRect.height;c<r?s-=r-c:d>l&&(s+=d-l),this.positionAll(t,s,e)}mouseDown(e){e.touches?(this.mouseX=e.touches[0].pageX,this.mouseY=e.touches[0].pageY):(this.mouseX=e.pageX,this.mouseY=e.pageY),window.addEventListener("mousemove",this.mouseMove,{passive:!1}),window.addEventListener("touchmove",this.mouseTouch,{passive:!1}),window.addEventListener("mouseup",this.mouseUp,{passive:!0}),window.addEventListener("touchend",this.mouseUp,{passive:!0}),document.body.style.userSelect="none"}translate(e,t){const s=e-this.mouseX,a=t-this.mouseY;this.mouseX=e,this.mouseY=t;const i=this.preview.current.getBoundingClientRect();let n=ia.checkBound(this.state.panX,[i.left,i.right],[this.cutoutRect.left,this.cutoutRect.right],s),o=ia.checkBound(this.state.panY,[i.top,i.bottom],[this.cutoutRect.top,this.cutoutRect.bottom],a);this.positionAll(n,o,this.state.zoom)}mouseMove(e){e.preventDefault(),this.translate(e.pageX,e.pageY)}mouseTouch(e){if(e.preventDefault(),1==e.touches.length)return void this.translate(e.touches[0].pageX,e.touches[0].pageY);const[t,s]=e.touches,a=Math.sqrt((t.pageX-s.pageX)*(t.pageX-s.pageX)+(t.pageY-s.pageY)*(t.pageY-s.pageY));this.prevDistance||(this.prevDistance=a/this.state.zoom);let i=a/this.prevDistance;this.handleZoom(Math.max(this.minZoom,Math.min(this.maxZoom,i)))}mouseUp(e){window.removeEventListener("mousemove",this.mouseMove),window.removeEventListener("touchmove",this.mouseTouch),window.removeEventListener("mouseup",this.mouseUp),window.removeEventListener("touchend",this.mouseUp),document.body.style.userSelect="",this.positionAll(this.state.panX,this.state.panY,this.state.zoom)}render(){const e=`translate3d(${this.state.panX}px, ${this.state.panY}px, 0) scale(${this.state.zoom})`,t=`${this.state.originX}px ${this.state.originY}px`,s={top:this.originY-this.state.originY*this.state.zoom+"px",left:this.originX-this.state.originX*this.state.zoom+"px",width:this.imageWidth*this.state.zoom+"px",height:this.imageHeight*this.state.zoom+"px"};return i().createElement("div",{className:"cropper"},i().createElement("div",{className:"bounding-box",ref:this.boundingBox},i().createElement("img",{src:this.props.source,className:"preview",alt:"",style:{transform:e,transformOrigin:t},ref:this.preview,onLoad:this.initScaling}),i().createElement("div",{className:"cutout circle",ref:this.cutout}),i().createElement("div",{className:"overlay",style:s,ref:this.overlay})),i().createElement("div",{className:"zoom-wrapper"},i().createElement("input",{type:"range",className:"zoomer",step:"0.001",min:this.state.minZoom,max:this.state.maxZoom,value:this.state.zoom,onChange:this.onZoom})))}}class na extends i().PureComponent{constructor(e){super(e),this.state={top:0,left:0,width:0,height:0,scale:1},this.handleSubmit=this.handleSubmit.bind(this),this.handleChange=this.handleChange.bind(this)}handleChange(e,t,s,a,i){this.setState({left:e,top:t,width:s,height:a,scale:i})}handleSubmit(){(0,ws.Id)(this.props.mime,this.props.avatar,this.state.left,this.state.top,this.state.width,this.state.height,this.state.scale).then((e=>{this.props.onSubmit(e.mime,e.blob,e.width,e.height)})).catch((e=>{this.props.onError(e)}))}render(){return i().createElement("div",{className:"panel-form"},i().createElement("div",{className:"panel-form-row"},i().createElement(ia,{source:this.props.avatar,onChange:this.handleChange})),i().createElement("div",{className:"dialog-buttons"},this.props.onCancel?i().createElement("button",{className:"secondary",onClick:this.props.onCancel},i().createElement(r.FormattedMessage,{id:"button_cancel",defaultMessage:[{type:0,value:"Cancel"}]})):null,i().createElement("button",{className:"primary",onClick:this.handleSubmit},i().createElement(r.FormattedMessage,{id:"button_ok",defaultMessage:[{type:0,value:"OK"}]}))))}}class oa extends i().PureComponent{constructor(e){super(e),this.inputRef=i().createRef(),this.state={value:this.props.value,visible:!1},this.handleVisibility=this.handleVisibility.bind(this),this.handeTextChange=this.handeTextChange.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this),this.handleEditingFinished=this.handleEditingFinished.bind(this)}componentDidMount(){this.props.autoFocus&&this.inputRef.current.focus()}handeTextChange(e){this.setState({value:e.target.value}),this.props.onChange&&this.props.onChange(e)}handleVisibility(e){e.preventDefault(),this.setState({visible:!this.state.visible})}handleKeyDown(e){27==e.keyCode?(this.setState({value:this.props.value,visible:!1}),this.props.onFinished&&this.props.onFinished()):13==e.keyCode&&this.handleEditingFinished()}handleEditingFinished(e){if(e){let t=e.currentTarget;setTimeout((()=>{t.contains(document.activeElement)||this.props.onFinished&&this.props.onFinished(this.state.value)}),0)}else this.props.onFinished&&this.props.onFinished(this.state.value.trim())}render(){return i().createElement("div",{tabIndex:"-1",className:"group-focus",onBlur:this.handleEditingFinished},i().createElement("input",{className:"with-visibility",type:this.state.visible?"text":"password",value:this.state.value,placeholder:this.props.placeholder,required:this.props.required?"required":"",autoFocus:this.props.autoFocus?"autoFocus":"",autoComplete:this.props.autoComplete,onChange:this.handeTextChange,onKeyDown:this.handleKeyDown,ref:this.inputRef}),i().createElement("span",{onClick:this.handleVisibility},i().createElement("i",{className:"material-icons clickable light-gray"},this.state.visible?"visibility":"visibility_off")))}}class ra extends i().Component{constructor(e){super(e),this.selfRef=i().createRef(),this.state={active:e.active,initialValue:e.value||"",value:e.value||""},this.handeTextChange=this.handeTextChange.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this),this.handleStartEditing=this.handleStartEditing.bind(this),this.handleEditingFinished=this.handleEditingFinished.bind(this),this.handlePasswordFinished=this.handlePasswordFinished.bind(this)}componentDidUpdate(e,t){const s=this.props.value||"";t.initialValue==s||t.active||this.setState({initialValue:s,value:s})}handeTextChange(e){this.setState({value:e.target.value||""})}handleKeyDown(e){27===e.keyCode?this.setState({value:this.props.value,active:!1}):13===e.keyCode&&this.handleEditingFinished(e)}handleStartEditing(){this.props.readOnly||this.setState({active:!0},(()=>{this.selfRef.current&&this.selfRef.current.focus()}))}handleEditingFinished(e){const t=this.state.value.trim();!this.props.required||e.target.checkValidity()&&t?(this.setState({active:!1}),(t||this.props.value)&&t!==this.props.value&&this.props.onFinished(t)):this.setState({value:this.props.value,active:!1})}handlePasswordFinished(e){this.setState({active:!1}),e&&e!==this.props.value&&this.props.onFinished(e)}render(){if(!this.state.active){let e="password"==this.props.type?"••••••••":this.state.value,t="in-place-edit"+(this.props.readOnly?" disabled":"");return e||(e=this.props.placeholder,t+=" placeholder"),this.props.multiline&&1!=this.props.multiline||(t+=" short"),i().createElement("span",{className:t,onClick:this.handleStartEditing},i().createElement("span",null,e))}let e;const t={};return"password"==this.props.type?(e=oa,t.onFinished=this.handlePasswordFinished):(this.props.multiline>1?(e="textarea",t.rows=this.props.multiline,t.className="inplace-edit"):(e="input",t.type=this.props.type||"text"),t.value=this.state.value,t.ref=this.selfRef,t.onChange=this.handeTextChange,t.onKeyDown=this.handleKeyDown,t.onBlur=this.handleEditingFinished),t.placeholder=this.props.placeholder,t.required=this.props.required?"required":"",t.autoComplete=this.props.autoComplete,t.autoFocus=!0,i().createElement(e,t,null)}}class la extends i().Component{constructor(e){super(e),this.state={tags:this.props.tags||[],tagInput:"",activated:this.props.activated},this.handleTagInput=this.handleTagInput.bind(this),this.handleAddTag=this.handleAddTag.bind(this),this.handleRemoveTag=this.handleRemoveTag.bind(this),this.handleSubmit=this.handleSubmit.bind(this),this.handleCancel=this.handleCancel.bind(this)}static getDerivedStateFromProps(e,t){const s=e.tags||[];return os(s,t.tags)||t.activated?null:{tags:s}}handleTagInput(e){if(this.setState({tagInput:e}),e.length>0){const t=e[e.length-1];'"'==e[0]?e.length>1&&'"'==t&&this.handleAddTag(e.substring(1,e.length-1)):","!=t&&" "!=t&&";"!=t&&'"'!=t||this.handleAddTag(e.substring(0,e.length-1).trim())}}handleAddTag(e){const t=this.props.tinode.getServerParam("maxTagCount",Yt.pM);if(e.length>0&&this.state.tags.length<t){const t=this.state.tags.slice(0);return t.push(e),this.setState({tags:t,tagInput:""}),this.props.onTagsChanged&&this.props.onTagsChanged(t),t}return this.state.tags}handleRemoveTag(e,t){const s=this.state.tags.slice(0);s.splice(t,1),this.setState({tags:s}),this.props.onTagsChanged&&this.props.onTagsChanged(s)}handleSubmit(){this.props.onSubmit(this.handleAddTag(this.state.tagInput.trim())),this.setState({activated:!1,tags:this.props.tags||[]})}handleCancel(){this.setState({activated:!1,tagInput:"",tags:this.props.tags||[]}),this.props.onCancel&&this.props.onCancel()}render(){const e=this.props.tinode.getServerParam("minTagLength",Yt.VL),t=this.props.tinode.getServerParam("maxTagLength",Yt.cG);let s=[];return this.state.activated?this.state.tags.map((a=>{s.push({user:a,invalid:a.length<e||a.length>t})})):(this.state.tags.map((e=>{s.push(i().createElement("span",{className:"badge",key:s.length},e))})),0==s.length&&(s=i().createElement("i",null,i().createElement(r.FormattedMessage,{id:"tags_not_found",defaultMessage:[{type:0,value:"No tags defined. Add some."}]})))),i().createElement("div",{className:"panel-form-column"},i().createElement("div",{className:"panel-form-row"},i().createElement("label",{className:"small"},this.props.title)),this.state.activated?i().createElement("div",null,i().createElement(r.FormattedMessage,{id:"tags_editor_no_tags",defaultMessage:[{type:0,value:"Add some tags"}]},(e=>i().createElement(Ys,{tinode:this.props.tinode,chips:s,avatarDisabled:!0,prompt:e,tabIndex:this.props.tabIndex,onEnter:this.handleAddTag,onFocusLost:this.handleAddTag,onCancel:this.handleCancel,onChipRemoved:this.handleRemoveTag,filterFunc:this.handleTagInput}))),this.props.onSubmit||this.props.onCancel?i().createElement("div",{id:"tag-manager-buttons",className:"dialog-buttons panel-form-row"},i().createElement("button",{className:"outline",onClick:this.handleCancel},i().createElement(r.FormattedMessage,{id:"button_cancel",defaultMessage:[{type:0,value:"Cancel"}]})),i().createElement("button",{className:"primary",onClick:this.handleSubmit},i().createElement(r.FormattedMessage,{id:"button_ok",defaultMessage:[{type:0,value:"OK"}]}))):null):i().createElement("div",{className:"quoted"},i().createElement("a",{href:"#",className:"flat-button",onClick:e=>{e.preventDefault(),this.setState({activated:!0})}},i().createElement("i",{className:"material-icons"},"edit")," ",i().createElement(r.FormattedMessage,{id:"title_manage_tags",defaultMessage:[{type:0,value:"Manage"}]})),i().createElement(i().Fragment,null,s)))}}class ca extends i().Component{constructor(e){super(e);const t=this.props.tinode.getTopic(this.props.topic),s=t.getAccessMode();this.state={isMe:Qt.Tinode.isMeTopicName(this.props.topic),owner:s&&s.isOwner(),fullName:t.public?t.public.fn:void 0,private:t.private?t.private.comment:null,description:t.public?t.public.note:void 0,avatar:(0,ws.PD)(t.public?t.public.photo:null),tags:t.tags()||[],newAvatar:null,newAvatarMime:null},this.previousOnTags=null,this.tnNewTags=this.tnNewTags.bind(this),this.handleFullNameUpdate=this.handleFullNameUpdate.bind(this),this.handleImageUpdated=this.handleImageUpdated.bind(this),this.handleAvatarCropped=this.handleAvatarCropped.bind(this),this.handleAvatarCropCancel=this.handleAvatarCropCancel.bind(this),this.uploadAvatar=this.uploadAvatar.bind(this),this.handlePrivateUpdate=this.handlePrivateUpdate.bind(this),this.handleDescriptionUpdate=this.handleDescriptionUpdate.bind(this),this.handleTagsUpdated=this.handleTagsUpdated.bind(this)}componentDidMount(){const e=this.props.tinode.getTopic(this.props.topic);this.previousOnTags=e.onTagsUpdated,e.onTagsUpdated=this.tnNewTags}componentWillUnmount(){this.props.tinode.getTopic(this.props.topic).onTagsUpdated=this.previousOnTags}tnNewTags(e){this.setState({tags:e})}handleFullNameUpdate(e){(e=e.trim().substring(0,Yt.S8))&&this.state.fullName!==e&&(this.setState({fullName:e}),this.props.onUpdateTopicDesc(this.props.topic,ns(e,null)))}handlePrivateUpdate(e){e=e.trim().substring(0,Yt.S8),this.state.private!==e&&(this.setState({private:e}),this.props.onUpdateTopicDesc(this.props.topic,null,e||Qt.Tinode.DEL_CHAR))}handleDescriptionUpdate(e){(e=e.trim().substring(0,Yt.EI))&&(this.setState({description:e}),this.props.onUpdateTopicDesc(this.props.topic,ns(null,null,null,e)))}handleImageUpdated(e,t){this.setState({newAvatar:t,newAvatarMime:e}),t||(this.setState({avatar:null}),this.props.onUpdateTopicDesc(this.props.topic,ns(null,Qt.Tinode.DEL_CHAR)))}handleAvatarCropped(e,t,s,a){const i=t?URL.createObjectURL(t):null;this.setState({avatar:i,newAvatar:null,newAvatarMime:null}),t&&this.uploadAvatar(e,t,s,a)}uploadAvatar(e,t,s,a){const i=e=>{let{mime:t,blob:s}=e;if(s.size>Yt.uv){this.props.tinode.getLargeFileHelper().upload(s).then((e=>this.props.onUpdateTopicDesc(this.props.topic,ns(null,e)))).catch((e=>this.props.onError(e.message,"err")))}else(0,ws.w8)(s).then((e=>{const s=(0,ws.PD)({data:e.bits,type:t});this.setState({source:s}),this.props.onUpdateTopicDesc(this.props.topic,ns(null,s))}))};s>Yt.IX||a>Yt.IX||s!=a?(0,ws.EA)(t,Yt.IX,Yt.IX,Yt.GQ,!0).then((e=>i(e))).catch((e=>this.props.onError(e.message,"err"))):i({mime:e,blob:t,width:s,height:a})}handleAvatarCropCancel(){this.setState({newAvatar:null,newAvatarMime:null})}handleTagsUpdated(e){os(this.state.tags.slice(0),e.slice(0))||this.props.onUpdateTags(e)}render(){if(this.state.newAvatar)return i().createElement(na,{avatar:this.state.newAvatar,mime:this.state.newAvatarMime,onSubmit:this.handleAvatarCropped,onCancel:this.handleAvatarCropCancel,onError:this.props.onError});const e=this.state.isMe||this.state.owner;return i().createElement(i().Fragment,null,i().createElement("div",{className:"panel-form-column"},i().createElement("center",null,i().createElement(Ws,{tinode:this.props.tinode,avatar:this.state.avatar,readOnly:!e,uid:this.props.topic,title:this.state.fullName,onImageUpdated:this.handleImageUpdated,onError:this.props.onError})),this.state.isMe?i().createElement("div",{className:"group"},i().createElement("label",{className:"small"},i().createElement(r.FormattedMessage,{id:"label_your_name",defaultMessage:[{type:0,value:"Your name"}]})),i().createElement("div",null,i().createElement(r.FormattedMessage,{id:"full_name_prompt",defaultMessage:[{type:0,value:"Full name, e.g. John Doe"}]},(e=>i().createElement(ra,{placeholder:e,value:this.state.fullName,required:!0,onFinished:this.handleFullNameUpdate}))))):i().createElement(i().Fragment,null,i().createElement("div",{className:"group"},i().createElement("div",null,i().createElement("label",{className:"small"},i().createElement(r.FormattedMessage,{id:"label_topic_name",defaultMessage:[{type:0,value:"Name"}]}))),i().createElement("div",null,i().createElement(r.FormattedMessage,{id:"topic_name_editing_placeholder",defaultMessage:[{type:0,value:"Freeform name of the group"}]},(t=>i().createElement(ra,{placeholder:t,readOnly:!e,value:this.state.fullName,required:!0,onFinished:this.handleFullNameUpdate}))))),i().createElement("div",{className:"group"},i().createElement("div",null,i().createElement("label",{className:"small"},i().createElement(r.FormattedMessage,{id:"label_private",defaultMessage:[{type:0,value:"Private comment"}]}))),i().createElement("div",null,i().createElement(r.FormattedMessage,{id:"private_editing_placeholder",defaultMessage:[{type:0,value:"Visible to you only"}]},(e=>i().createElement(ra,{placeholder:e,value:this.state.private,onFinished:this.handlePrivateUpdate})))))),e||this.state.description?i().createElement("div",{className:"group"},i().createElement("div",null,i().createElement("label",{className:"small"},i().createElement(r.FormattedMessage,{id:"label_description",defaultMessage:[{type:0,value:"Description"}]}))),i().createElement("div",null,i().createElement(r.FormattedMessage,{id:"description_editing_placeholder",defaultMessage:[{type:0,value:"Description (optional)"}]},(t=>i().createElement(ra,{placeholder:t,readOnly:!e,value:this.state.description,multiline:2,onFinished:this.handleDescriptionUpdate}))))):null),e?i().createElement(i().Fragment,null,i().createElement("div",{className:"hr"}),i().createElement(r.FormattedMessage,{id:"title_tag_manager",defaultMessage:[{type:0,value:"Tags (search & discovery)"}]},(e=>i().createElement(la,{tinode:this.props.tinode,title:e,activated:!1,tags:this.state.tags,onSubmit:this.handleTagsUpdated})))):null)}}class da extends i().Component{constructor(e){super(e);const t=this.props.tinode.getTopic(this.props.topic),s=t.getAccessMode();this.state={isMe:"me"==this.props.topic,owner:s&&s.isOwner(),credentials:(t.getCredentials?t.getCredentials():null)||[],addCredActive:!1,addCredInvalid:!1,newCred:"",tags:[]},this.previousTagsUpdated=void 0,this.onTagsUpdated=this.onTagsUpdated.bind(this),this.handleTagsUpdated=this.handleTagsUpdated.bind(this),this.tnCredsUpdated=this.tnCredsUpdated.bind(this),this.handleCredChange=this.handleCredChange.bind(this),this.handleCredKeyDown=this.handleCredKeyDown.bind(this),this.handleCredEntered=this.handleCredEntered.bind(this)}componentDidUpdate(e){const t=this.props.tinode.getTopic(e.topic);t&&(t.onCredsUpdated=this.tnCredsUpdated,t.onTagsUpdated!=this.onTagsUpdated&&("grp"==t.getType()?(this.previousTagsUpdated=t.onTagsUpdated,t.onTagsUpdated=this.onTagsUpdated):this.previousTagsUpdated=void 0),this.state.topic!=e.topic&&this.setState({topic:e.topic}))}componentWillUnmount(){const e=this.props.tinode.getTopic(this.props.topic);e.onCredsUpdated=void 0,e.onTagsUpdated=this.previousTagsUpdated}tnCredsUpdated(e){this.setState({credentials:e||[]})}handleCredChange(e){this.setState({newCred:e.target.value,addCredInvalid:!1})}handleCredKeyDown(e){27===e.keyCode?this.setState({newCred:"",addCredActive:!1}):13===e.keyCode&&this.handleCredEntered(e)}handleCredEntered(e){const t=this.state.newCred.trim();if(!t)return void this.setState({addCredActive:!1,addCredInvalid:!1});let s,a=function(e){return e=e.trim(),/^(?:\+?(\d{1,3}))?[- (.]*(\d{3})[- ).]*(\d{3})[- .]*(\d{2})[- .]*(\d{2})?$/.test(e)?e.replace(/[- ().]*/,""):null}(t);a?s="tel":(a=function(e){return e=e.trim(),/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/.test(e)?e:null}(t),a&&(s="email")),s?(this.props.onCredAdd(s,a),this.setState({addCredActive:!1,newCred:""})):this.setState({addCredInvalid:!0})}onTagsUpdated(e){this.setState({tags:e}),this.previousTagsUpdated&&this.previousTagsUpdated!=this.onTagsUpdated&&this.previousTagsUpdated(e)}handleTagsUpdated(e){os(this.state.tags.slice(0),e.slice(0))||this.props.onTopicTagsUpdateRequest(this.props.topic,e)}render(){const e=[];return this.state.isMe&&this.state.credentials.map((t=>{e.push(i().createElement("div",{key:t.meth+":"+t.val+":"+t.done},t.meth,": ",i().createElement("tt",null,t.val),i().createElement("span",null," ",t.done?null:i().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.props.onCredConfirm(t.meth,t.val)}},i().createElement(r.FormattedMessage,{id:"validate_credential_action",defaultMessage:[{type:0,value:"confirm"}]}))," ",i().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.props.onCredDelete(t.meth,t.val)}},i().createElement("i",{className:"material-icons gray"},"delete_outline")))))})),i().createElement("div",{className:"scrollable-panel"},i().createElement(ca,{tinode:this.props.tinode,topic:this.props.topic,onUpdateTopicDesc:this.props.onUpdateTopicDesc,onUpdateTags:this.handleTagsUpdated,onError:this.props.onError}),this.state.isMe?i().createElement(i().Fragment,null,i().createElement("div",{className:"hr"}),i().createElement("div",{className:"panel-form-column"},i().createElement("label",{className:"small"},i().createElement(r.FormattedMessage,{id:"label_user_contacts",defaultMessage:[{type:0,value:"Contacts:"}]})),i().createElement("div",{className:"quoted"},e,this.state.addCredActive?i().createElement(r.FormattedMessage,{id:"phone_or_email_prompt",defaultMessage:[{type:0,value:"Phone number or email"}]},(e=>i().createElement("input",{type:"text",value:this.state.value,className:this.state.addCredInvalid?"invalid":null,placeholder:e,required:"required",autoFocus:!0,onChange:this.handleCredChange,onKeyDown:this.handleCredKeyDown,onBlur:this.handleCredEntered}))):null,i().createElement("div",null,i().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.setState({addCredActive:!0})}},i().createElement("i",{className:"material-icons"},"add"),i().createElement(r.FormattedMessage,{id:"button_add_another",defaultMessage:[{type:0,value:"Add another"}]})))))):null)}}const ha=(0,r.defineMessages)({clear_messages:{id:"action_clear_messages",defaultMessage:[{type:0,value:"Clear Messages"}]},clear_messages_warning:{id:"clear_messages_warning",defaultMessage:[{type:0,value:"Are you sure you want to clear all messages? It cannot be undone."}]},delete_messages:{id:"action_delete_messages",defaultMessage:[{type:0,value:"Clear Messages for All"}]},delete_messages_warning:{id:"delete_messages_warning",defaultMessage:[{type:0,value:"Are you sure you want to delete all messages for everyone? It cannot be undone."}]},topic_delete:{id:"topic_delete",defaultMessage:[{type:0,value:"Delete Conversation"}]},topic_delete_warning:{id:"topic_delete_warning",defaultMessage:[{type:0,value:"Are you sure you want to delete this conversation? It cannot be undone."}]},leave_chat:{id:"action_leave_chat",defaultMessage:[{type:0,value:"Leave Conversation"}]},leave_chat_warning:{id:"leave_chat_warning",defaultMessage:[{type:0,value:"Are you sure you want to leave this conversation?"}]},block_contact:{id:"action_block_contact",defaultMessage:[{type:0,value:"Block Contact"}]},block_contact_warning:{id:"block_contact_warning",defaultMessage:[{type:0,value:"Are you sure you want to block this contact?"}]},report_chat:{id:"action_report_chat",defaultMessage:[{type:0,value:"Report Conversation"}]},report_chat_warning:{id:"report_chat_warning",defaultMessage:[{type:0,value:"Are you sure you want to block and report this conversation?"}]},other_user:{id:"label_other_user",defaultMessage:[{type:0,value:"Other"}]}});class pa extends i().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:t}=this.props.intl;this.props.onShowAlert(t(ha.topic_delete),t(ha.topic_delete_warning),(()=>{this.props.onDeleteTopic(this.props.topic)}),null,!0,null)}handleDeleteMessages(e){e.preventDefault();const{formatMessage:t}=this.props.intl;this.props.onShowAlert(t(this.props.deleter?ha.delete_messages:ha.clear_messages),t(this.props.deleter?ha.delete_messages_warning:ha.clear_messages_warning),(()=>{this.props.onDeleteMessages(this.props.topic)}),null,!0,null)}handleLeave(e){e.preventDefault();const{formatMessage:t}=this.props.intl;this.props.onShowAlert(t(ha.leave_chat),t(ha.leave_chat_warning),(()=>{this.props.onLeaveTopic(this.props.topic)}),null,!0,null)}handleBlock(e){e.preventDefault();const{formatMessage:t}=this.props.intl;this.props.onShowAlert(t(ha.block_contact),t(ha.block_contact_warning),(()=>{this.props.onBlockTopic(this.props.topic)}),null,!0,null)}handleReport(e){e.preventDefault();const{formatMessage:t}=this.props.intl;this.props.onShowAlert(t(ha.report_chat),t(ha.report_chat_warning),(e=>{this.props.onReportTopic(this.props.topic)}),null,!0,null)}render(){const{formatMessage:e}=this.props.intl;return i().createElement("div",{className:"scrollable-panel"},i().createElement("div",{className:"panel-form-column"},this.props.channel?null:i().createElement("a",{href:"#",className:"flat-button",onClick:this.handleDeleteMessages},i().createElement("i",{className:"material-icons"},"delete_outline")," ",e(this.props.deleter?ha.delete_messages:ha.clear_messages)),this.props.owner?i().createElement("a",{href:"#",className:"danger flat-button",onClick:this.handleDeleteTopic},i().createElement("i",{className:"material-icons"},"delete")," ",e(ha.topic_delete)):i().createElement("a",{href:"#",className:"danger flat-button",onClick:this.handleLeave},i().createElement("i",{className:"material-icons"},"exit_to_app")," ",e(ha.leave_chat)),this.props.groupTopic?null:i().createElement("a",{href:"#",className:"danger flat-button",onClick:this.handleBlock},i().createElement("i",{className:"material-icons"},"block")," ",e(ha.block_contact)),this.props.owner?null:i().createElement("a",{href:"#",className:"danger flat-button",onClick:this.handleReport},i().createElement("i",{className:"material-icons"},"report")," ",e(ha.report_chat))),i().createElement("div",{className:"hr"}),i().createElement("div",{className:"panel-form-column"},this.props.groupTopic?i().createElement(i().Fragment,null,i().createElement("div",{className:"group"},i().createElement("label",null,i().createElement(r.FormattedMessage,{id:"label_your_permissions",defaultMessage:[{type:0,value:"Your permissions:"}]}))," ",i().createElement("tt",{className:"clickable",onClick:e=>{e.preventDefault(),this.props.onLaunchPermissionsEditor("want")}},this.props.access)),this.props.channel?null:i().createElement("div",{className:"group"},i().createElement("div",null,i().createElement("label",{className:"small"},i().createElement(r.FormattedMessage,{id:"label_default_access_mode",defaultMessage:[{type:0,value:"Default access mode:"}]}))),i().createElement("div",{className:"quoted"},i().createElement("div",null,"Auth: ",i().createElement("tt",{className:this.props.owner?"clickable":null,onClick:e=>{e.preventDefault(),this.props.owner&&this.props.onLaunchPermissionsEditor("auth")}},this.props.auth)),i().createElement("div",null,"Anon: ",i().createElement("tt",{className:this.props.owner?"clickable":null,onClick:e=>{e.preventDefault(),this.props.owner&&this.props.onLaunchPermissionsEditor("anon")}},this.props.anon))))):i().createElement("div",{className:"group"},i().createElement("div",null,i().createElement("label",{className:"small"},i().createElement(r.FormattedMessage,{id:"label_permissions",defaultMessage:[{type:0,value:"Permissions:"}]}))),i().createElement("div",{className:"quoted"},i().createElement("div",null,i().createElement(r.FormattedMessage,{id:"label_you",defaultMessage:[{type:0,value:"You:"}]})," ",i().createElement("tt",{className:"clickable",onClick:e=>{e.preventDefault(),this.props.onLaunchPermissionsEditor("want")}},this.props.access)),i().createElement("div",null,this.props.fullName?this.props.fullName:e(ha.other_user),": ",i().createElement("tt",{className:"clickable",onClick:e=>{e.preventDefault(),this.props.onLaunchPermissionsEditor("given")}},this.props.modeGiven2))))))}}const ua=(0,r.injectIntl)(pa),ma=(0,r.defineMessages)({info:{id:"panel_title_info",defaultMessage:[{type:0,value:"Info"}]},general:{id:"panel_title_general",defaultMessage:[{type:0,value:"General"}]},security:{id:"panel_title_security",defaultMessage:[{type:0,value:"Security"}]},members:{id:"panel_title_members",defaultMessage:[{type:0,value:"Members"}]},crop:{id:"panel_title_crop",defaultMessage:[{type:0,value:"Drag to Adjust"}]},perm_want:{id:"requested_permissions",defaultMessage:[{type:0,value:"Requested"}]},perm_given:{id:"granted_permissions",defaultMessage:[{type:0,value:"Granted"}]},perm_auth:{id:"permissions_authenticated",defaultMessage:[{type:0,value:"Authenticated"}]},perm_anon:{id:"permissions_anonymous",defaultMessage:[{type:0,value:"Anonymous"}]},perm_user:{id:"permissions_user",defaultMessage:[{type:0,value:"User's Permissions"}]},edit_permissions:{id:"menu_item_edit_permissions",defaultMessage:[{type:0,value:"Edit permissions"}]}});class ga extends i().Component{constructor(e){super(e),this.state={topic:null,owner:!1,admin:!1,sharer:!1,deleter:!1,muted:!1,address:null,groupTopic:void 0,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.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.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)}componentDidUpdate(e){const t=this.props.tinode.getTopic(e.topic);t&&(this.onMetaDesc!=t.onMetaDesc&&(this.previousMetaDesc=t.onMetaDesc,t.onMetaDesc=this.onMetaDesc,this.previousSubsUpdated=t.onSubsUpdated,t.onSubsUpdated=this.onSubsUpdated),this.state.topic!=e.topic&&(this.setState({topic:e.topic}),this.resetDesc(t,e),this.resetSubs(t,e),this.resetTags(t)))}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,t){const s={contactList:[]};if("p2p"==e.getType()){const a=e.subscriber(t.topic);a?(s.modeGiven2=a.acs.getGiven(),s.modeWant2=a.acs.getWant()):(s.modeGiven2=Yt.xt,s.modeWant2=Yt.xt)}else e.subscribers((e=>{s.contactList.push(e)}),this);this.setState(s)}resetDesc(e,t){const s=e.getDefaultAccess()||{},a=e.getAccessMode(),i=[];if(e.trusted)for(const[t,s]of Object.entries(e.trusted))s&&i.push(t);this.setState({owner:a&&a.isOwner(),admin:a&&a.isAdmin(),sharer:a&&a.isSharer(),deleter:a&&a.isDeleter(),muted:a&&a.isMuted(),fullName:hs(e.public&&e.public.fn,Yt.S8),description:hs(e.public&&e.public.note,Yt.EI),avatar:(0,ws.PD)(e.public?e.public.photo:null),trustedBadges:i,private:hs(e.private&&e.private.comment,Yt.S8),archived:e.isArchived(),address:e.name,groupTopic:e.isGroupType(),channel:e.isChannelType()||e.chan,access:a?a.getMode():void 0,modeGiven:a?a.getGiven():void 0,modeWant:a?a.getWant():void 0,auth:s.auth,anon:s.anon})}resetTags(e){if("grp"!=e.getType())return;const t=e.getAccessMode();t&&t.isOwner()&&e.getMeta(e.startMetaQuery().withTags().build())}onMetaDesc(e){const t=this.props.tinode.getTopic(this.props.topic);t&&(this.resetDesc(t,this.props),this.previousMetaDesc&&this.previousMetaDesc!=this.onMetaDesc&&this.previousMetaDesc(e))}onSubsUpdated(e){const t=this.props.tinode.getTopic(this.props.topic);t&&(this.resetSubs(t,this.props),this.previousSubsUpdated&&this.previousSubsUpdated!=this.onSubsUpdated&&this.previousSubsUpdated(e))}handleImageChanged(e,t){this.setState({avatar:t}),this.props.onTopicDescUpdate(this.props.topic,ns(null,t||Qt.Tinode.DEL_CHAR),null)}handleMuted(e,t){this.setState({muted:t}),this.props.onChangePermissions(this.props.topic,t?"-P":"+P")}handleUnarchive(e,t){this.props.onTopicUnArchive(this.props.topic)}handlePermissionsChanged(e,t){switch(e){case"auth":this.props.onTopicDescUpdateRequest(this.props.topic,null,null,{auth:t});break;case"anon":this.props.onTopicDescUpdateRequest(this.props.topic,null,null,{anon:t});break;case"mode":case"want":this.props.onChangePermissions(this.props.topic,t);break;case"given":this.props.onChangePermissions(this.props.topic,t,this.props.topic);break;case"user":this.props.onChangePermissions(this.props.topic,t,this.state.userPermissionsEdited)}this.handleBackNavigate()}handleLaunchPermissionsEditor(e,t){const{formatMessage:s}=this.props.intl;let a,i,n,o,r,l,c;switch(e){case"mode":a=this.state.access;break;case"want":a=this.state.modeWant,i=this.state.modeGiven,this.state.owner?n="O":(n=Qt.AccessMode.encode(Qt.AccessMode.diff("ASDO",this.state.modeGiven)),this.state.channel&&(n+="W")),o=s(ma.perm_want),r=s(ma.perm_given);break;case"given":a=this.state.modeGiven2,i=this.state.modeWant2,n=this.state.groupTopic?this.state.owner?"":"O":"ASDO",o=s(ma.perm_given),r=s(ma.perm_want);break;case"auth":a=this.state.auth,n="O";break;case"anon":a=this.state.anon,n="O";break;case"user":{const e=this.props.tinode.getTopic(this.props.topic);if(!e)return;const d=e.subscriber(t);if(!d||!d.acs)return;a=d.acs.getGiven(),i=d.acs.getWant(),n=this.state.owner?"":"O",o=s(ma.perm_given),r=s(ma.perm_want),d.public&&(l=d.public.fn,c=d.public.photo);break}default:return void console.error("Unknown permission editing mode '"+e+"'")}this.setState({userPermissionsEdited:t,userPermissionsTitle:l,userPermissionsAvatar:c,editedPermissions:a,immutablePermissions:i,editedPermissionsTitle:o,immutablePermissionsTitle:r,editedPermissionsSkipped:n}),this.props.onNavigate(`perm/${e}`)}handleShowAddMembers(e){e.preventDefault(),this.props.onInitFind(),this.props.onNavigate("members")}handleMemberUpdateRequest(e,t,s){this.props.onMemberUpdateRequest(this.props.topic,t,s),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:t}=this.props.intl,s=this.props.tinode.getTopic(this.props.topic);if(!s)return;const a=s.subscriber(e.topicName);if(!a||!a.acs)return;const i=this.props.tinode.isMe(e.topicName),n=[{title:t(ma.edit_permissions),handler:()=>{this.handleLaunchPermissionsEditor(i?"want":"user",e.topicName)}}];i||n.push("member_delete"),n.push(a.acs.isMuted()?"member_unmute":"member_mute"),i||n.push(a.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("/"),t=e[0];e.shift();const{formatMessage:s}=this.props.intl,a=s(("perm"==t?ma["perm_"+e[0]]:ma[t])||ma.info);return i().createElement("div",{id:"info-view"},i().createElement("div",{className:"caption-panel",id:"info-caption-panel"},i().createElement("div",{className:"panel-title",id:"info-title"},a),i().createElement("div",null,i().createElement($s,{onCancel:this.handleBackNavigate}))),this.props.displayMobile?i().createElement(Qs,{level:this.props.errorLevel,text:this.props.errorText,onClearError:this.props.onError}):null,"members"==t?i().createElement(ea,{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"==t&&e.length>0?i().createElement(aa,{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:t=>this.handlePermissionsChanged(e[0],t),onCancel:this.handleBackNavigate}):"general"==t?i().createElement(da,{tinode:this.props.tinode,topic:this.props.topic,onCredAdd:this.props.onCredAdd,onTopicTagsUpdateRequest:this.props.onTopicTagsUpdateRequest,onCredConfirm:this.props.onCredConfirm,onCredDelete:this.props.onCredDelete,onUpdateTopicDesc:this.props.onTopicDescUpdateRequest,onError:this.props.onError}):"security"==t?i().createElement(ua,{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}):i().createElement("div",{id:"info-view-content",className:"scrollable-panel"},i().createElement("div",{className:"panel-form-column"},i().createElement("a",{href:"#",className:"flat-button float-right",onClick:e=>{e.preventDefault(),this.props.onNavigate("general")}},i().createElement("i",{className:"material-icons"},"edit")," ",i().createElement(r.FormattedMessage,{id:"button_edit",defaultMessage:[{type:0,value:"Edit"}]})),i().createElement("center",null,i().createElement(Ws,{tinode:this.props.tinode,avatar:this.state.avatar,readOnly:!0,uid:this.props.topic,title:this.state.fullName})),i().createElement("div",{className:"group"},i().createElement("div",null,i().createElement("label",{className:"small"},i().createElement(r.FormattedMessage,{id:"label_topic_name",defaultMessage:[{type:0,value:"Name"}]}))),i().createElement("div",{className:"large ellipsized"},this.state.fullName,this.state.channel?i().createElement("img",{src:"/img/channel.png",className:"channel",alt:"channel"}):null)),this.state.private?i().createElement("div",{className:"group"},i().createElement("div",null,i().createElement("label",{className:"small"},i().createElement(r.FormattedMessage,{id:"label_private",defaultMessage:[{type:0,value:"Private comment"}]}))),i().createElement("div",{className:"large ellipsized"},this.state.private)):null,i().createElement("div",{className:"group"},i().createElement("label",{className:"small"},i().createElement(r.FormattedMessage,{id:"label_user_id",defaultMessage:[{type:0,value:"ID:"}]}))," ",i().createElement("tt",null,this.state.address)),i().createElement("div",{className:"group"},i().createElement(js,{trustedBadges:this.state.trustedBadges})),this.state.description?i().createElement("div",{className:"group"},i().createElement("label",{className:"small"},i().createElement(r.FormattedMessage,{id:"label_description",defaultMessage:[{type:0,value:"Description"}]})),i().createElement("div",null,this.state.description)):null),i().createElement("div",{className:"hr"}),i().createElement("div",{className:"panel-form-row"},i().createElement("label",null,i().createElement(r.FormattedMessage,{id:"label_muting_topic",defaultMessage:[{type:0,value:"Muted:"}]})),i().createElement(Gs,{name:"P",checked:this.state.muted,onChange:this.handleMuted})),this.state.archived?i().createElement("div",{className:"panel-form-row"},i().createElement("label",null,i().createElement(r.FormattedMessage,{id:"label_unarchive_topic",defaultMessage:[{type:0,value:"Archived:"}]})),i().createElement(Gs,{name:"archived",checked:!0,onChange:this.handleUnarchive})):null,i().createElement("div",{className:"hr"}),i().createElement("div",{className:"panel-form-row"},i().createElement("a",{href:"#",className:"flat-button",onClick:e=>{e.preventDefault(),this.props.onNavigate("security")}},i().createElement("i",{className:"material-icons"},"security")," ",i().createElement(r.FormattedMessage,{id:"button_security",defaultMessage:[{type:0,value:"Security"}]}))),this.state.groupTopic&&this.state.sharer?i().createElement(i().Fragment,null,i().createElement("div",{className:"hr"}),i().createElement("div",{className:"panel-form-row"},i().createElement("label",{className:"small"},i().createElement(r.FormattedMessage,{id:"label_group_members",defaultMessage:[{type:0,value:"Group members:"}]}))),i().createElement("div",{className:"panel-form-row"},i().createElement("a",{href:"#",className:"flat-button",onClick:this.handleShowAddMembers},i().createElement("i",{className:"material-icons"},"person_add")," ",i().createElement(r.FormattedMessage,{id:"button_add_members",defaultMessage:[{type:0,value:"Add members"}]}))),i().createElement(r.FormattedMessage,{id:"group_has_no_members",defaultMessage:[{type:0,value:"No members"}]},(e=>i().createElement(Us,{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))}}const _a=(0,r.injectIntl)(ga),fa=new Audio("audio/call-out.m4a");fa.loop=!0;const ba=new Audio("audio/call-end.m4a");ba.loop=!0;const va=new Audio("audio/dialing.m4a"),wa=(0,r.defineMessages)({already_in_call:{id:"already_in_call",defaultMessage:[{type:0,value:"You already in an ongoing call!"}]}});class ya extends i().PureComponent{constructor(e){super(e),this.state={localStream:void 0,pc:void 0,previousOnInfo:void 0,waitingForPeer:!1,callInitialSetupComplete:!1},this.localStreamConstraints={audio:!0,video:!0},this.isOutgoingCall=1==e.callState,this.localRef=i().createRef(),this.remoteRef=i().createRef(),this.remoteIceCandidatesCache=[],this.onInfo=this.onInfo.bind(this),this.start=this.start.bind(this),this.stop=this.stop.bind(this),this.createPeerConnection=this.createPeerConnection.bind(this),this.canSendOffer=this.canSendOffer.bind(this),this.drainRemoteIceCandidatesCache=this.drainRemoteIceCandidatesCache.bind(this),this.handleNegotiationNeededEvent=this.handleNegotiationNeededEvent.bind(this),this.handleICECandidateEvent=this.handleICECandidateEvent.bind(this),this.handleNewICECandidateMsg=this.handleNewICECandidateMsg.bind(this),this.handleICEConnectionStateChangeEvent=this.handleICEConnectionStateChangeEvent.bind(this),this.handleSignalingStateChangeEvent=this.handleSignalingStateChangeEvent.bind(this),this.handleICEGatheringStateChangeEvent=this.handleICEGatheringStateChangeEvent.bind(this),this.handleIceCandidateErrorEvent=this.handleIceCandidateErrorEvent.bind(this),this.handleTrackEvent=this.handleTrackEvent.bind(this),this.handleVideoOfferMsg=this.handleVideoOfferMsg.bind(this),this.handleVideoAnswerMsg=this.handleVideoAnswerMsg.bind(this),this.handleNewICECandidateMsg=this.handleNewICECandidateMsg.bind(this),this.reportError=this.reportError.bind(this),this.handleGetUserMediaError=this.handleGetUserMediaError.bind(this),this.stopTracks=this.stopTracks.bind(this),this.handleCloseClick=this.handleCloseClick.bind(this),this.handleToggleCameraClick=this.handleToggleCameraClick.bind(this),this.handleToggleMicClick=this.handleToggleMicClick.bind(this),this.toggleMedia=this.toggleMedia.bind(this),this.handleRemoteHangup=this.handleRemoteHangup.bind(this),this.handleVideoCallAccepted=this.handleVideoCallAccepted.bind(this)}componentDidMount(){const e=this.props.tinode.getTopic(this.props.topic);this.previousOnInfo=e.onInfo,e.onInfo=this.onInfo,1!=this.props.callState&&3!=this.props.callState||!this.localRef.current||this.start()}componentWillUnmount(){this.props.tinode.getTopic(this.props.topic).onInfo=this.previousOnInfo,this.stop()}handleVideoCallAccepted(e){fa.pause();const t=this.createPeerConnection(),s=this.state.localStream;s.getTracks().forEach((e=>{t.addTrack(e,s)}))}onInfo(e){if("call"==e.what)switch(e.event){case"accept":this.handleVideoCallAccepted(e);break;case"answer":this.handleVideoAnswerMsg(e);break;case"ice-candidate":this.handleNewICECandidateMsg(e);break;case"hang-up":this.handleRemoteHangup(e);break;case"offer":this.handleVideoOfferMsg(e);break;case"ringing":fa.play().catch((e=>{}));break;default:console.warn("Unknown call event",e.event)}}start(){this.state.localStream?this.props.onError(this.props.intl.formatMessage(wa.already_in_call)):3!=this.props.callState?navigator.mediaDevices.getUserMedia(this.localStreamConstraints).then((e=>{this.setState({localStream:e,waitingForPeer:!0}),this.localRef.current.srcObject=e,va.play(),this.props.onInvite(this.props.topic,this.props.seq,this.props.callState)})).catch(this.handleGetUserMediaError):this.props.onInvite(this.props.topic,this.props.seq,this.props.callState)}stop(){ba.pause(),ba.currentTime=0,fa.pause(),fa.currentTime=0,this.stopTracks(this.localRef.current),this.stopTracks(this.remoteRef.current),this.state.pc&&(this.state.pc.ontrack=null,this.state.pc.onremovetrack=null,this.state.pc.onremovestream=null,this.state.pc.onicecandidate=null,this.state.pc.oniceconnectionstatechange=null,this.state.pc.onsignalingstatechange=null,this.state.pc.onicegatheringstatechange=null,this.state.pc.onnegotiationneeded=null,this.state.pc.onicecandidateerror=null,this.state.pc.close()),this.setState({pc:null,waitingForPeer:!1})}stopTracks(e){if(!e)return;let t=e.srcObject;if(!t)return;let s=t.getTracks();s&&s.forEach((e=>{e.stop(),e.enabled=!1})),e.srcObject=null,e.src=""}createPeerConnection(){const e=this.props.tinode.getServerParam("iceServers",null),t=e?new RTCPeerConnection({iceServers:e}):new RTCPeerConnection;return t.onicecandidate=this.handleICECandidateEvent,t.oniceconnectionstatechange=this.handleICEConnectionStateChangeEvent,t.onicegatheringstatechange=this.handleICEGatheringStateChangeEvent,t.onsignalingstatechange=this.handleSignalingStateChangeEvent,t.onnegotiationneeded=this.handleNegotiationNeededEvent,t.onicecandidateerror=this.handleIceCandidateErrorEvent,t.ontrack=this.handleTrackEvent,this.setState({pc:t,waitingForPeer:!1}),t}handleVideoAnswerMsg(e){const t=new RTCSessionDescription(e.payload);this.state.pc.setRemoteDescription(t).then((e=>{this.setState({callInitialSetupComplete:!0},(()=>this.drainRemoteIceCandidatesCache()))})).catch(this.reportError)}reportError(e){this.props.onError(e.message,"err")}canSendOffer(){return this.isOutgoingCall||this.state.callInitialSetupComplete}handleNegotiationNeededEvent(){this.canSendOffer()&&this.state.pc.createOffer().then((e=>this.state.pc.setLocalDescription(e))).then((e=>{this.props.onSendOffer(this.props.topic,this.props.seq,this.state.pc.localDescription.toJSON())})).catch(this.reportError)}handleIceCandidateErrorEvent(e){console.warn("ICE candidate error:",e)}handleICECandidateEvent(e){e.candidate&&this.props.onIceCandidate(this.props.topic,this.props.seq,e.candidate.toJSON())}handleNewICECandidateMsg(e){const t=new RTCIceCandidate(e.payload);this.state.callInitialSetupComplete?this.state.pc.addIceCandidate(t).catch(this.reportError):this.remoteIceCandidatesCache.push(t)}drainRemoteIceCandidatesCache(){this.remoteIceCandidatesCache.forEach((e=>{this.state.pc.addIceCandidate(e).catch(this.reportError)})),this.remoteIceCandidatesCache=[]}handleICEConnectionStateChangeEvent(e){switch(this.state.pc.iceConnectionState){case"closed":case"failed":this.handleCloseClick()}}handleSignalingStateChangeEvent(e){"closed"==this.state.pc.signalingState&&this.handleCloseClick()}handleICEGatheringStateChangeEvent(e){}handleTrackEvent(e){this.remoteRef.current.srcObject=e.streams[0],this.forceUpdate()}handleGetUserMediaError(e){switch(e.name){case"NotFoundError":this.reportError(e.message);break;case"SecurityError":case"PermissionDeniedError":break;default:this.reportError(e.message),console.error("Error opening your camera and/or microphone:",e.message)}this.handleCloseClick()}handleVideoOfferMsg(e){let t=null;const s=this.createPeerConnection(),a=new RTCSessionDescription(e.payload);s.setRemoteDescription(a).then((e=>navigator.mediaDevices.getUserMedia(this.localStreamConstraints))).then((e=>{t=e,this.localRef.current.srcObject=e,this.setState({localStream:e}),t.getTracks().forEach((e=>{s.addTrack(e,t)}))})).then((e=>s.createAnswer())).then((e=>s.setLocalDescription(e))).then((e=>{this.props.onSendAnswer(this.props.topic,this.props.seq,s.localDescription.toJSON()),this.setState({callInitialSetupComplete:!0},(()=>this.drainRemoteIceCandidatesCache()))})).catch(this.handleGetUserMediaError)}handleRemoteHangup(){this.state.waitingForPeer?(this.setState({waitingForPeer:!1}),fa.pause(),fa.currentTime=0,ba.loop=!0,ba.play().catch((e=>{})),setTimeout((e=>{this.handleCloseClick()}),2e3)):this.handleCloseClick()}handleCloseClick(){this.stop(),this.props.onHangup(this.props.topic,this.props.seq)}toggleMedia(e){this.state.localStream.getTracks().forEach((t=>{t.kind==e&&(t.enabled=!t.enabled)})),this.forceUpdate()}handleToggleCameraClick(){this.toggleMedia("video")}handleToggleMicClick(){this.toggleMedia("audio")}render(){const e=this.remoteRef.current&&this.remoteRef.current.srcObject,t=!(this.state.localStream&&this.state.localStream.getTracks()),s=this.state.localStream&&this.state.localStream.getAudioTracks()[0].enabled?"mic":"mic_off",a=this.state.localStream&&this.state.localStream.getVideoTracks()[0].enabled?"videocam":"videocam_off",n=hs(this.props.title,Yt.gD),o=this.state.waitingForPeer?" pulse":"";return i().createElement(i().Fragment,null,i().createElement("div",{id:"video-container"},i().createElement("div",{id:"video-container-panel"},i().createElement("div",{className:"call-party self"},i().createElement("video",{ref:this.localRef,autoPlay:!0,muted:!0,playsInline:!0}),i().createElement("div",{className:"caller-name inactive"},i().createElement(r.FormattedMessage,{id:"calls_you_label",defaultMessage:[{type:0,value:"You"}]}))),i().createElement("div",{className:"call-party peer"},i().createElement("video",{ref:this.remoteRef,autoPlay:!0,playsInline:!0}),e?i().createElement("div",{className:"caller-name inactive"},n):i().createElement("div",{className:`caller-card${o}`},i().createElement("div",{className:"avatar-box"},i().createElement(ps,{tinode:this.props.tinode,avatar:this.props.avatar,topic:this.props.topic,title:this.props.title})),i().createElement("div",{className:"caller-name"},n)))),i().createElement("div",{className:"controls"},i().createElement("button",{className:"danger",onClick:this.handleCloseClick},i().createElement("i",{className:"material-icons"},"call_end")),i().createElement("button",{className:"secondary",onClick:this.handleToggleCameraClick,disabled:t},i().createElement("i",{className:"material-icons"},a)),i().createElement("button",{className:"secondary",onClick:this.handleToggleMicClick,disabled:t},i().createElement("i",{className:"material-icons"},s)))))}}const Ea=(0,r.injectIntl)(ya);class Ca extends i().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 a=this.props.tinode.getLargeFileHelper();this.setState({downloader:a}),a.download(e,t,s,(e=>{this.setState({progress:e/this.props.size})}),(e=>{this.props.onError(e,"err")})).then((()=>{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,a=this.props.size>0?i().createElement("span",{className:"small gray"},"(",(0,as.FK)(this.props.size),")"):null;this.props.uploading||this.state.downloader||!function(e){return e&&!/^\s*([a-z][a-z0-9+.-]*:|\/\/)/im.test(e)}(this.props.downloadUrl)?(t=rs(this.props.downloadUrl),s=null):(t="#",s=e=>{e.preventDefault(),this.downloadFile(this.props.downloadUrl,this.props.filename,this.props.mimetype)});const n=i().createElement(i().Fragment,null,i().createElement("i",{className:"material-icons"},"file_download")," ",i().createElement(r.FormattedMessage,{id:"save_attachment",defaultMessage:[{type:0,value:"save"}]}));return i().createElement("div",{className:"attachment"},i().createElement("div",null,i().createElement("i",{className:"material-icons big gray"},"insert_drive_file")),i().createElement("div",{className:"flex-column"},i().createElement("div",null,e," ",a),this.props.uploading||this.state.downloader?i().createElement(bs,{progress:this.props.uploading?this.props.progress:this.state.progress,onCancel:this.handleCancel}):i().createElement("div",null,t?i().createElement("a",{href:t,download:this.props.filename,onClick:s},n):i().createElement("span",{className:"light-gray"},n))))}}const Sa=(0,r.defineMessages)({message_sending:{id:"message_sending",defaultMessage:[{type:0,value:"sending..."}]},message_sending_failed:{id:"message_sending_failed",defaultMessage:[{type:0,value:"failed"}]}});class Ma extends i().PureComponent{render(){const{formatMessage:e}=this.props.intl;let t;t=this.props.received<=Qt.Tinode.MESSAGE_STATUS_SENDING?e(Sa.message_sending):this.props.received==Qt.Tinode.MESSAGE_STATUS_FAILED?e(Sa.message_sending_failed):this.props.timestamp.toLocaleTimeString(this.props.intl.locale,{timeStyle:"short"});const s=cs(this.props.received),a=s?i().createElement("i",{className:"material-icons small "+s.color},s.name):null;return i().createElement("span",{className:"timestamp"},t," ",a)}}const ka=(0,r.injectIntl)(Ma);function Ta(){return Ta=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var s=arguments[t];for(var a in s)Object.prototype.hasOwnProperty.call(s,a)&&(e[a]=s[a])}return e},Ta.apply(this,arguments)}class Aa extends i().PureComponent{constructor(e){super(e),this.state={progress:0},e.uploader&&(e.uploader.onProgress=this.handleProgress.bind(this)),this.handleImagePreview=this.handleImagePreview.bind(this),this.handleFormButtonClick=this.handleFormButtonClick.bind(this),this.handleContextClick=this.handleContextClick.bind(this),this.handleCancelUpload=this.handleCancelUpload.bind(this),this.handleQuoteClick=this.handleQuoteClick.bind(this),this.formatterContext={formatMessage:e.intl.formatMessage.bind(e.intl),viewportWidth:e.viewportWidth,authorizeURL:e.tinode.authorizeURL.bind(e.tinode),onImagePreview:this.handleImagePreview,onFormButtonClick:this.handleFormButtonClick,onQuoteClick:this.handleQuoteClick}}handleImagePreview(e){e.preventDefault(),this.props.onImagePreview({url:e.target.src,filename:e.target.title,width:e.target.dataset.width,height:e.target.dataset.height,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=rs(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=[];this.props.received==Qt.Tinode.MESSAGE_STATUS_FAILED&&t.push("menu_item_send_retry"),this.props.userIsWriter&&this.props.received>Qt.Tinode.MESSAGE_STATUS_FAILED&&this.props.received<Qt.Tinode.MESSAGE_STATUS_DEL_RANGE&&t.push("menu_item_reply"),t.push("menu_item_forward"),this.props.showContextMenu({seq:this.props.seq,content:this.props.content,userFrom:this.props.userFrom,userName:this.props.userName,y:e.pageY,x:e.pageX,pickReply:this.props.pickReply},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,a=this.props.isGroup&&this.props.response&&("single"==this.props.sequence||"last"==this.props.sequence);let n=this.props.content;const o=[];if(this.props.mimeType==Qt.Drafty.getContentType()&&Qt.Drafty.isValid(n)){Qt.Drafty.attachments(n,((e,t)=>{"application/json"!=e.mime&&o.push(i().createElement(Ca,{tinode:this.props.tinode,downloadUrl:Qt.Drafty.getDownloadUrl(e),filename:e.name,uploading:Qt.Drafty.isProcessing(e),mimetype:e.mime,size:Qt.Drafty.getEntitySize(e),progress:this.state.progress,onCancelUpload:this.handleCancelUpload,onError:this.props.onError,key:t}))}),this);const e=Qt.Drafty.format(n,Cs,this.formatterContext);n=i().createElement(i().Fragment,null,e)}else this.props.deleted?n=i().createElement(i().Fragment,null,i().createElement("i",{className:"material-icons gray"},"block")," ",i().createElement("i",{className:"gray"},i().createElement(r.FormattedMessage,{id:"deleted_content",defaultMessage:[{type:0,value:"content deleted"}]}))):"string"!=typeof n&&(n=i().createElement(i().Fragment,null,i().createElement("i",{className:"material-icons gray"},"warning_amber")," ",i().createElement("i",{className:"gray"},i().createElement(r.FormattedMessage,{id:"invalid_content",defaultMessage:[{type:0,value:"invalid content"}]}))));return i().createElement("li",{ref:this.props.innerRef,className:e},this.props.isGroup&&this.props.response?i().createElement("div",{className:"avatar-box"},a?i().createElement(ps,{tinode:this.props.tinode,topic:this.props.userFrom,title:this.props.userName,avatar:s}):null):null,i().createElement("div",null,i().createElement("div",{className:t},i().createElement("div",{className:"content-meta"},i().createElement("div",{className:"message-content"},n,o),this.props.timestamp?i().createElement(ka,{timestamp:this.props.timestamp,received:this.props.received}):null),this.props.showContextMenu?i().createElement("span",{className:"menuTrigger"},i().createElement("a",{href:"#",onClick:this.handleContextClick},i().createElement("i",{className:"material-icons"},"expand_more"))):null),a?i().createElement("div",{className:"author"},this.props.userName||i().createElement("i",null,i().createElement(r.FormattedMessage,{id:"user_not_found",defaultMessage:[{type:0,value:"Not found"}]}))):null))}}const Na=(0,r.injectIntl)(Aa),Da=i().forwardRef(((e,t)=>i().createElement(Na,Ta({innerRef:t},e)))),Ia=i().lazy((e=>Promise.all([s.e(246),s.e(252)]).then(s.bind(s,252)))),Pa=(0,r.defineMessages)({messaging_disabled:{id:"messaging_disabled_prompt",defaultMessage:[{type:0,value:"Messaging disabled"}]},type_new_message:{id:"new_message_prompt",defaultMessage:[{type:0,value:"New message"}]},add_image_caption:{id:"image_caption_prompt",defaultMessage:[{type:0,value:"Image caption"}]},file_attachment_too_large:{id:"file_attachment_too_large",defaultMessage:[{type:0,value:"The file size "},{type:1,value:"size"},{type:0,value:" exceeds the "},{type:1,value:"limit"},{type:0,value:" limit."}]},cannot_initiate_upload:{id:"cannot_initiate_file_upload",defaultMessage:[{type:0,value:"Cannot initiate file upload."}]}});class Ra extends i().PureComponent{constructor(e){super(e),this.state={quote:null,message:"",audioRec:!1,audioAvailable:!(!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia),keypressTimestamp:(new Date).getTime()-Yt.mc-1},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.handleQuoteClick=this.handleQuoteClick.bind(this),this.formatReply=this.formatReply.bind(this)}componentDidMount(){this.messageEditArea&&this.messageEditArea.addEventListener("paste",this.handlePasteEvent,!1),this.setState({quote:this.formatReply()})}componentWillUnmount(){this.messageEditArea&&this.messageEditArea.removeEventListener("paste",this.handlePasteEvent,!1)}componentDidUpdate(e){this.messageEditArea&&this.messageEditArea.focus(),e.topicName!=this.props.topicName&&this.setState({message:"",audioRec:!1,quote:null}),e.reply!=this.props.reply&&this.setState({quote:this.formatReply()})}formatReply(){return this.props.reply?Qt.Drafty.format(this.props.reply.content,As,{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,ws.Y)(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=""}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&&(e.shiftKey||(e.preventDefault(),e.stopPropagation(),this.handleSend(e)))}handleMessageTyping(e){const t={message:e.target.value};if(this.props.onKeyPress){const e=(new Date).getTime();e-this.state.keypressTimestamp>Yt.mc&&(this.props.onKeyPress(),t.keypressTimestamp=e)}this.setState(t)}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(Pa.messaging_disabled):this.props.messagePrompt?e(Pa[this.props.messagePrompt]):e(Pa.type_new_message),s=this.state.quote?i().createElement("div",{id:"reply-quote-preview"},i().createElement("div",{className:"cancel"},i().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.props.onCancelReply()}},i().createElement("i",{className:"material-icons gray"},"close"))),this.state.quote):null,n=this.state.audioAvailable&&this.props.onAttachAudio;return i().createElement("div",{id:"send-message-wrapper"},this.props.noInput?null:s,i().createElement("div",{id:"send-message-panel"},this.props.disabled?i().createElement("div",{id:"writing-disabled"},t):i().createElement(i().Fragment,null,this.props.onAttachFile&&!this.state.audioRec?i().createElement(i().Fragment,null,i().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.attachImage.click()},title:"Add image"},i().createElement("i",{className:"material-icons secondary"},"photo")),i().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.attachFile.click()},title:"Attach file"},i().createElement("i",{className:"material-icons secondary"},"attach_file"))):null,this.props.noInput?s||i().createElement("div",{className:"hr thin"}):this.state.audioRec?i().createElement(a.Suspense,{fallback:i().createElement("div",null,"Loading...")},i().createElement(Ia,{onDeleted:e=>this.setState({audioRec:!1}),onFinished:this.handleAttachAudio})):i().createElement("textarea",{id:"sendMessage",placeholder:t,value:this.state.message,onChange:this.handleMessageTyping,onKeyPress:this.handleKeyPress,ref:e=>{this.messageEditArea=e},autoFocus:!0}),this.state.message||!n?i().createElement("a",{href:"#",onClick:this.handleSend,title:"Send"},i().createElement("i",{className:"material-icons"},"send")):this.state.audioRec?null:i().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.setState({audioRec:!0})},title:"Voice"},i().createElement("i",{className:"material-icons"},"mic")),i().createElement("input",{type:"file",ref:e=>{this.attachFile=e},onChange:this.handleAttachFile,style:{display:"none"}}),i().createElement("input",{type:"file",ref:e=>{this.attachImage=e},accept:"image/*",onChange:this.handleAttachImage,style:{display:"none"}}))))}}const Fa=(0,r.injectIntl)(Ra);class Ua extends i().PureComponent{constructor(e){super(e),this.handleSendDoc=this.handleSendDoc.bind(this)}handleSendDoc(e){this.props.onClose(),this.props.onSendMessage(this.props.content.file)}render(){return this.props.content?i().createElement("div",{id:"image-preview"},i().createElement("div",{id:"image-preview-caption-panel"},i().createElement("span",null,this.props.content.name),i().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.props.onClose()}},i().createElement("i",{className:"material-icons gray"},"close"))),i().createElement("div",{id:"image-preview-container"},i().createElement("div",{className:"flex-column narrow"},i().createElement("i",{className:"material-icons gray"},function(e){const t={default:"insert_drive_file",image:"image",text:"description",video:"theaters"};return t[e]||t[(e||"").split("/")[0]]||t.default}(this.props.content.type)),i().createElement("div",null,i().createElement("b",null,i().createElement(r.FormattedMessage,{id:"label_file_name",defaultMessage:[{type:0,value:"File name:"}]}))," ",(0,as.TX)(this.props.content.name,24)||"-"),i().createElement("div",null,i().createElement("b",null,i().createElement(r.FormattedMessage,{id:"label_content_type",defaultMessage:[{type:0,value:"Content type:"}]}))," ",this.props.content.type||"application/octet-stream"),i().createElement("div",null,i().createElement("b",null,i().createElement(r.FormattedMessage,{id:"label_size",defaultMessage:[{type:0,value:"Size:"}]}))," ",(0,as.FK)(this.props.content.size)))),i().createElement(Fa,{noInput:!0,tinode:this.props.tinode,reply:this.props.reply,onCancelReply:this.props.onCancelReply,onSendMessage:this.handleSendDoc,onError:this.props.onError})):null}}class xa extends i().Component{constructor(e){super(e)}render(){const e=[],t=(this.props.subscribers||[]).length,s=Math.min(Yt.dm,t);return(this.props.subscribers||[]).some((t=>(e.push(i().createElement("div",{className:"avatar-box",key:t.user},i().createElement(ps,{tinode:this.props.tinode,topic:t.user,avatar:(0,ws.PD)(t.public?t.public.photo:null)||!0,title:t.public?t.public.fn:null}))),e.length==s))),i().createElement("div",{id:"topic-users"},e," ",t>s?i().createElement("span",null,i().createElement(r.FormattedMessage,{id:"more_online_members",defaultMessage:[{type:0,value:"+"},{type:1,value:"overflow"},{type:0,value:" more"}],values:{overflow:t-s}})):null)}}class La extends i().PureComponent{constructor(e){super(e),this.state={width:0,height:0},this.handleSendImage=this.handleSendImage.bind(this)}assignWidth(e){if(e&&!this.state.width){const t=e.getBoundingClientRect();this.setState({width:0|t.width,height:0|t.height})}}handleSendImage(e){this.props.onClose(),this.props.onSendMessage(e,this.props.content.blob)}render(){if(!this.props.content)return null;const e=(0,ws.rS)(this.props.content.width,this.props.content.height,this.state.width,this.state.height,!1),t=e?{width:e.dstWidth+"px",height:e.dstHeight+"px"}:this.props.content.width>this.props.content.height?{width:"100%"}:{height:"100%"};t.maxWidth="100%",t.maxHeight="100%";const s=Math.max((this.state.width/Yt.o6/1.5|0)-2,12),a=(0,as.TX)(this.props.content.name,s)||"-",n=this.props.content.width||"-",o=this.props.content.height||"-";return i().createElement("div",{id:"image-preview"},i().createElement("div",{id:"image-preview-caption-panel"},this.props.onSendMessage?i().createElement("span",null,a):i().createElement("a",{href:this.props.content.url,download:!0},i().createElement("i",{className:"material-icons"},"file_download")," ",i().createElement(r.FormattedMessage,{id:"download_action",defaultMessage:[{type:0,value:"download"}]})),i().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.props.onClose()}},i().createElement("i",{className:"material-icons gray"},"close"))),i().createElement("div",{id:"image-preview-container",ref:e=>this.assignWidth(e)},i().createElement("img",{src:this.props.content.url,style:t,className:"image-preview",alt:this.props.content.name})),this.props.onSendMessage?i().createElement(Fa,{messagePrompt:"add_image_caption",acceptBlank:!0,tinode:this.props.tinode,reply:this.props.reply,onCancelReply:this.props.onCancelReply,onSendMessage:this.handleSendImage,onError:this.props.onError}):i().createElement("div",{id:"image-preview-footer"},i().createElement("div",null,i().createElement("div",null,i().createElement("b",null,i().createElement(r.FormattedMessage,{id:"label_file_name",defaultMessage:[{type:0,value:"File name:"}]}))),i().createElement("div",null,i().createElement("span",{title:this.props.content.name},a))),i().createElement("div",null,i().createElement("div",null,i().createElement("b",null,i().createElement(r.FormattedMessage,{id:"label_content_type",defaultMessage:[{type:0,value:"Content type:"}]}))),i().createElement("div",null,this.props.content.type)),i().createElement("div",null,i().createElement("div",null,i().createElement("b",null,i().createElement(r.FormattedMessage,{id:"label_size",defaultMessage:[{type:0,value:"Size:"}]}))),i().createElement("div",null,n," × ",o," px; ",(0,as.FK)(this.props.content.size)))))}}class Oa extends i().PureComponent{constructor(e){super(e),this.handleButtonAction=this.handleButtonAction.bind(this)}handleButtonAction(e,t){e.preventDefault(),this.props.onAction(t)}render(){return i().createElement("div",{className:"accept-invite-panel"},i().createElement("div",{className:"title"},i().createElement(r.FormattedMessage,{id:"chat_invitation",defaultMessage:[{type:0,value:"You are invited to start a new chat. What would you like to do?"}]})),i().createElement("div",{className:"footer"},i().createElement("button",{className:"primary",onClick:e=>{this.handleButtonAction(e,"accept")}},i().createElement(r.FormattedMessage,{id:"chat_invitation_accept",defaultMessage:[{type:0,value:"Accept"}]})),i().createElement("button",{className:"secondary",onClick:e=>{this.handleButtonAction(e,"delete")}},i().createElement(r.FormattedMessage,{id:"chat_invitation_ignore",defaultMessage:[{type:0,value:"Ignore"}]})),i().createElement("button",{className:"secondary",onClick:e=>{this.handleButtonAction(e,"block")}},i().createElement(r.FormattedMessage,{id:"chat_invitation_block",defaultMessage:[{type:0,value:"Block"}]}))))}}class qa extends i().PureComponent{render(){const e=Yt.iC+" ("+Qt.Tinode.getLibrary()+")";return i().createElement("div",{id:"dummy-view"},i().createElement("div",null,i().createElement("a",{href:"https://github.com/tinode/chat/"},i().createElement("img",{id:"logo",alt:"logo",src:"img/logo.svg"}),i().createElement("h2",null,"Tinode Web")),i().createElement("p",null,i().createElement(r.FormattedMessage,{id:"label_client",defaultMessage:[{type:0,value:"Client:"}]})," ",e),i().createElement("p",null,i().createElement(r.FormattedMessage,{id:"label_server",defaultMessage:[{type:0,value:"Server:"}]})," ",this.props.serverVersion," (",this.props.serverAddress,")")))}}class Ba extends i().PureComponent{constructor(e){super(e)}render(){let e=null,t="bubble";return this.props.deleted?(e=i().createElement(i().Fragment,null,i().createElement("i",{className:"material-icons gray"},"block")," ",i().createElement("i",{className:"gray"},i().createElement(r.FormattedMessage,{id:"deleted_content",defaultMessage:[{type:0,value:"content deleted"}]}))),t+=" deleted"):this.props.date&&(e=i().createElement(i().Fragment,null,this.props.date),t+=" date"),e?i().createElement("li",{className:"meta"},i().createElement("div",{className:t},i().createElement("div",{className:"message-content"},e))):i().createElement(i().Fragment,null,null)}}class ja{static parseUrlHash(e){const t=e.split("?",2),s={};let a=[];return t[0]&&(a=t[0].replace("#","").split("/")),t[1]&&t[1].split("&").forEach((e=>{const t=e.indexOf("=");t>0&&(s[e.slice(0,t)]=decodeURIComponent(e.slice(t+1)))})),{path:a,params:s}}static navigateTo(e){window.location.hash=e}static composeUrlHash(e,t){let s=e.join("/");const a=[];for(const e in t)t.hasOwnProperty(e)&&a.push(e+"="+encodeURIComponent(t[e]));return a.length>0&&(s+="?"+a.join("&")),s}static addUrlParam(e,t,s){const a=ja.parseUrlHash(e);return a.params[t]=s,ja.composeUrlHash(a.path,a.params)}static removeUrlParam(e,t){const s=ja.parseUrlHash(e);return delete s.params[t],ja.composeUrlHash(s.path,s.params)}static setUrlSidePanel(e,t){const s=ja.parseUrlHash(e);return s.path[0]=t,ja.composeUrlHash(s.path,s.params)}static setUrlInfoPanel(e,t){const s=ja.parseUrlHash(e);return t?s.params.info=t:delete s.params.info,ja.composeUrlHash(s.path,s.params)}static setUrlTopic(e,t){const s=ja.parseUrlHash(e);return s.path[1]=t,delete s.params.info,ja.composeUrlHash(s.path,s.params)}}const za=(0,r.defineMessages)({online_now:{id:"online_now",defaultMessage:[{type:0,value:"online now"}]},last_seen:{id:"last_seen_timestamp",defaultMessage:[{type:0,value:"Last seen"}]},not_found:{id:"title_not_found",defaultMessage:[{type:0,value:"Not found"}]},channel:{id:"channel",defaultMessage:[{type:0,value:"channel"}]},file_attachment_too_large:{id:"file_attachment_too_large",defaultMessage:[{type:0,value:"The file size "},{type:1,value:"size"},{type:0,value:" exceeds the "},{type:1,value:"limit"},{type:0,value:" limit."}]},invalid_content:{id:"invalid_content",defaultMessage:[{type:0,value:"invalid content"}]}});function Ha(e){if(e){const t=e.getExcessive()||"";return e.isJoiner("given")&&(t.includes("R")||t.includes("W"))}return!1}function Va(e){if(e){const t=e.getMissing()||"";return e.isJoiner("want")&&(t.includes("R")||t.includes("W"))}return!1}function Ka(e){return 1==e||3==e}class Wa extends i().Component{constructor(e){super(e),this.state=Wa.getDerivedStateFromProps(e,{}),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.sendFileAttachment=this.sendFileAttachment.bind(this),this.sendAudioAttachment=this.sendAudioAttachment.bind(this),this.sendKeyPress=this.sendKeyPress.bind(this),this.subscribe=this.subscribe.bind(this),this.handleScrollReference=this.handleScrollReference.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.handleAllMessagesReceived=this.handleAllMessagesReceived.bind(this),this.handleInfoReceipt=this.handleInfoReceipt.bind(this),this.handleImagePostview=this.handleImagePostview.bind(this),this.handleClosePreview=this.handleClosePreview.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.handleAttachImage=this.handleAttachImage.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.handlePickReply=this.handlePickReply.bind(this),this.handleCancelReply=this.handleCancelReply.bind(this),this.handleQuoteClick=this.handleQuoteClick.bind(this),this.handleCallHangup=this.handleCallHangup.bind(this),this.chatMessageRefs={},this.getOrCreateMessageRef=this.getOrCreateMessageRef.bind(this),this.readNotificationQueue=[],this.readNotificationTimer=null,this.keyPressTimer=null}getOrCreateMessageRef(e){if(this.chatMessageRefs.hasOwnProperty(e))return this.chatMessageRefs[e];const t=i().createRef();return this.chatMessageRefs[e]=t,t}componentDidMount(){this.messagesScroller&&this.messagesScroller.addEventListener("scroll",this.handleScrollEvent)}componentWillUnmount(){this.messagesScroller&&this.messagesScroller.removeEventListener("scroll",this.handleScrollEvent),this.clearNotificationQueue()}componentDidUpdate(e,t){!this.messagesScroller||t.topic==this.state.topic&&t.messageCount==this.state.messageCount||this.state.scrollPosition<100&&(this.messagesScroller.scrollTop=this.messagesScroller.scrollHeight-this.state.scrollPosition-this.messagesScroller.offsetHeight);const s=this.props.tinode?this.props.tinode.getTopic(this.state.topic):void 0;this.state.topic!=t.topic&&(t.topic&&!Qt.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)),this.props.applicationVisible?this.postReadNotification(0):this.clearNotificationQueue(),!s||this.state.topic==t.topic&&e.ready||(s._new&&s.isP2PType()?s.getMeta(s.startMetaQuery().withDesc().build()):this.subscribe(s))}static getDerivedStateFromProps(e,t){let s={};if(e.topic)if(e.topic!=t.topic){const a=e.tinode.getTopic(e.topic);if(s={topic:e.topic,docPreview:null,imagePreview:null,imagePostview:null,rtcPanel:null,typingIndicator:!1,scrollPosition:0,fetchingMessages:!1,showGoToLastButton:!1,deleted:a._deleted},e.forwardMessage&&(s.reply={content:e.forwardMessage.preview,seq:null}),a){const i=[];e.connected&&a.subscribers((t=>{t.online&&t.user!=e.myUserId&&i.push(t)})),Object.assign(s,{onlineSubs:i}),a.public?Object.assign(s,{title:a.public.fn,avatar:(0,ws.PD)(a.public.photo)}):Object.assign(s,{title:"",avatar:null});const n=a.p2pPeerDesc();n?Object.assign(s,{peerMessagingDisabled:Va(n.acs)}):t.peerMessagingDisabled&&Object.assign(s,{peerMessagingDisabled:!1}),Object.assign(s,{messageCount:a.messageCount(),latestClearId:a.maxClearId(),channel:a.isChannelType()}),e.callTopic==a.name&&Ka(e.callState)&&(s.rtcPanel=e.callTopic)}else Object.assign(s,{messageCount:0,latestClearId:-1,onlineSubs:[],title:"",avatar:null,peerMessagingDisabled:!1,channel:!1})}else e.callTopic==t.topic&&!t.rtcPanel&&Ka(e.callState)&&(s.rtcPanel=e.callTopic);else s={messageCount:0,latestClearId:-1,onlineSubs:[],topic:null,title:"",avatar:null,isVerified:!1,isStaff:!1,isDangerous:!1,deleted:!1,docPreview:null,imagePreview:null,imagePostview:null,rtcPanel:null,typingIndicator:!1,scrollPosition:0,fetchingMessages:!1,peerMessagingDisabled:!1,channel:!1,reply:null,showGoToLastButton:!1};return e.acs?(e.acs.isWriter()!=t.isWriter&&(s.isWriter=!t.isWriter),e.acs.isReader()!=t.isReader&&(s.isReader=!t.isReader),!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.readingBlocked||(t.readingBlocked=!0),t.isSharer&&(s.isSharer=!1)),Ha(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();(this.state.isReader||t)&&(s=s.withLaterData(Yt.Hm),this.state.isReader&&(s=s.withLaterDel()),this.setState({fetchingMessages:!0}));const a=t?this.props.newTopicParams:void 0;e.subscribe(s.build(),a).then((t=>{if(303==t.code)return void ja.navigateTo(ja.setUrlTopic("",t.params.topic));this.state.topic!=t.topic&&this.setState({topic:t.topic}),this.props.onNewTopicCreated(this.props.topic,t.topic);let s=[];e.queuedMessages((t=>{t._sending||(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=Wa.getDerivedStateFromProps({},{});t.title=this.props.intl.formatMessage(za.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((()=>{})).finally((()=>{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}))}handleScrollReference(e){e&&(e.addEventListener("scroll",this.handleScrollEvent),this.messagesScroller=e,this.messagesScroller.scrollTop=this.messagesScroller.scrollHeight-this.state.scrollPosition)}handleScrollEvent(e){const t=e.target.scrollHeight-e.target.scrollTop-e.target.offsetHeight;if(this.setState({scrollPosition:t,showGoToLastButton:t>100&&t<this.state.scrollPosition}),!this.state.fetchingMessages&&e.target.scrollTop<=0){const e=this.props.tinode.getTopic(this.state.topic);e&&e.isSubscribed()&&e.msgHasMoreMessages()&&this.setState({fetchingMessages:!0},(()=>{e.getMessagesPage(Yt.Hm).catch((e=>this.props.onError(e.message,"err"))).finally((()=>this.setState({fetchingMessages:!1})))}))}}goToLatestMessage(){this.setState({scrollPosition:0}),this.messagesScroller&&(this.messagesScroller.scrollTop=this.messagesScroller.scrollHeight)}handleDescChange(e){e.public?this.setState({title:e.public.fn,avatar:(0,ws.PD)(e.public.photo)}):this.setState({title:"",avatar:null}),e.acs&&this.setState({isWriter:e.acs.isWriter(),isReader:e.acs.isReader(),readingBlocked:!e.acs.isReader("given"),unconfirmed:Ha(e.acs)})}postReadNotification(e){if(!this.props.applicationVisible)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(),t=Math.max(t,e.seq)}if(t>=0){const e=this.props.tinode.getTopic(this.state.topic);e&&e.noteRead(t)}}),300));const t=new Date;this.readNotificationQueue.push({topicName:this.state.topic,seq:e,sendAt:t.setMilliseconds(t.getMilliseconds()+Yt.l8)})}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},a=t.p2pPeerDesc();a?Object.assign(s,{peerMessagingDisabled:Va(a.acs)}):this.state.peerMessagingDisabled&&Object.assign(s,{peerMessagingDisabled:!1}),this.setState(s)}}handleMessageUpdate(e){const t=this.props.tinode.getTopic(this.state.topic);if(!e)return void this.setState({latestClearId:t.maxClearId()});clearTimeout(this.keyPressTimer),this.setState({messageCount:t.messageCount(),typingIndicator:!1},(s=>{t.isNewMessage(e.seq)&&(this.state.scrollPosition>100?this.setState({showGoToLastButton:!0}):this.goToLatestMessage())}));t.msgStatus(e,!0)>=Qt.Tinode.MESSAGE_STATUS_SENT&&e.from!=this.props.myUserId&&this.postReadNotification(e.seq)}handleAllMessagesReceived(e){this.setState({fetchingMessages:!1}),e>0&&this.postReadNotification(0)}handleInfoReceipt(e){switch(e.what){case"kp":clearTimeout(this.keyPressTimer),this.keyPressTimer=setTimeout((()=>{this.setState({typingIndicator:!1})}),Yt.mc+1e3),this.state.typingIndicator||this.setState({typingIndicator:!0});break;case"read":case"recv":this.forceUpdate();break;default:console.info("Other change in topic: ",e.what)}}handleImagePostview(e){this.setState({imagePostview:e})}handleClosePreview(){this.state.imagePreview&&this.state.imagePreview.url&&URL.revokeObjectURL(this.state.imagePreview.url),this.setState({imagePostview:null,imagePreview:null,docPreview:null})}handleFormResponse(e,t,s){if("pub"==e)this.sendMessage(Qt.Drafty.attachJSON(Qt.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"].map((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||[],a=this.props.tinode.getTopic(e.topicName);if(a){a.isChannelType()||s.push("message_delete");const e=a.getAccessMode();e&&e.isDeleter()&&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,Yt.RK,this.state.topic)}sendKeyPress(){const e=this.props.tinode.getTopic(this.state.topic);e.isSubscribed()&&e.noteKeyPress()}sendMessage(e,t,s){let a;this.props.forwardMessage?(e=this.props.forwardMessage.msg,a=this.props.forwardMessage.head,this.handleCancelReply()):this.state.reply&&this.state.reply.content&&(a={reply:""+this.state.reply.seq},"string"==typeof e&&(e=Qt.Drafty.parse(e)),e=Qt.Drafty.append(Qt.Drafty.sanitizeEntities(this.state.reply.content),e),this.handleCancelReply()),this.props.sendMessage(e,t,s,a)}retrySend(e){this.props.sendMessage(e.content,void 0,void 0,e.head).then((()=>{this.props.tinode.getTopic(this.state.topic).delMessagesList([e.seq],!0)}))}sendFileAttachment(e){const t=.75*this.props.tinode.getServerParam("maxMessageSize",Yt.kd)-1024|0;if(e.size>t){const t=this.props.tinode.getLargeFileHelper();if(!t)return void this.props.onError(this.props.intl.formatMessage(za.cannot_initiate_upload));const s=t.upload(e),a=Qt.Drafty.attachFile(null,{mime:e.type,filename:e.name,size:e.size,urlPromise:s});this.sendMessage(a,s,t)}else(0,ws.sT)(e).then((e=>this.sendMessage(Qt.Drafty.attachFile(null,{mime:e.mime,data:e.bits,filename:e.name})))).catch((e=>this.props.onError(e)))}handleAttachFile(e){const t=this.props.tinode.getServerParam("maxFileUploadSize",Yt.GQ);e.size>t?this.props.onError(this.props.intl.formatMessage(za.file_attachment_too_large,{size:(0,as.FK)(e.size),limit:(0,as.FK)(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)}sendImageAttachment(e,t){const s=this.state.imagePreview.mime,a=this.state.imagePreview.width,i=this.state.imagePreview.height,n=this.state.imagePreview.name,o=.75*this.props.tinode.getServerParam("maxMessageSize",Yt.kd)-1024|0;if(t.size>o){const o=this.props.tinode.getLargeFileHelper();if(!o)return void this.props.onError(this.props.intl.formatMessage(za.cannot_initiate_upload));const r=o.upload(t);(0,ws.EA)(t,Yt.H2,Yt.H2,-1,!1).then((e=>(0,ws.w8)(e.blob))).then((l=>{let c=Qt.Drafty.insertImage(null,0,{mime:s,_tempPreview:l.bits,width:a,height:i,filename:n,size:t.size,urlPromise:r});e&&(c=Qt.Drafty.appendLineBreak(c),c=Qt.Drafty.append(c,Qt.Drafty.parse(e))),this.sendMessage(c,r,o)})).catch((e=>{this.props.onError(e,"err")}))}else(0,ws.w8)(t).then((s=>{let o=Qt.Drafty.insertImage(null,0,{mime:s.mime,preview:s.bits,width:a,height:i,filename:n,size:t.size});e&&(o=Qt.Drafty.appendLineBreak(o),o=Qt.Drafty.append(o,Qt.Drafty.parse(e))),this.sendMessage(o)}))}handleAttachImage(e){const t=this.props.tinode.getServerParam("maxFileUploadSize",Yt.GQ);(0,ws.EA)(e,Yt.yW,Yt.yW,t,!1).then((e=>{this.setState({imagePreview:{url:URL.createObjectURL(e.blob),blob:e.blob,name:e.name,width:e.width,height:e.height,size:e.blob.size,mime:e.mime}})})).catch((e=>{this.props.onError(e,"err")}))}sendAudioAttachment(e,t,s){fetch(e).then((e=>e.blob())).then((e=>{const a=.75*this.props.tinode.getServerParam("maxMessageSize",Yt.kd)-1024;if(e.size>a){const a=this.props.tinode.getLargeFileHelper();if(!a)return void this.props.onError(this.props.intl.formatMessage(za.cannot_initiate_upload));const i=a.upload(e),n=Qt.Drafty.appendAudio(null,{mime:e.type,size:e.size,duration:s,preview:t,urlPromise:i});this.sendMessage(n,i,a)}else(0,ws.w8)(e).then((a=>{this.sendMessage(Qt.Drafty.appendAudio(null,{mime:a.mime,size:e.size,data:a.bits,duration:s,preview:t}))}))})).catch((e=>{this.props.onError(e)}))}handleCancelUpload(e,t){const s=this.props.tinode.getTopic(this.state.topic).findMessage(e);s&&(s._cancelled=!0),t.cancel()}handlePickReply(e,t,s,a){this.setState({reply:null}),e&&t&&(t="string"==typeof t?Qt.Drafty.init(t):t,t=Qt.Drafty.isValid(t)?Qt.Drafty.replyContent(t,Yt.cl):Qt.Drafty.append(Qt.Drafty.init("⚠ "),Qt.Drafty.wrapInto(this.props.intl.formatMessage(za.invalid_content),"EM")),this.setState({reply:{content:Qt.Drafty.quote(a,s,t),seq:e}}),this.props.onCancelForwardMessage())}handleCancelReply(){this.setState({reply: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((()=>{t.current.classList.remove("flash")}),1e3)):console.error("Unresolved message ref",e)}render(){const{formatMessage:e}=this.props.intl;let t;if(this.props.hideSelf)t=null;else if(this.state.topic){let s;if(this.state.imagePreview)s=i().createElement(La,{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.imagePostview)s=i().createElement(La,{content:this.state.imagePostview,onClose:this.handleClosePreview});else if(this.state.docPreview)s=i().createElement(Ua,{content:this.state.docPreview,tinode:this.props.tinode,reply:this.state.reply,onCancelReply:this.handleCancelReply,onClose:this.handleClosePreview,onSendMessage:this.sendFileAttachment});else if(this.state.rtcPanel)s=i().createElement(Ea,{topic:this.state.topic,seq:this.props.callSeq,callState:this.props.callState,tinode:this.props.tinode,title:this.state.title,avatar:this.state.avatar||!0,onError:this.props.onError,onHangup:this.handleCallHangup,onInvite:this.props.onCallInvite,onSendOffer:this.props.onCallSendOffer,onIceCandidate:this.props.onCallIceCandidate,onSendAnswer:this.props.onCallSendAnswer});else{const t=this.props.tinode.getTopic(this.state.topic),a=t.isChannelType(),n=t.isGroupType()&&!a,o=[];t.trusted&&(t.trusted.verified&&o.push({icon:"verified",color:"badge-inv"}),t.trusted.staff&&o.push({icon:"staff",color:"badge-inv"}),t.trusted.danger&&o.push({icon:"dangerous",color:"badge-inv"}));const l=[];let c=null,d=null,h=null;const p=new Intl.DateTimeFormat(this.props.intl.locale);t.messages(((e,s,a,o)=>{let r=a?a.from||"chan":null,u="single",m=e.from||"chan";m==c?u=m==r?"middle":"last":m==r&&(u="first"),c=m;const g=!(m==this.props.myUserId),_=t.msgStatus(e,!0);let f,b,v=m;const w=t.userDesc(m);w&&w.public&&(f=w.public.fn,b=(0,ws.PD)(w.public.photo)),h=n?"chat-box group":"chat-box";const y=this.getOrCreateMessageRef(e.seq);let E=e.head?parseInt(e.head.reply):null;if(E&&!isNaN(E)||(E=null),e.hi)l.push(i().createElement(Ba,{deleted:!0,key:e.seq}));else{const t=new Date(e.ts);d&&d.toDateString()==t.toDateString()||(l.push(i().createElement(Ba,{date:p.format(e.ts),locale:this.props.intl.locale,key:"date-"+e.seq})),d=t),l.push(i().createElement(Da,{tinode:this.props.tinode,content:e.content,mimeType:e.head&&e.head.mime,timestamp:e.ts,response:g,seq:e.seq,isGroup:n,isChan:this.state.channel,userFrom:v,userName:f,userAvatar:b,sequence:u,received:_,uploader:e._uploader,viewportWidth:this.props.viewportWidth,showContextMenu:this.handleShowMessageContextMenu,onImagePreview:this.handleImagePostview,onFormResponse:this.handleFormResponse,onError:this.props.onError,onCancelUpload:this.handleCancelUpload,pickReply:this.handlePickReply,replyToSeq:E,onQuoteClick:this.handleQuoteClick,ref:y,userIsWriter:this.state.isWriter,key:e.seq}))}}));let u=null;if(a)u=e(za.channel);else{const t=this.props.tinode.getMeTopic().getContact(this.state.topic);t&&Qt.Tinode.isP2PTopicName(t.topic)&&(t.online?u=e(za.online_now):t.seen&&(u=e(za.last_seen)+": "+(0,as.pz)(t.seen.when,this.props.intl.locale)))}const m=this.state.avatar||!0,g=this.state.deleted?null:this.props.online?"online"+(this.state.typingIndicator?" typing":""):"offline",_="panel-title"+(this.state.deleted?" deleted":"");s=i().createElement(i().Fragment,null,i().createElement("div",{id:"topic-caption-panel",className:"caption-panel"},this.props.displayMobile?i().createElement("a",{href:"#",id:"hide-message-view",onClick:e=>{e.preventDefault(),this.props.onHideMessagesView()}},i().createElement("i",{className:"material-icons"},"arrow_back")):null,i().createElement("div",{className:"avatar-box"},i().createElement(ps,{tinode:this.props.tinode,avatar:m,topic:this.state.topic,title:this.state.title,deleted:this.state.deleted}),a?null:i().createElement("span",{className:g})),i().createElement("div",{id:"topic-title-group"},i().createElement("div",{id:"topic-title",className:_},this.state.title||i().createElement("i",null,i().createElement(r.FormattedMessage,{id:"unnamed_topic",defaultMessage:[{type:0,value:"Unnamed"}]})),i().createElement(ss,{badges:o})),i().createElement("div",{id:"topic-last-seen"},u)),n?i().createElement(xa,{tinode:this.props.tinode,subscribers:this.state.onlineSubs}):i().createElement("div",{id:"topic-users"}),i().createElement("div",null,i().createElement("a",{href:"#",onClick:this.handleContextClick},i().createElement("i",{className:"material-icons"},"more_vert")))),this.props.displayMobile?i().createElement(Qs,{level:this.props.errorLevel,text:this.props.errorText,onClearError:this.props.onError}):null,i().createElement(Ks,{show:this.state.fetchingMessages}),i().createElement("div",{id:"messages-container"},i().createElement("button",{className:"action-button"+(this.state.showGoToLastButton?"":" hidden"),onClick:this.goToLatestMessage},i().createElement("i",{className:"material-icons"},"arrow_downward")),i().createElement("div",{id:"messages-panel",ref:this.handleScrollReference},i().createElement("ul",{id:"scroller",className:h},l)),this.state.isReader?null:i().createElement("div",{id:"write-only-background"},this.state.readingBlocked?i().createElement("div",{id:"write-only-note"},i().createElement(r.FormattedMessage,{id:"messages_not_readable",defaultMessage:[{type:0,value:"no access to messages"}]})):null)),this.state.peerMessagingDisabled&&!this.state.unconfirmed?i().createElement("div",{id:"peer-messaging-disabled-note"},i().createElement("i",{className:"material-icons secondary"},"block")," ",i().createElement(r.FormattedMessage,{id:"peers_messaging_disabled",defaultMessage:[{type:0,value:"Peer's messaging is disabled."}]})," ",i().createElement("a",{href:"#",onClick:this.handleEnablePeer},i().createElement(r.FormattedMessage,{id:"enable_peers_messaging",defaultMessage:[{type:0,value:"Enable"}]})),"."):null,this.state.unconfirmed?i().createElement(Oa,{onAction:this.handleNewChatAcceptance}):i().createElement(Fa,{tinode:this.props.tinode,topicName:this.state.topic,noInput:!!this.props.forwardMessage,disabled:!this.state.isWriter||this.state.deleted,onKeyPress:this.sendKeyPress,onSendMessage:this.sendMessage,onAttachFile:this.props.forwardMessage?null:this.handleAttachFile,onAttachImage:this.props.forwardMessage?null:this.handleAttachImage,onAttachAudio:this.props.forwardMessage?null:this.sendAudioAttachment,onError:this.props.onError,reply:this.state.reply,onQuoteClick:this.handleQuoteClick,onCancelReply:this.handleCancelReply}))}t=i().createElement("div",{id:"topic-view"},s)}else t=i().createElement(qa,{serverVersion:this.props.serverVersion,serverAddress:this.props.serverAddress});return t}}const Ga=(0,r.injectIntl)(Wa);class $a extends i().PureComponent{render(){return i().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.props.onBack()}},i().createElement("i",{className:"material-icons"},"arrow_back"))}}class Qa extends i().PureComponent{render(){return i().createElement("div",null,i().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.props.onNewTopic()}},i().createElement("i",{className:"material-icons"},"chat"))," ",i().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.props.onSettings()}},i().createElement("i",{className:"material-icons"},"settings")))}}class Xa extends i().PureComponent{render(){return i().createElement("div",null,i().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.props.onSignUp()}},i().createElement("i",{className:"material-icons"},"person_add"))," ",i().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.props.onSettings()}},i().createElement("i",{className:"material-icons"},"settings")))}}class Ya extends i().PureComponent{render(){const e=[];this.props.trustedBadges&&this.props.trustedBadges.map((t=>{e.push({icon:t,color:"badge-inv"})}));let t=null;return this.props.tinode&&(t=this.props.tinode.authorizeURL(ls(this.props.avatar,"image"))),i().createElement("div",{id:"side-caption-panel",className:"caption-panel"},this.props.onCancel?i().createElement($a,{onBack:this.props.onCancel}):null,t?i().createElement("div",{id:"self-avatar",className:"avatar-box"},i().createElement(ps,{tinode:this.props.tinode,avatar:t,topic:this.props.myUserId,title:this.props.title})):null,i().createElement("div",{id:"sidepanel-title",className:"panel-title"},this.props.title,i().createElement(ss,{badges:e})),"login"===this.props.state?i().createElement(Xa,{onSignUp:this.props.onSignUp,onSettings:this.props.onSettings}):"contacts"===this.props.state?i().createElement(Qa,{onNewTopic:this.props.onNewTopic,onSettings:this.props.onSettings}):null)}}function Ja(e,t){return e&&e.substring(0,t)}class Za extends i().Component{constructor(e){super(e);const t=this.props.tinode.getMeTopic();this.state={fullName:Ja(t.public?t.public.fn:void 0,Yt.S8),description:Ja(t.public?t.public.note:void 0,Yt.EI),avatar:(0,ws.PD)(t.public?t.public.photo:null)}}render(){return i().createElement("div",{className:"scrollable-panel"},i().createElement("div",{className:"panel-form-column"},i().createElement("a",{href:"#",className:"flat-button float-right",onClick:e=>{e.preventDefault(),this.props.onNavigate("general")}},i().createElement("i",{className:"material-icons"},"edit")," ",i().createElement(r.FormattedMessage,{id:"button_edit",defaultMessage:[{type:0,value:"Edit"}]})),i().createElement("center",null,i().createElement(Ws,{tinode:this.props.tinode,avatar:this.state.avatar,readOnly:!0,uid:this.props.myUserId,title:this.state.fullName})),i().createElement("div",{className:"group"},i().createElement("label",{className:"small"},i().createElement(r.FormattedMessage,{id:"label_your_name",defaultMessage:[{type:0,value:"Your name"}]})),i().createElement("div",{className:"large ellipsized"},this.state.fullName)),i().createElement("div",{className:"group"},i().createElement("label",{className:"small"},i().createElement(r.FormattedMessage,{id:"label_user_id",defaultMessage:[{type:0,value:"ID:"}]}))," ",i().createElement("tt",null,this.props.myUserId)),i().createElement("div",{className:"group"},i().createElement(js,{trustedBadges:this.props.trustedBadges})),this.state.description?i().createElement("div",{className:"group"},i().createElement("label",{className:"small"},i().createElement(r.FormattedMessage,{id:"label_description",defaultMessage:[{type:0,value:"Description"}]})),i().createElement("div",null,this.state.description)):null),i().createElement("div",{className:"hr"}),i().createElement("div",{className:"panel-form-column"},i().createElement("a",{href:"#",className:"flat-button",onClick:e=>{e.preventDefault(),this.props.onNavigate("notif")}},i().createElement("i",{className:"material-icons"},"notifications")," ",i().createElement(r.FormattedMessage,{id:"sidepanel_title_acc_notifications",defaultMessage:[{type:0,value:"Notifications"}]})),i().createElement("a",{href:"#",className:"flat-button",onClick:e=>{e.preventDefault(),this.props.onNavigate("security")}},i().createElement("i",{className:"material-icons"},"security")," ",i().createElement(r.FormattedMessage,{id:"button_security",defaultMessage:[{type:0,value:"Security"}]})),i().createElement("a",{href:"#",className:"flat-button",onClick:e=>{e.preventDefault(),this.props.onNavigate("support")}},i().createElement("i",{className:"material-icons"},"contact_support")," ",i().createElement(r.FormattedMessage,{id:"sidepanel_title_acc_support",defaultMessage:[{type:0,value:"Support"}]}))))}}const ei=(0,r.defineMessages)({archived_contacts_title:{id:"archived_contacts",defaultMessage:[{type:0,value:"Archived contacts ("},{type:1,value:"count"},{type:0,value:")"}]}});class ti extends i().Component{constructor(e){super(e),this.handleAction=this.handleAction.bind(this),this.state=ti.deriveStateFromProps(e)}static deriveStateFromProps(e){const t=[];let s=0,a=0;return e.chatList.map((i=>{const n=i.acs&&!i.acs.isJoiner();n&&e.blocked&&t.push(i),n||e.blocked||(i.private&&i.private.arch?e.archive?t.push(i):a++:e.archive||(t.push(i),s+=i.unread>0?1:0))})),t.sort(((e,t)=>(t.touched||0)-(e.touched||0))),a>0&&t.push({action:"archive",title:ei.archived_contacts_title,values:{count:a}}),{contactList:t,unreadThreads:s}}componentDidUpdate(e,t){if(e.chatList!=this.props.chatList||e.archive!=this.props.archive||e.blocked!=this.props.blocked){const e=ti.deriveStateFromProps(this.props);this.setState(e),e.unreadThreads!=t.unreadThreads&&is(e.unreadThreads)}}handleAction(e){this.props.onShowArchive()}render(){return i().createElement(r.FormattedMessage,{id:"contacts_not_found",defaultMessage:[{type:0,value:"You have no chats"},{type:0,value:"<br/>"},{type:0,value:"¯∖_(ツ)_/¯"}]},(e=>i().createElement(Us,{tinode:this.props.tinode,connected:this.props.connected,contacts:this.state.contactList,emptyListMessage:e,topicSelected:this.props.topicSelected,myUserId:this.props.myUserId,showOnline:!0,showUnread:!0,onTopicSelected:this.props.onTopicSelected,showContextMenu:this.props.showContextMenu,onAction:this.handleAction})))}}class si{static setObject(e,t){localStorage.setItem(e,JSON.stringify(t))}static getObject(e){const t=localStorage.getItem(e);return t&&JSON.parse(t)}static updateObject(e,t){const s=this.getObject(e);this.setObject(e,Object.assign(s||{},t))}static removeItem(e){localStorage.removeItem(e)}}class ai extends i().PureComponent{constructor(e){super(e),this.state={login:"",password:"",email:"",fn:"",imageUrl:null,uploadUrl:null,newAvatar:null,newAvatarMime:null,errorCleared:!1,buttonDisabled:!1,saveToken:si.getObject("keep-logged-in")},this.handleLoginChange=this.handleLoginChange.bind(this),this.handlePasswordChange=this.handlePasswordChange.bind(this),this.handleEmailChange=this.handleEmailChange.bind(this),this.handleFnChange=this.handleFnChange.bind(this),this.handleImageChanged=this.handleImageChanged.bind(this),this.handleToggleSaveToken=this.handleToggleSaveToken.bind(this),this.handleAvatarCropped=this.handleAvatarCropped.bind(this),this.handleAvatarCropCancel=this.handleAvatarCropCancel.bind(this),this.uploadAvatar=this.uploadAvatar.bind(this),this.handleSubmit=this.handleSubmit.bind(this)}handleLoginChange(e){this.setState({login:e.target.value})}handlePasswordChange(e){this.setState({password:e})}handleEmailChange(e){this.setState({email:e.target.value})}handleFnChange(e){this.setState({fn:e.target.value})}handleImageChanged(e,t){this.setState({newAvatar:t,newAvatarMime:e})}handleToggleSaveToken(){si.setObject("keep-logged-in",!this.state.saveToken),this.setState({saveToken:!this.state.saveToken})}handleSubmit(e){e.preventDefault(),this.setState({errorCleared:!1}),this.props.onCreateAccount(this.state.login.trim(),this.state.password.trim(),ns(this.state.fn.trim().substring(0,Yt.S8),this.state.uploadUrl),{meth:"email",val:this.state.email})}handleAvatarCropped(e,t,s,a){const i=t?URL.createObjectURL(t):null;this.setState({avatar:i,newAvatar:null,newAvatarMime:null}),t&&this.uploadAvatar(e,t,s,a)}handleAvatarCropCancel(){this.setState({newAvatar:null,newAvatarMime:null})}uploadAvatar(e,t,s,a){const i=e=>{let{mime:t,blob:s}=e;if(this.setState({imageUrl:URL.createObjectURL(s),buttonDisabled:!0}),s.size>Yt.uv){this.props.tinode.getLargeFileHelper().upload(s,"newacc").then((e=>this.setState({uploadUrl:e}))).catch((e=>this.props.onError(e.message,"err"))).finally((e=>this.setState({buttonDisabled:!1})))}else(0,ws.w8)(s).then((e=>this.setState({uploadUrl:(0,ws.PD)({data:e.bits,type:t})}))).finally((e=>this.setState({buttonDisabled:!1})))};s>Yt.IX||a>Yt.IX||s!=a?(0,ws.EA)(t,Yt.IX,Yt.IX,Yt.GQ,!0).then((e=>i(e))).catch((e=>this.props.onError(e.message,"err"))):i({mime:e,blob:t,width:s,height:a})}render(){if(this.state.newAvatar)return i().createElement(na,{avatar:this.state.newAvatar,mime:this.state.newAvatarMime,onSubmit:this.handleAvatarCropped,onCancel:this.handleAvatarCropCancel,onError:this.props.onError});let e="primary";return this.props.disabled&&(e+=" disabled"),i().createElement("form",{className:"panel-form-column",onSubmit:this.handleSubmit},i().createElement("div",{className:"panel-form-row"},i().createElement("div",{className:"panel-form-column"},i().createElement(r.FormattedMessage,{id:"login_prompt",defaultMessage:[{type:0,value:"Login"}]},(e=>i().createElement("input",{type:"text",placeholder:e,autoComplete:"user-name",value:this.state.login,onChange:this.handleLoginChange,required:!0,autoFocus:!0}))),i().createElement(r.FormattedMessage,{id:"password_prompt",defaultMessage:[{type:0,value:"Password"}]},(e=>i().createElement(oa,{placeholder:e,autoComplete:"new-password",value:this.state.password,onFinished:this.handlePasswordChange,required:!0})))),i().createElement(Ws,{tinode:this.props.tinode,avatar:this.state.imageUrl,onImageUpdated:this.handleImageChanged,onError:this.props.onError})),i().createElement("div",{className:"panel-form-row"},i().createElement(r.FormattedMessage,{id:"full_name_prompt",defaultMessage:[{type:0,value:"Full name, e.g. John Doe"}]},(e=>i().createElement("input",{type:"text",placeholder:e,autoComplete:"name",value:this.state.fn,onChange:this.handleFnChange,required:!0})))),i().createElement("div",{className:"panel-form-row"},i().createElement(r.FormattedMessage,{id:"email_prompt",defaultMessage:[{type:0,value:"Email, e.g. jdoe@example.com"}]},(e=>i().createElement("input",{type:"email",placeholder:e,autoComplete:"email",value:this.state.email,onChange:this.handleEmailChange,required:!0})))),i().createElement("div",{className:"panel-form-row"},i().createElement(Gs,{id:"save-token",name:"save-token",checked:this.state.saveToken,onChange:this.handleToggleSaveToken}),i().createElement(r.FormattedMessage,{id:"stay_logged_in",defaultMessage:[{type:0,value:"Stay logged in"}]},(e=>i().createElement("label",{htmlFor:"save-token"}," ",e)))),i().createElement("div",{className:"dialog-buttons"},i().createElement("button",{className:e,type:"submit",disabled:this.state.buttonDisabled},i().createElement(r.FormattedMessage,{id:"button_sign_up",defaultMessage:[{type:0,value:"Sign up"}]}))))}}class ii extends i().PureComponent{constructor(e){super(e),this.handleCheckboxClick=this.handleCheckboxClick.bind(this)}handleCheckboxClick(e,t){"sound"==e?this.props.onToggleMessageSounds(t):"alert"==e?this.props.onTogglePushNotifications(t):"incognito"==e&&this.props.onToggleIncognitoMode(t)}render(){return i().createElement("div",{className:"scrollable-panel"},i().createElement("div",{className:"panel-form-row"},i().createElement("label",{htmlFor:"message-sound"},i().createElement(r.FormattedMessage,{id:"label_message_sound",defaultMessage:[{type:0,value:"Message sound:"}]})),i().createElement(Gs,{name:"sound",id:"message-sound",checked:this.props.messageSounds,onChange:this.handleCheckboxClick})),i().createElement("div",{className:"panel-form-row"},i().createElement("label",{htmlFor:"desktop-alerts"},this.props.desktopAlertsEnabled?i().createElement(r.FormattedMessage,{id:"label_push_notifications",defaultMessage:[{type:0,value:"Notification alerts:"}]}):i().createElement(r.FormattedMessage,{id:"label_push_notifications_disabled",defaultMessage:[{type:0,value:"Notification alerts (requires HTTPS):"}]})),i().createElement(Gs,{name:"alert",id:"desktop-alerts",checked:this.props.desktopAlerts,onChange:this.props.desktopAlertsEnabled?this.handleCheckboxClick:null})),i().createElement("div",{className:"panel-form-row"},i().createElement("label",{htmlFor:"incognito-mode"},i().createElement(r.FormattedMessage,{id:"label_incognito_mode",defaultMessage:[{type:0,value:"Incognito mode:"}]})),i().createElement(Gs,{name:"incognito",id:"incognito-mode",checked:this.props.incognitoMode,onChange:this.handleCheckboxClick})))}}const ni=(0,r.defineMessages)({delete_account:{id:"delete_account",defaultMessage:[{type:0,value:"Delete account"}]},delete_account_warning:{id:"delete_account_warning",defaultMessage:[{type:0,value:"Are you sure you want to delete your account? It cannot be undone."}]}});class oi extends i().Component{constructor(e){super(e);const t=this.props.tinode.getMeTopic();let s=0;t.contacts((e=>{e.acs&&!e.acs.isJoiner()&&s++}));const a=t.getDefaultAccess();this.state={auth:a?a.auth:null,anon:a?a.anon:null,showPermissionEditorFor:void 0,blockedCount:s},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)}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 t={};t[this.state.showPermissionEditorFor]=e,this.props.onUpdateAccountDesc("me",void 0,void 0,t);let s={showPermissionEditorFor:void 0};s[this.state.showPermissionEditorFor]=e,this.setState(s)}handleDeleteAccount(e){e.preventDefault();const{formatMessage:t}=this.props.intl;this.props.onShowAlert(t(ni.delete_account),t(ni.delete_account_warning),(()=>{this.props.onDeleteAccount()}),null,!0,null)}render(){return i().createElement(i().Fragment,null,this.state.showPermissionEditorFor?i().createElement(aa,{mode:this.state.editedPermissions,skip:"O",onSubmit:this.handlePermissionsChanged,onCancel:this.handleHidePermissionsEditor}):i().createElement("div",{className:"scrollable-panel"},i().createElement("div",{className:"panel-form-column"},i().createElement("label",{className:"small"},i().createElement(r.FormattedMessage,{id:"label_password",defaultMessage:[{type:0,value:"Password"}]})),i().createElement("div",null,i().createElement(r.FormattedMessage,{id:"password_unchanged_prompt",defaultMessage:[{type:0,value:"Unchanged"}]},(e=>i().createElement(ra,{placeholder:e,type:"password",onFinished:this.handlePasswordUpdate}))))),i().createElement("div",{className:"hr"}),i().createElement("div",{className:"panel-form-column"},i().createElement("a",{href:"#",className:"danger flat-button",onClick:e=>{e.preventDefault(),this.props.onLogout()}},i().createElement("i",{className:"material-icons"},"exit_to_app")," ",i().createElement(r.FormattedMessage,{id:"button_logout",defaultMessage:[{type:0,value:"Logout"}]})),i().createElement("a",{href:"#",className:"danger flat-button",onClick:e=>{this.handleDeleteAccount(e)}},i().createElement("i",{className:"material-icons"},"delete")," ",i().createElement(r.FormattedMessage,{id:"button_delete_account",defaultMessage:[{type:0,value:"Delete account"}]}))),i().createElement("div",{className:"hr"}),i().createElement("div",{className:"panel-form-column"},i().createElement("div",null,i().createElement("label",{className:"small"},i().createElement(r.FormattedMessage,{id:"label_default_access_mode",defaultMessage:[{type:0,value:"Default access mode:"}]}))),i().createElement("div",{className:"quoted"},i().createElement("div",null,"Auth: ",i().createElement("tt",{className:"clickable",onClick:this.handleLaunchPermissionsEditor.bind(this,"auth")},this.state.auth)),i().createElement("div",null,"Anon: ",i().createElement("tt",{className:"clickable",onClick:this.handleLaunchPermissionsEditor.bind(this,"anon")},this.state.anon)))),this.state.blockedCount>0?i().createElement(i().Fragment,null,i().createElement("div",{className:"hr"}),i().createElement("div",{className:"panel-form-row"},i().createElement("i",{className:"material-icons"},"block")," ",i().createElement("a",{href:"#",className:"gray",onClick:e=>{e.preventDefault(),this.props.onShowBlocked()}},i().createElement(r.FormattedMessage,{id:"blocked_contacts_link",defaultMessage:[{type:0,value:"Blocked contacts ("},{type:1,value:"count"},{type:0,value:")"}],values:{count:this.state.blockedCount}})))):null))}}const ri=(0,r.injectIntl)(oi);class li extends i().PureComponent{render(){return i().createElement("div",{className:"scrollable-panel"},i().createElement("div",{className:"panel-form-column"},i().createElement("a",{href:Yt.li,className:"flat-button",target:"_blank"},i().createElement("i",{className:"material-icons"},"email")," ",i().createElement(r.FormattedMessage,{id:"link_contact_us",defaultMessage:[{type:0,value:"Contact Us"}]})),i().createElement("a",{href:Yt.S9,className:"flat-button",target:"_blank"},i().createElement("i",{className:"material-icons"},"description")," ",i().createElement(r.FormattedMessage,{id:"link_terms_of_service",defaultMessage:[{type:0,value:"Terms of Service"}]})),i().createElement("a",{href:Yt.NW,className:"flat-button",target:"_blank"},i().createElement("i",{className:"material-icons"},"policy")," ",i().createElement(r.FormattedMessage,{id:"link_privacy_policy",defaultMessage:[{type:0,value:"Privacy Policy"}]}))),i().createElement("div",{className:"hr"}),i().createElement("div",{className:"panel-form-column"},i().createElement("div",{className:"panel-form-row"},i().createElement("label",{className:"small"},i().createElement(r.FormattedMessage,{id:"label_client",defaultMessage:[{type:0,value:"Client:"}]})),Yt.iC),i().createElement("div",{className:"panel-form-row"},i().createElement("label",{className:"small"},i().createElement(r.FormattedMessage,{id:"label_sdk",defaultMessage:[{type:0,value:"SDK:"}]})),Qt.Tinode.getLibrary()),i().createElement("div",{className:"panel-form-row"},i().createElement("label",{className:"small"},i().createElement(r.FormattedMessage,{id:"label_server",defaultMessage:[{type:0,value:"Server:"}]})),this.props.serverVersion),i().createElement("div",{className:"panel-form-row"},i().createElement("label",{className:"small"},i().createElement(r.FormattedMessage,{id:"label_server_address",defaultMessage:[{type:0,value:"Server address:"}]})),this.props.serverAddress)))}}class ci extends i().Component{constructor(e){super(e),this.state={login:e.login,password:"",hostName:e.serverAddress,saveToken:e.persist},this.handleLoginChange=this.handleLoginChange.bind(this),this.handlePasswordChange=this.handlePasswordChange.bind(this),this.handleToggleSaveToken=this.handleToggleSaveToken.bind(this),this.handleSubmit=this.handleSubmit.bind(this)}handleLoginChange(e){this.setState({login:e.target.value})}handlePasswordChange(e){this.setState({password:e.target.value})}handleToggleSaveToken(){this.props.onPersistenceChange(!this.state.saveToken),this.setState({saveToken:!this.state.saveToken})}handleSubmit(e){e.preventDefault(),this.props.onLogin(this.state.login.trim(),this.state.password.trim())}render(){let e="primary";return this.props.disabled&&(e+=" disabled"),i().createElement("form",{id:"login-form",onSubmit:this.handleSubmit},i().createElement(r.FormattedMessage,{id:"login_prompt",defaultMessage:[{type:0,value:"Login"}]},(e=>i().createElement("input",{type:"text",id:"inputLogin",placeholder:e,autoComplete:"username",autoCorrect:"off",autoCapitalize:"none",value:this.state.login,onChange:this.handleLoginChange,required:!0,autoFocus:!0}))),i().createElement(r.FormattedMessage,{id:"password_prompt",defaultMessage:[{type:0,value:"Password"}]},(e=>i().createElement(oa,{type:"password",id:"inputPassword",placeholder:e,autoComplete:"current-password",value:this.state.password,onChange:this.handlePasswordChange,required:!0}))),i().createElement("div",{className:"panel-form-row"},i().createElement(Gs,{id:"save-token",name:"save-token",checked:this.state.saveToken,onChange:this.handleToggleSaveToken}),i().createElement("label",{htmlFor:"save-token"}," ",i().createElement(r.FormattedMessage,{id:"stay_logged_in",defaultMessage:[{type:0,value:"Stay logged in"}]})),i().createElement("a",{href:"#reset"},i().createElement(r.FormattedMessage,{id:"forgot_password_link",defaultMessage:[{type:0,value:"Forgot password?"}]}))),i().createElement("div",{className:"dialog-buttons"},i().createElement("button",{className:e,type:"submit"},i().createElement(r.FormattedMessage,{id:"button_sign_in",defaultMessage:[{type:0,value:"Sign in"}]}))))}}const di=(0,r.defineMessages)({invalid_id:{id:"error_invalid_id",defaultMessage:[{type:0,value:"Invalid ID"}]}});class hi extends i().PureComponent{constructor(e){super(e),this.state={groupId:""},this.handleChange=this.handleChange.bind(this),this.handleKeyPress=this.handleKeyPress.bind(this),this.handleSubmit=this.handleSubmit.bind(this)}handleChange(e){this.setState({groupId:e.target.value})}handleKeyPress(e){"Enter"===e.key&&this.handleSubmit(e)}handleSubmit(e){if(e.preventDefault(),this.state.groupId){const e=this.state.groupId.trim(),t=e.substr(0,3);e.length>3&&["usr","grp","chn"].includes(t)?this.props.onSubmit(e):this.props.onError(this.props.intl.formatMessage(di.invalid_id),"err")}}render(){return i().createElement("div",{className:"panel-form"},i().createElement("div",{className:"panel-form-row"},i().createElement(r.FormattedMessage,{id:"group_user_id_prompt",defaultMessage:[{type:0,value:"Group or User ID"}]},(e=>i().createElement("input",{type:"text",placeholder:e,value:this.state.groupId,onChange:this.handleChange,onKeyPress:this.handleKeyPress,required:!0,autoFocus:!0})))),i().createElement("div",{className:"dialog-buttons"},i().createElement("button",{className:"primary",onClick:this.handleSubmit},i().createElement(r.FormattedMessage,{id:"button_subscribe",defaultMessage:[{type:0,value:"Subscribe"}]}))))}}const pi=(0,r.injectIntl)(hi);class ui extends i().PureComponent{constructor(e){super(e),this.fullName=i().createRef(),this.state={fullName:"",private:"",description:"",imageUrl:null,tags:[],isChannel:!1,newAvatar:null,newAvatarMime:null},this.handleFieldEdit=this.handleFieldEdit.bind(this),this.handleImageChanged=this.handleImageChanged.bind(this),this.handleAvatarCropped=this.handleAvatarCropped.bind(this),this.handleAvatarCropCancel=this.handleAvatarCropCancel.bind(this),this.uploadAvatar=this.uploadAvatar.bind(this),this.handleTagsChanged=this.handleTagsChanged.bind(this),this.handleChannelToggle=this.handleChannelToggle.bind(this),this.handleSubmit=this.handleSubmit.bind(this)}componentDidMount(){}handleFieldEdit(e,t){this.setState({[e]:t.target.value||""})}handleImageChanged(e,t){this.setState({newAvatar:t,newAvatarMime:e})}handleAvatarCropped(e,t,s,a){const i=t?URL.createObjectURL(t):null;this.setState({imageUrl:i,newAvatar:null,newAvatarMime:null}),t&&this.uploadAvatar(e,t,s,a)}handleAvatarCropCancel(){this.setState({newAvatar:null,newAvatarMime:null})}uploadAvatar(e,t,s,a){const i=e=>{let{mime:t,blob:s}=e;if(s.size>Yt.uv){this.props.tinode.getLargeFileHelper().upload(s).then((e=>this.setState({imageUrl:e}))).catch((e=>this.props.onError(e.message,"err")))}else(0,ws.w8)(s).then((e=>this.setState({imageUrl:(0,ws.PD)({data:e.bits,type:t})})))};s>Yt.IX||a>Yt.IX||s!=a?(0,ws.EA)(t,Yt.IX,Yt.IX,Yt.GQ,!0).then((e=>i(e))).catch((e=>this.props.onError(e.message,"err"))):i({mime:e,blob:t,width:s,height:a})}handleTagsChanged(e){this.setState({tags:e})}handleChannelToggle(){this.setState({isChannel:!this.state.isChannel})}handleSubmit(e){e.preventDefault();const t=this.state.fullName.trim().substring(0,Yt.S8),s=this.state.private.trim().substring(0,Yt.S8),a=this.state.description.trim().substring(0,Yt.EI);t&&this.props.onSubmit(t,a,this.state.imageUrl,s,this.state.tags,this.state.isChannel)}render(){if(this.state.newAvatar)return i().createElement(na,{avatar:this.state.newAvatar,mime:this.state.newAvatarMime,onSubmit:this.handleAvatarCropped,onCancel:this.handleAvatarCropCancel,onError:this.props.onError});let e="primary";return this.props.disabled&&(e+=" disabled"),i().createElement("form",{className:"panel-form",onSubmit:this.handleSubmit},i().createElement("div",{className:"panel-form-column"},i().createElement("center",null,i().createElement(Ws,{tinode:this.props.tinode,avatar:this.state.imageUrl,onError:this.props.onError,onImageUpdated:this.handleImageChanged})),i().createElement("div",{className:"group"},i().createElement("label",{className:"small",htmlFor:"new-topic-fn"},i().createElement(r.FormattedMessage,{id:"label_topic_name",defaultMessage:[{type:0,value:"Name"}]})),i().createElement(r.FormattedMessage,{id:"topic_name_editing_placeholder",defaultMessage:[{type:0,value:"Freeform name of the group"}]},(e=>i().createElement("input",{type:"text",id:"new-topic-fn",placeholder:e,ref:this.fullName,value:this.state.fullName,onChange:this.handleFieldEdit.bind(this,"fullName"),autoFocus:!0,required:!0,tabIndex:0})))),i().createElement("div",{className:"group"},i().createElement("label",{className:"small",htmlFor:"new-topic-priv"},i().createElement(r.FormattedMessage,{id:"label_private",defaultMessage:[{type:0,value:"Private comment"}]})),i().createElement(r.FormattedMessage,{id:"private_editing_placeholder",defaultMessage:[{type:0,value:"Visible to you only"}]},(e=>i().createElement("input",{type:"text",id:"new-topic-priv",placeholder:e,value:this.state.private,onChange:this.handleFieldEdit.bind(this,"private"),tabIndex:1})))),i().createElement("div",{className:"group"},i().createElement("label",{className:"small",htmlFor:"new-topic-desc"},i().createElement(r.FormattedMessage,{id:"label_description",defaultMessage:[{type:0,value:"Description"}]})),i().createElement(r.FormattedMessage,{id:"description_editing_placeholder",defaultMessage:[{type:0,value:"Description (optional)"}]},(e=>i().createElement("input",{type:"text",id:"new-topic-desc",placeholder:e,value:this.state.description,onChange:this.handleFieldEdit.bind(this,"description"),tabIndex:2}))))),i().createElement("div",{className:"panel-form-row"},i().createElement(Gs,{checked:this.state.isChannel,tabIndex:3,onChange:this.handleChannelToggle})," ",i().createElement("label",{onClick:this.handleChannelToggle},i().createElement(r.FormattedMessage,{id:"channel_prompt",defaultMessage:[{type:0,value:"This is a channel"}]}))),i().createElement(r.FormattedMessage,{id:"title_tag_manager",defaultMessage:[{type:0,value:"Tags (search & discovery)"}]},(e=>i().createElement(la,{tinode:this.props.tinode,tags:this.state.tags,activated:!0,onTagsChanged:this.handleTagsChanged,tabIndex:4,title:e}))),i().createElement("div",{className:"dialog-buttons"},i().createElement("button",{className:e},i().createElement(r.FormattedMessage,{id:"button_create",defaultMessage:[{type:0,value:"Create"}]}))))}}const mi=(0,r.defineMessages)({search_for_contacts:{id:"search_for_contacts",defaultMessage:[{type:0,value:"Use search to find contacts"}]},search_no_results:{id:"search_no_results",defaultMessage:[{type:0,value:"Search returned no results"}]},search_placeholder:{id:"search_placeholder",defaultMessage:[{type:0,value:"List like email:alice@example.com, tel:17025550003..."}]}});class gi extends i().Component{constructor(e){super(e),this.state={tabSelected:"find",searchQuery:null},this.handleTabClick=this.handleTabClick.bind(this),this.handleSearchContacts=this.handleSearchContacts.bind(this),this.handleSearchResultSelected=this.handleSearchResultSelected.bind(this),this.handleNewGroupSubmit=this.handleNewGroupSubmit.bind(this),this.handleGroupByID=this.handleGroupByID.bind(this)}componentDidMount(){this.props.onInitFind()}handleTabClick(e){e.preventDefault(),ja.navigateTo(ja.addUrlParam(window.location.hash,"tab",e.currentTarget.dataset.id)),this.setState({tabSelected:e.currentTarget.dataset.id})}handleSearchContacts(e){this.props.onSearchContacts(e),this.setState({searchQuery:Qt.Tinode.isNullValue(e)?null:e})}handleSearchResultSelected(e){"find"==this.state.tabSelected&&(ja.navigateTo(ja.removeUrlParam(window.location.hash,"tab")),this.props.onCreateTopic(e))}handleNewGroupSubmit(e,t,s,a,i,n){ja.navigateTo(ja.removeUrlParam(window.location.hash,"tab")),this.props.onCreateTopic(void 0,{public:ns(e,s,null,t),private:a,tags:i},n)}handleGroupByID(e){ja.navigateTo(ja.removeUrlParam(window.location.hash,"tab")),this.props.onCreateTopic(e)}render(){const{formatMessage:e}=this.props.intl,t=e(this.state.searchQuery?mi.search_no_results:mi.search_for_contacts),s=e(mi.search_placeholder);return i().createElement("div",{className:"flex-column"},i().createElement("ul",{className:"tabbar"},i().createElement("li",{className:"find"===this.state.tabSelected?"active":null},i().createElement("a",{href:"#","data-id":"find",onClick:this.handleTabClick},i().createElement(r.FormattedMessage,{id:"tabtitle_find_user",defaultMessage:[{type:0,value:"find"}]}))),i().createElement("li",{className:"grp"===this.state.tabSelected?"active":null},i().createElement("a",{href:"#","data-id":"grp",onClick:this.handleTabClick},i().createElement(r.FormattedMessage,{id:"tabtitle_new_group",defaultMessage:[{type:0,value:"new group"}]}))),i().createElement("li",{className:"byid"===this.state.tabSelected?"active":null},i().createElement("a",{href:"#","data-id":"byid",onClick:this.handleTabClick},i().createElement(r.FormattedMessage,{id:"tabtitle_group_by_id",defaultMessage:[{type:0,value:"by id"}]})))),"grp"===this.state.tabSelected?i().createElement(ui,{tinode:this.props.tinode,onSubmit:this.handleNewGroupSubmit,onError:this.props.onError}):"byid"===this.state.tabSelected?i().createElement(pi,{onSubmit:this.handleGroupByID,onError:this.props.onError}):i().createElement("div",{className:"flex-column"},i().createElement(xs,{placeholder:s,onSearchContacts:this.handleSearchContacts}),i().createElement(Us,{tinode:this.props.tinode,contacts:this.props.searchResults,myUserId:this.props.myUserId,emptyListMessage:t,showOnline:!1,showUnread:!1,showContextMenu:!1,onTopicSelected:this.handleSearchResultSelected})))}}const _i=(0,r.injectIntl)(gi);class fi extends i().PureComponent{constructor(e){super(e),this.state={email:"",password:"",sent:!1},this.handleSubmit=this.handleSubmit.bind(this),this.handleEmailChange=this.handleEmailChange.bind(this),this.handlePasswordChange=this.handlePasswordChange.bind(this)}componentDidMount(){const e=ja.parseUrlHash(window.location.hash);this.setState({token:e.params.token,scheme:e.params.scheme})}handleSubmit(e){if(e.preventDefault(),this.state.token)this.props.onReset(this.state.scheme,this.state.password.trim(),this.state.token);else if(this.state.sent)this.props.onCancel();else{const e=this.state.email.trim();this.setState({email:e}),this.props.onRequest("email",e).then((()=>{this.setState({sent:!0})}))}}handleEmailChange(e){this.setState({email:e.target.value})}handlePasswordChange(e){this.setState({password:e.target.value})}render(){return i().createElement("form",{id:"password-reset-form",onSubmit:this.handleSubmit},this.state.token&&this.state.scheme?i().createElement(i().Fragment,null,i().createElement("label",{htmlFor:"new-password"},i().createElement(r.FormattedMessage,{id:"label_new_password",defaultMessage:[{type:0,value:"New password"}]})),i().createElement(r.FormattedMessage,{id:"new_password_placeholder",defaultMessage:[{type:0,value:"Enter new password"}]},(e=>i().createElement(oa,{id:"new-password",placeholder:e,autoComplete:"new-password",value:this.state.password,required:!0,autoFocus:!0,onChange:this.handlePasswordChange})))):this.state.sent?i().createElement(i().Fragment,null,i().createElement("br",null),i().createElement("center",null,i().createElement("i",{className:"material-icons huge green"},"task_alt")),i().createElement("br",null),i().createElement("center",null,i().createElement(r.FormattedMessage,{id:"password_reset_email_sent",defaultMessage:[{type:0,value:"An email has been sent to "},{type:1,value:"email"},{type:0,value:". Follow the directions in the email to reset your password."}],values:{email:i().createElement("tt",null,this.state.email)}}))):i().createElement(i().Fragment,null,i().createElement("label",{htmlFor:"inputEmail"},i().createElement(r.FormattedMessage,{id:"label_reset_password",defaultMessage:[{type:0,value:"Send a password reset email:"}]})),i().createElement(r.FormattedMessage,{id:"credential_email_prompt",defaultMessage:[{type:0,value:"Your registration email"}]},(e=>i().createElement("input",{type:"email",id:"inputEmail",placeholder:e,autoComplete:"email",value:this.state.email,onChange:this.handleEmailChange,required:!0,autoFocus:!0})))),i().createElement("div",{className:"dialog-buttons"},i().createElement("button",{className:"primary",type:"submit"},this.state.token&&this.state.scheme?i().createElement(r.FormattedMessage,{id:"button_reset",defaultMessage:[{type:0,value:"Reset"}]}):this.state.sent?i().createElement(r.FormattedMessage,{id:"button_ok",defaultMessage:[{type:0,value:"OK"}]}):i().createElement(r.FormattedMessage,{id:"button_send_request",defaultMessage:[{type:0,value:"Send request"}]}))))}}class bi extends i().PureComponent{constructor(e){super(e),this.state={hostName:e.serverAddress,changed:!1},this.handleHostNameChange=this.handleHostNameChange.bind(this),this.handleEditingFinished=this.handleEditingFinished.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this)}handleHostNameChange(e){this.setState({hostName:e.target.value,changed:!0})}handleEditingFinished(){this.state.changed&&(this.setState({changed:!1}),this.props.onServerAddressChange(this.state.hostName.trim()))}handleKeyDown(e){"Enter"==e.key&&this.handleEditingFinished()}render(){var e=[];for(let t in Yt.Rc){let s=Yt.Rc[t];e.push(i().createElement("option",{key:s,value:s}))}return i().createElement("div",{className:"panel-form-row"},i().createElement("input",{type:"search",id:"host-name",placeholder:this.props.hostName,list:"known-hosts",className:"quoted",value:this.state.hostName,onChange:this.handleHostNameChange,onBlur:this.handleEditingFinished,onKeyDown:this.handleKeyDown,required:!0}),i().createElement("datalist",{id:"known-hosts"},e))}}class vi extends i().PureComponent{constructor(e){super(e),this.state={transport:e.transport||"def",serverAddress:e.serverAddress,secureConnection:e.secureConnection},this.handleSubmit=this.handleSubmit.bind(this),this.handleTransportSelected=this.handleTransportSelected.bind(this),this.handleServerAddressChange=this.handleServerAddressChange.bind(this),this.handleToggleSecure=this.handleToggleSecure.bind(this)}handleSubmit(e){e.preventDefault(),this.props.onUpdate({transport:this.state.transport,serverAddress:this.state.serverAddress,secureConnection:this.state.secureConnection})}handleTransportSelected(e){this.setState({transport:e.currentTarget.value})}handleServerAddressChange(e){this.setState({serverAddress:e})}handleToggleSecure(e){this.setState({secureConnection:!this.state.secureConnection})}render(){const e={def:"default",ws:"websocket",lp:"long polling"},t=[];return["def","ws","lp"].map((s=>{const a="transport-"+s,n=e[s];t.push(i().createElement("li",{key:s},i().createElement("input",{type:"radio",id:a,name:"transport-select",value:s,checked:this.state.transport===s,onChange:this.handleTransportSelected}),i().createElement("label",{htmlFor:a},n)))})),i().createElement("form",{id:"settings-form",className:"panel-form",onSubmit:this.handleSubmit},i().createElement("div",{className:"panel-form-row"},i().createElement("label",{className:"small"},i().createElement(r.FormattedMessage,{id:"label_server_to_use",defaultMessage:[{type:0,value:"Server to use:"}]}))),i().createElement(bi,{serverAddress:this.state.serverAddress,onServerAddressChange:this.handleServerAddressChange}),i().createElement("div",{className:"panel-form-row"},i().createElement(Gs,{id:"secure-connection",name:"secure-connection",checked:this.state.secureConnection,className:"quoted",onChange:this.handleToggleSecure}),i().createElement("label",{htmlFor:"secure-connection"},i().createElement(r.FormattedMessage,{id:"label_use_secure_connection",defaultMessage:[{type:0,value:"Use secure connection"}]}))),i().createElement("div",{className:"panel-form-row"},i().createElement("label",{className:"small"},i().createElement(r.FormattedMessage,{id:"label_wire_transport",defaultMessage:[{type:0,value:"Wire transport:"}]}))),i().createElement("div",{className:"panel-form-row"},i().createElement("ul",{className:"quoted"},t)),i().createElement("div",{className:"dialog-buttons"},i().createElement("button",{type:"submit",className:"primary"},i().createElement(r.FormattedMessage,{id:"button_update",defaultMessage:[{type:0,value:"Update"}]}))))}}const wi=(0,r.defineMessages)({phone:{id:"phone_dative",defaultMessage:[{type:0,value:"phone"}]},email:{id:"email_dative",defaultMessage:[{type:0,value:"email"}]}});class yi extends i().PureComponent{constructor(e){super(e),this.state={code:e.credCode||"",codeReceived:e.credCode},this.handleChange=this.handleChange.bind(this),this.handleKeyPress=this.handleKeyPress.bind(this),this.handleSubmit=this.handleSubmit.bind(this),this.handleCancel=this.handleCancel.bind(this)}static getDerivedStateFromProps(e,t){return e.credCode!=t.codeReceived?{code:e.credCode||"",codeReceived:e.credCode}:t}componentDidMount(){this.props.credCode&&this.props.onSubmit(this.props.credMethod,this.props.credCode,this.props.credToken)}componentDidUpdate(e,t){this.state.codeReceived&&this.state.code&&this.state.code!=t.code&&this.props.onSubmit(this.props.credMethod,this.state.code,this.props.credToken)}handleChange(e){this.setState({code:e.target.value.trim()})}handleKeyPress(e){"Enter"===e.key?this.handleSubmit(e):"Escape"==e.key&&this.handleCancel(e)}handleSubmit(e){e.preventDefault(),this.state.code&&this.state.code.trim()&&this.props.onSubmit(this.props.credMethod,this.state.code.trim(),this.props.credToken)}handleCancel(e){e.preventDefault(),this.props.onCancel()}render(){const{formatMessage:e}=this.props.intl,t={email:e(wi.email),tel:e(wi.phone)}[this.props.credMethod]||this.props.credMethod;return i().createElement("div",{className:"panel-form"},i().createElement("div",{className:"panel-form-row"},i().createElement("label",{className:"small",htmlFor:"enter-confirmation-code"},i().createElement(r.FormattedMessage,{id:"enter_confirmation_code_prompt",defaultMessage:[{type:0,value:"Enter confirmation code sent to you by "},{type:1,value:"method"},{type:0,value:":"}],values:{method:t}}))),i().createElement("div",{className:"panel-form-row"},i().createElement(r.FormattedMessage,{id:"numeric_confirmation_code_prompt",defaultMessage:[{type:0,value:"Numbers only"}]},(e=>i().createElement("input",{type:"text",id:"enter-confirmation-code",placeholder:e,value:this.state.code,onChange:this.handleChange,onKeyPress:this.handleKeyPress,required:!0})))),i().createElement("div",{className:"dialog-buttons"},i().createElement("button",{className:"secondary",onClick:this.handleCancel},i().createElement(r.FormattedMessage,{id:"button_cancel",defaultMessage:[{type:0,value:"Cancel"}]})),i().createElement("button",{className:"primary",onClick:this.handleSubmit},i().createElement(r.FormattedMessage,{id:"button_confirm",defaultMessage:[{type:0,value:"Confirm"}]}))))}}const Ei=(0,r.injectIntl)(yi),Ci=(0,r.defineMessages)({login:{id:"sidepanel_title_login",defaultMessage:[{type:0,value:"Sign In"}]},register:{id:"sidepanel_title_register",defaultMessage:[{type:0,value:"Create Account"}]},settings:{id:"sidepanel_title_settings",defaultMessage:[{type:0,value:"Settings"}]},edit:{id:"sidepanel_title_account_settings",defaultMessage:[{type:0,value:"Account Settings"}]},general:{id:"panel_title_general",defaultMessage:[{type:0,value:"General"}]},security:{id:"panel_title_security",defaultMessage:[{type:0,value:"Security"}]},crop:{id:"panel_title_crop",defaultMessage:[{type:0,value:"Drag to Adjust"}]},notif:{id:"sidepanel_title_acc_notifications",defaultMessage:[{type:0,value:"Notifications"}]},support:{id:"sidepanel_title_acc_support",defaultMessage:[{type:0,value:"Support"}]},newtpk:{id:"sidepanel_title_newtpk",defaultMessage:[{type:0,value:"Start New Chat"}]},cred:{id:"sidepanel_title_cred",defaultMessage:[{type:0,value:"Confirm Credentials"}]},reset:{id:"sidepanel_title_reset",defaultMessage:[{type:0,value:"Reset Password"}]},archive:{id:"sidepanel_title_archive",defaultMessage:[{type:0,value:"Archived Chats"}]},blocked:{id:"sidepanel_title_blocked",defaultMessage:[{type:0,value:"Blocked Chats"}]}});class Si extends i().PureComponent{constructor(e){super(e),this.handleNewTopic=this.handleNewTopic.bind(this)}handleNewTopic(){this.props.onNavigate("newtpk")}render(){const{formatMessage:e}=this.props.intl,t=this.props.state||(this.props.myUserId?"contacts":"login");let s,a,n,o;return"contacts"==t?(s=this.props.title,a=!this.props.avatar||this.props.avatar,n=this.props.trustedBadges):(s=e(Ci[t]),a=!1,n=null),-1==["login","contacts"].indexOf(t)&&(o=this.props.onCancel),i().createElement("div",{id:"sidepanel",className:this.props.hideSelf?"nodisplay":null},i().createElement(Ya,{state:t,title:s,avatar:a,tinode:this.props.tinode,trustedBadges:n,myUserId:this.props.myUserId,onSignUp:this.props.onSignUp,onSettings:this.props.onSettings,onNewTopic:this.handleNewTopic,onCancel:o}),i().createElement(Qs,{level:this.props.errorLevel,text:this.props.errorText,action:this.props.errorAction,actionText:this.props.errorActionText,onClearError:this.props.onError}),i().createElement(Ks,{show:this.props.loadSpinnerVisible}),"login"===t?i().createElement(ci,{login:this.props.login,disabled:this.props.loginDisabled,persist:this.props.persist,onLogin:this.props.onLoginRequest,onPersistenceChange:this.props.onPersistenceChange}):"register"===t?i().createElement(ai,{tinode:this.props.tinode,onCreateAccount:this.props.onCreateAccount,onCancel:this.props.onCancel,onError:this.props.onError}):"settings"===t?i().createElement(vi,{transport:this.props.transport,serverAddress:this.props.serverAddress,secureConnection:this.props.secureConnection,onCancel:this.props.onCancel,onUpdate:this.props.onGlobalSettings}):"edit"===t?i().createElement(Za,{tinode:this.props.tinode,myUserId:this.props.myUserId,trustedBadges:this.props.trustedBadges,onNavigate:this.props.onNavigate}):"general"===t||"crop"===t?i().createElement(da,{topic:"me",tinode:this.props.tinode,myUserId:this.props.myUserId,onUpdateTopicDesc:this.props.onUpdateAccountDesc,onUpdateTags:this.props.onUpdateAccountTags,onCredAdd:this.props.onCredAdd,onCredDelete:this.props.onCredDelete,onCredConfirm:this.props.onCredConfirm,onError:this.props.onError}):"notif"===t?i().createElement(ii,{messageSounds:this.props.messageSounds,desktopAlerts:this.props.desktopAlerts,desktopAlertsEnabled:this.props.desktopAlertsEnabled,incognitoMode:this.props.incognitoMode,onTogglePushNotifications:this.props.onTogglePushNotifications,onToggleMessageSounds:this.props.onToggleMessageSounds,onToggleIncognitoMode:this.props.onToggleIncognitoMode}):"security"===t?i().createElement(ri,{tinode:this.props.tinode,onUpdateAccountDesc:this.props.onUpdateAccountDesc,onUpdatePassword:this.props.onUpdatePassword,onLogout:this.props.onLogout,onDeleteAccount:this.props.onDeleteAccount,onShowAlert:this.props.onShowAlert,onShowBlocked:this.props.onShowBlocked}):"support"===t?i().createElement(li,{serverAddress:this.props.serverAddress,serverVersion:this.props.serverVersion}):"contacts"===t||"archive"==t||"blocked"==t?i().createElement(ti,{tinode:this.props.tinode,myUserId:this.props.myUserId,connected:this.props.connected,topicSelected:this.props.topicSelected,archive:"archive"==t,blocked:"blocked"==t,chatList:this.props.chatList,showContextMenu:this.props.showContextMenu,onTopicSelected:this.props.onTopicSelected,onShowArchive:this.props.onShowArchive}):"newtpk"===t?i().createElement(_i,{tinode:this.props.tinode,searchResults:this.props.searchResults,onInitFind:this.props.onInitFind,onSearchContacts:this.props.onSearchContacts,onCreateTopic:this.props.onCreateTopic,onError:this.props.onError}):"cred"===t?i().createElement(Ei,{credCode:this.props.credCode,credMethod:this.props.credMethod,credToken:this.props.credToken,onSubmit:this.props.onValidateCredentials,onCancel:this.props.onCancel}):"reset"===t?i().createElement(fi,{onRequest:this.props.onPasswordResetRequest,onReset:this.props.onResetPassword,onCancel:this.props.onCancel}):null)}}const Mi=(0,r.injectIntl)(Si);var ki=s(119);function Ti(){let e=Yt.Mv;return"object"==typeof window.location&&("file:"==window.location.protocol||"localhost"==window.location.hostname?e=Yt.Rc.local:window.location.hostname&&(e=window.location.hostname+(window.location.port?":"+window.location.port:""))),e}function Ai(){return"object"==typeof window.location&&"https:"==window.location.protocol}const Ni=new Audio("audio/msg.m4a"),Di=(0,r.defineMessages)({reconnect_countdown:{id:"reconnect_countdown",defaultMessage:[{type:0,value:"Disconnected. Reconnecting in "},{type:1,value:"seconds"},{type:0,value:"…"}]},reconnect_now:{id:"reconnect_now",defaultMessage:[{type:0,value:"Try now"}]},push_init_failed:{id:"push_init_failed",defaultMessage:[{type:0,value:"Failed to initialize push notifications"}]},invalid_security_token:{id:"invalid_security_token",defaultMessage:[{type:0,value:"Invalid security token"}]},no_connection:{id:"no_connection",defaultMessage:[{type:0,value:"No connection"}]},code_doesnot_match:{id:"code_doesnot_match",defaultMessage:[{type:0,value:"Code does not match"}]},menu_item_info:{id:"menu_item_info",defaultMessage:[{type:0,value:"Info"}]},menu_item_video_call:{id:"menu_item_video_call",defaultMessage:[{type:0,value:"Video call"}]},cred_confirmed_successfully:{id:"cred_confirmed_successfully",defaultMessage:[{type:0,value:"Confirmed successfully"}]}});class Ii extends i().Component{constructor(e){super(e),this.selfRef=i().createRef(),this.state=this.getBlankState(),this.handleResize=this.handleResize.bind(this),this.handleHashRoute=this.handleHashRoute.bind(this),this.handleOnline=this.handleOnline.bind(this),this.checkForAppUpdate=this.checkForAppUpdate.bind(this),this.handleVisibilityEvent=this.handleVisibilityEvent.bind(this),this.handleError=this.handleError.bind(this),this.handleLoginRequest=this.handleLoginRequest.bind(this),this.handlePersistenceChange=this.handlePersistenceChange.bind(this),this.handleConnected=this.handleConnected.bind(this),this.handleAutoreconnectIteration=this.handleAutoreconnectIteration.bind(this),this.doLogin=this.doLogin.bind(this),this.handleLoginSuccessful=this.handleLoginSuccessful.bind(this),this.handleDisconnect=this.handleDisconnect.bind(this),this.tnMeMetaDesc=this.tnMeMetaDesc.bind(this),this.tnMeContactUpdate=this.tnMeContactUpdate.bind(this),this.tnMeSubsUpdated=this.tnMeSubsUpdated.bind(this),this.resetContactList=this.resetContactList.bind(this),this.tnInitFind=this.tnInitFind.bind(this),this.tnFndSubsUpdated=this.tnFndSubsUpdated.bind(this),this.handleSearchContacts=this.handleSearchContacts.bind(this),this.handleTopicSelected=this.handleTopicSelected.bind(this),this.handleHideMessagesView=this.handleHideMessagesView.bind(this),this.handleSendMessage=this.handleSendMessage.bind(this),this.handleNewChatInvitation=this.handleNewChatInvitation.bind(this),this.handleNewAccount=this.handleNewAccount.bind(this),this.handleNewAccountRequest=this.handleNewAccountRequest.bind(this),this.handleUpdatePasswordRequest=this.handleUpdatePasswordRequest.bind(this),this.handleUpdateAccountTagsRequest=this.handleUpdateAccountTagsRequest.bind(this),this.handleToggleIncognitoMode=this.handleToggleIncognitoMode.bind(this),this.handleSettings=this.handleSettings.bind(this),this.handleGlobalSettings=this.handleGlobalSettings.bind(this),this.handleShowArchive=this.handleShowArchive.bind(this),this.handleShowBlocked=this.handleShowBlocked.bind(this),this.handleToggleMessageSounds=this.handleToggleMessageSounds.bind(this),this.handleCredAdd=this.handleCredAdd.bind(this),this.handleCredDelete=this.handleCredDelete.bind(this),this.handleCredConfirm=this.handleCredConfirm.bind(this),this.initFCMessaging=this.initFCMessaging.bind(this),this.toggleFCMToken=this.toggleFCMToken.bind(this),this.handlePushMessage=this.handlePushMessage.bind(this),this.handleSidepanelCancel=this.handleSidepanelCancel.bind(this),this.handleStartTopicRequest=this.handleStartTopicRequest.bind(this),this.handleNewTopicCreated=this.handleNewTopicCreated.bind(this),this.handleTopicUpdateRequest=this.handleTopicUpdateRequest.bind(this),this.handleUnarchive=this.handleUnarchive.bind(this),this.handleChangePermissions=this.handleChangePermissions.bind(this),this.handleTagsUpdateRequest=this.handleTagsUpdateRequest.bind(this),this.handleLogout=this.handleLogout.bind(this),this.handleDeleteAccount=this.handleDeleteAccount.bind(this),this.handleDeleteTopicRequest=this.handleDeleteTopicRequest.bind(this),this.handleDeleteMessagesRequest=this.handleDeleteMessagesRequest.bind(this),this.handleLeaveUnsubRequest=this.handleLeaveUnsubRequest.bind(this),this.handleBlockTopicRequest=this.handleBlockTopicRequest.bind(this),this.handleReportTopic=this.handleReportTopic.bind(this),this.handleShowContextMenu=this.handleShowContextMenu.bind(this),this.defaultTopicContextMenu=this.defaultTopicContextMenu.bind(this),this.handleHideContextMenu=this.handleHideContextMenu.bind(this),this.handleShowAlert=this.handleShowAlert.bind(this),this.handleShowInfoView=this.handleShowInfoView.bind(this),this.handleMemberUpdateRequest=this.handleMemberUpdateRequest.bind(this),this.handleValidateCredentialsRequest=this.handleValidateCredentialsRequest.bind(this),this.handlePasswordResetRequest=this.handlePasswordResetRequest.bind(this),this.handleResetPassword=this.handleResetPassword.bind(this),this.handleContextMenuAction=this.handleContextMenuAction.bind(this),this.handleShowForwardDialog=this.handleShowForwardDialog.bind(this),this.handleHideForwardDialog=this.handleHideForwardDialog.bind(this),this.handleStartVideoCall=this.handleStartVideoCall.bind(this),this.handleInfoMessage=this.handleInfoMessage.bind(this),this.handleDataMessage=this.handleDataMessage.bind(this),this.handleCallClose=this.handleCallClose.bind(this),this.handleCallInvite=this.handleCallInvite.bind(this),this.handleCallRinging=this.handleCallRinging.bind(this),this.handleCallHangup=this.handleCallHangup.bind(this),this.handleCallSendOffer=this.handleCallSendOffer.bind(this),this.handleCallIceCandidate=this.handleCallIceCandidate.bind(this),this.handleCallSendAnswer=this.handleCallSendAnswer.bind(this),this.handleCallAcceptCall=this.handleCallAcceptCall.bind(this),this.sendMessageToTopic=this.sendMessageToTopic.bind(this),this.callTimeoutTimer=null}getBlankState(){const e=si.getObject("settings")||{},t=!!si.getObject("keep-logged-in");return{connected:!1,ready:!1,autoLogin:!1,transport:e.transport||null,serverAddress:e.serverAddress||Ti(),secureConnection:void 0===e.secureConnection?Ai():e.secureConnection,serverVersion:"no connection",messageSounds:!e.messageSoundsOff,incognitoMode:!1,desktopAlerts:t&&!!e.desktopAlerts,desktopAlertsEnabled:(Ai()||"object"==typeof window.location&&"localhost"==window.location.hostname)&&"undefined"!=typeof navigator&&"undefined"!=typeof FIREBASE_INIT,firebaseToken:t?si.getObject("firebase-token"):null,applicationVisible:!document.hidden,errorText:"",errorLevel:null,errorAction:void 0,errorActionText:null,sidePanelSelected:"login",sidePanelTitle:null,sidePanelAvatar:null,myTrustedBadges:[],loadSpinnerVisible:!1,login:"",password:"",persist:t,myUserId:null,liveConnection:navigator.onLine,topicSelected:"",topicSelectedOnline:!1,topicSelectedAcs:null,newTopicParams:null,loginDisabled:!1,displayMobile:window.innerWidth<=Yt.yl,infoPanel:void 0,mobilePanel:"sidepanel",callTopic:void 0,callState:0,callShouldStart:!1,contextMenuVisible:!1,contextMenuBounds:null,contextMenuClickAt:null,contextMenuParams:null,contextMenuItems:[],forwardDialogVisible:!1,forwardMessage:null,alertVisible:!1,alertParams:{},chatList:[],searchResults:[],searchableContacts:[],credMethod:void 0,credCode:void 0,credToken:void 0,requestedTopic:void 0}}componentDidMount(){if(window.addEventListener("resize",this.handleResize),window.addEventListener("online",(e=>{this.handleOnline(!0)})),window.addEventListener("offline",(e=>{this.handleOnline(!1)})),window.addEventListener("hashchange",this.handleHashRoute),"function"==typeof BroadcastChannel){new BroadcastChannel("tinode-sw").addEventListener("message",this.handlePushMessage)}else console.warn("Your browser does not support BroadcastChannel. Some features will not be available");document.addEventListener("visibilitychange",this.handleVisibilityEvent),this.setState({viewportWidth:document.documentElement.clientWidth,viewportHeight:document.documentElement.clientHeight}),new Promise(((e,t)=>{this.tinode=Ii.tnSetup(this.state.serverAddress,Ai(),this.state.transport,this.props.intl.locale,this.state.persist,e),this.tinode.onConnect=this.handleConnected,this.tinode.onDisconnect=this.handleDisconnect,this.tinode.onAutoreconnectIteration=this.handleAutoreconnectIteration,this.tinode.onInfoMessage=this.handleInfoMessage,this.tinode.onDataMessage=this.handleDataMessage})).then((e=>{this.state.desktopAlertsEnabled&&this.initFCMessaging().then((e=>{this.state.desktopAlerts&&this.tinode.setDeviceToken(this.state.firebaseToken)})).catch((()=>{}));const t=ja.parseUrlHash(window.location.hash);this.resetContactList();const s=this.state.persist?si.getObject("auth-token"):void 0;if(s&&(this.setState({autoLogin:!0}),s.expires=new Date(s.expires),this.tinode.setAuthToken(s),this.tinode.connect().catch((e=>{this.handleError(e.message,"err")}))),this.readTimer=null,this.readTimerCallback=null,["cred","reset","register"].includes(t.path[0]))this.handleHashRoute();else{this.setState({requestedTopic:t.path[1]});const e=t.params&&t.params.cred_done?ja.addUrlParam("","cred_done",t.params.cred_done):"";ja.navigateTo(e)}}))}componentWillUnmount(){window.removeEventListener("resize",this.handleResize),window.removeEventListener("hashchange",this.handleHashRoute),document.removeEventListener("visibilitychange",this.handleVisibilityEvent)}static tnSetup(e,t,s,a,i,n){const o=new Qt.Tinode({appName:Yt.iC,host:e,apiKey:Yt.$h,transport:s,secure:t,persist:i},n);return o.setHumanLanguage(a),o.enableLogging(Yt.JG,!0),o}handlePushMessage(e){this.tinode.oobNotification(e.data||{})}initFCMessaging(){const{formatMessage:e,locale:t}=this.props.intl,s=(t,s)=>{console.error(t,s),this.handleError(e(Di.push_init_failed),"err"),this.setState({desktopAlertsEnabled:!1,firebaseToken:null}),si.updateObject("settings",{desktopAlerts:!1})};try{return this.fcm=Kt(he(FIREBASE_INIT,Yt.iC)),navigator.serviceWorker.register("/service-worker.js").then((e=>(this.checkForAppUpdate(e),e.active.postMessage(JSON.stringify({locale:t,version:ki.l})),e))).then((e=>Ii.requestFCMToken(this.fcm,e))).then((e=>{const t=si.getObject("keep-logged-in");e!=this.state.firebaseToken&&(this.tinode.setDeviceToken(e),t&&si.setObject("firebase-token",e)),this.setState({firebaseToken:e,desktopAlerts:!0}),t&&si.updateObject("settings",{desktopAlerts:!0}),$t(this.fcm,(e=>{this.handlePushMessage(e)}))})).catch((e=>{throw s(e),e}))}catch(e){return s(e),Promise.reject(e)}}static requestFCMToken(e,t){return Wt(e,{serviceWorkerRegistration:t,vapidKey:FIREBASE_INIT.messagingVapidKey}).then((t=>t||Notification.requestPermission().then((t=>{if("granted"===t)return Wt(e,{serviceWorkerRegistration:reg,vapidKey:FIREBASE_INIT.messagingVapidKey}).then((e=>{if(e)return e;throw new Error("Failed to initialize notifications")}));throw new Error("No permission to send notifications: "+t)}))))}handleResize(){const e=document.documentElement.clientWidth<=Yt.yl;this.setState({viewportWidth:document.documentElement.clientWidth,viewportHeight:document.documentElement.clientHeight}),this.state.displayMobile!=e&&this.setState({displayMobile:e})}checkForAppUpdate(e){e.onupdatefound=()=>{const t=e.installing;t.onstatechange=()=>{if("installed"==t.state&&navigator.serviceWorker.controller){const e=i().createElement(i().Fragment,null,i().createElement(r.FormattedMessage,{id:"update_available",defaultMessage:[{type:0,value:"Update available."}]})," ",i().createElement("a",{href:""},i().createElement(r.FormattedMessage,{id:"reload_update",defaultMessage:[{type:0,value:"Reload"}]})),".");this.handleError(e,"info")}}}}handleHashRoute(){const e=ja.parseUrlHash(window.location.hash),t={infoPanel:e.params.info,newTopicTabSelected:e.params.tab};if(e.path&&e.path.length>0){["register","settings","edit","notif","security","support","general","crop","cred","reset","newtpk","archive","blocked","contacts",""].includes(e.path[0])?t.sidePanelSelected=e.path[0]:console.warn("Unknown sidepanel view",e.path[0]);let s=e.path[1]||null;s!=this.state.topicSelected&&(Qt.Tinode.topicType(s)||(s=null),Object.assign(t,{topicSelected:s,topicSelectedAcs:this.tinode.getTopicAccessMode(s)}))}else Object.assign(t,{sidePanelSelected:"",topicSelected:null});e.params.method&&(t.credMethod=e.params.method),e.params.code&&(t.credCode=e.params.code),e.params.token&&(t.credToken=e.params.token),e.params.cred_done&&Object.assign(t,Ii.stateForError(this.props.intl.formatMessage(Di.cred_confirmed_successfully),"info")),this.setState(t)}handleOnline(e){e?(this.handleError(),clearInterval(this.reconnectCountdown),this.tinode.reconnect()):this.handleError(this.props.intl.formatMessage(Di.no_connection),"warn"),this.setState({liveConnection:e})}handleVisibilityEvent(){this.setState({applicationVisible:!document.hidden})}static stateForError(e,t,s,a){return{errorText:e,errorLevel:t,errorAction:s,errorActionText:a,callShouldStart:!1}}handleError(e,t,s,a){this.setState(Ii.stateForError(e,t,s,a))}handleLoginRequest(e,t){this.setState({loginDisabled:!0,login:e,password:t,loadSpinnerVisible:!0,autoLogin:!0}),this.handleError("",null),this.tinode.isConnected()?this.doLogin(e,t,null,{meth:this.state.credMethod,resp:this.state.credCode}):this.tinode.connect().catch((e=>{this.setState({loginDisabled:!1,autoLogin:!1,loadSpinnerVisible:!1}),this.handleError(e.message,"err")}))}handlePersistenceChange(e){e?this.tinode.initStorage().then((()=>{si.setObject("keep-logged-in",!0),this.setState({persist:!0})})):this.tinode.clearStorage().then((()=>{si.setObject("keep-logged-in",!1),this.setState({persist:!1})}))}handleConnected(){clearInterval(this.reconnectCountdown),this.handleError();const e=this.tinode.getServerInfo();this.setState({serverVersion:e.ver+" "+(e.build?e.build:"none")}),this.state.autoLogin&&this.doLogin(this.state.login,this.state.password,null,{meth:this.state.credMethod,resp:this.state.credCode})}handleAutoreconnectIteration(e,t){if(clearInterval(this.reconnectCountdown),e<0)return void this.handleError();if(t)return void t.then((e=>{this.handleError()})).catch((e=>{this.handleError(e.message,"err")}));const{formatMessage:s}=this.props.intl;let a=e/1e3;a|=a,this.reconnectCountdown=setInterval((e=>{if(a<-10)return clearInterval(this.reconnectCountdown),void this.tinode.reconnect();const t=a>99?(0,as.nH)(a):a;this.handleError(s(Di.reconnect_countdown,{seconds:t}),"warn",(e=>{clearInterval(this.reconnectCountdown),this.tinode.reconnect()}),s(Di.reconnect_now)),a-=1}),1e3)}handleDisconnect(e){this.setState({connected:!1,ready:!1,topicSelectedOnline:!1,errorText:e&&e.message?e.message:"Disconnected",errorLevel:e&&e.message?"err":"warn",loginDisabled:!1,contextMenuVisible:!1,forwardDialogVisible:!1,serverVersion:"no connection"})}doLogin(e,t,s,a){if(this.tinode.isAuthenticated())return void ja.navigateTo("");let i=s||(this.tinode.getAuthToken()||{}).token;if(!(e&&t||i))return ja.navigateTo(""),void this.setState({loginDisabled:!1});a=Qt.Tinode.credential(a);let n,o=this.tinode.isConnected()?Promise.resolve():this.tinode.connect();e&&t?(i=null,this.setState({password:null}),n=o.then((s=>this.tinode.loginBasic(e,t,a)))):n=o.then((e=>this.tinode.loginToken(i,a))),n.then((e=>{e.code>=300&&"validate credentials"===e.text?(this.setState({loadSpinnerVisible:!1}),a&&this.handleError(this.props.intl.formatMessage(Di.code_doesnot_match),"warn"),Ii.navigateToCredentialsView(e.params)):this.handleLoginSuccessful()})).catch((e=>{this.setState({loginDisabled:!1,credMethod:void 0,credCode:void 0,loadSpinnerVisible:!1,autoLogin:!1}),this.handleError(e.message,"err"),console.warn("Login failed",e),i&&this.handleLogout(),ja.navigateTo("")}))}static navigateToCredentialsView(e){const t=ja.parseUrlHash(window.location.hash);t.path[0]="cred",t.params.method=e.cred[0],t.params.token=e.token,ja.navigateTo(ja.composeUrlHash(t.path,t.params))}handleLoginSuccessful(){this.handleError(),si.getObject("keep-logged-in")&&si.setObject("auth-token",this.tinode.getAuthToken());const e=this.state.requestedTopic,t=this.tinode.getMeTopic();t.onMetaDesc=this.tnMeMetaDesc,t.onContactUpdate=this.tnMeContactUpdate,t.onSubsUpdated=this.tnMeSubsUpdated,this.setState({connected:!0,credMethod:void 0,credCode:void 0,credToken:void 0,myUserId:this.tinode.getCurrentUserID(),autoLogin:!0,requestedTopic:void 0}),t.subscribe(t.startMetaQuery().withLaterSub().withDesc().withTags().withCred().build()).catch((e=>{this.tinode.disconnect(),localStorage.removeItem("auth-token"),this.handleError(e.message,"err"),ja.navigateTo("")})).finally((()=>{this.setState({loadSpinnerVisible:!1})}));let s=ja.setUrlSidePanel(window.location.hash,"contacts");e&&(s=ja.setUrlTopic(s,e)),ja.navigateTo(s)}tnMeMetaDesc(e){if(e){if(e.public&&this.setState({sidePanelTitle:e.public.fn,sidePanelAvatar:(0,ws.PD)(e.public.photo)}),e.trusted){const t=[];for(const[s,a]of Object.entries(e.trusted))a&&t.push(s);this.setState({myTrustedBadges:t})}e.acs&&this.setState({incognitoMode:!e.acs.isPresencer()})}}tnMeContactUpdate(e,t){if("on"==e||"off"==e)this.resetContactList(),this.state.topicSelected==t.topic&&this.setState({topicSelectedOnline:"on"==e});else if("read"==e)this.resetContactList();else if("msg"==e){const e=this.tinode.getTopic(t.topic),s=e&&e.isArchived();t.unread>0&&this.state.messageSounds&&!s&&(document.hidden||this.state.topicSelected!=t.topic)&&Ni.play().catch((e=>{})),this.resetContactList()}else"recv"==e||("gone"==e||"unsub"==e?(this.state.topicSelected==t.topic&&this.handleTopicSelected(null),this.resetContactList()):"acs"==e?this.state.topicSelected==t.topic&&this.setState({topicSelectedAcs:t.acs}):"del"==e||"upd"==e||"call"==e||console.info("Unsupported (yet) presence update:",e,"in",t.topic))}tnMeSubsUpdated(e){this.resetContactList()}static prepareSearchableContacts(e,t){const s={};for(const t of e)Qt.Tinode.isP2PTopicName(t.topic)&&(s[t.topic]={user:t.topic,updated:t.updated,public:t.public,private:t.private,acs:t.acs});for(const e of t)s[e.user]||(s[e.user]=e);return Object.values(s)}resetContactList(){const e={chatList:[]};this.state.ready||(e.ready=!0),this.tinode.getMeTopic().contacts((t=>{t.topic||t.user||(t.topic=t.name),e.chatList.push(t),this.state.topicSelected==t.topic&&(e.topicSelectedOnline=t.online,e.topicSelectedAcs=t.acs)}));const t=new Date(0);e.chatList.sort(((e,s)=>(e.touched||t).getTime()-(s.touched||t).getTime())),e.searchableContacts=Ii.prepareSearchableContacts(e.chatList,this.state.searchResults),this.setState(e)}tnInitFind(){const e=this.tinode.getFndTopic();e.onSubsUpdated=this.tnFndSubsUpdated,e.isSubscribed()?this.tnFndSubsUpdated():e.subscribe(e.startMetaQuery().withSub().build()).catch((e=>{this.handleError(e.message,"err")}))}tnFndSubsUpdated(){const e=[];this.tinode.getFndTopic().contacts((t=>{e.push(t)})),this.setState({searchResults:e,searchableContacts:Ii.prepareSearchableContacts(this.state.chatList,e)})}handleSearchContacts(e){const t=this.tinode.getFndTopic();t.setMeta({desc:{public:e}}).then((e=>t.getMeta(t.startMetaQuery().withSub().build()))).catch((e=>{this.handleError(e.message,"err")}))}handleTopicSelected(e){this.state.newTopicParams&&this.state.newTopicParams._topicName!=e&&this.setState({newTopicParams:null}),e?(this.setState({errorText:"",errorLevel:null,mobilePanel:"topic-view",infoPanel:void 0}),this.state.topicSelected!=e&&(this.setState({topicSelectedOnline:this.tinode.isTopicOnline(e),topicSelectedAcs:this.tinode.getTopicAccessMode(e),forwardMessage:null}),ja.navigateTo(ja.setUrlTopic("",e)))):(this.setState({errorText:"",errorLevel:null,mobilePanel:"sidepanel",topicSelectedOnline:!1,topicSelectedAcs:null,infoPanel:void 0,forwardMessage:null}),ja.navigateTo(ja.setUrlTopic("",null)))}handleHideMessagesView(){this.setState({mobilePanel:"sidepanel"}),ja.navigateTo(ja.setUrlTopic(window.location.hash,null))}handleSendMessage(e,t,s,a){const i=this.tinode.getTopic(this.state.topicSelected);return this.sendMessageToTopic(i,e,t,s,a)}sendMessageToTopic(e,t,s,a,i){(t=e.createMessage(t,!1))._uploader=a,i&&(t.head=Object.assign(t.head||{},i));const n=[];if(s&&n.push(s),!e.isSubscribed()){const s=e.subscribe().then((()=>{let s=[];e.queuedMessages((a=>{a._sending||a.seq==t.seq||(a.head&&a.head.webrtc?s.push(a.seq):e.isSubscribed()&&e.publishMessage(a))})),s.length>0&&e.delMessagesList(s,!0)}));n.push(s)}return e.publishDraft(t,Promise.all(n)).then((t=>(e.isArchived()&&e.archive(!1),t))).catch((e=>{this.handleError(e.message,"err")}))}handleNewChatInvitation(e,t){const s=this.tinode.getTopic(e);let a=null;switch(t){case"accept":const i=s.getAccessMode().getGiven();a=s.setMeta({sub:{mode:i}}),s.isP2PType()&&(a=a.then((t=>{s.setMeta({sub:{user:e,mode:i}})})));break;case"delete":a=s.delTopic(!0);break;case"block":const n=s.getAccessMode().updateWant("-JP").getWant();a=s.setMeta({sub:{mode:n}}).then((e=>this.handleTopicSelected(null)));break;default:console.warn("Unknown invitation action",'"'+t+'""')}null!=a&&a.catch((e=>{this.handleError(e.message,"err")}))}handleNewAccount(){this.handleError(),ja.navigateTo(ja.setUrlSidePanel(window.location.hash,"register"))}handleNewAccountRequest(e,t,s,a,i){this.handleError(),this.tinode.connect(this.state.serverAddress).then((n=>{let o;return s&&s.photo&&s.photo.ref&&(o=[s.photo.ref]),this.tinode.createAccountBasic(e,t,{public:s,tags:i,cred:Qt.Tinode.credential(a),attachments:o})})).then((e=>{e.code>=300&&"validate credentials"==e.text?Ii.navigateToCredentialsView(e.params):this.handleLoginSuccessful(this)})).catch((e=>{this.handleError(e.message,"err")}))}handleToggleIncognitoMode(e){this.setState({incognitoMode:null});const t=this.tinode.getMeTopic(),s=t.getAccessMode().updateWant(e?"-P":"+P").getWant();t.setMeta({sub:{mode:s}}).catch((t=>{this.setState({incognitoMode:!e}),this.handleError(t.message,"err")}))}handleUpdateAccountTagsRequest(e){this.tinode.getMeTopic().setMeta({tags:e}).catch((e=>{this.handleError(e.message,"err")}))}handleSettings(){this.handleError(),ja.navigateTo(ja.setUrlSidePanel(window.location.hash,this.state.myUserId?"edit":"settings"))}handleGlobalSettings(e){const t=e.serverAddress||this.state.serverAddress,s=e.transport||this.state.transport,a=void 0===e.secureConnection?this.state.secureConnection:e.secureConnection;this.tinode&&(this.tinode.clearStorage(),this.tinode.onDisconnect=void 0,this.tinode.disconnect()),this.tinode=Ii.tnSetup(t,a,s,this.props.intl.locale,si.getObject("keep-logged-in")),this.tinode.onConnect=this.handleConnected,this.tinode.onDisconnect=this.handleDisconnect,this.tinode.onAutoreconnectIteration=this.handleAutoreconnectIteration,this.tinode.onInfoMessage=this.handleInfoMessage,this.tinode.onDataMessage=this.handleDataMessage,this.setState({serverAddress:t,transport:s,secureConnection:a}),si.setObject("settings",{serverAddress:t,transport:s,secureConnection:a}),ja.navigateTo(ja.setUrlSidePanel(window.location.hash,""))}handleShowArchive(){ja.navigateTo(ja.setUrlSidePanel(window.location.hash,this.state.myUserId?"archive":""))}handleShowBlocked(){ja.navigateTo(ja.setUrlSidePanel(window.location.hash,this.state.myUserId?"blocked":""))}toggleFCMToken(e){e?(this.setState({desktopAlerts:null}),this.state.firebaseToken?(this.setState({desktopAlerts:!0}),si.getObject("keep-logged-in")&&si.updateObject("settings",{desktopAlerts:!0})):this.initFCMessaging()):this.state.firebaseToken&&this.fcm?Gt(this.fcm).catch((e=>{console.error("Unable to delete token.",e)})).finally((()=>{si.updateObject("settings",{desktopAlerts:!1}),localStorage.removeItem("firebase-token"),this.setState({desktopAlerts:!1,firebaseToken:null}),this.tinode.setDeviceToken(null)})):(this.setState({desktopAlerts:!1,firebaseToken:null}),si.updateObject("settings",{desktopAlerts:!1}))}handleToggleMessageSounds(e){this.setState({messageSounds:e}),si.updateObject("settings",{messageSoundsOff:!e})}handleCredAdd(e,t){this.tinode.getMeTopic().setMeta({cred:{meth:e,val:t}}).catch((e=>{this.handleError(e.message,"err")}))}handleCredDelete(e,t){this.tinode.getMeTopic().delCredential(e,t).catch((e=>{this.handleError(e.message,"err")}))}handleCredConfirm(e,t){Ii.navigateToCredentialsView({cred:[e]})}handleSidepanelCancel(){const e=ja.parseUrlHash(window.location.hash);let t="";["security","support","general","notif"].includes(e.path[0])?t="edit":"crop"==e.path[0]?t="general":"blocked"==e.path[0]?t="security":this.state.myUserId&&(t="contacts"),e.path[0]=t,e.params&&(delete e.params.code,delete e.params.method,delete e.params.tab,delete e.params.scheme,delete e.params.token),ja.navigateTo(ja.composeUrlHash(e.path,e.params)),this.setState({errorText:"",errorLevel:null})}basicNavigator(e){ja.navigateTo(ja.setUrlSidePanel(window.location.hash,e))}infoNavigator(e){ja.navigateTo(ja.setUrlInfoPanel(window.location.hash,e))}handleStartTopicRequest(e,t,s){if(e&&this.tinode.isTopicCached(e))return void this.handleTopicSelected(e);const a={};Qt.Tinode.isP2PTopicName(e)?(a.sub={mode:Yt.RK},a.desc={defacs:{auth:Yt.RK}}):(e=e||this.tinode.newGroupTopicName(s),t&&(a.desc={public:t.public,private:{comment:t.private}},a.tags=t.tags)),a._topicName=e,this.setState({newTopicParams:a},(()=>{this.handleTopicSelected(e)}))}handleNewTopicCreated(e,t){let s={};this.state.callShouldStart&&(s={callState:3,callShouldStart:!1}),this.state.topicSelected==e&&e!=t&&(s.topicSelected=t),this.setState(s,(e=>{ja.navigateTo(ja.setUrlTopic("",t))}))}handleTopicUpdateRequest(e,t,s,a){this.handleError();const i=this.tinode.getTopic(e);if(i){const e={};let n;t&&(t.photo&&(t.photo.ref&&t.photo.ref!=Qt.Tinode.DEL_CHAR?n=[t.photo.ref]:t.photo.data&&t.photo.data!=Qt.Tinode.DEL_CHAR||(t.photo=Qt.Tinode.DEL_CHAR)),e.public=t),"string"==typeof s&&(e.private=s===Qt.Tinode.DEL_CHAR?Qt.Tinode.DEL_CHAR:{comment:s}),a&&(e.defacs=a),i.setMeta({desc:e,attachments:n}).catch((e=>{this.handleError(e.message,"err")}))}}handleUnarchive(e){const t=this.tinode.getTopic(e);t&&t.archive(!1).catch((e=>{this.handleError(e.message,"err")}))}handleUpdatePasswordRequest(e){this.handleError(),e&&this.tinode.updateAccountBasic(null,this.tinode.getCurrentLogin(),e).catch((e=>{this.handleError(e.message,"err")}))}handleChangePermissions(e,t,s){const a=this.tinode.getTopic(e);if(a){const e=a.getAccessMode();s?(e.updateGiven(t),t=e.getGiven()):(e.updateWant(t),t=e.getWant()),a.setMeta({sub:{user:s,mode:t}}).catch((e=>{this.handleError(e.message,"err")}))}}handleTagsUpdateRequest(e,t){const s=this.tinode.getTopic(e);s&&s.setMeta({tags:t}).catch((e=>{this.handleError(e.message,"err")}))}handleLogout(){let e;is(0),localStorage.removeItem("auth-token"),localStorage.removeItem("firebase-token"),localStorage.removeItem("settings"),this.state.firebaseToken&&Gt(this.fcm),clearInterval(this.reconnectCountdown),this.tinode?(e=this.tinode.clearStorage(),this.tinode.onDisconnect=void 0,this.tinode.disconnect()):e=Promose.resolve(),this.setState(this.getBlankState()),e.then((()=>{this.tinode=Ii.tnSetup(this.state.serverAddress,Ai(),this.state.transport,this.props.intl.locale,si.getObject("keep-logged-in"),(()=>{this.tinode.onConnect=this.handleConnected,this.tinode.onDisconnect=this.handleDisconnect,this.tinode.onAutoreconnectIteration=this.handleAutoreconnectIteration,this.tinode.onInfoMessage=this.handleInfoMessage,this.tinode.onDataMessage=this.handleDataMessage,ja.navigateTo("")}))}))}handleDeleteAccount(){this.tinode.delCurrentUser(!0).then((e=>{this.handleLogout()}))}handleDeleteTopicRequest(e){const t=this.tinode.getTopic(e);t&&t.delTopic(!0).then((e=>{ja.navigateTo(ja.setUrlTopic(window.location.hash,""))})).catch((e=>{this.handleError(e.message,"err")}))}handleDeleteMessagesRequest(e){const t=this.tinode.getTopic(e);t&&t.delMessagesAll(!0).catch((e=>{this.handleError(e.message,"err")}))}handleLeaveUnsubRequest(e){const t=this.tinode.getTopic(e);t&&t.leave(!0).then((e=>{ja.navigateTo(ja.setUrlTopic(window.location.hash,""))})).catch((e=>{this.handleError(e.message,"err")}))}handleBlockTopicRequest(e){const t=this.tinode.getTopic(e);t&&t.updateMode(null,"-JP").then((e=>{ja.navigateTo(ja.setUrlTopic(window.location.hash,""))})).catch((e=>{this.handleError(e.message,"err")}))}handleReportTopic(e){const t=this.tinode.getTopic(e);t&&(this.tinode.report("report",e),t.updateMode(null,"-JP").then((e=>{ja.navigateTo(ja.setUrlTopic(window.location.hash,""))})).catch((e=>{this.handleError(e.message,"err")})))}handleShowContextMenu(e,t){this.setState({contextMenuVisible:!0,contextMenuClickAt:{x:e.x,y:e.y},contextMenuParams:e,contextMenuItems:t||this.defaultTopicContextMenu(e.topicName),contextMenuBounds:this.selfRef.current.getBoundingClientRect()})}handleShowForwardDialog(e){"newtpk"==this.state.sidePanelSelected&&this.handleSidepanelCancel();const t="➦ "+e.userName,s="string"==typeof e.content?Qt.Drafty.init(e.content):Qt.Drafty.forwardedContent(e.content),a=Qt.Drafty.preview(s,Yt.vX,!0),i=Qt.Drafty.append(Qt.Drafty.appendLineBreak(Qt.Drafty.mention(t,e.userFrom)),s),n=Qt.Drafty.quote(t,e.userFrom,a),o={forwarded:e.topicName+":"+e.seq};this.setState({forwardDialogVisible:!0,forwardMessage:{head:o,msg:i,preview:n}})}defaultTopicContextMenu(e){const t=this.tinode.getTopic(e);if(t._deleted)return["topic_delete"];let s=!1,a=!1,i=!1,n=!1,o=!1,r=!1,l=!1;if(t){n=t.isSubscribed(),r=t.isArchived();const e=t.getAccessMode();e&&(s=e.isMuted(),a=!e.isJoiner(),i=!e.isJoiner("want"),o=e.isDeleter())}return l=!!this.tinode.getServerParam("iceServers"),[n?{title:this.props.intl.formatMessage(Di.menu_item_info),handler:this.handleShowInfoView}:null,n&&Qt.Tinode.isP2PTopicName(e)&&l?{title:this.props.intl.formatMessage(Di.menu_item_video_call),handler:this.handleStartVideoCall}:null,n?"messages_clear":null,n&&o?"messages_clear_hard":null,s?a?null:"topic_unmute":"topic_mute",i?"topic_unblock":"topic_block",r?"topic_restore":"topic_archive","topic_delete"]}handleHideContextMenu(){this.setState({contextMenuVisible:!1,contextMenuClickAt:null,contextMenuParams:null,contextMenuBounds:null})}handleHideForwardDialog(e){this.setState({forwardDialogVisible:!1,forwardMessage:e?this.state.forwardMessage:null})}handleContextMenuAction(e,t,s){"topic_archive"==e?t&&s.topicName&&s.topicName==this.state.topicSelected&&t.then((()=>{this.handleTopicSelected(null)})):"menu_item_forward"==e&&this.handleShowForwardDialog(s)}handleShowAlert(e,t,s,a,i,n){this.setState({alertVisible:!0,alertParams:{title:e,content:t,onConfirm:s,confirm:a,onReject:i,reject:n}})}handleShowInfoView(){ja.navigateTo(ja.addUrlParam(window.location.hash,"info","info")),this.setState({infoPanel:"info"})}handleMemberUpdateRequest(e,t,s){if(!e)return;const a=this.tinode.getTopic(e);a&&(t&&t.length>0&&t.map((e=>{a.invite(e,null).catch((e=>{this.handleError(e.message,"err")}))})),s&&s.length>0&&s.map((e=>{a.delSubscription(e).catch((e=>{this.handleError(e.message,"err")}))})))}handleValidateCredentialsRequest(e,t,s){this.tinode.isAuthenticated()?this.tinode.getMeTopic().setMeta({cred:{meth:e,resp:t}}).catch((e=>{this.handleError(e.message,"err")})):(this.setState({credMethod:e,credCode:t,credToken:s}),this.doLogin(null,null,s,{meth:e,resp:t}))}handlePasswordResetRequest(e,t){return this.tinode.connect().then((()=>this.tinode.requestResetAuthSecret("basic",e,t))).catch((e=>{this.handleError(e.message,"err")}))}handleResetPassword(e,t,s){(s=(0,ws.DC)(s))?this.tinode.connect().then((()=>this.tinode.updateAccountBasic(null,null,t,{token:s}))).then((()=>{ja.navigateTo("")})).catch((e=>{this.handleError(e.message,"err")})):this.handleError(this.props.intl.formatMessage(Di.invalid_security_token),"err")}handleStartVideoCall(){this.setState({callTopic:this.state.topicSelected,callState:1})}handleCallInvite(e,t,s){switch(s){case 1:let s={webrtc:zs};this.handleSendMessage(Qt.Drafty.videoCall(),void 0,void 0,s).then((e=>{e.code<200||e.code>=300||!e.params||!e.params.seq?this.handleCallClose():this.setState({callSeq:e.params.seq})}));break;case 3:const a=this.tinode.getTopic(e);if(!a)return;a.videoCall("accept",t)}}handleCallRinging(e,t){const s=this.tinode.getTopic(e);s&&s.videoCall("ringing",t)}handleCallHangup(e,t){const s=this.tinode.getTopic(e);s&&s.videoCall("hang-up",t)}handleCallSendOffer(e,t,s){const a=this.tinode.getTopic(e);a&&a.videoCall("offer",t,s)}handleCallIceCandidate(e,t,s){const a=this.tinode.getTopic(e);a&&a.videoCall("ice-candidate",t,s)}handleCallSendAnswer(e,t,s){const a=this.tinode.getTopic(e);a&&a.videoCall("answer",t,s)}handleCallClose(){this.callTimeoutTimer&&clearTimeout(this.callTimeoutTimer),this.setState({callTopic:void 0,callState:0})}handleCallAcceptCall(e){const t=this.tinode.getTopic(e);t&&(t.isSubscribed()?(this.handleTopicSelected(this.state.callTopic),this.setState({callState:3})):this.setState({callShouldStart:!0},(()=>this.handleTopicSelected(this.state.callTopic))))}handleInfoMessage(e){if("call"==e.what)switch(e.event){case"accept":if(Qt.Tinode.isMeTopicName(e.topic)&&this.tinode.isMe(e.from))return void this.setState({callTopic:null,callState:0,callSeq:null});e.topic==this.state.callTopic&&this.setState({callState:3});break;case"hang-up":this.handleCallClose()}}handleDataMessage(e){if(e.head&&e.head.webrtc&&e.head.webrtc==zs){const t=this.tinode.getTopic(e.topic);if(t){const s=t.latestMsgVersion(e.seq)||e;s.head&&s.head.webrtc&&s.head.webrtc==zs&&e.from!=this.state.myUserId&&(0==this.state.callState?this.setState({callTopic:e.topic,callState:2,callSeq:e.seq}):this.handleCallHangup(e.topic,e.seq))}else console.warn("Received vc data message from unknown topic",e.topic)}}render(){return i().createElement("div",{id:"app-container",ref:this.selfRef},this.state.contextMenuVisible?i().createElement(es,{tinode:this.tinode,bounds:this.state.contextMenuBounds,clickAt:this.state.contextMenuClickAt,params:this.state.contextMenuParams,items:this.state.contextMenuItems,hide:this.handleHideContextMenu,onShowAlert:this.handleShowAlert,onAction:this.handleContextMenuAction,onTopicRemoved:e=>{e==this.state.topicSelected&&this.handleTopicSelected(null)},onError:this.handleError}):null,this.state.forwardDialogVisible?i().createElement(Ls,{tinode:this.tinode,contacts:this.state.chatList,topicSelected:this.state.topicSelected,myUserId:this.state.myUserId,hide:this.handleHideForwardDialog,onInitFind:this.tnInitFind,searchResults:this.state.searchResults,onSearchContacts:this.handleSearchContacts,onTopicSelected:this.handleStartTopicRequest}):null,this.state.callTopic&&2==this.state.callState?i().createElement(Vs,{tinode:this.tinode,onClose:this.handleCallClose,topic:this.state.callTopic,seq:this.state.callSeq,callState:this.state.callState,onRinging:this.handleCallRinging,onAcceptCall:this.handleCallAcceptCall,onReject:this.handleCallHangup}):null,i().createElement(Xt,{visible:this.state.alertVisible,title:this.state.alertParams.title,content:this.state.alertParams.content,onReject:this.state.alertParams.onReject?()=>{this.setState({alertVisible:!1})}:null,reject:this.state.alertParams.reject,onConfirm:()=>{this.setState({alertVisible:!1}),this.state.alertParams.onConfirm()},confirm:this.state.alertParams.confirm}),i().createElement(Mi,{tinode:this.tinode,connected:this.state.connected,displayMobile:this.state.displayMobile,hideSelf:this.state.displayMobile&&"sidepanel"!==this.state.mobilePanel,state:this.state.sidePanelSelected,title:this.state.sidePanelTitle,avatar:this.state.sidePanelAvatar,trustedBadges:this.state.myTrustedBadges,login:this.state.login,persist:this.state.persist,myUserId:this.state.myUserId,loginDisabled:this.state.loginDisabled,loadSpinnerVisible:this.state.loadSpinnerVisible,errorText:this.state.errorText,errorLevel:this.state.errorLevel,errorAction:this.state.errorAction,errorActionText:this.state.errorActionText,topicSelected:this.state.topicSelected,chatList:this.state.chatList,credMethod:this.state.credMethod,credCode:this.state.credCode,credToken:this.state.credToken,transport:this.state.transport,messageSounds:this.state.messageSounds,desktopAlerts:this.state.desktopAlerts,desktopAlertsEnabled:this.state.desktopAlertsEnabled,incognitoMode:this.state.incognitoMode,serverAddress:this.state.serverAddress,secureConnection:this.state.secureConnection,serverVersion:this.state.serverVersion,onGlobalSettings:this.handleGlobalSettings,onSignUp:this.handleNewAccount,onSettings:this.handleSettings,onNavigate:this.basicNavigator,onLoginRequest:this.handleLoginRequest,onPersistenceChange:this.handlePersistenceChange,onCreateAccount:this.handleNewAccountRequest,onUpdateAccountDesc:this.handleTopicUpdateRequest,onUpdatePassword:this.handleUpdatePasswordRequest,onUpdateAccountTags:this.handleUpdateAccountTagsRequest,onTogglePushNotifications:this.toggleFCMToken,onToggleMessageSounds:this.handleToggleMessageSounds,onToggleIncognitoMode:this.handleToggleIncognitoMode,onCredAdd:this.handleCredAdd,onCredDelete:this.handleCredDelete,onCredConfirm:this.handleCredConfirm,onTopicSelected:this.handleTopicSelected,onCreateTopic:this.handleStartTopicRequest,onLogout:this.handleLogout,onDeleteAccount:this.handleDeleteAccount,onShowAlert:this.handleShowAlert,onCancel:this.handleSidepanelCancel,onError:this.handleError,onValidateCredentials:this.handleValidateCredentialsRequest,onPasswordResetRequest:this.handlePasswordResetRequest,onResetPassword:this.handleResetPassword,onShowArchive:this.handleShowArchive,onShowBlocked:this.handleShowBlocked,onInitFind:this.tnInitFind,searchResults:this.state.searchResults,onSearchContacts:this.handleSearchContacts,showContextMenu:this.handleShowContextMenu}),i().createElement(Ga,{tinode:this.tinode,connected:this.state.connected,ready:this.state.ready,online:this.state.topicSelectedOnline,acs:this.state.topicSelectedAcs,displayMobile:this.state.displayMobile,viewportWidth:this.state.viewportWidth,viewportHeight:this.state.viewportHeight,hideSelf:this.state.displayMobile&&("topic-view"!==this.state.mobilePanel||this.state.infoPanel),topic:this.state.topicSelected,myUserId:this.state.myUserId,myUserName:this.state.sidePanelTitle,serverVersion:this.state.serverVersion,serverAddress:this.state.serverAddress,applicationVisible:this.state.applicationVisible,forwardMessage:this.state.forwardMessage,onCancelForwardMessage:this.handleHideForwardDialog,callTopic:this.state.callTopic,callSeq:this.state.callSeq,callState:this.state.callState,onCallHangup:this.handleCallHangup,onCallInvite:this.handleCallInvite,onCallSendOffer:this.handleCallSendOffer,onCallIceCandidate:this.handleCallIceCandidate,onCallSendAnswer:this.handleCallSendAnswer,errorText:this.state.errorText,errorLevel:this.state.errorLevel,errorAction:this.state.errorAction,errorActionText:this.state.errorActionText,newTopicParams:this.state.newTopicParams,onHideMessagesView:this.handleHideMessagesView,onError:this.handleError,onNewTopicCreated:this.handleNewTopicCreated,showContextMenu:this.handleShowContextMenu,onChangePermissions:this.handleChangePermissions,onNewChat:this.handleNewChatInvitation,sendMessage:this.handleSendMessage,onVideoCallClosed:this.handleCallClose}),this.state.infoPanel?i().createElement(_a,{tinode:this.tinode,connected:this.state.connected,displayMobile:this.state.displayMobile,topic:this.state.topicSelected,searchableContacts:this.state.searchableContacts,myUserId:this.state.myUserId,panel:this.state.infoPanel,errorText:this.state.errorText,errorLevel:this.state.errorLevel,errorAction:this.state.errorAction,errorActionText:this.state.errorActionText,onNavigate:this.infoNavigator,onTopicDescUpdateRequest:this.handleTopicUpdateRequest,onShowAlert:this.handleShowAlert,onChangePermissions:this.handleChangePermissions,onMemberUpdateRequest:this.handleMemberUpdateRequest,onDeleteTopic:this.handleDeleteTopicRequest,onDeleteMessages:this.handleDeleteMessagesRequest,onLeaveTopic:this.handleLeaveUnsubRequest,onBlockTopic:this.handleBlockTopicRequest,onReportTopic:this.handleReportTopic,onAddMember:this.handleManageGroupMembers,onTopicTagsUpdateRequest:this.handleTagsUpdateRequest,onTopicUnArchive:this.handleUnarchive,onInitFind:this.tnInitFind,onError:this.handleError,showContextMenu:this.handleShowContextMenu}):null)}}const Pi=(0,r.injectIntl)(Ii),{params:Ri}=ja.parseUrlHash(window.location.hash),Fi=Ri&&Ri.hl||navigator.languages&&navigator.languages[0]||navigator.language||navigator.userLanguage||"en",Ui=Fi.toLowerCase().split(/[-_]/)[0],xi=l[Fi]?Fi:l[Ui]?Ui:"en",Li=l[xi];document.getElementsByTagName("html")[0].setAttribute("lang",xi),o().render(i().createElement(i().StrictMode,null,i().createElement(r.IntlProvider,{locale:Fi,messages:Li,textComponent:i().Fragment},i().createElement(Pi,null))),document.getElementById("mountPoint"))},405:(e,t,s)=>{s.d(t,{DC:()=>u,EA:()=>l,Id:()=>c,JG:()=>g,Jr:()=>m,PD:()=>n,Y:()=>p,ay:()=>_,rS:()=>o,sT:()=>d,w8:()=>h});const a=["image/jpeg","image/gif","image/png","image/svg","image/svg+xml"],i=["jpg","gif","png","svg","svg"];function n(e){if(e&&"object"==typeof e){if(e.ref)return e.ref;if(e.data&&e.type){return"data:"+(e.type.startsWith("image/")?e.type:"image/"+e.type)+";base64,"+e.data}}return null}function o(e,t,s,a,i){if(t|=0,s|=0,a|=0,(e|=0)<=0||t<=0||s<=0||a<=0)return null;i&&(s=a=Math.min(s,a));const n=Math.min(Math.min(e,s)/e,Math.min(t,a)/t),o={dstWidth:e*n|0,dstHeight:t*n|0};return i?(o.dstWidth=o.dstHeight=Math.min(o.dstWidth,o.dstHeight),o.srcWidth=o.srcHeight=Math.min(e,t),o.xoffset=(e-o.srcWidth)/2|0,o.yoffset=(t-o.srcWidth)/2|0):(o.xoffset=o.yoffset=0,o.srcWidth=e,o.srcHeight=t),o}function r(e,t){const s=a.indexOf(t);if(s<0||!e)return e;const n=i[s],o=e.lastIndexOf(".");return o>=0&&(e=e.substring(0,o)),e+"."+n}function l(e,t,s,i,n){return new Promise(((l,c)=>{const d=new Image;d.crossOrigin="Anonymous",d.onerror=function(e){c(new Error("Image format unrecognized"))},d.onload=async function(){URL.revokeObjectURL(d.src);const h=o(d.width,d.height,t,s,n);if(!h)return void c(new Error("Invalid image"));let p=document.createElement("canvas");p.width=h.dstWidth,p.height=h.dstHeight;let u=p.getContext("2d");u.imageSmoothingEnabled=!0,u.drawImage(d,h.xoffset,h.yoffset,h.srcWidth,h.srcHeight,0,0,h.dstWidth,h.dstHeight);const m=a.includes(e.type)?e.type:"image/jpeg";let g=await new Promise((e=>p.toBlob(e,m)));if(g){for(;i>0&&g.length>i;)h.dstWidth=.70710678118*h.dstWidth|0,h.dstHeight=.70710678118*h.dstHeight|0,p.width=h.dstWidth,p.height=h.dstHeight,u=p.getContext("2d"),u.clearRect(0,0,p.width,p.height),u.drawImage(d,h.xoffset,h.yoffset,h.srcWidth,h.srcHeight,0,0,h.dstWidth,h.dstHeight),g=await new Promise((e=>p.toBlob(e,m)));p=null,l({mime:m,blob:g,width:h.dstWidth,height:h.dstHeight,name:r(e.name,m)})}else c(new Error("Unsupported image format"))},d.src=URL.createObjectURL(e)}))}function c(e,t,s,i,n,o,r){return new Promise(((l,c)=>{const d=new Image;d.crossOrigin="Anonymous",d.onerror=e=>{c(new Error("Image format unrecognized"))},d.onload=()=>{URL.revokeObjectURL(d.src);let t=document.createElement("canvas");t.width=n*r,t.height=o*r;let h=t.getContext("2d");h.imageSmoothingEnabled=!0,h.drawImage(d,s,i,n,o,0,0,t.width,t.height),e=a.includes(e)?e:"image/jpeg",t.toBlob((s=>{t=null,s?l({mime:e,blob:s,width:n,height:o}):c(new Error("Unsupported image format"))}),e)},d.src=t}))}function d(e){return new Promise(((t,s)=>{const a=new FileReader;a.onerror=e=>{s(a.error)},a.onload=()=>{t({mime:e.type,bits:a.result.split(",")[1],name:e.name})},a.readAsDataURL(e)}))}function h(e){return new Promise(((t,s)=>{const a=new FileReader;a.onerror=e=>{s(a.error)},a.onload=()=>{t({mime:e.type,bits:a.result.split(",")[1]})},a.readAsDataURL(e)}))}function p(e,t,s,a){const i=(e.clipboardData||e.originalEvent.clipboardData||{}).items;if(!i||!i.length)return!1;for(let e in i){const n=i[e];if("file"===n.kind){const e=n.getAsFile();if(!e){console.error("Failed to get file object from pasted file item",n.kind,n.type),a("Failed to get file object from pasted file item");continue}return e.type&&"image"==e.type.split("/")[0]?t(e):s(e),!0}}return!1}function u(e){if(e){e=e.replace(/-/g,"+").replace(/_/g,"/");try{e=btoa(atob(e))}catch(t){console.error("Failed to base64 re-encode string.",t),e=null}}return e}function m(e,t){if(!e)return null;try{const s=atob(e),a=s.length,i=new ArrayBuffer(a),n=new Uint8Array(i);for(let e=0;e<a;e++)n[e]=s.charCodeAt(e);return new Blob([i],{type:t})}catch(e){console.error("Failed to convert base64 to blob: ",e)}return null}function g(e){if(!Array.isArray(e))return null;try{let t="";return new Uint8Array(e).forEach((e=>t+=String.fromCharCode(e))),window.btoa(t)}catch(e){}return null}function _(e){const t=[];try{return[...window.atob(e)].forEach((e=>{t.push(e.charCodeAt(0))})),t}catch(e){}return null}},905:(e,t,s)=>{function a(e,t){t=t||window.navigator.userLanguage||window.navigator.language;const s=new Date;return e.getFullYear()==s.getFullYear()?e.getMonth()==s.getMonth()&&e.getDate()==s.getDate()?e.toLocaleTimeString(t,{hour12:!1,hour:"2-digit",minute:"2-digit"}):e.toLocaleDateString(t,{hour12:!1,month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):e.toLocaleDateString(t,{year:"numeric",month:"short",day:"numeric"})}function i(e,t){let s=0|Math.floor(e/60),a=0|Math.floor(s/60);(t||a>0)&&(s=s<10?`0${s}`:s);let i=e%60|0;return i=i<10?`0${i}`:i,0==a?`${s}:${i}`:`${a}:${s}:${i}`}function n(e){if(!e||0==e)return"0 Bytes";const t=["Bytes","KB","MB","GB","TB","PB"],s=Math.min(0|Math.floor(Math.log2(e)/10),t.length-1),a=e/Math.pow(1024,s),i=s>0?a<3?2:a<30?1:0:0;return a.toFixed(i)+" "+t[s]}function o(e,t){return"string"!=typeof e?e:e.length>t?e.slice(0,t/2-1)+"…"+e.slice(1-t/2):e}function r(e,t,s){return(t?"lt-":"dk-")+(s?"fg-":"bg-")+(a=e,Math.abs(function(e){let t=0;e=""+e;for(let s=0;s<e.length;s++)t=(t<<5)-t+e.charCodeAt(s),t&=t;return t}(a))%16);var a}s.d(t,{Cj:()=>r,FK:()=>n,TX:()=>o,nH:()=>i,pz:()=>a})},119:(e,t,s)=>{s.d(t,{l:()=>a});const a="0.20.2"},861:(e,t,s)=>{s.d(t,{Z:()=>l});var a=s(363),i=s.n(a),n=s(905),o=s(405);const r="#666C";class l extends i().PureComponent{constructor(e){super(e);let t=(0,o.ay)(this.props.preview);(!Array.isArray(t)||t.length<16)&&(t=null),this.state={canPlay:!1,playing:!1,currentTime:"0:00",duration:this.props.duration>0?(0,n.nH)(this.props.duration/1e3):"-:--",longMin:this.props.duration>=6e5,preview:t},this.initAudio=this.initAudio.bind(this),this.initCanvas=this.initCanvas.bind(this),this.resampleBars=this.resampleBars.bind(this),this.visualize=this.visualize.bind(this),this.handlePlay=this.handlePlay.bind(this),this.handleSeek=this.handleSeek.bind(this),this.handleError=this.handleError.bind(this),this.audioPlayer=null,this.viewBuffer=[],this.canvasRef=i().createRef()}componentDidMount(){this.props.src&&this.initAudio(),this.initCanvas()}componentWillUnmount(){this.audioPlayer&&(this.audioPlayer.oncanplay=null,this.audioPlayer.ontimeupdate=null,this.audioPlayer.onended=null,this.audioPlayer.pause(),this.audioPlayer=null)}componentDidUpdate(e){if(this.props.src!=e.src&&this.initAudio(),this.props.preview!=e.preview){let e=(0,o.ay)(this.props.preview);(!Array.isArray(e)||e.length<16)&&(e=null),this.setState({preview:e},this.initCanvas)}}initAudio(){this.audioPlayer=new Audio(this.props.src),this.audioPlayer.oncanplay=e=>this.setState({canPlay:!0}),this.audioPlayer.ontimeupdate=e=>this.setState({currentTime:(0,n.nH)(this.audioPlayer.currentTime,this.state.longMin)}),this.audioPlayer.onended=e=>{this.audioPlayer.currentTime=0,this.setState({playing:!1,currentTime:(0,n.nH)(0,this.state.longMin)})}}initCanvas(){this.canvasRef.current.width=2*this.canvasRef.current.offsetWidth,this.canvasRef.current.height=2*this.canvasRef.current.offsetHeight,this.canvasContext=this.canvasRef.current.getContext("2d"),this.canvasContext.lineCap="round",this.viewBuffer=this.resampleBars(this.state.preview),this.visualize()}visualize(){if(!this.canvasRef.current)return;const e=this.effectiveWidth,t=this.canvasRef.current.height;this.canvasContext.lineWidth=6;const s=()=>{if(this.canvasRef.current&&this.audioPlayer&&(this.canvasContext.clearRect(0,0,this.canvasRef.current.width,t),this.viewBuffer)){this.state.playing&&window.requestAnimationFrame(s);const a=this.props.duration?Math.max(0,Math.min(1e3*this.audioPlayer.currentTime/this.props.duration,1))*(e-12):-1;this.canvasContext.beginPath(),this.canvasContext.strokeStyle=r;for(let e=0;e<this.viewBuffer.length;e++){let s=1+10*e+3,i=this.viewBuffer[e]*t*.9;const n=s<a?r:"#888A";this.canvasContext.strokeStyle!=n&&(this.canvasContext.stroke(),this.canvasContext.beginPath(),this.canvasContext.strokeStyle=n),this.canvasContext.moveTo(s,.5*(t-i)),this.canvasContext.lineTo(s,.5*t+.5*i)}this.canvasContext.stroke(),this.props.duration&&(this.canvasContext.beginPath(),this.canvasContext.arc(a+12,.5*t,12,0,2*Math.PI),this.canvasContext.fillStyle="#444E",this.canvasContext.fill())}};s()}resampleBars(e){const t=(this.canvasRef.current.width-4)/10|0;if(this.effectiveWidth=10*t+4,!Array.isArray(e)||0==e.length)return Array.apply(null,Array(t)).map((e=>.01));const s=e.length/t;let a=[],i=-1;for(let n=0;n<t;n++){let t=n*s|0,o=(n+1)*s|0;if(o==t)a[n]=e[t];else{let s=0;for(let a=t;a<o;a++)s+=e[a];a[n]=Math.max(0,s/(o-t))}i=Math.max(a[n],i)}return i>0?a.map((e=>e/i)):Array.apply(null,Array(t)).map((e=>.01))}handlePlay(e){e.preventDefault(),this.state.canPlay&&(this.state.playing?(this.audioPlayer.pause(),this.setState({playing:!1})):(this.audioPlayer.play(),this.setState({playing:!0},this.visualize)))}handleError(e){console.error(e)}handleSeek(e){if(e.preventDefault(),e.target&&this.props.duration){const t=e.target.getBoundingClientRect(),s=(e.clientX-t.left)/this.effectiveWidth*2;this.audioPlayer.currentTime=this.props.duration*s/1e3,this.setState({currentTime:(0,n.nH)(this.audioPlayer.currentTime,this.state.longMin)}),this.state.playing||this.visualize()}}render(){const e="material-icons"+(this.props.short?"":" large")+(this.state.canPlay?"":" disabled"),t=i().createElement("a",{href:"#",onClick:this.handlePlay,title:"Play"},i().createElement("i",{className:e},this.state.playing?"pause_circle":this.state.canPlay?"play_circle":"not_interested"));return i().createElement("div",{className:"audio-player"},this.props.short?i().createElement(i().Fragment,null,i().createElement("canvas",{className:"playback",ref:this.canvasRef,onClick:this.handleSeek}),t):i().createElement(i().Fragment,null,t,i().createElement("div",null,i().createElement("canvas",{className:"playback",ref:this.canvasRef,onClick:this.handleSeek}),i().createElement("div",{className:"timer"},this.state.currentTime,"/",this.state.duration))))}}},363:e=>{e.exports=React}},e=>{var t;t=434,e(e.s=t)}]);
|
||
//# sourceMappingURL=index.prod.js.map
|