@connectycube/chat-widget 0.37.2 → 0.37.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.es.js CHANGED
@@ -3120,7 +3120,7 @@ var Kq, hA, Rq, bA, Xq, qA, Fe, Uq, ht, pt, Oe, gs, hs, ps, ms, ws, mt, Yq, pA,
3120
3120
  })(Cs || (Cs = {})), (function(e) {
3121
3121
  e.DEV = "development", e.PROD = "production";
3122
3122
  })(Es || (Es = {}));
3123
- const Yt = "4.7.10", $q = typeof window < "u" && typeof document == "object", rV = typeof process == "object" && typeof process.versions == "object" && !!process.versions.node, Bo = !1, yo = !1, wt = rV ? require("node-fetch") : fetch, xo = rV ? require("form-data") : FormData;
3123
+ const Yt = "4.7.11", $q = typeof window < "u" && typeof document == "object", rV = typeof process == "object" && typeof process.versions == "object" && !!process.versions.node, Bo = !1, yo = !1, wt = rV ? require("node-fetch") : fetch, xo = rV ? require("form-data") : FormData;
3124
3124
  if ($q) try {
3125
3125
  window.adapter || (window.adapter = require("webrtc-adapter").default);
3126
3126
  } catch {
package/dist/index.umd.js CHANGED
@@ -43,7 +43,7 @@ React keys must be passed directly to JSX without using spread:
43
43
  *
44
44
  * This source code is licensed under the MIT license found in the
45
45
  * LICENSE file in the root directory of this source tree.
46
- */return"production".NODE_ENV!=="production"&&(function(){function q(g,p){return g===p&&(g!==0||1/g===1/p)||g!==g&&p!==p}function e(g,p){l||A.startTransition===void 0||(l=!0,console.error("You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release."));var f=p();if(!i){var v=p();n(f,v)||(console.error("The result of getSnapshot should be cached to avoid an infinite loop"),i=!0)}v=o({inst:{value:f,getSnapshot:p}});var y=v[0].inst,m=v[1];return s(function(){y.value=f,y.getSnapshot=p,t(y)&&m({inst:y})},[g,f,p]),a(function(){return t(y)&&m({inst:y}),g(function(){t(y)&&m({inst:y})})},[g]),V(f),f}function t(g){var p=g.getSnapshot;g=g.value;try{var f=p();return!n(g,f)}catch{return!0}}function r(g,p){return p()}typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());var A=M,n=typeof Object.is=="function"?Object.is:q,o=A.useState,a=A.useEffect,s=A.useLayoutEffect,V=A.useDebugValue,l=!1,i=!1,d=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?r:e;mi.useSyncExternalStore=A.useSyncExternalStore!==void 0?A.useSyncExternalStore:d,typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error())})(),mi}var Su;function UM(){return Su||(Su=1,"production".NODE_ENV==="production"?Oo.exports=DM():Oo.exports=NM()),Oo.exports}var xu=UM();const OM={t:(q,e)=>rA(e)?e:vM(e)&&rA(e.defaultValue)?e.defaultValue:Array.isArray(q)?q[q.length-1]:q,ready:!1},RM=()=>()=>{},jq=(q,e={})=>{const{i18n:t}=e,{i18n:r,defaultNS:A}=M.useContext(TM)||{},n=t||r||IM();n&&!n.reportNamespaces&&(n.reportNamespaces=new BM),n||wu(n,"NO_I18NEXT_INSTANCE","useTranslation: You will need to pass in an i18next instance by using initReactI18next");const o=M.useMemo(()=>({...SM(),...n?.options?.react,...e}),[n,e]),{useSuspense:a,keyPrefix:s}=o,V=M.useMemo(()=>{const h=A||n?.options?.defaultNS;return rA(h)?[h]:h||["translation"]},[q,A,n]);n?.reportNamespaces?.addUsedNamespaces?.(V);const l=M.useRef(0),i=M.useCallback(h=>{if(!n)return RM;const{bindI18n:u,bindI18nStore:E}=o,C=()=>{l.current+=1,h()};return u&&n.on(u,C),E&&n.store.on(E,C),()=>{u&&u.split(" ").forEach(S=>n.off(S,C)),E&&E.split(" ").forEach(S=>n.store.off(S,C))}},[n,o]),d=M.useRef(),g=M.useCallback(()=>{if(!n)return OM;const h=!!(n.isInitialized||n.initializedStoreOnce)&&V.every(D=>wM(D,n,o)),u=e.lng||n.language,E=l.current,C=d.current;if(C&&C.ready===h&&C.lng===u&&C.keyPrefix===s&&C.revision===E)return C;const k={t:n.getFixedT(u,o.nsMode==="fallback"?V:V[0],s),ready:h,lng:u,keyPrefix:s,revision:E};return d.current=k,k},[n,V,s,o,e.lng]),[p,f]=M.useState(0),{t:v,ready:y}=xu.useSyncExternalStore(i,g,g);M.useEffect(()=>{if(n&&!y&&!a){const h=()=>f(u=>u+1);e.lng?Eu(n,e.lng,V,h):pi(n,V,h)}},[n,e.lng,V,y,a,p]);const m=n||{},w=M.useMemo(()=>{const h=[v,m,y];return h.t=v,h.i18n=m,h.ready=y,h},[v,m,y]);if(n&&a&&!y)throw new Promise(h=>{const u=()=>h();e.lng?Eu(n,e.lng,V,u):pi(n,V,u)});return w},QM={AddMembers:"Add members",Admin:"Admin",areTyping:"are typing",Cancel:"Cancel",ChatName:"Chat name",ChatNameRequired:"Chat name is required",Chat:"Chat",Chats:"Chats",ChooseChat:"Choose a chat",Continue:"Continue",CreateGroupChat:"Create group chat",Delete:"Delete",Draft:"Draft",EnterMessage:"Enter message",EnterUserName:"Enter user name",ExitChat:"Exit chat",FileTypeNotSupported:"File format is not supported",isTyping:"is typing",me:"me",Members:"Members",members:"members",NewGroup:"New group",NewMessage:"New message",NoChats:"Begin your first chat and see what happens!",NoMessages:"No messages yet",NoOnlineUsers:"No online users",Profile:"Profile",RemoveMembers:"Remove members","RemoveMembers?":"Are you sure you want to remove members?",Reset:"Reset",Search:"Search",Select:"Select",Send:"Send",StartChat:"Start chat",NewUserChatDialogTitle:"Send message to user",NewGroupChatDialogTitle:"Start a new Group",typing:"typing",Users:"Users",you:"you",Block:"Block",UnBlock:"Unblock",Report:"Report",ReportUser:"Report user",WhatsWrongWithThisUser:"What's wrong with this user?",ProvideReason:"Reason for reporting",ReportCreatedSuccessfully:"Report has been created successfully",ReportSubmitFailed:"Failed to submit report",MyProfile:"My profile",YouBlocked:"You are blocked by this user",BlockList:"Block list",AddToBlockList:"Add to block list","AddToBlockList?":"Are you sure you want to add {{name}} to block list?",RemoveFromBlockList:"Remove from block list","RemoveFromBlockList?":"Are you sure you want to remove {{name}} from block list?",BlockListEmpty:"Block list is empty",NotificationSettings:"Notification settings",Notifications:"Notifications",NotificationSound:"Notification sound",PushNotifications:"Push notifications",PleaseWait:"Please wait",Available:"Available",Busy:"Busy",Away:"Away",Online:"Online",IncomingCall:"Incoming call",IncomingAudioCall:"Incoming audio call from {{name}}",IncomingVideoCall:"Incoming video call from {{name}}",Accept:"Accept",Reject:"Reject",RejectedCall:"{{name}} rejected the call",MissedCall:"Missed call from {{name}}",AuthForm:{Login:"Login",Password:"Password",Register:"Register",Registration:"Registration",LoginRequired:"Login is required",LoginMinLimit:"Login must be at least {{limit}} symbols",LoginMaxLimit:"Login must be at most {{limit}} symbols",PasswordRequired:"Login is required",PasswordMinLimit:"Password must be at least {{limit}} symbols",PasswordMaxLimit:"Password must be at most {{limit}} symbols",LoginDescription:"Enter your login and password to access your account",RegisterDescription:"Fill in the form below to sign up","ToRegister?":"Don't have an account?","ToLogin?":"Already have an account?"},SingleViewForm:{Title:"Submit your contact data to start a chat",Subtitle:"We will not share your email address. Your email address is used solely to contact you",NamePlaceholder:"Name",NameRequired:"Name is required",EmailPlaceholder:"Email",EmailRequired:"Email is required",EmailInvalid:"Invalid email format",AcceptTermsAndConditions:"Accept terms and conditions",AcceptTermsAndConditionsError:"You must accept the terms and conditions",TermsAndConditionsText:"By clicking this checkbox, you agree to the",TermsAndConditionsLink:"terms and conditions",RememberMe:"Remember me",RememberMeText:"This is my private device",Next:"Next"},SingleViewChatError:"Opponent(s) for the chat not found",Information:"Information",AI:{GetSummary:"Get summary",ChangeMessageTone:"Change message tone",SummaryMessageTitle:"Only you can see this message",forLast7Days:"for last 7 days",forLastDay:"for last day",forUnreads:"for unreads",MessageTone:"Change message tone",EmptyMessage:"Can't change tone of empty message",positive:"positive",negative:"negative",cringe:"cringe"},CallHistory:{RejectedIncoming:"Rejected incoming",RejectedOutgoing:"Rejected outgoing",Unanswered:"Unanswered",Missed:"Missed",Canceled:"Canceled",Ended:"Ended",videoCall:"video call",audioCall:"audio call",defaultCall:"call"}},jM={AddMembers:"Προσθήκη μελών",Admin:"Διαχειριστής",areTyping:"είναι",Cancel:"Ακύρωση",ChatName:"Όνομα συνομιλίας",ChatNameRequired:"Το όνομα συνομιλίας είναι υποχρεωτικό",Chat:"Συνομιλία",Chats:"Συνομιλίες",ChooseChat:"Επιλέξτε συνομιλία",Continue:"Συνέχεια",CreateGroupChat:"Δημιουργία ομαδικής συνομιλίας",Delete:"Διαγραφή",Draft:"Πρόχειρο",EnterMessage:"Εισάγετε μήνυμα",EnterUserName:"Εισάγετε όνομα χρήστη",ExitChat:"Έξοδος από τη συνομιλία",FileTypeNotSupported:"Η μορφή αρχείου δεν υποστηρίζεται",isTyping:"είναι",me:"εγώ",Members:"Μέλη",members:"μέλη",NewGroup:"Νέα ομάδα",NewMessage:"Νέο μήνυμα",NoChats:"Επιλέξτε κάποιο χρήστη από τη λίστα Χρήστες και ξεκινήστε την πρώτη σας συνομιλία!",NoMessages:"Δεν υπάρχουν μηνύματα",NoOnlineUsers:"Δεν υπάρχουν συνδεδεμένοι χρήστες",Profile:"Προφίλ",RemoveMembers:"Αφαίρεση μελών","RemoveMembers?":"Είστε σίγουροι ότι θέλετε να αφαιρέσετε τα μέλη;",Reset:"Επαναφορά",Search:"Αναζήτηση",Select:"Επιλογή",Send:"Αποστολή",StartChat:"Έναρξη συνομιλίας",NewUserChatDialogTitle:"Αποστολή μηνύματος σε μέλος",NewGroupChatDialogTitle:"Δημιουργία νέας ομάδας",typing:"πληκτρολογεί",Users:"Χρήστες",you:"εσύ",Block:"Block",UnBlock:"Unblock",Report:"Αναφορά",ReportUser:"Αναφορά χρήστη",WhatsWrongWithThisUser:"Τι θέλετε να αναφέρετε για αυτόν το χρήστη;",ProvideReason:"Λόγος αναφοράς",ReportCreatedSuccessfully:"Η αναφορά για το χρήστη έγινε",ReportSubmitFailed:"Σφάλμα στη δημιουργία αναφοράς",MyProfile:"Το προφίλ μου",YouBlocked:"Αυτός ο χρήστης σας έχει κάνει Block",BlockList:"Λίστα Blocked χρηστών",AddToBlockList:"Προσθήκη στη λίστα Blocked","AddToBlockList?":"Σίγουρα θέλετε να προσθέσετε το χρήστη {{name}} στη λίστα Blocked;",RemoveFromBlockList:"Αφαίρεση από τη λίστα Blocked","RemoveFromBlockList?":"Σίγουρα θέλετε να αφαιρέσετε το χρήστη {{name}} από τη λίστα Blocked;",BlockListEmpty:"Η Blocked λίστα είναι άδεια",NotificationSettings:"Ρυθμίσεις ειδοποιήσεων",Notifications:"Ειδοποιήσεις",NotificationSound:"Ήχος ειδοποίησης",PushNotifications:"Ειδοποιήσεις push",PleaseWait:"Παρακαλώ περιμένετε",Available:"Διαθέσιμος/η",Busy:"Απασχολημένος/η",Away:"Απουσιάζω",Online:"Συνδεδεμένος/η",IncomingCall:"Εισερχόμενη κλήση",IncomingAudioCall:"Εισερχόμενη κλήση ήχου από τον χρήστη {{name}}",IncomingVideoCall:"Εισερχόμενη κλήση βίντεο από τον χρήστη {{name}}",Accept:"Αποδοχή",Reject:"Απόρριψη",RejectedCall:"Ο χρήστης {{name}} απέρριψε την κλήση",MissedCall:"Αναπάντητη κλήση από τον χρήστη {{name}}",AuthForm:{Login:"Σύνδεση",Password:"Κωδικός πρόσβασης",Register:"Εγγραφή",Registration:"Εγγραφή",LoginRequired:"Το όνομα χρήστη είναι υποχρεωτικό",LoginMinLimit:"Το όνομα χρήστη πρέπει να έχει τουλάχιστον {{limit}} χαρακτήρες",LoginMaxLimit:"Το όνομα χρήστη πρέπει να έχει το πολύ {{limit}} χαρακτήρες",PasswordRequired:"Ο κωδικός πρόσβασης είναι υποχρεωτικός",PasswordMinLimit:"Ο κωδικός πρόσβασης πρέπει να έχει τουλάχιστον {{limit}} χαρακτήρες",PasswordMaxLimit:"Ο κωδικός πρόσβασης πρέπει να έχει το πολύ {{limit}} χαρακτήρες",LoginDescription:"Εισάγετε το όνομα χρήστη και τον κωδικό πρόσβασης για να αποκτήσετε πρόσβαση στον λογαριασμό σας",RegisterDescription:"Συμπληρώστε την παρακάτω φόρμα για να εγγραφείτε","ToRegister?":"Δεν έχετε λογαριασμό;","ToLogin?":"Έχετε ήδη λογαριασμό;"},SingleViewForm:{Title:"Υποβάλετε τα στοιχεία επικοινωνίας σας για να ξεκινήσετε μια συνομιλία",Subtitle:"Δεν θα κοινοποιήσουμε τη διεύθυνση email σας. Η διεύθυνση email σας χρησιμοποιείται αποκλειστικά για να επικοινωνήσουμε μαζί σας.",NamePlaceholder:"Όνομα",NameRequired:"Το όνομα είναι υποχρεωτικό",EmailPlaceholder:"E-mail",EmailRequired:"Απαιτείται email",Emailnvalid:"Μη έγκυρη μορφή email",AcceptTermsAndConditions:"Αποδοχή όρων και προϋποθέσεων",AcceptTermsAndConditionsError:"Πρέπει να αποδεχτείτε τους όρους και τις προϋποθέσεις",TermsAndConditionsText:"Κάνοντας κλικ σε αυτό το πλαίσιο, συμφωνείτε με τους",TermsAndConditionsLink:"όρους και προϋποθέσεις",RememberMe:"Να με θυμάσαι",RememberMeText:"Αυτή είναι η προσωπική μου συσκευή",Next:"Επόμενο"},SingleViewChatError:"Δεν βρέθηκαν αντίπαλοι για τη συνομιλία",Information:"Πληροφορίες",AI:{GetSummary:"Λήψη σύνοψης",ChangeMessageTone:"Αλλαγή τόνου μηνύματος",SummaryMessageTitle:"Μόνο εσείς μπορείτε να δείτε αυτό το μήνυμα",forLast7Days:"για τις τελευταίες 7 ημέρες",forLastDay:"για την τελευταία ημέρα",forUnreads:"για μη αναγνωσμένα",MessageTone:"Αλλαγή τόνου μηνύματος",EmptyMessage:"Δεν είναι δυνατή η αλλαγή του τόνου ενός κενού μηνύματος",positive:"θετικός",negative:"αρνητικός",cringe:"κρίμα"},CallHistory:{RejectedIncoming:"Απορρίφθηκε εισερχόμενη κλήση",RejectedOutgoing:"Απορρίφθηκε εξερχόμενη κλήση",Unanswered:"Μη απαντημένη κλήση",Missed:"Αναπάντητη κλήση",Canceled:"Ακυρώθηκε",Ended:"Ολοκληρώθηκε",videoCall:"βιντεοκλήση",audioCall:"ηχητική κλήση",defaultCall:"κλήση"}},PM={AddMembers:"Додати учасників",Admin:"Адмін",areTyping:"пишуть",Cancel:"Скасувати",ChatName:"Назва чату",ChatNameRequired:"Назва чату є обов'язковою",Chat:"Чат",Chats:"Чати",ChooseChat:"Оберіть чат",Continue:"Продовжити",CreateGroupChat:"Створити груповий чат",Delete:"Видалити",Draft:"Чернетка",EnterMessage:"Введіть повідомлення",EnterUserName:"Введіть ім'я користувача",ExitChat:"Вийти з чату",FileTypeNotSupported:"Формат файлу не підтримується",isTyping:"пише",me:"я",Members:"Учасники",members:"учасники",NewGroup:"Нова група",NewMessage:"Нове повідомлення",NoChats:"Почніть свою першу розмову та подивіться, що станеться!",NoMessages:"Поки що немає повідомлень",NoOnlineUsers:"Немає онлайн-користувачів",Profile:"Профіль",RemoveMembers:"Видалити учасників","RemoveMembers?":"Ви впевнені, що хочете видалити учасників?",Reset:"Скинути",Search:"Пошук",Select:"Вибрати",Send:"Надіслати",StartChat:"Розпочати чат",NewUserChatDialogTitle:"Новий чат з користувачем",NewGroupChatDialogTitle:"Нова група",typing:"друкує",Users:"Користувачі",you:"ви",Block:"Заблокувати",UnBlock:"Розблокувати",Report:"Поскаржитися",ReportUser:"Поскаржитися на користувача",WhatsWrongWithThisUser:"Що не так з цим користувачем?",ProvideReason:"Підстава",ReportCreatedSuccessfully:"Звіт поданий успішно",ReportSubmitFailed:"Помилка при поданні звіту",MyProfile:"Мій профіль",YouBlocked:"Цей користувача вас заблокував",BlockList:"Список заблокованих",AddToBlockList:"Додати до списку заблокованих","AddToBlockList?":"Ви впевнені, що хочете додати {{name}} до списку заблокованих?",RemoveFromBlockList:"Видалити зі списку заблокованих","RemoveFromBlockList?":"Ви впевнені, що хочете видалити {{name}} зі списку заблокованих?",BlockListEmpty:"Список заблокованих порожній",NotificationSettings:"Налаштування сповіщень",Notifications:"Сповіщення",NotificationSound:"Звук сповіщення",PushNotifications:"Push-сповіщення",PleaseWait:"Будь ласка, зачекайте",Available:"Присутній",Busy:"Зайнятий",Away:"Відсутній",Online:"В мережі",IncomingCall:"Вхідний виклик",IncomingAudioCall:"Вхідний аудіо виклик від {{name}}",IncomingVideoCall:"Вхідний відео виклик від {{name}}",Accept:"Прийняти",Reject:"Відхилити",RejectedCall:"{{name}} відхилив виклик",MissedCall:"Пропущений виклик від {{name}}",AuthForm:{Login:"Логін",Password:"Пароль",Register:"Зареєструвати",Registration:"Реєстрація",LoginRequired:"Логін є обов'язковим",LoginMinLimit:"Логін має містити щонайменше {{limit}} символів",LoginMaxLimit:"Логін має містити не більше {{limit}} символів",PasswordRequired:"Пароль є обов'язковим",PasswordMinLimit:"Пароль має містити щонайменше {{limit}} символів",PasswordMaxLimit:"Пароль має містити не більше {{limit}} символів",LoginDescription:"Введіть ваш логін та пароль для доступу до акаунту",RegisterDescription:"Заповніть форму нижче для реєстрації","ToRegister?":"Ще не маєте акаунту?","ToLogin?":"Вже маєте акаунт?"},SingleViewForm:{Title:"Введіть свою електронну пошту, щоб почати чат",Subtitle:"Ми не будемо передавати вашу електронну пошту. Ваша електронна пошта використовується виключно для зв'язку з вами",NamePlaceholder:"Ім'я",NameRequired:"Ім'я є обов'язковим",EmailPlaceholder:"Електронна пошта",EmailRequired:"Електронна пошта є обов'язковою",EmailInvalid:"Невірний формат електронної пошти",AcceptTermsAndConditions:"Прийняти умови та положення",AcceptTermsAndConditionsError:"Ви повинні прийняти умови та положення",TermsAndConditionsText:"Натискаючи цю галочку, ви погоджуєтесь з",TermsAndConditionsLink:"умовами та положеннями",RememberMe:"Запам'ятати мене",RememberMeText:"Це мій приватний пристрій",Next:"Далі"},SingleViewChatError:"Опонента(ів) для чату не знайдено",Information:"Інформація",AI:{GetSummary:"Отримати резюме",ChangeMessageTone:"Змінити тон повідомлення",SummaryMessageTitle:"Тільки ти можеш бачити це повідомлення",forLast7Days:"за останні 7 днів",forLastDay:"за останній день",forUnreads:"для непрочитаних",MessageTone:"Змінити тон повідомлення",EmptyMessage:"Неможливо змінити тон пустого повідомлення",positive:"позитивний",negative:"негативний",cringe:"крінж"},CallHistory:{RejectedIncoming:"Відхилений вхідний",RejectedOutgoing:"Відхилений вихідний",Unanswered:"Неприйнятий",Missed:"Пропущений",Canceled:"Скасований",Ended:"Завершений",videoCall:"відео виклик",audioCall:"аудіо виклик",defaultCall:"виклик"}},Iu={en:"English",ua:"Ukrainian",el:"Greek"},GM=typeof window<"u"&&localStorage.getItem("translation")||"en";Qe.use(kM).init({resources:{en:{translation:QM},el:{translation:jM},ua:{translation:PM}},lng:GM,fallbackLng:"en",interpolation:{escapeValue:!1}});const ku=q=>{let e;const t=new Set,r=(V,l)=>{const i=typeof V=="function"?V(e):V;if(!Object.is(i,e)){const d=e;e=l??(typeof i!="object"||i===null)?i:Object.assign({},e,i),t.forEach(g=>g(e,d))}},A=()=>e,a={setState:r,getState:A,getInitialState:()=>s,subscribe:V=>(t.add(V),()=>t.delete(V))},s=e=q(r,A,a);return a},LM=(q=>q?ku(q):ku),FM=q=>q;function YM(q,e=FM){const t=M.useSyncExternalStore(q.subscribe,M.useCallback(()=>e(q.getState()),[q,e]),M.useCallback(()=>e(q.getInitialState()),[q,e]));return M.useDebugValue(t),t}const Tu=q=>{const e=LM(q),t=r=>YM(e,r);return Object.assign(t,e),t},je=(q=>q?Tu(q):Tu);var dr=(q=>(q.CHATS="chats",q.USERS="users",q))(dr||{});const Bu={activeTab:"chats"},Ro=je(q=>({...Bu,setActiveTab:e=>q({activeTab:e}),resetActiveTab:()=>q({activeTab:Bu.activeTab})})),zM=()=>{Ro.setState({activeTab:"chats"})},yi={visible:!1,title:""},Qo=je(q=>({...yi,showAlertBusy:(e="")=>q({visible:!0,title:e}),hideAlertBusy:()=>q({visible:!1,title:yi.title})})),KM=()=>{Qo.setState({visible:!1,title:yi.title})},JM={CHAT_WIDGET_CONNECTYCUBE_SINGLE_VIEW_CHAT_EXTERNAL_ID:"EXTERNAL-id-012345",CHAT_WIDGET_CONNECTYCUBE_SINGLE_VIEW_CHAT_NAME:"Test Store Name - PROD",CHAT_WIDGET_CONNECTYCUBE_SINGLE_VIEW_CHAT_OPPONENTS_IDS:"4Ja3BiEWTo,bfoosyJijU,o8k9iLdYiI",CHAT_WIDGET_CONNECTYCUBE_SINGLE_VIEW_CHAT_PHOTO:"/logo.png"},{CHAT_WIDGET_CONNECTYCUBE_SINGLE_VIEW_CHAT_EXTERNAL_ID:ZM,CHAT_WIDGET_CONNECTYCUBE_SINGLE_VIEW_CHAT_NAME:WM,CHAT_WIDGET_CONNECTYCUBE_SINGLE_VIEW_CHAT_PHOTO:HM,CHAT_WIDGET_CONNECTYCUBE_SINGLE_VIEW_CHAT_OPPONENTS_IDS:XM}=JM||"production";var jo=(q=>(q.SINGLE="1on1",q.GROUP="group",q))(jo||{});const SA={defaultChat:null,singleViewChat:{externalId:ZM,opponentUserIds:XM,name:WM,photo:HM}},wi=je(q=>({...SA,setDefaultChat:e=>q({defaultChat:e}),setSingleViewChat:e=>q({singleViewChat:e}),resetDefaultChat:()=>q({defaultChat:SA.defaultChat}),resetSingleViewChat:()=>q({singleViewChat:SA.singleViewChat})})),_M=q=>{wi.setState(q)},$M=()=>{wi.setState(SA)},ve={opened:!1,splitView:!1,singleView:!1,showChatStatus:!1,showOnlineUsersTab:!1,hideNewChatButton:!1,hideNewUserChatOption:!1,hideNewGroupChatOption:!1,imgLogoSource:"/logo.png"},Be=je((q,e)=>({...ve,setOpened:t=>q({opened:t}),setSplitView:t=>q({splitView:t}),setSingleView:t=>q({singleView:t,splitView:!1}),setShowChatStatus:t=>q({showChatStatus:t}),setShowOnlineUsersTab:t=>q({showOnlineUsersTab:t}),setHideNewChatButton:t=>q({hideNewChatButton:t}),setHideNewUserChatOption:t=>q({hideNewUserChatOption:t}),setHideNewGroupChatOption:t=>q({hideNewGroupChatOption:t}),setImgLogoSource:t=>q({imgLogoSource:t}),toggleOpened:()=>q({opened:!e().opened}),resetOpened:()=>q({opened:ve.opened}),resetSplitView:()=>q({splitView:ve.splitView}),resetSingleView:()=>q({singleView:ve.singleView}),resetShowChatStatus:()=>q({showChatStatus:ve.showChatStatus}),resetShowOnlineUsersTab:()=>q({showOnlineUsersTab:ve.showOnlineUsersTab}),resetHideNewChatButton:()=>q({hideNewChatButton:ve.hideNewChatButton}),resetHideNewUserChatOption:()=>q({hideNewUserChatOption:ve.hideNewUserChatOption}),resetHideNewGroupChatOption:()=>q({hideNewGroupChatOption:ve.hideNewGroupChatOption}),resetImgLogoSource:()=>q({imgLogoSource:ve.imgLogoSource})})),qb=q=>{Be.setState(q)},eb=()=>{Be.setState(ve)},Du=q=>Symbol.iterator in q,Nu=q=>"entries"in q,Uu=(q,e)=>{const t=q instanceof Map?q:new Map(q.entries()),r=e instanceof Map?e:new Map(e.entries());if(t.size!==r.size)return!1;for(const[A,n]of t)if(!r.has(A)||!Object.is(n,r.get(A)))return!1;return!0};function tb(q,e){return!!Object.is(q,e)||typeof q=="object"&&q!==null&&typeof e=="object"&&e!==null&&Object.getPrototypeOf(q)===Object.getPrototypeOf(e)&&(Du(q)&&Du(e)?Nu(q)&&Nu(e)?Uu(q,e):((t,r)=>{const A=t[Symbol.iterator](),n=r[Symbol.iterator]();let o=A.next(),a=n.next();for(;!o.done&&!a.done;){if(!Object.is(o.value,a.value))return!1;o=A.next(),a=n.next()}return!!o.done&&!!a.done})(q,e):Uu({entries:()=>Object.entries(q)},{entries:()=>Object.entries(e)}))}function Tt(q){const e=M.useRef(void 0);return t=>{const r=q(t);return tb(e.current,r)?e.current:e.current=r}}const Tr=q=>function(e){const t=M.useRef(q.getState()[e]);return M.useEffect(()=>{const r=q.subscribe(A=>A[e],A=>{t.current=A});return()=>r()},[e]),t},Ou=q=>{let e;const t=new Set,r=(a,s)=>{const V=typeof a=="function"?a(e):a;if(!Object.is(V,e)){const l=e;e=s??(typeof V!="object"||V===null)?V:Object.assign({},e,V),t.forEach(i=>i(e,l))}},A=()=>e,n={setState:r,getState:A,getInitialState:()=>o,subscribe:a=>(t.add(a),()=>t.delete(a))},o=e=q(r,A,n);return n},rb=q=>q,Ab=q=>{const e=(r=>r?Ou(r):Ou)(q),t=r=>(function(A,n=rb){const o=M.useSyncExternalStore(A.subscribe,M.useCallback(()=>n(A.getState()),[A,n]),M.useCallback(()=>n(A.getInitialState()),[A,n]));return M.useDebugValue(o),o})(e,r);return Object.assign(t,e),t},Wt=q=>Ab,Ht=q=>(e,t,r)=>{const A=r.subscribe;return r.subscribe=(n,o,a)=>{let s=n;if(o){const V=a?.equalityFn||Object.is;let l=n(r.getState());s=i=>{const d=n(i);if(!V(l,d)){const g=l;o(l=d,g)}},a?.fireImmediately&&o(l,l)}return A(s)},q(e,t,r)},Po=(q,e)=>`[@connectycube/react@4.7.10]${q?`[${q}]`:""}${e?`[${e}]`:""}`,nb=(q,e,...t)=>console.log(`${Po(q,e)}[Log]:`,...t),ob=(q,e,...t)=>console.info(`${Po(q,e)}[Info]:`,...t),ab=(q,e,...t)=>console.warn(`${Po(q,e)}[Warn]:`,...t),sb=(q,e,...t)=>console.error(`${Po(q,e)}[Error]:`,...t),fn=q=>({log:(e,...t)=>nb(q,e,...t),info:(e,...t)=>ob(q,e,...t),warn:(e,...t)=>ab(q,e,...t),error:(e,...t)=>sb(q,e,...t)}),hn=fn("useBlockList"),xA=fn("useChat"),ib=fn("useConnectyCube"),vi=fn("useUsers"),qt=fn("useVideochat"),Ei=q=>{let e;if(typeof q=="string"){const t=new Date(q).getTime();e=isNaN(t)?void 0:t}else typeof q=="number"&&(e=1e3*q);return e},Ru=q=>{let e;if(q<=30)e="Online";else if(q<3600)e=`Last seen ${Math.ceil(q/60)} minutes ago`;else if(q<86400)e=`Last seen ${Math.ceil(q/3600)} hours ago`;else{const t=new Date(Date.now()-1e3*q);e=`Last seen ${t.getUTCDate()}/${(t.getMonth()+1).toString().padStart(2,"0")}/${t.getFullYear()}`}return e},Qu=q=>Ei(q.last_message_date_sent)||Ei(q.updated_at)||Ei(q.created_at)||0,mn=(q,e)=>Qu(e)-Qu(q),AA=(q,e)=>{const t={total:0};return q.forEach(({_id:r,unread_messages_count:A=0})=>{const n=e===r?0:A;t[r]=n,t.total+=n}),t},Go={dialogs:[],totalDialogsReached:!1,selectedDialog:void 0,activatedDialogs:new Set,privateDialogsIds:{},unreadMessagesCount:{total:0}},Mi=Wt()(Ht((q,e)=>({...Go,upsertDialog:t=>{const r=e().dialogs||[],A=[t,...r.filter(o=>o._id!==t._id)],n=AA(A);q({dialogs:A,unreadMessagesCount:n})},upsertDialogs:t=>{const r=[...e().dialogs||[],...t],A=Array.from(new Map(r.map(o=>[o._id,o])).values()).sort(mn),n=AA(A);q({dialogs:A,unreadMessagesCount:n})},updateDialog:(t,r)=>{const A=(e().dialogs||[]).map(o=>o._id===t?{...o,...r}:o).sort(mn),n=AA(A);q({dialogs:A,unreadMessagesCount:n})},updateDialogOnMessage:(t,r,A=!1)=>{const n=e().selectedDialog,o=(e().dialogs||[]).map(s=>s._id===t?{...s,unread_messages_count:A||n&&n._id===r.dialog_id?s.unread_messages_count:(s.unread_messages_count||0)+1,last_message:r.body,last_message_date_sent:A?s.last_message_date_sent:parseInt(r.extension.date_sent)}:s).sort(mn),a=AA(o);q({dialogs:o,unreadMessagesCount:a})},updateDialogOnReadMessage:t=>{const r=(e().dialogs||[]).map(n=>n._id===t?{...n,unread_messages_count:Math.max(0,n.unread_messages_count-1)}:n),A=AA(r);q({dialogs:r,unreadMessagesCount:A})},addParticipantsToDialog:(t,r)=>{const A=(e().dialogs||[]).map(n=>(n._id===t&&(n.occupants_ids=Array.from(new Set([...n.occupants_ids,...r]))),n)).sort(mn);q({dialogs:A})},removeParticipantsFromDialog:(t,r)=>{const A=(e().dialogs||[]).map(n=>(n._id===t&&(n.occupants_ids=n.occupants_ids.filter(o=>!r.includes(o))),n)).sort(mn);q({dialogs:A})},removeDialog:t=>{const r=(e().dialogs||[]).filter(n=>n._id!==t),A=AA(r);q({dialogs:r,unreadMessagesCount:A})},setSelectedDialog:t=>{const r=e().dialogs||[],A=AA(r,t?._id);q({selectedDialog:t,unreadMessagesCount:A})},resetSelectedDialog:()=>{q({selectedDialog:Go.selectedDialog})},activateDialog:t=>{q({activatedDialogs:e().activatedDialogs?.add(t)})},resetActivatedDialogs:()=>{q({activatedDialogs:new Set})},addPrivateDialogId:(t,r)=>{const A={...e().privateDialogsIds||{},[t]:r};q({privateDialogsIds:A})},removePrivateDialogId:t=>{const r={...e().privateDialogsIds};delete r[t],q({privateDialogsIds:r})},setTotalDialogsReached:t=>{q({totalDialogsReached:t})},resetTotalDialogsReached:()=>{q({totalDialogsReached:Go.totalDialogsReached})},resetDialogsStore:()=>{q(Go)}})));var he;(function(q){q.WAIT="wait",q.LOST="lost",q.SENT="sent",q.READ="read"})(he||(he={}));const bi={messages:{},totalMessagesReached:[]},Ci=Wt()(Ht((q,e)=>({...bi,addMessage:(t,r)=>{const A=e().messages||{},n=[...A[t]||[],r],o={...A,[t]:n};q({messages:o})},addMessages:(t,r,A=!0)=>{const n=e().messages||{},o=n[t]||[],a=A?[...r,...o]:[...o,...r],s={...n,[t]:a};q({messages:s})},updateMessage:(t,r,A)=>{const n=e().messages||{},o=(n[t]||[]).map(s=>s._id===r?{...s,...A}:s),a={...n,[t]:o};q({messages:a})},updateMessageStatus:(t,r,A,n)=>{const o=e().messages||{},a=(o[t]||[]).map(V=>V._id===r?{...V,read_ids:n?V.read_ids?[...new Set([...V.read_ids,n])]:[n]:V.read_ids,read:A===he.READ?1:V.read,status:A===he.SENT&&V.status===he.LOST?V.status:A}:V),s={...o,[t]:a};q({messages:s})},markMessagesAsLost:()=>{const t=e().messages||{},r=Object.fromEntries(Object.entries(t).map(([A,n])=>[A,n.map(o=>o.status===he.WAIT?{...o,status:he.LOST}:o)]));q({messages:r})},removeMessages:(t,r)=>{const A=e().messages||{},n=(A[t]||[]).filter(a=>!r.includes(a._id)),o={...A,[t]:n};q({messages:o})},clearMessages:t=>{const r={...e().messages||{},[t]:[]};q({messages:r})},setTotalMessagesReached:(t,r)=>{const A=e().totalMessagesReached,n=new Set(A);r?n.add(t):n.delete(t),q({totalMessagesReached:Array.from(n)})},resetTotalMessagesReached:()=>{q({totalMessagesReached:bi.totalMessagesReached})},resetMessagesStore:()=>{q(bi)}})));var Xq;(function(q){q.DISCONNECTED="disconnected",q.CONNECTING="connecting",q.CONNECTED="connected",q.NOT_AUTHORIZED="not-authorized",q.ERROR="error"})(Xq||(Xq={}));const Si={attachedChatListeners:new Set,isOnline:navigator.onLine,isConnected:!1,chatStatus:Xq.DISCONNECTED,pingInterval:null,isNetworkStatusHandling:!1},xi=Wt()(Ht((q,e)=>({...Si,attachChatListeners:t=>{const r=e().attachedChatListeners??new Set;Object.entries(t).forEach(([A,n])=>{const o=A;r.has(o)||(Z.chat.addListener(o,n),r.add(o))}),q({attachedChatListeners:r})},handleNetworkStatus:()=>{const{isNetworkStatusHandling:t,setIsOnline:r}=e();t||(window.addEventListener("online",async()=>{await r(!0),xA.info("Network is online","🟢")}),window.addEventListener("offline",async()=>{await r(!1),xA.info("Network is offline","🔴")}),q({isNetworkStatusHandling:!0}))},setIsOnline:async t=>{const{isOnline:r,chatStatus:A,setChatStatus:n}=e();if(t!==r)if(q({isOnline:t}),t&&A!==Xq.ERROR)A!==Xq.DISCONNECTED&&A!==Xq.NOT_AUTHORIZED||n(Xq.CONNECTING);else try{await Z.chat.pingWithTimeout(1e3),n(Xq.CONNECTED)}catch{const{resetTotalDialogsReached:a,resetActivatedDialogs:s}=Mi.getState(),{resetTotalMessagesReached:V,markMessagesAsLost:l}=Ci.getState();Z.chat.terminate(),n(Xq.DISCONNECTED),a(),V(),s(),l()}},setIsConnected:t=>{const{isConnected:r,pingInterval:A,setIsOnline:n}=e();if(t!==r&&(q({isConnected:t}),A&&(clearInterval(A),q({pingInterval:Si.pingInterval})),t)){xA.info("chat is connected",'start "pingWithTimeout"');const o=setInterval(async()=>{try{await Z.chat.pingWithTimeout(1e3),await n(!0)}catch(a){xA.error("ping chat",a),await n(!1),setTimeout(async()=>{try{await Z.chat.pingWithTimeout(1e3),await n(!0)}catch(s){xA.error("ping chat (reserved)",s),await n(!1)}},5e3)}},4e4);q({pingInterval:o})}},setChatStatus:t=>{q({chatStatus:t})},resetChatStore:()=>{q({...Si})}}))),yn="ConnectyCubeBlockList",ju={blockedUsers:new Set,isFetchInited:!1,isFetched:!1},Pu=Wt()(Ht((q,e)=>({...ju,fetchBlockList:async()=>{e().isFetched||e().isFetchInited||(xi.subscribe(t=>t.isConnected,async(t,r)=>{if(t!==r){if(!t)return void hn.warn("fetchBlockList","chat is not connected");if((await Z.chat.privacylist.getNames()).default===yn){const A=(await Z.chat.privacylist.getList(yn)).items.reduce((n,o)=>(o.action===Z.PrivacyListAction.DENY&&n.add(+o.user_id),n),new Set);q({isFetched:!0,blockedUsers:A})}}},{fireImmediately:!0}),q({isFetchInited:!0}))},setBlockedUsers:t=>{q({blockedUsers:t})},resetBlockListStore:()=>{q(ju)}}))),wn={currentSession:null,currentUserId:null,currentUser:null},Lo=Wt()(Ht((q,e)=>({...wn,setCurrentUserId:t=>{q({currentUserId:t})},resetCurrentUserId:()=>{q({currentUserId:wn.currentUserId})},setCurrentSession:t=>{q({currentSession:t,currentUserId:t.user_id,currentUser:t?.user})},updateCurrentSession:t=>{const r=e().currentSession;r?q({currentSession:{...r,...t}}):ib.error("updateCurrentSession","Has no session to update")},resetCurrentSession:()=>{q({currentSession:wn.currentSession,currentUserId:wn.currentUserId})},resetConnectyCubeStore:()=>{q(wn)}}))),Gu={lastActivity:{}},Vb=Wt()(Ht((q,e)=>({...Gu,upsertLastActivity:(t,r)=>{q({lastActivity:{...e().lastActivity,[t]:r}})},resetLastActivityStore:()=>{q(Gu)}}))),Lu={messageEvent:void 0,messageSystemEvent:void 0,messageSentEvent:void 0,messageReadEvent:void 0,messageEditEvent:void 0,messageDeleteEvent:void 0,messageErrorEvent:void 0},lb=Wt()(Ht(q=>({...Lu,setMessageEvent:e=>{q({messageEvent:e})},setMessageSystemEvent:e=>{q({messageSystemEvent:e})},setMessageSentEvent:e=>{q({messageSentEvent:e})},setMessageReadEvent:e=>{q({messageReadEvent:e})},setMessageEditEvent:e=>{q({messageEditEvent:e})},setMessageDeleteEvent:e=>{q({messageDeleteEvent:e})},setMessageErrorEvent:e=>{q({messageErrorEvent:e})},resetMessageEventStore:()=>{q(Lu)}}))),Fu={typingStatus:{},typingTimers:{}},Yu=Wt()(Ht((q,e)=>({...Fu,setTypingStatus:(t,r,A)=>{const n=e().typingStatus||{},o=n[t]?new Set(n[t]):new Set;A?o.add(r):o.delete(r),q({typingStatus:{...n,[t]:[...o]}})},addTypingTimer:(t,r,A)=>{const n=e().typingTimers||{},o=n[t]||{},a={...n,[t]:{...o,[r]:A}};q({typingTimers:a})},clearTypingTimer:(t,r)=>{const A=e().typingTimers||{},n=A[t]||{};clearTimeout(n[r]),delete n[r];const o={...A,[t]:{...n}};q({typingTimers:o})},resetTypingStatusStore:()=>{q(Fu)}}))),zu={users:{},usersLastRequestAt:{},onlineUsers:{},onlineUsersLastRequestAt:0,onlineUsersCount:0},Ku=Wt()(Ht((q,e)=>({...zu,upsertUser:t=>{q({users:{...e().users,[t.id]:t}})},upsertUsers:t=>{q({users:t.reduce((r,A)=>({...r,[A.id]:A}),{...e().users})})},upsertUsersLastRequestAt:t=>{q({...e().usersLastRequestAt,...t})},setOnlineUsers:t=>{q({onlineUsers:t.reduce((r,A)=>({...r,[A.id]:A}),{})})},updateOnlineUser:t=>{e().onlineUsers[t.id]&&q({onlineUsers:{...e().onlineUsers,[t.id]:t}})},updateOnlineUsers:t=>{q({onlineUsers:t.reduce((r,A)=>r[A.id]?{...r,[A.id]:A}:r,{...e().onlineUsers})})},setOnlineUsersLastRequestAt:t=>{q({onlineUsersLastRequestAt:t})},setOnlineUsersCount:t=>{q({onlineUsersCount:t})},resetUsersStore:()=>{q(zu)}})));var gr,re;(function(q){q[q.USER=0]="USER",q[q.DISPLAY=1]="DISPLAY"})(gr||(gr={})),(function(q){q.ON_CALL="onCall",q.ON_STOP_CALLING="onStopCalling",q.ON_ACCEPT="onAccept",q.ON_REJECT="onReject",q.ON_STOP="onStop",q.ON_NOT_ANSWER="onNotAnswer",q.ON_CONNECTION_STATE="onConnectionState"})(re||(re={}));const pr={incomingCallCallData:null,incomingCallStopData:null,activeCallAcceptData:null,activeCallRejectData:null,activeCallStopData:null,activeCallNotAnswerData:null,activeCallConnectionStateData:null,deviceChangeEvent:null},cb={localStream:null,remoteStreams:{},userMediaParams:{video:!0,audio:!0},displayMediaParams:{video:!0,audio:!1},activeMedia:gr.USER},Br={activeCall:null,incomingCall:null,...pr,...cb,participantsIDs:new Set,attachedVideochatListeners:new Set},Ju=Wt()(Ht((q,e)=>({...Br,setActiveCall:t=>{q({activeCall:t})},resetActiveCall:()=>{q({activeCall:Br.activeCall})},setIncomingCall:t=>{q({incomingCall:t})},resetIncomingCall:()=>{q({incomingCall:Br.incomingCall})},setDeviceChangeEvent:t=>{q({deviceChangeEvent:t})},upsertSessionData:(t,r)=>{switch(t){case re.ON_CALL:q({incomingCallCallData:r});break;case re.ON_STOP_CALLING:q({incomingCallStopData:r});break;case re.ON_ACCEPT:q({activeCallAcceptData:r});break;case re.ON_REJECT:q({activeCallRejectData:r});break;case re.ON_STOP:q({activeCallStopData:r});break;case re.ON_NOT_ANSWER:q({activeCallNotAnswerData:r});break;case re.ON_CONNECTION_STATE:q({activeCallConnectionStateData:r})}},resetSessionData:t=>{switch(t){case re.ON_CALL:q({incomingCallCallData:pr.incomingCallCallData});break;case re.ON_STOP_CALLING:q({incomingCallStopData:pr.incomingCallStopData});break;case re.ON_ACCEPT:q({activeCallAcceptData:pr.activeCallAcceptData});break;case re.ON_REJECT:q({activeCallRejectData:pr.activeCallRejectData});break;case re.ON_STOP:q({activeCallStopData:pr.activeCallStopData});break;case re.ON_NOT_ANSWER:q({activeCallNotAnswerData:pr.activeCallNotAnswerData});break;case re.ON_CONNECTION_STATE:q({activeCallConnectionStateData:pr.activeCallConnectionStateData});break;default:q(pr)}},setLocalStream:t=>{q({localStream:t})},resetLocalStream:()=>{q({localStream:Br.localStream})},addRemoteStream:(t,r)=>{q({remoteStreams:{...e().remoteStreams,[t]:r}})},removeRemoteStream:t=>{const r={...e().remoteStreams};delete r[t],q({remoteStreams:r})},resetRemoteStreams:()=>{q({remoteStreams:Br.remoteStreams})},saveUserMediaParams:t=>{q({userMediaParams:t})},resetUserMediaParams:()=>{q({userMediaParams:Br.userMediaParams})},saveDisplayMediaParams:t=>{q({displayMediaParams:t})},resetDisplayMediaParams:()=>{q({displayMediaParams:Br.displayMediaParams})},saveActiveMedia:t=>{q({activeMedia:t})},setParticipantsIDs:t=>{q({participantsIDs:new Set(t)})},participantDidEnter:t=>{const r=new Set([...e().participantsIDs]);r.add(t),q({participantsIDs:r})},participantDidLeave:t=>{const r=new Set([...e().participantsIDs]);r.delete(t),q({participantsIDs:r})},attachVideochatListeners:t=>{const r=e().attachedVideochatListeners??new Set;Object.entries(t).forEach(([A,n])=>{const o=A;r.has(o)||(Z.videochat.addListener(o,n),r.add(o))}),q({attachedVideochatListeners:r})},resetVideochatStore:()=>{q({...Br})}}))),ub=Tr(Pu),Zu=Tr(xi),db=Tr(Lo),Fo=Tr(Mi),gb=Tr(Ci),pb=Tr(Yu),Wu=Tr(Ku),Ii=Tr(Ju),fb=()=>{const[q,e,t]=Pu(Tt(a=>[a.blockedUsers,a.setBlockedUsers,a.fetchBlockList])),r=Zu("isConnected"),A=ub("isFetched"),n=async(a,s)=>{if(!r.current)return void hn.warn("upsert",`${s} user ${a} failed, chat is not connected`);const V=new Set(q),l={name:yn,items:[{user_id:a,action:s,mutualBlock:!0}]};try{s===Z.PrivacyListAction.DENY?V.add(a):s===Z.PrivacyListAction.ALLOW&&V.delete(a),A.current?(await Z.chat.privacylist.setAsDefault(null),await Z.chat.privacylist.update(l),V.size>0&&await Z.chat.privacylist.setAsDefault(yn)):(await Z.chat.privacylist.create(l),await Z.chat.privacylist.setAsDefault(yn))}catch(i){return void hn.error("upsert",i)}finally{e(V)}},o=a=>q.has(a);return M.useEffect(()=>{t()},[]),{blockedUsers:Array.from(q),blockUser:async a=>{o(a)?hn.warn("block",`user ${a} is already blocked`):await n(a,Z.PrivacyListAction.DENY)},unblockUser:async a=>{o(a)?await n(a,Z.PrivacyListAction.ALLOW):hn.warn("unblock",`user ${a} is not blocked`)},isBlockedUser:o}},ki=43200,Hu=Symbol.for("constructDateFrom");function Ti(q,e){return typeof q=="function"?q(e):q&&typeof q=="object"&&Hu in q?q[Hu](e):q instanceof Date?new q.constructor(e):new Date(e)}function Dr(q,e){return Ti(q,q)}let hb={};function mb(){return hb}function Xu(q){const e=Dr(q),t=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()));return t.setUTCFullYear(e.getFullYear()),+q-+t}function Bi(q,...e){const t=Ti.bind(null,q||e.find(r=>typeof r=="object"));return e.map(t)}function Yo(q,e){const t=+Dr(q)-+Dr(e);return t<0?-1:t>0?1:t}function yb(q,e){const t=Dr(q);return+(function(r){const A=Dr(r);return A.setHours(23,59,59,999),A})(t)==+(function(r){const A=Dr(r),n=A.getMonth();return A.setFullYear(A.getFullYear(),n+1,0),A.setHours(23,59,59,999),A})(t)}function wb(q,e,t){const[r,A,n]=Bi(t?.in,q,q,e),o=Yo(A,n),a=Math.abs((function(l,i,d){const[g,p]=Bi(d?.in,l,i);return 12*(g.getFullYear()-p.getFullYear())+(g.getMonth()-p.getMonth())})(A,n));if(a<1)return 0;A.getMonth()===1&&A.getDate()>27&&A.setDate(30),A.setMonth(A.getMonth()-o*a);let s=Yo(A,n)===-o;yb(r)&&a===1&&Yo(r,n)===1&&(s=!1);const V=o*(a-+s);return V===0?0:V}function vb(q,e,t){const r=(function(n,o){return+Dr(n)-+Dr(o)})(q,e)/1e3;return(A=t?.roundingMethod,n=>{const o=(A?Math[A]:Math.trunc)(n);return o===0?0:o})(r);var A}const Eb={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}};function Di(q){return(e={})=>{const t=e.width?String(e.width):q.defaultWidth;return q.formats[t]||q.formats[q.defaultWidth]}}const Mb={date:Di({formats:{full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},defaultWidth:"full"}),time:Di({formats:{full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},defaultWidth:"full"}),dateTime:Di({formats:{full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},defaultWidth:"full"})},bb={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"};function vn(q){return(e,t)=>{let r;if((t?.context?String(t.context):"standalone")==="formatting"&&q.formattingValues){const A=q.defaultFormattingWidth||q.defaultWidth,n=t?.width?String(t.width):A;r=q.formattingValues[n]||q.formattingValues[A]}else{const A=q.defaultWidth,n=t?.width?String(t.width):q.defaultWidth;r=q.values[n]||q.values[A]}return r[q.argumentCallback?q.argumentCallback(e):e]}}function En(q){return(e,t={})=>{const r=t.width,A=r&&q.matchPatterns[r]||q.matchPatterns[q.defaultMatchWidth],n=e.match(A);if(!n)return null;const o=n[0],a=r&&q.parsePatterns[r]||q.parsePatterns[q.defaultParseWidth],s=Array.isArray(a)?(function(l,i){for(let d=0;d<l.length;d++)if(i(l[d]))return d})(a,l=>l.test(o)):(function(l,i){for(const d in l)if(Object.prototype.hasOwnProperty.call(l,d)&&i(l[d]))return d})(a,l=>l.test(o));let V;return V=q.valueCallback?q.valueCallback(s):s,V=t.valueCallback?t.valueCallback(V):V,{value:V,rest:e.slice(o.length)}}}var Mn;const Cb={code:"en-US",formatDistance:(q,e,t)=>{let r;const A=Eb[q];return r=typeof A=="string"?A:e===1?A.one:A.other.replace("{{count}}",e.toString()),t?.addSuffix?t.comparison&&t.comparison>0?"in "+r:r+" ago":r},formatLong:Mb,formatRelative:(q,e,t,r)=>bb[q],localize:{ordinalNumber:(q,e)=>{const t=Number(q),r=t%100;if(r>20||r<10)switch(r%10){case 1:return t+"st";case 2:return t+"nd";case 3:return t+"rd"}return t+"th"},era:vn({values:{narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},defaultWidth:"wide"}),quarter:vn({values:{narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},defaultWidth:"wide",argumentCallback:q=>q-1}),month:vn({values:{narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},defaultWidth:"wide"}),day:vn({values:{narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},defaultWidth:"wide"}),dayPeriod:vn({values:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},defaultWidth:"wide",formattingValues:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},defaultFormattingWidth:"wide"})},match:{ordinalNumber:(Mn={matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:q=>parseInt(q,10)},(q,e={})=>{const t=q.match(Mn.matchPattern);if(!t)return null;const r=t[0],A=q.match(Mn.parsePattern);if(!A)return null;let n=Mn.valueCallback?Mn.valueCallback(A[0]):A[0];return n=e.valueCallback?e.valueCallback(n):n,{value:n,rest:q.slice(r.length)}}),era:En({matchPatterns:{narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^b/i,/^(a|c)/i]},defaultParseWidth:"any"}),quarter:En({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},defaultMatchWidth:"wide",parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:"any",valueCallback:q=>q+1}),month:En({matchPatterns:{narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},defaultParseWidth:"any"}),day:En({matchPatterns:{narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},defaultParseWidth:"any"}),dayPeriod:En({matchPatterns:{narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},defaultMatchWidth:"any",parsePatterns:{any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},defaultParseWidth:"any"})},options:{weekStartsOn:0,firstWeekContainsDate:1}};function _u(q,e){return(function(t,r,A){const n=mb(),o=A?.locale??n.locale??Cb,a=Yo(t,r);if(isNaN(a))throw new RangeError("Invalid time value");const s=Object.assign({},A,{addSuffix:A?.addSuffix,comparison:a}),[V,l]=Bi(A?.in,...a>0?[r,t]:[t,r]),i=vb(l,V),d=(Xu(l)-Xu(V))/1e3,g=Math.round((i-d)/60);let p;if(g<2)return A?.includeSeconds?i<5?o.formatDistance("lessThanXSeconds",5,s):i<10?o.formatDistance("lessThanXSeconds",10,s):i<20?o.formatDistance("lessThanXSeconds",20,s):i<40?o.formatDistance("halfAMinute",0,s):i<60?o.formatDistance("lessThanXMinutes",1,s):o.formatDistance("xMinutes",1,s):g===0?o.formatDistance("lessThanXMinutes",1,s):o.formatDistance("xMinutes",g,s);if(g<45)return o.formatDistance("xMinutes",g,s);if(g<90)return o.formatDistance("aboutXHours",1,s);if(g<1440){const f=Math.round(g/60);return o.formatDistance("aboutXHours",f,s)}if(g<2520)return o.formatDistance("xDays",1,s);if(g<ki){const f=Math.round(g/1440);return o.formatDistance("xDays",f,s)}if(g<86400)return p=Math.round(g/ki),o.formatDistance("aboutXMonths",p,s);if(p=wb(l,V),p<12){const f=Math.round(g/ki);return o.formatDistance("xMonths",f,s)}{const f=p%12,v=Math.trunc(p/12);return f<3?o.formatDistance("aboutXYears",v,s):f<9?o.formatDistance("overXYears",v,s):o.formatDistance("almostXYears",v+1,s)}})(q,(function(t){return Ti(t,Date.now())})(q),e)}const zo=100,$u=()=>{const q=Lo(y=>y.currentUserId),[e,t,r,A,n,o,a,s,V,l,i]=Ku(Tt(y=>[y.users,y.upsertUser,y.upsertUsers,y.upsertUsersLastRequestAt,y.onlineUsers,y.setOnlineUsers,y.updateOnlineUser,y.updateOnlineUsers,y.setOnlineUsersLastRequestAt,y.onlineUsersCount,y.setOnlineUsersCount])),d=Wu("usersLastRequestAt"),g=Wu("onlineUsersLastRequestAt"),p=async y=>{const{items:m}=await Z.users.getV2(y),w={};return r(m),s(m),m.forEach(h=>{w[h.id]=Date.now()}),A(w),m},f=M.useCallback(async y=>{const{items:m}=await Z.users.getV2({full_name:{start_with:y},limit:zo}),{items:w}=await Z.users.getV2({login:{start_with:y},limit:zo}),h=new Map;return[...m,...w].forEach(u=>{h.set(u.id,u)}),Array.from(h.values()).filter(u=>u.id!==q)},[q]),v=async()=>{let y=l;try{const{count:m}=await Z.users.getOnlineCount();y=m,i(y)}catch(m){vi.error("getOnlineCount",m)}return y};return{users:e,fetchUsers:p,fetchUserById:async(y,m=!1)=>{const w=d.current[y]||0,h=Date.now()-w>3e4;let u=e[y];if(h||m){const E=await Z.users.getV2({id:y,limit:1}),C=E?.items?.[0];C&&(t(C),a(C),A({[y]:Date.now()}),u=C)}return u},fetchUsersByIds:async y=>{let m=[];const w=y.filter(h=>!m[h]);return w.length>0&&(m=await p({limit:zo,id:{in:w}})),m},searchUsers:f,onlineUsers:Object.values(n),fetchAllOnlineUsers:async(y=!1)=>{if(Date.now()-g.current>6e4||y){const m=await(async()=>{const w=await v(),h=[];try{let u=zo,E=0;for(;E<w;)h.push(Z.users.listOnline({limit:u,offset:E}).then(({users:S})=>S)),E+=u;const C=(await Promise.all(h)).flat();return r(C),o(C),C}catch(u){return vi.error("listOnline",u),[]}})();return V(Date.now()),m}return Object.values(n)},fetchOnlineUsers:async y=>{try{const{users:m}=await Z.users.listOnline(y);return r(m),o(m),m}catch(m){return vi.error("listOnlineWithParams",m),[]}},onlineUsersCount:l,fetchOnlineUsersCount:v}};var Ue;(function(q){q.NEW_DIALOG="dialog/NEW_DIALOG",q.ADDED_TO_DIALOG="dialog/ADDED_TO_DIALOG",q.REMOVED_FROM_DIALOG="dialog/REMOVED_FROM_DIALOG",q.ADD_PARTICIPANTS="dialog/ADD_PARTICIPANTS",q.REMOVE_PARTICIPANTS="dialog/REMOVE_PARTICIPANTS",q.DELETE_DIALOG="dialog/DELETE_DIALOG"})(Ue||(Ue={}));const Sb=()=>{const{fetchUsersByIds:q}=$u(),[e,t,r]=Lo(Tt(I=>[I.currentUserId,I.setCurrentUserId,I.resetCurrentUserId])),[A,n]=Vb(Tt(I=>[I.lastActivity,I.upsertLastActivity])),[o,a,s,V,l,i,d,g,p,f,v,y,m,w,h,u,E,C,S,k]=Mi(Tt(I=>[I.dialogs,I.upsertDialog,I.upsertDialogs,I.updateDialog,I.updateDialogOnMessage,I.updateDialogOnReadMessage,I.addParticipantsToDialog,I.removeParticipantsFromDialog,I.removeDialog,I.selectedDialog,I.setSelectedDialog,I.resetSelectedDialog,I.activateDialog,I.resetActivatedDialogs,I.addPrivateDialogId,I.removePrivateDialogId,I.unreadMessagesCount,I.totalDialogsReached,I.setTotalDialogsReached,I.resetTotalDialogsReached])),[D,L,Q,j,T,x,B,F,G,P,N]=Ci(Tt(I=>[I.messages,I.addMessage,I.addMessages,I.updateMessage,I.updateMessageStatus,I.markMessagesAsLost,I.removeMessages,I.clearMessages,I.totalMessagesReached,I.setTotalMessagesReached,I.resetTotalMessagesReached])),[Y,_,R,H,aq,Aq,qq,W,nq,cq,Mq,tq,Tq,Yq,Lq]=lb(Tt(I=>[I.messageEvent,I.messageSystemEvent,I.messageSentEvent,I.messageReadEvent,I.messageEditEvent,I.messageDeleteEvent,I.messageErrorEvent,I.setMessageEvent,I.setMessageSystemEvent,I.setMessageSentEvent,I.setMessageReadEvent,I.setMessageEditEvent,I.setMessageDeleteEvent,I.setMessageErrorEvent,I.resetMessageEventStore])),[$,gq,Rq,Jq,U,K,J]=xi(Tt(I=>[I.isOnline,I.isConnected,I.chatStatus,I.setIsConnected,I.setChatStatus,I.handleNetworkStatus,I.attachChatListeners])),[rq,oq,Vq,pq,Oq]=Yu(Tt(I=>[I.typingStatus,I.setTypingStatus,I.addTypingTimer,I.clearTypingTimer,I.resetTypingStatusStore])),Nq=db("currentUserId"),oe=Zu("chatStatus"),Ce=gb("messages"),Se=Fo("dialogs"),Xe=Fo("selectedDialog"),Ve=Fo("activatedDialogs"),Ye=Fo("privateDialogsIds"),Ft=pb("typingTimers"),cr=async(I=Xq.DISCONNECTED)=>{let z=!1;return Z.chat.isConnected&&(z=await Z.chat.disconnect(),Jq(!1),r(),Lq(),Oq(),U(I),at()),z},qA=(I=Xq.DISCONNECTED)=>{Z.chat.terminate(),U(I),at(),x()},at=()=>{w(),k(),N()},st=async I=>{const z={sort_desc:"date_sent",limit:100,skip:0,...I},{items:eq,skip:sq,limit:bq,total_entries:Qq}=await Z.chat.dialog.list(z);S(sq+bq>=Qq),s(eq);const Ae=eq.flatMap(mt=>mt.occupants_ids),te=Array.from(new Set(Ae));return q(te),eq},Yt=async(I,z=0)=>{try{const eq=await(async(sq,bq={})=>{const Qq={chat_dialog_id:sq,sort_desc:"date_sent",limit:100,skip:0,...bq};try{const{items:Ae,skip:te,limit:mt}=await Z.chat.message.list(Qq),Re=Ce.current[sq]??[],Jt=te+mt>Ae.length+Re.length;return P(sq,Jt),Ae.sort((bA,Io)=>bA._id.toString().localeCompare(Io._id.toString())).map(bA=>{const Io=bA.attachments?.map(Vi=>({...Vi,url:Z.storage.privateUrl(Vi.uid)}));return{...bA,attachments:Io,status:bA.read?he.READ:he.SENT}})}catch(Ae){if(Ae.code===404)return[];throw Ae}})(I,{skip:z});return Q(I,eq),eq}catch(eq){throw eq}},eA=async I=>Yt(I),it=I=>{if(I??=f,!I)throw"No dialog provided. You need to provide a dialog via function argument or select a dialog via 'selectDialog'.";if(I.type!==Z.DialogType.PRIVATE)return;const z=I.occupants_ids.find(eq=>eq!==e);return z&&h(z,I._id),z},tA=I=>Se.current.find(z=>z.type===Z.DialogType.PRIVATE&&z.occupants_ids.includes(I)),Iq=async I=>{const z={read:1,chat_dialog_id:I._id};await Z.chat.message.update("",z),V(I._id,{unread_messages_count:0})},pe=Z.chat.helpers.getBsonObjectId,we=(I,z,eq={})=>{if(z??=f,!z)throw"No dialog provided. You need to provide a dialog via function argument or select a dialog via 'selectDialog'.";const sq=it(z),bq=ke(I,null,z,sq,eq);zt(bq,I,z._id,e,sq,void 0,!1,eq)},ke=(I,z,eq,sq,bq)=>{const Qq={type:eq.type===Z.DialogType.PRIVATE?Z.ChatType.CHAT:Z.ChatType.GROUPCHAT,body:I,extension:{save_to_history:1,dialog_id:eq._id,...bq}};return z&&(Qq.extension.attachments=z),Z.chat.send(eq.type===Z.DialogType.PRIVATE?sq:eq._id,Qq)},zt=(I,z,eq,sq,bq,Qq,Ae,te)=>{const mt=Math.round(new Date().getTime()/1e3),Re={...te||{},_id:I,created_at:mt,updated_at:mt,chat_dialog_id:eq,message:z,sender_id:sq,recipient_id:bq,date_sent:mt,read:0,read_ids:[sq],delivered_ids:[sq],views_count:0,attachments:Qq||[],reactions:{},isLoading:Ae,status:oe.current===Xq.CONNECTED?he.WAIT:he.LOST},Jt={last_message:Re.message,last_message_user_id:Re.sender_id,last_message_date_sent:Re.date_sent};V(eq,Jt),L(eq,Re)},ae=(I,z,eq,sq={})=>{ur(eq,I,{dialogId:z,...sq})},Te=(I,z,eq=[],sq={})=>{const bq=z._id,Qq=z.occupants_ids.filter(Ae=>!eq.includes(Ae)&&Ae!==e);ae(I,bq,Qq,sq)},ur=(I,z,eq={})=>{const sq=Array.isArray(I)?I:[I],bq={body:z,extension:eq};sq.forEach(Qq=>{Z.chat.sendSystemMessage(Qq,bq)})},ze=(I,z)=>{typeof I=="number"&&z>=0&&n(I,Ru(z))},_e=()=>{oe.current!==Xq.CONNECTING&&(U(Xq.DISCONNECTED),at()),x()},sn=()=>{U(Xq.CONNECTED)},Kt=async(I={})=>{I?.condition==="not-authorized"||I?.text==="Password not verified"||I?.name==="SASLError"?await cr(Xq.NOT_AUTHORIZED)||qA(Xq.NOT_AUTHORIZED):U(Xq.ERROR)},ii=(I,z)=>{if(W({userId:I,message:z}),I===Nq.current||z.delay&&z.type===Z.ChatType.CHAT)return;const eq=z.dialog_id,sq=z.id,bq=z.body||"",Qq=z.type===Z.ChatType.CHAT?Nq.current:void 0,Ae=z.extension.attachments?.length>0?z.extension.attachments.map(te=>({...te,url:Z.storage.privateUrl(te.uid)})):void 0;zt(sq,bq,eq,I,Qq,Ae,!1,z.extension),oq(eq,I,!1),pq(eq,I),l(eq,z)},O=(I,z)=>{Yq({messageId:I,error:z})},iq=(I,z)=>{cq({lost:I,sent:z});const eq=z?he.SENT:I?he.LOST:void 0,sq=z?z.id:I?I.id:void 0,bq=z?z.extension.dialog_id:I?I.extension.dialog_id:void 0;eq&&sq&&bq&&T(bq,sq,eq)},fq=async I=>{const z=I.extension.dialogId,eq=I.userId;if(nq({message:I}),eq!==Nq.current)switch(I.body){case Ue.NEW_DIALOG:case Ue.ADDED_TO_DIALOG:{const sq=(await Z.chat.dialog.list({_id:z})).items[0];q(sq.occupants_ids),a(sq);break}case Ue.DELETE_DIALOG:await Z.chat.dialog.delete(z),p(z),F(z);break;case Ue.ADD_PARTICIPANTS:{const sq=I.extension.addedParticipantsIds.split(",").map(Number);q(sq),d(z,sq);break}case Ue.REMOVE_PARTICIPANTS:{const sq=I.extension.removedParticipantsIds.split(",").map(Number);g(z,sq);break}case Ue.REMOVED_FROM_DIALOG:g(z,[eq])}},Sq=(I,z,eq)=>{Mq({messageId:I,dialogId:z,userId:eq}),eq!==Nq.current&&T(z,I,he.READ,eq)},Zq=(I,z,eq)=>{const sq=eq||(bq=>{let Qq=Ye.current?.[bq];if(!Qq){const Ae=Se.current.find(te=>te.type===Z.DialogType.PRIVATE&&it(te)===bq);Ae&&(Qq=Ae._id,h(bq,Qq))}return Qq})(z);if(sq&&z&&z!==Nq.current)if(oq(sq,z,I),I){Ft.current?.[sq][z]&&pq(sq,z);const bq=setTimeout(()=>{oq(sq,z,!1),pq(sq,z)},6e3);Vq(sq,z,bq)}else oq(sq,z,!1),pq(sq,z)},ee=(I,z,eq,sq,bq)=>{tq({messageId:I,dialogId:sq,userId:bq,updatedBody:eq,isLast:z}),j(sq,I,{body:eq}),z&&l(sq,{id:I,body:eq},!0)},Pq=(I,z,eq)=>{Tq({messageId:I,dialogId:z,userId:eq}),B(z,[I])};return M.useEffect(()=>{K(),J({[Z.ChatEvent.DISCONNECTED]:_e,[Z.ChatEvent.RECONNECTED]:sn,[Z.ChatEvent.ERROR]:Kt,[Z.ChatEvent.MESSAGE]:ii,[Z.ChatEvent.ERROR_MESSAGE]:O,[Z.ChatEvent.SENT_MESSAGE]:iq,[Z.ChatEvent.SYSTEM_MESSAGE]:fq,[Z.ChatEvent.READ_MESSAGE]:Sq,[Z.ChatEvent.TYPING_MESSAGE]:Zq,[Z.ChatEvent.UPDATE_MESSAGE]:ee,[Z.ChatEvent.DELETE_MESSAGE]:Pq})},[]),{isConnected:gq,chatStatus:Rq,connect:async I=>{U(Xq.CONNECTING);try{const z=await Z.chat.connect(I);return z&&(U(Xq.CONNECTED),Jq(z),t(I.userId)),z}catch(z){return U(Xq.DISCONNECTED),console.error(`Failed to connect due to ${z}`),!1}},terminate:qA,disconnect:cr,dialogs:o,selectedDialog:f,totalDialogsReached:C,unreadMessagesCount:E,selectDialog:async I=>{if(!I)return y();I._id!==Xe.current?._id&&(v(I),Ve.current?.has(I._id)||(await eA(I._id),m(I._id)),I.unread_messages_count>0&&await Iq(I).catch(z=>{}))},unselectDialog:y,createChat:async(I,z)=>{const eq={type:Z.DialogType.PRIVATE,occupants_ids:[I],extensions:z},sq=await Z.chat.dialog.create(eq);return a(sq),P(sq._id,!0),h(I,sq._id),ae(Ue.NEW_DIALOG,sq._id,I),e&&q([I,e]),sq},createGroupChat:async(I,z,eq,sq)=>{const bq={name:z,photo:eq,type:Z.DialogType.GROUP,occupants_ids:I,extensions:sq},Qq=await Z.chat.dialog.create(bq);return a(Qq),P(Qq._id,!0),ae(Ue.NEW_DIALOG,Qq._id,I),e&&q([...I,e]),Qq},markDialogAsRead:Iq,addUsersToGroupChat:async I=>{if(!f)throw new Error("No dialog selected");const z=f._id,eq={push_all:{occupants_ids:I}};await Z.chat.dialog.update(z,eq),Te(Ue.ADD_PARTICIPANTS,f,[],{addedParticipantsIds:I.join()}),ae(Ue.ADDED_TO_DIALOG,z,I),q(I);const sq={occupants_ids:Array.from(new Set([...f.occupants_ids,...I]))};V(z,sq),v({...f,...sq})},removeUsersFromGroupChat:async I=>{if(!f)throw new Error("No dialog selected");const z=f._id,eq={pull_all:{occupants_ids:I}};await Z.chat.dialog.update(z,eq),ae(Ue.REMOVE_PARTICIPANTS,z,I),Te(Ue.REMOVE_PARTICIPANTS,f,I,{removedParticipantsIds:I.join()});const sq={occupants_ids:f.occupants_ids.filter(bq=>!I.includes(bq))};V(z,sq),v({...f,...sq})},leaveGroupChat:async I=>{if(I??=f,!I)throw"No dialog provided. You need to provide a dialog via function argument or select a dialog via 'selectDialog'.";const z=I._id;Te(Ue.REMOVED_FROM_DIALOG,I),await Z.chat.dialog.delete(z),p(z),F(z),y()},deleteChat:async I=>{if(I??=f,!I)throw"No dialog provided. You need to provide a dialog via function argument or select a dialog via 'selectDialog'.";const z=I._id,eq=it(I);eq&&(u(eq),ae(Ue.DELETE_DIALOG,z,eq)),await Z.chat.dialog.delete(z),p(z),F(z),y()},deleteGroupChat:async I=>{if(I??=f,!I)throw"No dialog provided. You need to provide a dialog via function argument or select a dialog via 'selectDialog'.";if(I.user_id!==e)throw"Only the group chat owner can delete the group chat.";const z=I._id;Te(Ue.DELETE_DIALOG,I),await Z.chat.dialog.delete(z,{force:1}),p(z),F(z),y()},fetchDialogs:st,fetchNextDialogs:async()=>{const I=Se.current.length;return st({skip:I})},lastMessageSentTimeString:I=>_u(I.last_message_date_sent?1e3*I.last_message_date_sent:I.created_at,{addSuffix:!0}),getDialogOpponentId:it,getPrivateDialogByUserId:tA,messages:D,totalMessagesReached:G,fetchMessages:eA,fetchNextMessages:async I=>{const z=(Ce.current[I]??[]).length;return Yt(I,z)},sendMessage:we,sendMessageByUserId:(I,z,eq={})=>{const sq=tA(z);if(!sq)throw"Dialog not found.";we(I,sq,eq)},sendAttachment:async(I,z)=>{if(z??=f,!z)throw"No dialog provided. You need to provide a dialog via function argument or select a dialog via 'selectDialog'.";const eq=z._id,sq=it(z),bq=Date.now()+"",Qq=I.map((Re,Jt)=>({uid:`local-${bq}-${Jt}`,type:Re.type,url:URL.createObjectURL(Re)}));zt(bq,"Attachment",eq,e,sq,Qq,!0);const Ae=I.map(Re=>{const{name:Jt,type:bA,size:Io}=Re,Vi={file:Re,name:Jt,type:bA,size:Io,public:!1};return Z.storage.createAndUpload(Vi)}),te=(await Promise.all(Ae)).map(({uid:Re,content_type:Jt=""})=>({uid:Re,type:Jt,url:Z.storage.privateUrl(Re)})),mt={_id:ke("Attachment",te,z,sq),attachments:Qq,isLoading:!1,status:oe.current===Xq.CONNECTED?he.WAIT:he.LOST};j(eq,bq,mt)},sendSignal:ur,readMessage:(I,z,eq)=>{Z.chat.sendReadStatus({messageId:I,userId:z,dialogId:eq}),T(eq,I,he.READ,z),i(eq)},editMessage:(I,z,eq)=>{if(eq??=f,!eq)throw"No dialog provided. You need to provide a dialog via function argument or select a dialog via 'selectDialog'.";const sq=eq._id,bq=eq.type===Z.DialogType.PRIVATE?it(eq):sq,Qq=eq.last_message_id===I;Z.chat.editMessage({to:bq,body:z,dialogId:sq,originMessageId:I,last:Qq}),j(sq,I,{message:z})},deleteMessages:async(I,z=[],eq=!1)=>{if(I??=f,!I)throw"No dialog provided. You need to provide a dialog via function argument or select a dialog via 'selectDialog'.";if(!z||z.length===0)throw"No messages to delete. You need to provide a message id or messages ids via function argument.";await Z.chat.message.delete(z,{force:eq?1:0}),B(I._id,z)},clearChatHistory:async I=>{if(I??=f,!I)throw"No dialog provided. You need to provide a dialog via function argument or select a dialog via 'selectDialog'.";await Z.chat.dialog.clearHistory(I._id),F(I._id)},messageSentTimeString:I=>_u(1e3*I.date_sent,{addSuffix:!0}),generateTempMessageId:pe,addTempMessage:(I,z,eq={})=>{if(z??=f,!z)throw"No dialog provided. You need to provide a dialog via function argument or select a dialog via 'selectDialog'.";const sq=Math.round(new Date().getTime()/1e3),bq=I||Z.chat.helpers.getBsonObjectId(),Qq={created_at:sq,updated_at:sq,date_sent:sq,message:eq.body,sender_id:0,...eq,_id:I||bq,chat_dialog_id:z._id,custom:!0};return L(z._id,Qq),bq},updateTempMessage:(I,z,eq={})=>{if(z??=f,!z)throw"No dialog provided. You need to provide a dialog via function argument or select a dialog via 'selectDialog'.";const sq={...eq,updated_at:Math.round(new Date().getTime()/1e3),chat_dialog_id:z._id,message:eq.body||eq.message,custom:!0};typeof sq.message!="string"&&delete sq.message,j(z._id,I,sq)},messageEvent:Y,messageErrorEvent:qq,messageSentEvent:R,messageReadEvent:H,messageEditEvent:aq,messageDeleteEvent:Aq,messageSystemEvent:_,lastActivity:A,getLastActivity:async I=>{try{const{seconds:z}=await Z.chat.getLastUserActivity(I),eq=Ru(z);return n(I,eq),eq}catch(z){return xA.error("getLastActivity",z),"Last seen recently"}},subscribeToLastActivity:I=>{Z.chat.subscribeToUserLastActivityStatus(I),Z.chat.addListener(Z.ChatEvent.USER_LAST_ACTIVITY,ze)},unsubscribeFromLastActivity:I=>{Z.chat.unsubscribeFromUserLastActivityStatus(I),Z.chat.removeListener(Z.ChatEvent.USER_LAST_ACTIVITY)},isOnline:$,typingStatus:rq,sendTypingStatus:I=>{if(I??=f,!I)throw"No dialog provided. You need to provide a dialog via function argument or select a dialog via 'selectDialog'.";Z.chat.sendIsTypingStatus(I.type===Z.DialogType.PRIVATE?it(I):I._id)}}};var Xt;(function(q){q.MUTE_AUDIO="audio-mute",q.UNMUTE_AUDIO="audio-unmute",q.MUTE_VIDEO="video-mute",q.UNMUTE_VIDEO="video-unmute"})(Xt||(Xt={}));const xb=()=>{const[q,e]=M.useState(0),[t,r,A,n,o,a,s,V,l,i,d,g,p,f,v,y,m,w,h,u,E,C,S,k,D,L,Q,j,T,x,B,F,G]=Ju(Tt($=>[$.activeCall,$.setActiveCall,$.incomingCall,$.setIncomingCall,$.resetIncomingCall,$.activeMedia,$.saveActiveMedia,$.userMediaParams,$.saveUserMediaParams,$.displayMediaParams,$.saveDisplayMediaParams,$.localStream,$.setLocalStream,$.remoteStreams,$.addRemoteStream,$.removeRemoteStream,$.deviceChangeEvent,$.setDeviceChangeEvent,$.incomingCallCallData,$.incomingCallStopData,$.activeCallAcceptData,$.activeCallRejectData,$.activeCallStopData,$.activeCallNotAnswerData,$.activeCallConnectionStateData,$.resetSessionData,$.participantsIDs,$.setParticipantsIDs,$.upsertSessionData,$.participantDidEnter,$.participantDidLeave,$.attachVideochatListeners,$.resetVideochatStore])),P=Ii("activeCall"),N=Ii("incomingCall");Ii("attachedVideochatListeners");const Y=M.useCallback(async $=>{if(A){const{currentUserID:gq,initiatorID:Rq,opponentsIDs:Jq}=A,U=[...Jq,Rq].filter(K=>K!==gq);L(),j(U);try{await H(A),A.accept($),o()}catch(K){qt.error("acceptCall",K),A.stop($)}finally{o()}}},[A]),_=M.useCallback($=>{A?.reject($),o()},[A]),R=M.useCallback($=>{G(),t?.stop($)},[t]),H=M.useCallback(async $=>{const gq=a===gr.DISPLAY?await $.getDisplayMedia(i):await $.getUserMedia(V);$.callType===Z.CallType.AUDIO&&gq.getVideoTracks().forEach(Rq=>Rq.enabled=!1),p(gq),r($)},[a,V,i]),aq=($,gq)=>{$.initiatorID!==$.currentUserID&&(n($),T(re.ON_CALL,{userInfo:gq}),qt.log("onCall",{session:$,ext:gq}))},Aq=($,gq,Rq)=>{x(gq),T(re.ON_ACCEPT,{userID:gq,userInfo:Rq}),qt.log("onAccept",{session:$,userID:gq,ext:Rq})},qq=($,gq,Rq)=>{B(gq),T(re.ON_REJECT,{userID:gq,userInfo:Rq}),qt.log("onReject",{session:$,userID:gq,ext:Rq})},W=($,gq,Rq)=>{P.current?.ID===$.ID&&(B(gq),y(gq),T(re.ON_STOP,{userID:gq,userInfo:Rq})),N.current?.ID===$.ID&&(T(re.ON_STOP_CALLING,{userID:gq,userInfo:Rq}),o()),qt.log("onStop",{session:$,userID:gq,ext:Rq})},nq=($,gq)=>{B(gq),T(re.ON_NOT_ANSWER,{userID:gq}),qt.log("onNotAnswer",{session:$,userID:gq})},cq=($,gq,Rq)=>{v(gq,Rq),qt.log("onRemoteStream",{session:$,userID:gq,stream:Rq})},Mq=($,gq,Rq)=>{T(re.ON_CONNECTION_STATE,{userID:gq,connectionState:Rq}),qt.log("onConnectionState",{session:$,userID:gq,connectionState:Rq})},tq=$=>{w($),qt.log("onDevicesChange",{event:$})},Tq=M.useMemo(()=>{const $=g?.getAudioTracks();return!$||$.length===0||$.every(gq=>!gq.enabled)},[g,q]),Yq=M.useMemo(()=>{const $=g?.getVideoTracks();return!$||$.length===0||$.every(gq=>!gq.enabled)},[g,q]),Lq=M.useCallback(async $=>{if(t){switch($){case Xt.MUTE_AUDIO:t.mute(Z.MediaType.AUDIO);break;case Xt.MUTE_VIDEO:t.mute(Z.MediaType.VIDEO);break;case Xt.UNMUTE_AUDIO:t.unmute(Z.MediaType.AUDIO);break;case Xt.UNMUTE_VIDEO:t.unmute(Z.MediaType.VIDEO)}e(gq=>gq+1)}},[t]);return M.useEffect(()=>{t&&Q.size===0&&R()},[t,Q]),M.useEffect(()=>{F({[Z.CallEvent.CALL]:aq,[Z.CallEvent.ACCEPT]:Aq,[Z.CallEvent.REJECT]:qq,[Z.CallEvent.STOP]:W,[Z.CallEvent.NOT_ANSWER]:nq,[Z.CallEvent.REMOTE_STREAM]:cq,[Z.CallEvent.CONNECTION_STATE]:Mq,[Z.CallEvent.DEVICES]:tq})},[]),{startCall:async($=[],gq=Z.CallType.VIDEO,Rq)=>{const Jq=Array.isArray($)?$:[$],U=Z.videochat.createNewSession(Jq,gq);try{L(),j(Jq),await H(U),U.call(Rq)}catch(K){qt.error("startCall",K),j([])}},acceptCall:Y,rejectCall:_,stopCall:R,activeCall:t,incomingCall:A,deviceChangeEvent:m,incomingCallCallData:h,incomingCallStopData:u,activeCallAcceptData:E,activeCallRejectData:C,activeCallStopData:S,activeCallNotAnswerData:k,activeCallConnectionStateData:D,resetSessionData:L,participantsIds:Array.from(Q),activeMedia:a,setActiveMedia:async $=>{$&&s($)},localStream:g,remoteStreams:f,getUserMedia:async $=>{try{const gq=await t?.getUserMedia($??V);return s(gr.USER),gq}catch(gq){qt.error("getUserMedia",{error:gq})}},getDisplayMedia:async $=>{try{const gq=await t?.getDisplayMedia($??i);return s(gr.DISPLAY),gq}catch(gq){qt.error("getDisplayMedia",{error:gq})}},getMediaDevices:async $=>{try{return await Z.videochat.getMediaDevices($)}catch(gq){qt.error("getMediaDevices",{error:gq})}},switchMediaTracks:async $=>{try{return await t?.switchMediaTracks($)}catch(gq){qt.error("switchMediaTracks",{error:gq})}},userMediaParams:V,setUserMediaParams:async $=>{$&&l($)},displayMediaParams:i,setDisplayMediaParams:async $=>{$&&d($)},isLocalAudioMuted:Tq,muteAudio:()=>{Lq(Xt.MUTE_AUDIO)},unmuteAudio:()=>{Lq(Xt.UNMUTE_AUDIO)},isLocalVideoMuted:Yq,muteVideo:()=>{Lq(Xt.MUTE_VIDEO)},unmuteVideo:()=>{Lq(Xt.UNMUTE_VIDEO)}}},Wq=()=>{const q=fb(),e=Sb(),t=$u(),r=xb(),[A,n,o,a,s,V]=Lo(Tt(g=>[g.currentSession,g.currentUserId,g.currentUser,g.setCurrentSession,g.updateCurrentSession,g.resetCurrentSession])),l=async g=>{const p=await Z.createSession(g);return d(p),p},i=async(g,p=!0)=>{let f=null;const{email:v,login:y,password:m}=g;try{v?f=await l({email:v,password:m}):y&&(f=await l({login:y,password:m}))}catch(w){if(w?.code!==404||!p||!m||!v&&!y)throw w;{const h=(await Z.users.signup(g)).user;h.email?f=await l({email:h.email,password:m}):h.login&&(f=await l({login:h.login,password:m}))}}return f},d=g=>{Z.setSession(g),a(g)};return{currentSession:A,currentUserId:n,currentUser:o,init:(g,p)=>{Z.init(g,p)},upsertConfig:(g={})=>Z.service?.sdkInstance?.config?.set?.(g),createSession:l,createEmptySession:()=>l(),createGuestSession:g=>l({guest:"1",full_name:g}),createUserSession:i,setSession:d,getSession:async()=>{const g=await Z.getSession();return a(g),g},destroySession:async()=>{await Z.destroySession(),V()},loginUser:async g=>(await i(g,!1))?.user??null,signupUser:async g=>(await i(g,!0))?.user??null,updateUser:async g=>{const{user:p}=await Z.users.update(g);return s({user:p,user_id:p.id}),p},deleteUser:async()=>{await Z.users.delete(),s({user:null,user_id:void 0})},...q,...e,...t,...r}},qd=(q=[])=>q.slice().filter(Boolean).sort((e,t)=>e.id-t.id).reduce((e,{id:t})=>`${e}:${t}`,Ko),Ib=q=>new Promise(e=>setTimeout(e,q)),kb=q=>q.replace(/@supports\s*\(\(*\s*-webkit-hyphens\s*:\s*none\s*\)*\s*and\s*\(not\s*\(margin-trim\s*:\s*inline\)\)\s*\)\s*or\s*\(\(*\s*-moz-orient\s*:\s*inline\s*\)*\s*and\s*\(not\s*\(color\s*:\s*rgb\(from\s+red\s+r\s+g\s+b\)\)\)\s*\)\s*\{\s*([\s\S]*?)\s*\}/gm,(e,t)=>t.trim()),yt=typeof window=="object"&&typeof document=="object";var bn=(q=>(q.WRAPPER="data-connectycube-chat-widget-wrapper",q.FOCUSED="data-connectycube-chat-widget-focused",q))(bn||{});const ed="15px",td="400",Ko="external_id",rd="::current_user";var fr=(q=>(q.GET_SUMMARY="ai:get-summary",q.CHANGE_TONE="ai:change-tone",q.DEFAULT="ai:default",q))(fr||{}),nA=(q=>(q.LAST_7_DAYS="last-7-days",q.LAST_DAY="last-day",q.UNREADS="unreads",q))(nA||{}),Jo=(q=>(q.POSITIVE="positive",q.NEGATIVE="negative",q.CRINGE="cringe",q))(Jo||{}),Ni=(q=>(q.AI_TEXT_SUMMARY="ai-text-summary",q))(Ni||{});const Zo="@connectycube/chat-widget:draftMessages",Tb=()=>{try{const q=yt?localStorage?.getItem(Zo):null;return q?JSON.parse(q):{}}catch(q){return console.error("Could not load state from localStorage",q),{}}},Wo=q=>{if(yt)try{const e=JSON.stringify(q);localStorage?.setItem(Zo,e)}catch(e){console.error("Could not save state to localStorage",e)}},Bb=()=>{if(yt)try{localStorage?.removeItem(Zo)}catch(q){console.error("Could not clear state from localStorage",q)}},Ui=Tb(),Ho=je(q=>({draftMessages:Ui,setDraftMessages:e=>{q({draftMessages:e}),Wo(e)},upsertDraftMessage:e=>{q(t=>{const r={...t.draftMessages,...e};return Wo(r),{draftMessages:r}})},deleteDraftMessage:e=>{q(t=>{const r={...t.draftMessages};return delete r[e],Wo(r),{draftMessages:r}})},resetDraftMessages:()=>{q({draftMessages:Ui}),Wo(Ui)}})),Db=()=>{Bb(),Ho.setState({draftMessages:{}})},Ad=async({hardwareOnly:q=!0,debug:e=!1}={})=>{const{cookieEnabled:t,deviceMemory:r,doNotTrack:A,hardwareConcurrency:n,language:o,languages:a,maxTouchPoints:s,platform:V,userAgent:l,vendor:i}=window.navigator,d=/Mobi|Android|iPhone|iPad|iPod/i.test(navigator.userAgent),{width:g,height:p,colorDepth:f,pixelDepth:v}=d?window.screen:{},y=new Date().getTimezoneOffset(),m=Intl.DateTimeFormat().resolvedOptions().timeZone,w="ontouchstart"in window,h=window.devicePixelRatio,u=Nb(e),E=await Qb(e),C=Rb(),S=Ub(e),k=Ob(),D=q?{audioInfo:C,audio:E,canvas:u,colorDepth:f,deviceMemory:r,devicePixelRatio:h,hardwareConcurrency:n,height:p,maxTouchPoints:s,pixelDepth:v,platform:V,touchSupport:w,webgl:S,webglInfo:k,width:g}:{audioInfo:C,audio:E,canvas:u,colorDepth:f,cookieEnabled:t,deviceMemory:r,devicePixelRatio:h,doNotTrack:A,hardwareConcurrency:n,height:p,language:o,languages:a,maxTouchPoints:s,pixelDepth:v,platform:V,timezone:m,timezoneOffset:y,touchSupport:w,userAgent:l,vendor:i,webgl:S,webglInfo:k,width:g};e&&console.log("Fingerprint data:",JSON.stringify(D,null,2));const L=JSON.stringify(D,null,2);return _o(L)},Nb=q=>{try{const e=document.createElement("canvas"),t=e.getContext("2d"),r="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`~1!2@3#4$5%6^7&8*9(0)-_=+[{]}|;:',<.>/?";t.textBaseline="top",t.font="14px 'Arial'",t.textBaseline="alphabetic",t.fillStyle="#f60",t.fillRect(125,1,62,20),t.fillStyle="#069",t.fillText(r,2,15),t.fillStyle="rgba(102, 204, 0, 0.7)",t.fillText(r,4,17);const A=e.toDataURL();return q?document.body.appendChild(e):t.clearRect(0,0,e.width,e.height),_o(A)}catch{return null}},Ub=q=>{try{const e=document.createElement("canvas"),t=e.getContext("webgl");e.width=256,e.height=128;const r="attribute vec2 attrVertex;varying vec2 varyinTexCoordinate;uniform vec2 uniformOffset;void main(){varyinTexCoordinate=attrVertex+uniformOffset;gl_Position=vec4(attrVertex,0,1);}",A="precision mediump float;varying vec2 varyinTexCoordinate;void main() {gl_FragColor=vec4(varyinTexCoordinate,0,1);}",n=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,n);const o=new Float32Array([-.2,-.9,0,.4,-.26,0,0,.7321,0]);t.bufferData(t.ARRAY_BUFFER,o,t.STATIC_DRAW),n.itemSize=3,n.numItems=3;const a=t.createProgram(),s=t.createShader(t.VERTEX_SHADER);t.shaderSource(s,r),t.compileShader(s);const V=t.createShader(t.FRAGMENT_SHADER);t.shaderSource(V,A),t.compileShader(V),t.attachShader(a,s),t.attachShader(a,V),t.linkProgram(a),t.useProgram(a),a.vertexPosAttrib=t.getAttribLocation(a,"attrVertex"),a.offsetUniform=t.getUniformLocation(a,"uniformOffset"),t.enableVertexAttribArray(a.vertexPosArray),t.vertexAttribPointer(a.vertexPosAttrib,n.itemSize,t.FLOAT,!1,0,0),t.uniform2f(a.offsetUniform,1,1),t.drawArrays(t.TRIANGLE_STRIP,0,n.numItems);const l=new Uint8Array(e.width*e.height*4);t.readPixels(0,0,e.width,e.height,t.RGBA,t.UNSIGNED_BYTE,l);const i=JSON.stringify(l).replace(/,?"[0-9]+":/g,"");return q?document.body.appendChild(e):t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT|t.STENCIL_BUFFER_BIT),_o(i)}catch{return null}},Ob=()=>{try{const q=document.createElement("canvas").getContext("webgl");return{VERSION:String(q.getParameter(q.VERSION)),SHADING_LANGUAGE_VERSION:String(q.getParameter(q.SHADING_LANGUAGE_VERSION)),VENDOR:String(q.getParameter(q.VENDOR)),SUPPORTED_EXTENSIONS:String(q.getSupportedExtensions())}}catch{return null}},Rb=()=>{try{const q=window.OfflineAudioContext||window.webkitOfflineAudioContext,e=44100,t=44100,r=new q(1,e,t);return{sampleRate:r.sampleRate,channelCount:r.destination.maxChannelCount,outputLatency:r.outputLatency,state:r.state,baseLatency:r.baseLatency}}catch{return null}},Qb=async q=>{try{const e=window.OfflineAudioContext||window.webkitOfflineAudioContext,t=44100,r=44100,A=new e(1,r,t),n=A.createOscillator();n.type="sine",n.frequency.value=440,n.connect(A.destination),n.start();const o=await A.startRendering(),s=o.getChannelData(0).reduce((V,l)=>V+Math.abs(l),0).toString();if(q){const V=jb(o),l=URL.createObjectURL(V),i=document.createElement("audio");i.controls=!0,i.src=l,document.body.appendChild(i)}return _o(s)}catch{return null}},jb=q=>{const e=q.numberOfChannels,t=q.length*e*2+44,r=new ArrayBuffer(t),A=new DataView(r);Xo(A,0,"RIFF"),A.setUint32(4,t-8,!0),Xo(A,8,"WAVE"),Xo(A,12,"fmt "),A.setUint32(16,16,!0),A.setUint16(20,1,!0),A.setUint16(22,e,!0),A.setUint32(24,q.sampleRate,!0),A.setUint32(28,q.sampleRate*e*2,!0),A.setUint16(32,e*2,!0),A.setUint16(34,16,!0),Xo(A,36,"data"),A.setUint32(40,t-44,!0);let n=44;for(let o=0;o<q.length;o++)for(let a=0;a<e;a++){const s=q.getChannelData(a)[o],V=Math.max(-1,Math.min(1,s))*32767;A.setInt16(n,V,!0),n+=2}return new Blob([A],{type:"audio/wav"})},Xo=(q,e,t)=>{for(let r=0;r<t.length;r++)q.setUint8(e+r,t.charCodeAt(r))},_o=q=>{const e=q.length&3,t=q.length-e,r=3432918353,A=461845907;let n,o,a;for(let V=0;V<t;V++)a=q.charCodeAt(V)&255|(q.charCodeAt(++V)&255)<<8|(q.charCodeAt(++V)&255)<<16|(q.charCodeAt(++V)&255)<<24,++V,a=(a&65535)*r+(((a>>>16)*r&65535)<<16)&4294967295,a=a<<15|a>>>17,a=(a&65535)*A+(((a>>>16)*A&65535)<<16)&4294967295,n^=a,n=n<<13|n>>>19,o=(n&65535)*5+(((n>>>16)*5&65535)<<16)&4294967295,n=(o&65535)+27492+(((o>>>16)+58964&65535)<<16);const s=t-1;switch(a=0,e){case 3:{a^=(q.charCodeAt(s+2)&255)<<16;break}case 2:{a^=(q.charCodeAt(s+1)&255)<<8;break}case 1:{a^=q.charCodeAt(s)&255;break}}return a=(a&65535)*r+(((a>>>16)*r&65535)<<16)&4294967295,a=a<<15|a>>>17,a=(a&65535)*A+(((a>>>16)*A&65535)<<16)&4294967295,n^=a,n^=q.length,n^=n>>>16,n=(n&65535)*2246822507+(((n>>>16)*2246822507&65535)<<16)&4294967295,n^=n>>>13,n=(n&65535)*3266489909+(((n>>>16)*3266489909&65535)<<16)&4294967295,n^=n>>>16,n>>>0};typeof window<"u"&&(window.getBrowserFingerprint=Ad);var nd=(q=>(q.UPDATE_USER="user/UPDATE",q))(nd||{}),Oe=(q=>(q.AVAILABLE="Available",q.BUSY="Busy",q.AWAY="Away",q))(Oe||{});const Oi="@connectycube/chat-widget:session",Ri="@connectycube/chat-widget:guest",Qi="@connectycube/chat-widget:rememberMe",od="widget_",Pb=(q,e)=>{Z.init(q,e)},Gb=async(q,e,t,r)=>{const A=!pd();if(A){const n=Nr();n&&(Z.setSession(n),await cd(n,q,e,t,r))}return A},ad=async()=>{const e=Nr()?.user?.login,t=typeof e=="string"&&(await fd(e)).substring(0,32);return e&&t?await $o(e,t):null},$o=async(q,e)=>{const t=await Z.createSession({login:q,password:e});return qa(t,Sn()),t},sd=async(q,e,t,r)=>{const A=zb(q),n=(await fd(A)).substring(0,32),o=q;let a;try{a=await $o(A,n),await cd(a,e,o,t,r)}catch(s){if(s?.code===404)a=await ld(A,n,e,o,t,r);else throw s}return a},id=async()=>{try{await Z.destroySession(),Pi()}catch(q){console.error(q)}},Vd=()=>{const q=Z.service?.getSession();return q||null},ld=async(q,e,t,r,A,n)=>{const o={login:q,password:e,full_name:t||q};return r&&(o.external_id=r+""),A&&(o.avatar=A),n&&(o.website=n),await Z.users.signup(o),$o(q,e)},Lb=(q={})=>Z.service?.sdkInstance?.config?.set?.(q),ji=async(q,e)=>{const t=e?.user_id??gd(),r=e?.token??Fb(),A=t&&r?{userId:t,password:r}:null;return A?q(A):Promise.reject(new Error("[useConnectyCube.connect] Missing userId and password"))},cd=async(q,e,t,r,A)=>{const n={};if(e&&q?.user?.full_name!==e&&(n.full_name=e),t&&q?.user?.external_id!==t+""&&(n.external_id=t+""),r&&q?.user?.avatar!==r&&(n.avatar=r),A&&q?.user?.website!==A&&(n.website=A),Object.keys(n).length>0){const{user:o}=await Z.users.update(n);o&&(q.user=o,qa(q,Sn()))}return q},qa=(q,e=!1)=>{yt&&!e&&localStorage.setItem(Oi,JSON.stringify(q))},Nr=()=>{const q=yt&&localStorage.getItem(Oi);return q?JSON.parse(q):Sn()?Vd():null},Pi=()=>{yt&&(localStorage.removeItem(Oi),localStorage.removeItem(Zo))},Ur=()=>{const q=Nr();return q?q.user:null},ud=q=>{if(typeof q?.custom_data=="string")try{return JSON.parse(q.custom_data)}catch(e){return console.error("Error parsing custom data:",e),null}return null},dd=()=>{const q=Ur();return ud(q)},Cn=q=>ud(q||Ur())?.userStatus??"Available",ea=async(q,e=!1)=>{const t=dd(),r=Object.assign({},t,q),A=JSON.stringify(r),n=Nr();let o=Ur();return o&&e?o={...o,custom_data:A}:o=(await Z.users.update({custom_data:A})).user,n&&qa({...n,user:o},Sn()),o},Fb=()=>{const q=Nr();return q?q.token:null},gd=()=>{const q=Nr();return q?q.user_id:null},pd=()=>{const e=(Sn()?null:Nr())?.updated_at??new Date(0).toISOString(),t=new Date(e).getTime(),A=Date.now()-t,n=6e4*119;return A>n},Yb=q=>{const e=Nr();return e?!!(q&&e.user?.external_id!==q):!1},fd=async q=>{const e=new TextEncoder().encode(q);let t;try{t=await crypto.subtle.digest("SHA-256",e)}catch{t=new Uint8Array(e.length).map(()=>Math.random()*256|0).buffer}return Array.from(new Uint8Array(t)).map(r=>r.toString(16).padStart(2,"0")).join("")},Je=(q,e=!0)=>q?q.full_name||q.login||`Unknown:${q.id}`:e?"Unknown":"",Gi=q=>q?/^(https?:\/\/|\/|\.\/|\.\.\/)/.test(q)?q:Z.storage.privateUrl(q):"",zb=q=>q?`${od}${q}`:`${od}${Math.random().toString(36).substring(2,14)}`,Kb=async(q,e)=>Z.data.create("UserReports",{reportedUserId:q,reason:e}),Jb=async q=>{const e=await Ad(),t=gd(),r=btoa(`${t}:${e}`),{endpoint:A,auth:n,p256dh:o}=q??{};if(A&&n&&o&&r)return Z.pushnotifications.subscriptions.create({notification_channel:Z.NotificationChannel.WEB,push_token:{environment:"production",web_endpoint:A,web_auth:n,web_p256dh:o},device:{platform:Z.DevicePlatform.WEB,udid:btoa(`${t}:${e}`)}})},Zb=async()=>{const e=(await Z.pushnotifications.subscriptions.list()).map(({subscription:t})=>Z.pushnotifications.subscriptions.delete(t.id));return Promise.all(e)},Wb=!!Z.videochat,Hb=(q=!1)=>{yt&&(q?localStorage.setItem(Qi,"1"):localStorage.removeItem(Qi))},Xb=(q=!1)=>{yt&&(q?localStorage.setItem(Ri,"1"):localStorage.removeItem(Ri))},_b=()=>yt?!!localStorage.getItem(Qi):!1,$b=()=>yt?!!localStorage.getItem(Ri):!1,Sn=()=>$b()&&!_b(),qC={CHAT_WIDGET_CONNECTYCUBE_TERMS_AND_CONDITIONS:"https://connectycube.com/terms-of-use/"},{CHAT_WIDGET_CONNECTYCUBE_TERMS_AND_CONDITIONS:eC}=qC||"production",le={userAuthorized:!1,attachmentsAccept:"*/*",attachmentsAcceptList:["*/*"],enableUserLogin:!1,enableCalls:!1,enableUserStatuses:!1,enableLastSeen:!1,enableContentReporting:!1,enableBlockList:!1,enableUrlPreview:!1,limitUrlsPreviews:1,termsAndConditions:eC},me=je((q,e)=>({...le,setUserAuthorized:t=>q({userAuthorized:t}),setAttachmentsAccept:t=>q({attachmentsAccept:t,attachmentsAcceptList:md(t)}),setEnableUserLogin:t=>q({enableUserLogin:t}),setEnableCalls:t=>q({enableCalls:t&&Wb}),setEnableUserStatuses:t=>q({enableUserStatuses:t}),setEnableLastSeen:t=>q({enableLastSeen:t}),setEnableContentReporting:t=>q({enableContentReporting:t}),setEnableBlockList:t=>q({enableBlockList:t}),setEnableUrlPreview:t=>q({enableUrlPreview:t}),setLimitUrlsPreviews:t=>q({limitUrlsPreviews:t>5?5:t}),setTermsAndConditions:t=>q({termsAndConditions:t}),resetUserAuthorized:()=>q({userAuthorized:le.userAuthorized}),resetAttachmentsAccept:()=>q({attachmentsAccept:le.attachmentsAccept,attachmentsAcceptList:le.attachmentsAcceptList}),resetEnableUserLogin:()=>q({enableUserLogin:le.enableUserLogin}),resetEnableCalls:()=>q({enableCalls:le.enableCalls}),resetEnableUserStatuses:()=>q({enableUserStatuses:le.enableUserStatuses}),resetEnableLastSeen:()=>q({enableLastSeen:le.enableLastSeen}),resetEnableContentReporting:()=>q({enableContentReporting:le.enableContentReporting}),resetEnableBlockList:()=>q({enableBlockList:le.enableBlockList}),resetEnableUrlPreview:()=>q({enableUrlPreview:le.enableUrlPreview}),resetLimitUrlsPreviews:()=>q({limitUrlsPreviews:le.limitUrlsPreviews}),resetTermsAndConditions:()=>q({termsAndConditions:le.termsAndConditions}),isSupportedFile:t=>rC(t,e().attachmentsAcceptList)})),hd=q=>{q.attachmentsAccept&&(q.attachmentsAcceptList=md(q.attachmentsAccept)),q.limitUrlsPreviews&&(q.limitUrlsPreviews=q.limitUrlsPreviews>5?5:q.limitUrlsPreviews),me.setState(q)},tC=()=>{me.setState(le)},md=q=>typeof q=="string"?q.split(/\s*,\s*|\s+/).map(e=>e.toLowerCase().trim()):null,rC=(q,e)=>{const{type:t,size:r}=q;if(e===null||typeof t!="string"||typeof r!="number"||r<=0||t.length===0)return!1;const A=t.toLowerCase(),[n,o]=A.split("/");return e.some(a=>a.startsWith("*")||a===A||a.endsWith("/*")&&a.startsWith(n)||a.startsWith(".")&&a.slice(1)===o)},AC={CHAT_WIDGET_CONNECTYCUBE_WEB_PUSH_SERVICE_WORKER_PATH:"/connectycube-chat-widget-sw.js",CHAT_WIDGET_CONNECTYCUBE_WEB_PUSH_VAPID_PUBLIC_KEY:"BGzym4pVV8NX8I186AY7nFufNJabnGndKRB8rm5-8S5UH8ME_WNGOprIt5vvFCocwYvLybC8cg2KhuQfploiP2Q"},{CHAT_WIDGET_CONNECTYCUBE_WEB_PUSH_VAPID_PUBLIC_KEY:nC,CHAT_WIDGET_CONNECTYCUBE_WEB_PUSH_SERVICE_WORKER_PATH:oC}=AC||"production",et={muted:!1,showNotifications:!1,playSound:!0,webPushNotifications:!1,webPushVapidPublicKey:nC,serviceWorkerPath:oC},oA=je(q=>({...et,setMuted:e=>q({muted:e}),resetMuted:()=>q({muted:et.muted}),setShowNotifications:e=>q({showNotifications:e}),resetShowNotifications:()=>q({showNotifications:et.showNotifications}),setPlaySound:e=>q({playSound:e}),resetPlaySound:()=>q({playSound:et.playSound}),setWebPushNotifications:e=>q({webPushNotifications:e}),resetWebPushNotifications:()=>q({webPushNotifications:et.webPushNotifications}),setWebPushVapidPublicKey:e=>q({webPushVapidPublicKey:e}),resetWebPushVapidPublicKey:()=>q({webPushVapidPublicKey:et.webPushVapidPublicKey}),setServiceWorkerPath:e=>q({serviceWorkerPath:e}),resetServiceWorkerPath:()=>q({serviceWorkerPath:et.serviceWorkerPath})})),aC=q=>{oA.setState(q)},sC=()=>{oA.setState(et)},ta={quickActions:{title:"",description:"",actions:[]}},Li=je(q=>({...ta,setQuickActions:e=>q({quickActions:e}),resetQuickActions:()=>q({quickActions:ta.quickActions})})),iC=q=>{Li.setState(q)},VC=()=>{Li.setState(ta)},hr={requestOnlineUsersInterval:300,enableOnlineUsersBadge:!1,onlineUsersCount:0},xn=je(q=>({requestOnlineUsersInterval:hr.requestOnlineUsersInterval,enableOnlineUsersBadge:hr.enableOnlineUsersBadge,onlineUsersCount:hr.onlineUsersCount,setRequestOnlineUsersInterval:e=>{q({requestOnlineUsersInterval:typeof e=="number"?e>30?e:30:hr.requestOnlineUsersInterval})},setEnableOnlineUsersBadge:e=>q({enableOnlineUsersBadge:e}),setOnlineUsersCount:e=>q({onlineUsersCount:e}),resetRequestOnlineUsersInterval:()=>q({requestOnlineUsersInterval:hr.requestOnlineUsersInterval}),resetEnableOnlineUsersBadge:()=>q({enableOnlineUsersBadge:hr.enableOnlineUsersBadge}),resetOnlineUsersCount:()=>q({onlineUsersCount:hr.onlineUsersCount})})),lC=()=>{xn.setState({onlineUsersCount:0})},yd={fetchedCount:0,queue:[],urlPreviews:new Map,isProcessing:!1},Fi=je((q,e)=>({...yd,addUrls:async t=>{const r=e(),A=t.filter(a=>!r.urlPreviews.has(a)&&!r.queue.includes(a));if(r.isProcessing||A.length===0)return;q({queue:[...r.queue,...A],isProcessing:!0});let n=r.fetchedCount;const o=new Map(r.urlPreviews);for(const a of A)try{const s=await Z.linkpreview.get(a);o.set(a,s),n++}catch(s){console.warn(`Failed to fetch link preview for ${a}`,s)}q({urlPreviews:o,fetchedCount:n,isProcessing:!1,queue:[]})},matchUrlsFromMessage:(t="")=>{const r=me.getState().limitUrlsPreviews;return(t.match(/https?:\/\/[^\s]+/g)||[]).slice(0,r)}})),cC=()=>{Fi.setState(yd)},In=je(q=>({visible:!1,userId:void 0,showProfile:e=>q({visible:!0,userId:e}),hideProfile:()=>q({visible:!1,userId:void 0})})),wd=()=>{In.setState({visible:!1,userId:void 0})},ra=je(q=>({unreadCount:0,setUnreadCount:e=>q({unreadCount:e}),resetUnreadCount:()=>q({unreadCount:0})})),uC=()=>{ra.setState({unreadCount:0})},dC=async()=>"Notification"in window?Notification.permission==="granted"?!0:await Notification.requestPermission()==="granted"?(console.log("Notifications are enabled"),!0):(console.warn("Notifications are disabled"),!1):(console.error("Notifications are not supported in this browser"),!1),gC=async q=>{let e=!1;try{q&&"serviceWorker"in navigator&&(e=!!await navigator.serviceWorker.register(q,{type:"module"}))}catch(t){throw new Error(`Registration failed: ${t}`)}return e},vd=async q=>{try{if(q&&"serviceWorker"in navigator)return navigator.serviceWorker.getRegistration(q)}catch(e){throw new Error(`Get registration failed: ${e}`)}},pC=q=>{const{endpoint:e="",keys:t={}}=q?.toJSON()??{},{p256dh:r="",auth:A=""}=t;return{endpoint:e,p256dh:r,auth:A}},Ed=async(q,e)=>{const t=await vd(q);let r=null;return t?.pushManager&&(r=await t.pushManager.getSubscription(),!r&&e&&(r=await t?.pushManager.subscribe({applicationServerKey:e,userVisibleOnly:!0})??null)),r},fC=async q=>(await Ed(q))?.unsubscribe()??!1,Md=()=>{const q=dd(),{showNotifications:e,playSound:t,webPushNotifications:r}=oA.getState();return{userStatus:q?.userStatus??Oe.AVAILABLE,isNotifications:q?.notifications??e,isNotificationSound:q?.notificationSound??t,isPushNotifications:q?.pushNotifications??r}},hC=Md(),IA=je(q=>({...hC,setUserStatus:async(e,t)=>{await ea({userStatus:e},t),q({userStatus:e})},setIsNotifications:async(e,t)=>{await ea({notifications:e},t),q({isNotifications:e})},setIsNotificationSound:async(e,t)=>{await ea({notificationSound:e},t),q({isNotificationSound:e})},setIsPushNotifications:async(e,t)=>{const r=await bd(e);await ea({pushNotifications:r},t),q({isPushNotifications:r})}})),bd=async q=>{const{serviceWorkerPath:e,webPushVapidPublicKey:t}=oA.getState();let r=!1;try{if(q){const A=await Ed(e,t),n=pC(A);await Jb(n),r=!0}else await fC(e),await Zb()}catch(A){console.error("Error managing push notifications subscription:",A)}return r},Cd=async()=>{const q=Md(),e=await bd(q.isPushNotifications);IA.setState({...q,isPushNotifications:e})},mC={CHAT_WIDGET_CONNECTYCUBE_GOOGLE_GENERATIVE_AI_API_KEY:"AIzaSyBVw8bUP84V-wIz6j3wMmlpGs-wHBRQv1M"},{CHAT_WIDGET_CONNECTYCUBE_GOOGLE_GENERATIVE_AI_API_KEY:yC}=mC||"production",kn={changeMessageTone:!1,textSummarization:!1,apiKey:yC},Sd=je(q=>({...kn,setChangeMessageTone:e=>q({changeMessageTone:!!e}),setTextSummarization:e=>q({textSummarization:!!e}),setApiKey:e=>q({apiKey:e}),resetChangeMessageTone:()=>q({changeMessageTone:kn.changeMessageTone}),resetTextSummarization:()=>q({textSummarization:kn.textSummarization}),resetApiKey:()=>q({apiKey:kn.apiKey})})),kA=je(q=>({shadowRoot:yt?document:{},shadowPortal:yt?document.body:null,setShadowRoot:e=>q({shadowRoot:e??document,shadowPortal:e??document.body})})),wC={chat:{streamManagement:{enable:!0}}},vC=({creds:q,config:e={},user:t={},enableUserLogin:r})=>{const A=M.useRef(!1),{id:n,name:o,avatar:a,userProfileLink:s}=t,V=Object.assign(wC,e),l=Be(d=>d.singleView),i=me(d=>d.setUserAuthorized);Xb(l),A.current||(A.current=!0,Pb(q,V),hd({userAuthorized:!pd()}),!r&&Yb(n)?(console.info(`[useAppAuthorization] user changed to id: ${n}, name: ${o}`),Pi(),i(!1)):Gb(o,n,a,s))},xd=q=>Symbol.iterator in q,Id=q=>"entries"in q,kd=(q,e)=>{const t=q instanceof Map?q:new Map(q.entries()),r=e instanceof Map?e:new Map(e.entries());if(t.size!==r.size)return!1;for(const[A,n]of t)if(!r.has(A)||!Object.is(n,r.get(A)))return!1;return!0},EC=(q,e)=>{const t=q[Symbol.iterator](),r=e[Symbol.iterator]();let A=t.next(),n=r.next();for(;!A.done&&!n.done;){if(!Object.is(A.value,n.value))return!1;A=t.next(),n=r.next()}return!!A.done&&!!n.done};function MC(q,e){return Object.is(q,e)?!0:typeof q!="object"||q===null||typeof e!="object"||e===null||Object.getPrototypeOf(q)!==Object.getPrototypeOf(e)?!1:xd(q)&&xd(e)?Id(q)&&Id(e)?kd(q,e):EC(q,e):kd({entries:()=>Object.entries(q)},{entries:()=>Object.entries(e)})}function Fq(q){const e=M.useRef(void 0);return t=>{const r=q(t);return MC(e.current,r)?e.current:e.current=r}}const bC=({open:q=ve.opened,embedView:e=!1,splitView:t=ve.splitView,singleView:r=ve.singleView,showChatStatus:A=ve.showChatStatus,showOnlineUsersTab:n=ve.showOnlineUsersTab,hideNewChatButton:o=ve.hideNewChatButton,hideNewUserChatOption:a=ve.hideNewUserChatOption,hideNewGroupChatOption:s=ve.hideNewGroupChatOption,imgLogoSource:V=ve.imgLogoSource,muted:l=et.muted,showNotifications:i=et.showNotifications,playSound:d=et.playSound,webPushNotifications:g=et.webPushNotifications,serviceWorkerPath:p=et.serviceWorkerPath,webPushVapidPublicKey:f=et.webPushVapidPublicKey,attachmentsAccept:v=le.attachmentsAccept,enableUserLogin:y=le.enableUserLogin,enableCalls:m=le.enableCalls,enableUserStatuses:w=le.enableUserStatuses,enableLastSeen:h=le.enableLastSeen,enableContentReporting:u=le.enableContentReporting,enableBlockList:E=le.enableBlockList,enableUrlPreview:C=le.enableUrlPreview,limitUrlsPreviews:S=le.limitUrlsPreviews,termsAndConditions:k=le.termsAndConditions,quickActions:D=ta.quickActions,defaultChat:L=SA.defaultChat,singleViewChat:Q=SA.singleViewChat,enableOnlineUsersBadge:j=hr.enableOnlineUsersBadge,getOnlineUsersInterval:T=hr.requestOnlineUsersInterval,ai:x=kn,onUnreadCountChange:B,onOnlineUsersCountChange:F,onOpenChange:G})=>{const[P,N,Y]=Be(Fq(nq=>[nq.opened,nq.setOpened,nq.toggleOpened])),_=ra(nq=>nq.unreadCount),[R,H,aq]=xn(Fq(nq=>[nq.onlineUsersCount,nq.setRequestOnlineUsersInterval,nq.setEnableOnlineUsersBadge])),[Aq,qq,W]=Sd(Fq(nq=>[nq.setChangeMessageTone,nq.setTextSummarization,nq.setApiKey]));M.useEffect(()=>{qb({opened:e||q,splitView:t&&!r,singleView:r,showChatStatus:A,showOnlineUsersTab:n&&!r,hideNewChatButton:o,hideNewUserChatOption:a,hideNewGroupChatOption:s,imgLogoSource:V})},[q,e,t,r,A,n,o,a,s,V]),M.useEffect(()=>{aC({muted:l,showNotifications:i,playSound:d,webPushNotifications:g,webPushVapidPublicKey:f,serviceWorkerPath:p})},[l,i,d,g,f,p]),M.useEffect(()=>{hd({attachmentsAccept:v,enableUserLogin:y,enableCalls:m,enableUserStatuses:w,enableLastSeen:h,enableContentReporting:u,enableBlockList:E,enableUrlPreview:C,limitUrlsPreviews:S,termsAndConditions:k})},[v,y,m,w,h,u,E,C,S,k]),M.useEffect(()=>{iC({quickActions:D})},[D]),M.useEffect(()=>{_M({defaultChat:L,singleViewChat:Q})},[L,Q]),M.useEffect(()=>{H(T)},[T,H]),M.useEffect(()=>{aq(j)},[j,aq]),M.useEffect(()=>{const{changeMessageTone:nq,textSummarization:cq,apiKey:Mq}=x;typeof nq=="boolean"&&Aq(nq),typeof cq=="boolean"&&qq(cq),typeof Mq=="string"&&W(Mq)},[x,Aq,qq,W]),M.useEffect(()=>{F?.(R)},[R,F]),M.useEffect(()=>{B?.(_)},[_,B]),M.useEffect(()=>{G?.(P)},[P,G]),M.useEffect(()=>{typeof window?.ConnectyCubeChatWidget=="object"?(window.ConnectyCubeChatWidget.open=()=>N(!0),window.ConnectyCubeChatWidget.close=()=>N(!1),window.ConnectyCubeChatWidget.toggle=Y):window.ConnectyCubeChatWidget={open:()=>N(!0),close:()=>N(!1),toggle:Y},setTimeout(()=>{window.ConnectyCubeChatWidget?.initialNotification&&window?.ConnectyCubeChatWidget?.open?.()},1e3)},[N,Y])};function Aa(q){const e=M.useRef(null),[t,r]=oA(Fq(i=>[i.muted,i.playSound])),A=me(i=>i.enableUserStatuses),[n,o]=IA(Fq(i=>[i.userStatus,i.isNotificationSound])),a=A&&(n===Oe.BUSY||n===Oe.AWAY),s=t||a,V=(i=!1)=>{!s&&r&&o&&e.current&&(e.current.loop=i,e.current.currentTime=0,e.current.play().catch(d=>{console.error("Error playing audio:",d)}))},l=()=>{e.current&&(e.current.pause(),e.current.currentTime=0)};return M.useEffect(()=>(e.current=new Audio(q),()=>{e.current&&(e.current.pause(),e.current=null)}),[q]),{play:V,stop:l}}var mr=(q=>(q.ACCEPT="accept",q.REJECT="reject",q.NOT_ANSWER="notAnswer",q.HUNG_UP="hungUp",q.CANCEL="cancel",q))(mr||{});const CC=je(q=>({startCallDate:null,setStartCallDate:()=>q({startCallDate:Date.now()}),resetStartCallDate:()=>q({startCallDate:null})}));function Td(){const{sendMessage:q,sendMessageByUserId:e,incomingCall:t,activeCall:r,activeCallAcceptData:A,activeCallStopData:n,activeCallNotAnswerData:o,resetSessionData:a}=Wq(),[s,V,l]=CC(Fq(v=>[v.startCallDate,v.setStartCallDate,v.resetStartCallDate])),i=(v,y,m)=>{const w=s?Math.floor((Date.now()-s)/1e3):0,h={callHistory:!0,callType:m,duration:w};y?e(v,y,h):q(v,void 0,h),l()},d=()=>{V()},g=v=>{i("reject",v,t?.callType)},p=v=>{i(s?"hungUp":"cancel",v,r?.callType)},f=v=>{i("notAnswer",v,r?.callType)};return M.useEffect(()=>{A&&(V(),a(re.ON_ACCEPT))},[A]),M.useEffect(()=>{n&&(l(),a(re.ON_STOP))},[n]),M.useEffect(()=>{o&&(f(o?.userID),a(re.ON_NOT_ANSWER))},[o]),{sendAcceptCall:d,sendRejectCall:g,sendHungUpCall:p,sendNotAnswerCall:f}}const SC=()=>{const{isConnected:q,dialogs:e,selectedDialog:t,getDialogOpponentId:r,getLastActivity:A,subscribeToLastActivity:n,unsubscribeFromLastActivity:o}=Wq(),a=Be(f=>f.opened),s=me(f=>f.enableLastSeen),V=M.useRef(void 0),l=M.useRef({}),i=M.useRef(0),d=async()=>{if(Date.now()-i.current<3e4)return;const f=new Set,v=[...e].sort((m,w)=>new Date(w.updated_at).getTime()-new Date(m.updated_at).getTime());for(let m=0;m<v.length;m++){const w=r(v[m]);if(typeof w=="number"&&(f.add(w),f.size>=10))break}const y=async()=>{await Promise.all([...f].map(A)),i.current=Date.now()};q?await y():l.current.fetchLastActivities=y},g=()=>{const f=r();if(!f)return;const v=()=>{n(f),V.current=f};q?v():l.current.subscribeToUserLastActivity=v},p=()=>{const f=V.current;if(!f)return;const v=()=>{o(f),V.current=void 0};q?v():l.current.unsubscribeFromUserLastActivity=v};M.useEffect(()=>{s&&a&&d()},[s,a]),M.useEffect(()=>{s&&(p(),t&&g())},[s,t]),M.useEffect(()=>{s&&q&&(l.current.unsubscribeFromUserLastActivity?.(),l.current.subscribeToUserLastActivity?.(),l.current.fetchLastActivities?.(),l.current={})},[s,q])},xC="data:audio/mpeg;base64,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VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVEAwAEAqqNia2BXsibLiPoqT/RjS0OaodnSN4T4c5YDWRqiTp/JFfYIciaSZYQg6CgrJDbmuhITiNzTKIqcOL1dKrEIiGhtAuxCmKpCIRXWP01pDQkJfTbLSsQSAkX02zMEJUPFTvxGQgkIcz9SubieZYjOk7jzq4xHIUikeDtYv/+rJsyyBAD/ZqcbLR6WUyAAANIAAAAQAAAaQAAAAgAAA0gAAABNy8CUupF7kffNTlCXolR6ZFUpJF8X97pkVSqUk7DcCUrEEpnC9y9P6dyZmZ21q2rap0SQ6FRDJB+ePuXgTN9/fW27m5WzLSHCwGVVViVUxBTUUzLjk5LjVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU=";function Bd(){const[q,e,t,r,A,n,o]=oA(Fq(h=>[h.muted,h.showNotifications,h.serviceWorkerPath,h.webPushVapidPublicKey,h.webPushNotifications,h.setShowNotifications,h.setWebPushNotifications])),a=me(h=>h.enableUserStatuses),[s,V]=IA(Fq(h=>[h.userStatus,h.isNotifications])),l=a&&(s===Oe.BUSY||s===Oe.AWAY),i=q||l,{users:d,dialogs:g,fetchDialogs:p}=Wq(),f=Aa(xC),v=async h=>g.find(({_id:u})=>u===h)??(await p({_id:h}))?.[0],y=async(h="",u="",E="/logo.png")=>{if(Notification.permission==="granted"){const C=t?await vd(t):null;return C?C.showNotification(h,{body:u,icon:E}):new Notification(h,{body:u,icon:E})}else console.warn("Notifications are disabled")},m=async(h="",u="",E="/logo.png")=>{if(!i&&(f.play(),e&&V))return y(h,u,E)},w=async(h,{body:u,dialog_id:E})=>{if(typeof E=="string"&&typeof u=="string"){const C=await v(E),S=d[h],k=S?.full_name||S?.login||"Unknown",D=C?.type===3,L=D?C?.name||k:`${k} in ${C?.name}`,Q=D&&S?.avatar||C?.photo||void 0;return m(L,u,Q)}};return M.useEffect(()=>{const h=t&&r&&A;!i&&(e||h)&&dC().then(u=>{u&&h?gC(t).then(o):(n(!1),o(!1))})},[i,e,t,r,A,n,o]),{showNotification:y,notifyWithSound:m,notifyOnMessage:w,playAudio:f.play}}function IC(){const[q,e]=M.useState(document.hasFocus());return M.useEffect(()=>{const t=()=>e(!0),r=()=>e(!1);return window.addEventListener("focus",t),window.addEventListener("blur",r),()=>{window.removeEventListener("focus",t),window.removeEventListener("blur",r)}},[]),{isFocused:q,isBlurred:!q}}function kC(q,e){let t=null;const r=function(...A){t!==null&&clearTimeout(t),t=setTimeout(()=>{q.apply(this,A)},e)};return r.cancel=()=>{t!==null&&clearTimeout(t)},r}const TC=(q={})=>{const{width:e=640,timeout:t=200}=q,[r,A]=M.useState(window.innerWidth>=640);return M.useEffect(()=>{const n=kC(()=>{A(o=>{const a=window.innerWidth>=e;return a!==o?a:o})},t);return window.addEventListener("resize",n),n(),()=>{window.removeEventListener("resize",n),n.cancel()}},[r,e,t]),{isWideScreen:r,isNarrowScreen:!r}};function Dd(q,e=!1){const{t}=jq(),{users:r,typingStatus:A,getDialogOpponentId:n}=Wq();return M.useMemo(()=>{if(q){const a=A[q._id]??[];if(q.type===Z.DialogType.PRIVATE)return n(q)===a[0]?`${t("typing")}...`:void 0;if(a.length>0){const V=a.map(i=>Je(r[i])).join(),l=a.length>1?t("areTyping"):t("isTyping");return e?`${l}: ${V}`:`${V} ${l}`}}},[q,A,r,t])}const Nd=(q=!1)=>{zM(),KM(),Db(),lC(),cC(),wd(),uC(),Cd(),q&&($M(),eb(),tC(),sC(),VC())};function BC(q,e){const t=b.createContext(e),r=n=>{const{children:o,...a}=n,s=b.useMemo(()=>a,Object.values(a));return c.jsx(t.Provider,{value:s,children:o})};r.displayName=q+"Provider";function A(n){const o=b.useContext(t);if(o)return o;if(e!==void 0)return e;throw new Error(`\`${n}\` must be used within \`${q}\``)}return[r,A]}function wt(q,e=[]){let t=[];function r(n,o){const a=b.createContext(o),s=t.length;t=[...t,o];const V=i=>{const{scope:d,children:g,...p}=i,f=d?.[q]?.[s]||a,v=b.useMemo(()=>p,Object.values(p));return c.jsx(f.Provider,{value:v,children:g})};V.displayName=n+"Provider";function l(i,d){const g=d?.[q]?.[s]||a,p=b.useContext(g);if(p)return p;if(o!==void 0)return o;throw new Error(`\`${i}\` must be used within \`${n}\``)}return[V,l]}const A=()=>{const n=t.map(o=>b.createContext(o));return function(a){const s=a?.[q]||n;return b.useMemo(()=>({[`__scope${q}`]:{...a,[q]:s}}),[a,s])}};return A.scopeName=q,[r,DC(A,...e)]}function DC(...q){const e=q[0];if(q.length===1)return e;const t=()=>{const r=q.map(A=>({useScope:A(),scopeName:A.scopeName}));return function(n){const o=r.reduce((a,{useScope:s,scopeName:V})=>{const i=s(n)[`__scope${V}`];return{...a,...i}},{});return b.useMemo(()=>({[`__scope${e.scopeName}`]:o}),[o])}};return t.scopeName=e.scopeName,t}function Ud(q,e){if(typeof q=="function")return q(e);q!=null&&(q.current=e)}function na(...q){return e=>{let t=!1;const r=q.map(A=>{const n=Ud(A,e);return!t&&typeof n=="function"&&(t=!0),n});if(t)return()=>{for(let A=0;A<r.length;A++){const n=r[A];typeof n=="function"?n():Ud(q[A],null)}}}}function se(...q){return b.useCallback(na(...q),q)}function Eq(q,e,{checkForDefaultPrevented:t=!0}={}){return function(A){if(q?.(A),t===!1||!A.defaultPrevented)return e?.(A)}}var Bt=globalThis?.document?b.useLayoutEffect:()=>{},NC=b[" useId ".trim().toString()]||(()=>{}),UC=0;function _t(q){const[e,t]=b.useState(NC());return Bt(()=>{t(r=>r??String(UC++))},[q]),q||(e?`radix-${e}`:"")}var OC=b[" useInsertionEffect ".trim().toString()]||Bt;function Or({prop:q,defaultProp:e,onChange:t=()=>{},caller:r}){const[A,n,o]=RC({defaultProp:e,onChange:t}),a=q!==void 0,s=a?q:A;{const l=b.useRef(q!==void 0);b.useEffect(()=>{const i=l.current;i!==a&&console.warn(`${r} is changing from ${i?"controlled":"uncontrolled"} to ${a?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),l.current=a},[a,r])}const V=b.useCallback(l=>{if(a){const i=QC(l)?l(q):l;i!==q&&o.current?.(i)}else n(l)},[a,q,n,o]);return[s,V]}function RC({defaultProp:q,onChange:e}){const[t,r]=b.useState(q),A=b.useRef(t),n=b.useRef(e);return OC(()=>{n.current=e},[e]),b.useEffect(()=>{A.current!==t&&(n.current?.(t),A.current=t)},[t,A]),[t,r,n]}function QC(q){return typeof q=="function"}function TA(q){const e=jC(q),t=b.forwardRef((r,A)=>{const{children:n,...o}=r,a=b.Children.toArray(n),s=a.find(PC);if(s){const V=s.props.children,l=a.map(i=>i===s?b.Children.count(V)>1?b.Children.only(null):b.isValidElement(V)?V.props.children:null:i);return c.jsx(e,{...o,ref:A,children:b.isValidElement(V)?b.cloneElement(V,void 0,l):null})}return c.jsx(e,{...o,ref:A,children:n})});return t.displayName=`${q}.Slot`,t}var Od=TA("Slot");function jC(q){const e=b.forwardRef((t,r)=>{const{children:A,...n}=t;if(b.isValidElement(A)){const o=LC(A),a=GC(n,A.props);return A.type!==b.Fragment&&(a.ref=r?na(r,o):o),b.cloneElement(A,a)}return b.Children.count(A)>1?b.Children.only(null):null});return e.displayName=`${q}.SlotClone`,e}var Rd=Symbol("radix.slottable");function Qd(q){const e=({children:t})=>c.jsx(c.Fragment,{children:t});return e.displayName=`${q}.Slottable`,e.__radixId=Rd,e}function PC(q){return b.isValidElement(q)&&typeof q.type=="function"&&"__radixId"in q.type&&q.type.__radixId===Rd}function GC(q,e){const t={...e};for(const r in e){const A=q[r],n=e[r];/^on[A-Z]/.test(r)?A&&n?t[r]=(...a)=>{const s=n(...a);return A(...a),s}:A&&(t[r]=A):r==="style"?t[r]={...A,...n}:r==="className"&&(t[r]=[A,n].filter(Boolean).join(" "))}return{...q,...t}}function LC(q){let e=Object.getOwnPropertyDescriptor(q.props,"ref")?.get,t=e&&"isReactWarning"in e&&e.isReactWarning;return t?q.ref:(e=Object.getOwnPropertyDescriptor(q,"ref")?.get,t=e&&"isReactWarning"in e&&e.isReactWarning,t?q.props.ref:q.props.ref||q.ref)}var FC=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Gq=FC.reduce((q,e)=>{const t=TA(`Primitive.${e}`),r=b.forwardRef((A,n)=>{const{asChild:o,...a}=A,s=o?t:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),c.jsx(s,{...a,ref:n})});return r.displayName=`Primitive.${e}`,{...q,[e]:r}},{});function jd(q,e){q&&qu.flushSync(()=>q.dispatchEvent(e))}function Dt(q){const e=b.useRef(q);return b.useEffect(()=>{e.current=q}),b.useMemo(()=>(...t)=>e.current?.(...t),[])}function YC(q,e=globalThis?.document){const t=Dt(q);b.useEffect(()=>{const r=A=>{A.key==="Escape"&&t(A)};return e.addEventListener("keydown",r,{capture:!0}),()=>e.removeEventListener("keydown",r,{capture:!0})},[t,e])}var zC="DismissableLayer",Yi="dismissableLayer.update",KC="dismissableLayer.pointerDownOutside",JC="dismissableLayer.focusOutside",Pd,Gd=b.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),oa=b.forwardRef((q,e)=>{const{disableOutsidePointerEvents:t=!1,onEscapeKeyDown:r,onPointerDownOutside:A,onFocusOutside:n,onInteractOutside:o,onDismiss:a,...s}=q,V=b.useContext(Gd),[l,i]=b.useState(null),d=l?.ownerDocument??globalThis?.document,[,g]=b.useState({}),p=se(e,C=>i(C)),f=Array.from(V.layers),[v]=[...V.layersWithOutsidePointerEventsDisabled].slice(-1),y=f.indexOf(v),m=l?f.indexOf(l):-1,w=V.layersWithOutsidePointerEventsDisabled.size>0,h=m>=y,u=HC(C=>{const S=C.target,k=[...V.branches].some(D=>D.contains(S));!h||k||(A?.(C),o?.(C),C.defaultPrevented||a?.())},d),E=XC(C=>{const S=C.target;[...V.branches].some(D=>D.contains(S))||(n?.(C),o?.(C),C.defaultPrevented||a?.())},d);return YC(C=>{m===V.layers.size-1&&(r?.(C),!C.defaultPrevented&&a&&(C.preventDefault(),a()))},d),b.useEffect(()=>{if(l)return t&&(V.layersWithOutsidePointerEventsDisabled.size===0&&(Pd=d.body.style.pointerEvents,d.body.style.pointerEvents="none"),V.layersWithOutsidePointerEventsDisabled.add(l)),V.layers.add(l),Ld(),()=>{t&&V.layersWithOutsidePointerEventsDisabled.size===1&&(d.body.style.pointerEvents=Pd)}},[l,d,t,V]),b.useEffect(()=>()=>{l&&(V.layers.delete(l),V.layersWithOutsidePointerEventsDisabled.delete(l),Ld())},[l,V]),b.useEffect(()=>{const C=()=>g({});return document.addEventListener(Yi,C),()=>document.removeEventListener(Yi,C)},[]),c.jsx(Gq.div,{...s,ref:p,style:{pointerEvents:w?h?"auto":"none":void 0,...q.style},onFocusCapture:Eq(q.onFocusCapture,E.onFocusCapture),onBlurCapture:Eq(q.onBlurCapture,E.onBlurCapture),onPointerDownCapture:Eq(q.onPointerDownCapture,u.onPointerDownCapture)})});oa.displayName=zC;var ZC="DismissableLayerBranch",WC=b.forwardRef((q,e)=>{const t=b.useContext(Gd),r=b.useRef(null),A=se(e,r);return b.useEffect(()=>{const n=r.current;if(n)return t.branches.add(n),()=>{t.branches.delete(n)}},[t.branches]),c.jsx(Gq.div,{...q,ref:A})});WC.displayName=ZC;function HC(q,e=globalThis?.document){const t=Dt(q),r=b.useRef(!1),A=b.useRef(()=>{});return b.useEffect(()=>{const n=a=>{if(a.target&&!r.current){let s=function(){Fd(KC,t,V,{discrete:!0})};const V={originalEvent:a};a.pointerType==="touch"?(e.removeEventListener("click",A.current),A.current=s,e.addEventListener("click",A.current,{once:!0})):s()}else e.removeEventListener("click",A.current);r.current=!1},o=window.setTimeout(()=>{e.addEventListener("pointerdown",n)},0);return()=>{window.clearTimeout(o),e.removeEventListener("pointerdown",n),e.removeEventListener("click",A.current)}},[e,t]),{onPointerDownCapture:()=>r.current=!0}}function XC(q,e=globalThis?.document){const t=Dt(q),r=b.useRef(!1);return b.useEffect(()=>{const A=n=>{n.target&&!r.current&&Fd(JC,t,{originalEvent:n},{discrete:!1})};return e.addEventListener("focusin",A),()=>e.removeEventListener("focusin",A)},[e,t]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function Ld(){const q=new CustomEvent(Yi);document.dispatchEvent(q)}function Fd(q,e,t,{discrete:r}){const A=t.originalEvent.target,n=new CustomEvent(q,{bubbles:!1,cancelable:!0,detail:t});e&&A.addEventListener(q,e,{once:!0}),r?jd(A,n):A.dispatchEvent(n)}var zi="focusScope.autoFocusOnMount",Ki="focusScope.autoFocusOnUnmount",Yd={bubbles:!1,cancelable:!0},_C="FocusScope",Ji=b.forwardRef((q,e)=>{const{loop:t=!1,trapped:r=!1,onMountAutoFocus:A,onUnmountAutoFocus:n,...o}=q,[a,s]=b.useState(null),V=Dt(A),l=Dt(n),i=b.useRef(null),d=se(e,f=>s(f)),g=b.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;b.useEffect(()=>{if(r){let f=function(w){if(g.paused||!a)return;const h=w.target;a.contains(h)?i.current=h:Rr(i.current,{select:!0})},v=function(w){if(g.paused||!a)return;const h=w.relatedTarget;h!==null&&(a.contains(h)||Rr(i.current,{select:!0}))},y=function(w){if(document.activeElement===document.body)for(const u of w)u.removedNodes.length>0&&Rr(a)};document.addEventListener("focusin",f),document.addEventListener("focusout",v);const m=new MutationObserver(y);return a&&m.observe(a,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",f),document.removeEventListener("focusout",v),m.disconnect()}}},[r,a,g.paused]),b.useEffect(()=>{if(a){Jd.add(g);const f=document.activeElement;if(!a.contains(f)){const y=new CustomEvent(zi,Yd);a.addEventListener(zi,V),a.dispatchEvent(y),y.defaultPrevented||($C(AS(zd(a)),{select:!0}),document.activeElement===f&&Rr(a))}return()=>{a.removeEventListener(zi,V),setTimeout(()=>{const y=new CustomEvent(Ki,Yd);a.addEventListener(Ki,l),a.dispatchEvent(y),y.defaultPrevented||Rr(f??document.body,{select:!0}),a.removeEventListener(Ki,l),Jd.remove(g)},0)}}},[a,V,l,g]);const p=b.useCallback(f=>{if(!t&&!r||g.paused)return;const v=f.key==="Tab"&&!f.altKey&&!f.ctrlKey&&!f.metaKey,y=document.activeElement;if(v&&y){const m=f.currentTarget,[w,h]=qS(m);w&&h?!f.shiftKey&&y===h?(f.preventDefault(),t&&Rr(w,{select:!0})):f.shiftKey&&y===w&&(f.preventDefault(),t&&Rr(h,{select:!0})):y===m&&f.preventDefault()}},[t,r,g.paused]);return c.jsx(Gq.div,{tabIndex:-1,...o,ref:d,onKeyDown:p})});Ji.displayName=_C;function $C(q,{select:e=!1}={}){const t=document.activeElement;for(const r of q)if(Rr(r,{select:e}),document.activeElement!==t)return}function qS(q){const e=zd(q),t=Kd(e,q),r=Kd(e.reverse(),q);return[t,r]}function zd(q){const e=[],t=document.createTreeWalker(q,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const A=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||A?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;t.nextNode();)e.push(t.currentNode);return e}function Kd(q,e){for(const t of q)if(!eS(t,{upTo:e}))return t}function eS(q,{upTo:e}){if(getComputedStyle(q).visibility==="hidden")return!0;for(;q;){if(e!==void 0&&q===e)return!1;if(getComputedStyle(q).display==="none")return!0;q=q.parentElement}return!1}function tS(q){return q instanceof HTMLInputElement&&"select"in q}function Rr(q,{select:e=!1}={}){if(q&&q.focus){const t=document.activeElement;q.focus({preventScroll:!0}),q!==t&&tS(q)&&e&&q.select()}}var Jd=rS();function rS(){let q=[];return{add(e){const t=q[0];e!==t&&t?.pause(),q=Zd(q,e),q.unshift(e)},remove(e){q=Zd(q,e),q[0]?.resume()}}}function Zd(q,e){const t=[...q],r=t.indexOf(e);return r!==-1&&t.splice(r,1),t}function AS(q){return q.filter(e=>e.tagName!=="A")}var nS="Portal",aa=b.forwardRef((q,e)=>{const{container:t,...r}=q,[A,n]=b.useState(!1);Bt(()=>n(!0),[]);const o=t||A&&globalThis?.document?.body;return o?Vn.createPortal(c.jsx(Gq.div,{...r,ref:e}),o):null});aa.displayName=nS;function oS(q,e){return b.useReducer((t,r)=>e[t][r]??t,q)}var vt=q=>{const{present:e,children:t}=q,r=aS(e),A=typeof t=="function"?t({present:r.isPresent}):b.Children.only(t),n=se(r.ref,sS(A));return typeof t=="function"||r.isPresent?b.cloneElement(A,{ref:n}):null};vt.displayName="Presence";function aS(q){const[e,t]=b.useState(),r=b.useRef(null),A=b.useRef(q),n=b.useRef("none"),o=q?"mounted":"unmounted",[a,s]=oS(o,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return b.useEffect(()=>{const V=sa(r.current);n.current=a==="mounted"?V:"none"},[a]),Bt(()=>{const V=r.current,l=A.current;if(l!==q){const d=n.current,g=sa(V);q?s("MOUNT"):g==="none"||V?.display==="none"?s("UNMOUNT"):s(l&&d!==g?"ANIMATION_OUT":"UNMOUNT"),A.current=q}},[q,s]),Bt(()=>{if(e){let V;const l=e.ownerDocument.defaultView??window,i=g=>{const f=sa(r.current).includes(CSS.escape(g.animationName));if(g.target===e&&f&&(s("ANIMATION_END"),!A.current)){const v=e.style.animationFillMode;e.style.animationFillMode="forwards",V=l.setTimeout(()=>{e.style.animationFillMode==="forwards"&&(e.style.animationFillMode=v)})}},d=g=>{g.target===e&&(n.current=sa(r.current))};return e.addEventListener("animationstart",d),e.addEventListener("animationcancel",i),e.addEventListener("animationend",i),()=>{l.clearTimeout(V),e.removeEventListener("animationstart",d),e.removeEventListener("animationcancel",i),e.removeEventListener("animationend",i)}}else s("ANIMATION_END")},[e,s]),{isPresent:["mounted","unmountSuspended"].includes(a),ref:b.useCallback(V=>{r.current=V?getComputedStyle(V):null,t(V)},[])}}function sa(q){return q?.animationName||"none"}function sS(q){let e=Object.getOwnPropertyDescriptor(q.props,"ref")?.get,t=e&&"isReactWarning"in e&&e.isReactWarning;return t?q.ref:(e=Object.getOwnPropertyDescriptor(q,"ref")?.get,t=e&&"isReactWarning"in e&&e.isReactWarning,t?q.props.ref:q.props.ref||q.ref)}var Zi=0;function Wd(){b.useEffect(()=>{const q=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",q[0]??Hd()),document.body.insertAdjacentElement("beforeend",q[1]??Hd()),Zi++,()=>{Zi===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(e=>e.remove()),Zi--}},[])}function Hd(){const q=document.createElement("span");return q.setAttribute("data-radix-focus-guard",""),q.tabIndex=0,q.style.outline="none",q.style.opacity="0",q.style.position="fixed",q.style.pointerEvents="none",q}var $t=function(){return $t=Object.assign||function(e){for(var t,r=1,A=arguments.length;r<A;r++){t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},$t.apply(this,arguments)};function Xd(q,e){var t={};for(var r in q)Object.prototype.hasOwnProperty.call(q,r)&&e.indexOf(r)<0&&(t[r]=q[r]);if(q!=null&&typeof Object.getOwnPropertySymbols=="function")for(var A=0,r=Object.getOwnPropertySymbols(q);A<r.length;A++)e.indexOf(r[A])<0&&Object.prototype.propertyIsEnumerable.call(q,r[A])&&(t[r[A]]=q[r[A]]);return t}function iS(q,e,t){if(t||arguments.length===2)for(var r=0,A=e.length,n;r<A;r++)(n||!(r in e))&&(n||(n=Array.prototype.slice.call(e,0,r)),n[r]=e[r]);return q.concat(n||Array.prototype.slice.call(e))}typeof SuppressedError=="function"&&SuppressedError;var ia="right-scroll-bar-position",Va="width-before-scroll-bar",VS="with-scroll-bars-hidden",lS="--removed-body-scroll-bar-size";function Wi(q,e){return typeof q=="function"?q(e):q&&(q.current=e),q}function cS(q,e){var t=M.useState(function(){return{value:q,callback:e,facade:{get current(){return t.value},set current(r){var A=t.value;A!==r&&(t.value=r,t.callback(r,A))}}}})[0];return t.callback=e,t.facade}var uS=typeof window<"u"?b.useLayoutEffect:b.useEffect,_d=new WeakMap;function dS(q,e){var t=cS(null,function(r){return q.forEach(function(A){return Wi(A,r)})});return uS(function(){var r=_d.get(t);if(r){var A=new Set(r),n=new Set(q),o=t.current;A.forEach(function(a){n.has(a)||Wi(a,null)}),n.forEach(function(a){A.has(a)||Wi(a,o)})}_d.set(t,q)},[q]),t}function gS(q){return q}function pS(q,e){e===void 0&&(e=gS);var t=[],r=!1,A={read:function(){if(r)throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return t.length?t[t.length-1]:q},useMedium:function(n){var o=e(n,r);return t.push(o),function(){t=t.filter(function(a){return a!==o})}},assignSyncMedium:function(n){for(r=!0;t.length;){var o=t;t=[],o.forEach(n)}t={push:function(a){return n(a)},filter:function(){return t}}},assignMedium:function(n){r=!0;var o=[];if(t.length){var a=t;t=[],a.forEach(n),o=t}var s=function(){var l=o;o=[],l.forEach(n)},V=function(){return Promise.resolve().then(s)};V(),t={push:function(l){o.push(l),V()},filter:function(l){return o=o.filter(l),t}}}};return A}function fS(q){q===void 0&&(q={});var e=pS(null);return e.options=$t({async:!0,ssr:!1},q),e}var $d=function(q){var e=q.sideCar,t=Xd(q,["sideCar"]);if(!e)throw new Error("Sidecar: please provide `sideCar` property to import the right car");var r=e.read();if(!r)throw new Error("Sidecar medium not found");return b.createElement(r,$t({},t))};$d.isSideCarExport=!0;function hS(q,e){return q.useMedium(e),$d}var qg=fS(),Hi=function(){},la=b.forwardRef(function(q,e){var t=b.useRef(null),r=b.useState({onScrollCapture:Hi,onWheelCapture:Hi,onTouchMoveCapture:Hi}),A=r[0],n=r[1],o=q.forwardProps,a=q.children,s=q.className,V=q.removeScrollBar,l=q.enabled,i=q.shards,d=q.sideCar,g=q.noRelative,p=q.noIsolation,f=q.inert,v=q.allowPinchZoom,y=q.as,m=y===void 0?"div":y,w=q.gapMode,h=Xd(q,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noRelative","noIsolation","inert","allowPinchZoom","as","gapMode"]),u=d,E=dS([t,e]),C=$t($t({},h),A);return b.createElement(b.Fragment,null,l&&b.createElement(u,{sideCar:qg,removeScrollBar:V,shards:i,noRelative:g,noIsolation:p,inert:f,setCallbacks:n,allowPinchZoom:!!v,lockRef:t,gapMode:w}),o?b.cloneElement(b.Children.only(a),$t($t({},C),{ref:E})):b.createElement(m,$t({},C,{className:s,ref:E}),a))});la.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1},la.classNames={fullWidth:Va,zeroRight:ia};var mS=function(){if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function yS(){if(!document)return null;var q=document.createElement("style");q.type="text/css";var e=mS();return e&&q.setAttribute("nonce",e),q}function wS(q,e){q.styleSheet?q.styleSheet.cssText=e:q.appendChild(document.createTextNode(e))}function vS(q){var e=document.head||document.getElementsByTagName("head")[0];e.appendChild(q)}var ES=function(){var q=0,e=null;return{add:function(t){q==0&&(e=yS())&&(wS(e,t),vS(e)),q++},remove:function(){q--,!q&&e&&(e.parentNode&&e.parentNode.removeChild(e),e=null)}}},MS=function(){var q=ES();return function(e,t){b.useEffect(function(){return q.add(e),function(){q.remove()}},[e&&t])}},eg=function(){var q=MS(),e=function(t){var r=t.styles,A=t.dynamic;return q(r,A),null};return e},bS={left:0,top:0,right:0,gap:0},Xi=function(q){return parseInt(q||"",10)||0},CS=function(q){var e=window.getComputedStyle(document.body),t=e[q==="padding"?"paddingLeft":"marginLeft"],r=e[q==="padding"?"paddingTop":"marginTop"],A=e[q==="padding"?"paddingRight":"marginRight"];return[Xi(t),Xi(r),Xi(A)]},SS=function(q){if(q===void 0&&(q="margin"),typeof window>"u")return bS;var e=CS(q),t=document.documentElement.clientWidth,r=window.innerWidth;return{left:e[0],top:e[1],right:e[2],gap:Math.max(0,r-t+e[2]-e[0])}},xS=eg(),BA="data-scroll-locked",IS=function(q,e,t,r){var A=q.left,n=q.top,o=q.right,a=q.gap;return t===void 0&&(t="margin"),`
46
+ */return"production".NODE_ENV!=="production"&&(function(){function q(g,p){return g===p&&(g!==0||1/g===1/p)||g!==g&&p!==p}function e(g,p){l||A.startTransition===void 0||(l=!0,console.error("You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release."));var f=p();if(!i){var v=p();n(f,v)||(console.error("The result of getSnapshot should be cached to avoid an infinite loop"),i=!0)}v=o({inst:{value:f,getSnapshot:p}});var y=v[0].inst,m=v[1];return s(function(){y.value=f,y.getSnapshot=p,t(y)&&m({inst:y})},[g,f,p]),a(function(){return t(y)&&m({inst:y}),g(function(){t(y)&&m({inst:y})})},[g]),V(f),f}function t(g){var p=g.getSnapshot;g=g.value;try{var f=p();return!n(g,f)}catch{return!0}}function r(g,p){return p()}typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());var A=M,n=typeof Object.is=="function"?Object.is:q,o=A.useState,a=A.useEffect,s=A.useLayoutEffect,V=A.useDebugValue,l=!1,i=!1,d=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?r:e;mi.useSyncExternalStore=A.useSyncExternalStore!==void 0?A.useSyncExternalStore:d,typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error())})(),mi}var Su;function UM(){return Su||(Su=1,"production".NODE_ENV==="production"?Oo.exports=DM():Oo.exports=NM()),Oo.exports}var xu=UM();const OM={t:(q,e)=>rA(e)?e:vM(e)&&rA(e.defaultValue)?e.defaultValue:Array.isArray(q)?q[q.length-1]:q,ready:!1},RM=()=>()=>{},jq=(q,e={})=>{const{i18n:t}=e,{i18n:r,defaultNS:A}=M.useContext(TM)||{},n=t||r||IM();n&&!n.reportNamespaces&&(n.reportNamespaces=new BM),n||wu(n,"NO_I18NEXT_INSTANCE","useTranslation: You will need to pass in an i18next instance by using initReactI18next");const o=M.useMemo(()=>({...SM(),...n?.options?.react,...e}),[n,e]),{useSuspense:a,keyPrefix:s}=o,V=M.useMemo(()=>{const h=A||n?.options?.defaultNS;return rA(h)?[h]:h||["translation"]},[q,A,n]);n?.reportNamespaces?.addUsedNamespaces?.(V);const l=M.useRef(0),i=M.useCallback(h=>{if(!n)return RM;const{bindI18n:u,bindI18nStore:E}=o,C=()=>{l.current+=1,h()};return u&&n.on(u,C),E&&n.store.on(E,C),()=>{u&&u.split(" ").forEach(S=>n.off(S,C)),E&&E.split(" ").forEach(S=>n.store.off(S,C))}},[n,o]),d=M.useRef(),g=M.useCallback(()=>{if(!n)return OM;const h=!!(n.isInitialized||n.initializedStoreOnce)&&V.every(D=>wM(D,n,o)),u=e.lng||n.language,E=l.current,C=d.current;if(C&&C.ready===h&&C.lng===u&&C.keyPrefix===s&&C.revision===E)return C;const k={t:n.getFixedT(u,o.nsMode==="fallback"?V:V[0],s),ready:h,lng:u,keyPrefix:s,revision:E};return d.current=k,k},[n,V,s,o,e.lng]),[p,f]=M.useState(0),{t:v,ready:y}=xu.useSyncExternalStore(i,g,g);M.useEffect(()=>{if(n&&!y&&!a){const h=()=>f(u=>u+1);e.lng?Eu(n,e.lng,V,h):pi(n,V,h)}},[n,e.lng,V,y,a,p]);const m=n||{},w=M.useMemo(()=>{const h=[v,m,y];return h.t=v,h.i18n=m,h.ready=y,h},[v,m,y]);if(n&&a&&!y)throw new Promise(h=>{const u=()=>h();e.lng?Eu(n,e.lng,V,u):pi(n,V,u)});return w},QM={AddMembers:"Add members",Admin:"Admin",areTyping:"are typing",Cancel:"Cancel",ChatName:"Chat name",ChatNameRequired:"Chat name is required",Chat:"Chat",Chats:"Chats",ChooseChat:"Choose a chat",Continue:"Continue",CreateGroupChat:"Create group chat",Delete:"Delete",Draft:"Draft",EnterMessage:"Enter message",EnterUserName:"Enter user name",ExitChat:"Exit chat",FileTypeNotSupported:"File format is not supported",isTyping:"is typing",me:"me",Members:"Members",members:"members",NewGroup:"New group",NewMessage:"New message",NoChats:"Begin your first chat and see what happens!",NoMessages:"No messages yet",NoOnlineUsers:"No online users",Profile:"Profile",RemoveMembers:"Remove members","RemoveMembers?":"Are you sure you want to remove members?",Reset:"Reset",Search:"Search",Select:"Select",Send:"Send",StartChat:"Start chat",NewUserChatDialogTitle:"Send message to user",NewGroupChatDialogTitle:"Start a new Group",typing:"typing",Users:"Users",you:"you",Block:"Block",UnBlock:"Unblock",Report:"Report",ReportUser:"Report user",WhatsWrongWithThisUser:"What's wrong with this user?",ProvideReason:"Reason for reporting",ReportCreatedSuccessfully:"Report has been created successfully",ReportSubmitFailed:"Failed to submit report",MyProfile:"My profile",YouBlocked:"You are blocked by this user",BlockList:"Block list",AddToBlockList:"Add to block list","AddToBlockList?":"Are you sure you want to add {{name}} to block list?",RemoveFromBlockList:"Remove from block list","RemoveFromBlockList?":"Are you sure you want to remove {{name}} from block list?",BlockListEmpty:"Block list is empty",NotificationSettings:"Notification settings",Notifications:"Notifications",NotificationSound:"Notification sound",PushNotifications:"Push notifications",PleaseWait:"Please wait",Available:"Available",Busy:"Busy",Away:"Away",Online:"Online",IncomingCall:"Incoming call",IncomingAudioCall:"Incoming audio call from {{name}}",IncomingVideoCall:"Incoming video call from {{name}}",Accept:"Accept",Reject:"Reject",RejectedCall:"{{name}} rejected the call",MissedCall:"Missed call from {{name}}",AuthForm:{Login:"Login",Password:"Password",Register:"Register",Registration:"Registration",LoginRequired:"Login is required",LoginMinLimit:"Login must be at least {{limit}} symbols",LoginMaxLimit:"Login must be at most {{limit}} symbols",PasswordRequired:"Login is required",PasswordMinLimit:"Password must be at least {{limit}} symbols",PasswordMaxLimit:"Password must be at most {{limit}} symbols",LoginDescription:"Enter your login and password to access your account",RegisterDescription:"Fill in the form below to sign up","ToRegister?":"Don't have an account?","ToLogin?":"Already have an account?"},SingleViewForm:{Title:"Submit your contact data to start a chat",Subtitle:"We will not share your email address. Your email address is used solely to contact you",NamePlaceholder:"Name",NameRequired:"Name is required",EmailPlaceholder:"Email",EmailRequired:"Email is required",EmailInvalid:"Invalid email format",AcceptTermsAndConditions:"Accept terms and conditions",AcceptTermsAndConditionsError:"You must accept the terms and conditions",TermsAndConditionsText:"By clicking this checkbox, you agree to the",TermsAndConditionsLink:"terms and conditions",RememberMe:"Remember me",RememberMeText:"This is my private device",Next:"Next"},SingleViewChatError:"Opponent(s) for the chat not found",Information:"Information",AI:{GetSummary:"Get summary",ChangeMessageTone:"Change message tone",SummaryMessageTitle:"Only you can see this message",forLast7Days:"for last 7 days",forLastDay:"for last day",forUnreads:"for unreads",MessageTone:"Change message tone",EmptyMessage:"Can't change tone of empty message",positive:"positive",negative:"negative",cringe:"cringe"},CallHistory:{RejectedIncoming:"Rejected incoming",RejectedOutgoing:"Rejected outgoing",Unanswered:"Unanswered",Missed:"Missed",Canceled:"Canceled",Ended:"Ended",videoCall:"video call",audioCall:"audio call",defaultCall:"call"}},jM={AddMembers:"Προσθήκη μελών",Admin:"Διαχειριστής",areTyping:"είναι",Cancel:"Ακύρωση",ChatName:"Όνομα συνομιλίας",ChatNameRequired:"Το όνομα συνομιλίας είναι υποχρεωτικό",Chat:"Συνομιλία",Chats:"Συνομιλίες",ChooseChat:"Επιλέξτε συνομιλία",Continue:"Συνέχεια",CreateGroupChat:"Δημιουργία ομαδικής συνομιλίας",Delete:"Διαγραφή",Draft:"Πρόχειρο",EnterMessage:"Εισάγετε μήνυμα",EnterUserName:"Εισάγετε όνομα χρήστη",ExitChat:"Έξοδος από τη συνομιλία",FileTypeNotSupported:"Η μορφή αρχείου δεν υποστηρίζεται",isTyping:"είναι",me:"εγώ",Members:"Μέλη",members:"μέλη",NewGroup:"Νέα ομάδα",NewMessage:"Νέο μήνυμα",NoChats:"Επιλέξτε κάποιο χρήστη από τη λίστα Χρήστες και ξεκινήστε την πρώτη σας συνομιλία!",NoMessages:"Δεν υπάρχουν μηνύματα",NoOnlineUsers:"Δεν υπάρχουν συνδεδεμένοι χρήστες",Profile:"Προφίλ",RemoveMembers:"Αφαίρεση μελών","RemoveMembers?":"Είστε σίγουροι ότι θέλετε να αφαιρέσετε τα μέλη;",Reset:"Επαναφορά",Search:"Αναζήτηση",Select:"Επιλογή",Send:"Αποστολή",StartChat:"Έναρξη συνομιλίας",NewUserChatDialogTitle:"Αποστολή μηνύματος σε μέλος",NewGroupChatDialogTitle:"Δημιουργία νέας ομάδας",typing:"πληκτρολογεί",Users:"Χρήστες",you:"εσύ",Block:"Block",UnBlock:"Unblock",Report:"Αναφορά",ReportUser:"Αναφορά χρήστη",WhatsWrongWithThisUser:"Τι θέλετε να αναφέρετε για αυτόν το χρήστη;",ProvideReason:"Λόγος αναφοράς",ReportCreatedSuccessfully:"Η αναφορά για το χρήστη έγινε",ReportSubmitFailed:"Σφάλμα στη δημιουργία αναφοράς",MyProfile:"Το προφίλ μου",YouBlocked:"Αυτός ο χρήστης σας έχει κάνει Block",BlockList:"Λίστα Blocked χρηστών",AddToBlockList:"Προσθήκη στη λίστα Blocked","AddToBlockList?":"Σίγουρα θέλετε να προσθέσετε το χρήστη {{name}} στη λίστα Blocked;",RemoveFromBlockList:"Αφαίρεση από τη λίστα Blocked","RemoveFromBlockList?":"Σίγουρα θέλετε να αφαιρέσετε το χρήστη {{name}} από τη λίστα Blocked;",BlockListEmpty:"Η Blocked λίστα είναι άδεια",NotificationSettings:"Ρυθμίσεις ειδοποιήσεων",Notifications:"Ειδοποιήσεις",NotificationSound:"Ήχος ειδοποίησης",PushNotifications:"Ειδοποιήσεις push",PleaseWait:"Παρακαλώ περιμένετε",Available:"Διαθέσιμος/η",Busy:"Απασχολημένος/η",Away:"Απουσιάζω",Online:"Συνδεδεμένος/η",IncomingCall:"Εισερχόμενη κλήση",IncomingAudioCall:"Εισερχόμενη κλήση ήχου από τον χρήστη {{name}}",IncomingVideoCall:"Εισερχόμενη κλήση βίντεο από τον χρήστη {{name}}",Accept:"Αποδοχή",Reject:"Απόρριψη",RejectedCall:"Ο χρήστης {{name}} απέρριψε την κλήση",MissedCall:"Αναπάντητη κλήση από τον χρήστη {{name}}",AuthForm:{Login:"Σύνδεση",Password:"Κωδικός πρόσβασης",Register:"Εγγραφή",Registration:"Εγγραφή",LoginRequired:"Το όνομα χρήστη είναι υποχρεωτικό",LoginMinLimit:"Το όνομα χρήστη πρέπει να έχει τουλάχιστον {{limit}} χαρακτήρες",LoginMaxLimit:"Το όνομα χρήστη πρέπει να έχει το πολύ {{limit}} χαρακτήρες",PasswordRequired:"Ο κωδικός πρόσβασης είναι υποχρεωτικός",PasswordMinLimit:"Ο κωδικός πρόσβασης πρέπει να έχει τουλάχιστον {{limit}} χαρακτήρες",PasswordMaxLimit:"Ο κωδικός πρόσβασης πρέπει να έχει το πολύ {{limit}} χαρακτήρες",LoginDescription:"Εισάγετε το όνομα χρήστη και τον κωδικό πρόσβασης για να αποκτήσετε πρόσβαση στον λογαριασμό σας",RegisterDescription:"Συμπληρώστε την παρακάτω φόρμα για να εγγραφείτε","ToRegister?":"Δεν έχετε λογαριασμό;","ToLogin?":"Έχετε ήδη λογαριασμό;"},SingleViewForm:{Title:"Υποβάλετε τα στοιχεία επικοινωνίας σας για να ξεκινήσετε μια συνομιλία",Subtitle:"Δεν θα κοινοποιήσουμε τη διεύθυνση email σας. Η διεύθυνση email σας χρησιμοποιείται αποκλειστικά για να επικοινωνήσουμε μαζί σας.",NamePlaceholder:"Όνομα",NameRequired:"Το όνομα είναι υποχρεωτικό",EmailPlaceholder:"E-mail",EmailRequired:"Απαιτείται email",Emailnvalid:"Μη έγκυρη μορφή email",AcceptTermsAndConditions:"Αποδοχή όρων και προϋποθέσεων",AcceptTermsAndConditionsError:"Πρέπει να αποδεχτείτε τους όρους και τις προϋποθέσεις",TermsAndConditionsText:"Κάνοντας κλικ σε αυτό το πλαίσιο, συμφωνείτε με τους",TermsAndConditionsLink:"όρους και προϋποθέσεις",RememberMe:"Να με θυμάσαι",RememberMeText:"Αυτή είναι η προσωπική μου συσκευή",Next:"Επόμενο"},SingleViewChatError:"Δεν βρέθηκαν αντίπαλοι για τη συνομιλία",Information:"Πληροφορίες",AI:{GetSummary:"Λήψη σύνοψης",ChangeMessageTone:"Αλλαγή τόνου μηνύματος",SummaryMessageTitle:"Μόνο εσείς μπορείτε να δείτε αυτό το μήνυμα",forLast7Days:"για τις τελευταίες 7 ημέρες",forLastDay:"για την τελευταία ημέρα",forUnreads:"για μη αναγνωσμένα",MessageTone:"Αλλαγή τόνου μηνύματος",EmptyMessage:"Δεν είναι δυνατή η αλλαγή του τόνου ενός κενού μηνύματος",positive:"θετικός",negative:"αρνητικός",cringe:"κρίμα"},CallHistory:{RejectedIncoming:"Απορρίφθηκε εισερχόμενη κλήση",RejectedOutgoing:"Απορρίφθηκε εξερχόμενη κλήση",Unanswered:"Μη απαντημένη κλήση",Missed:"Αναπάντητη κλήση",Canceled:"Ακυρώθηκε",Ended:"Ολοκληρώθηκε",videoCall:"βιντεοκλήση",audioCall:"ηχητική κλήση",defaultCall:"κλήση"}},PM={AddMembers:"Додати учасників",Admin:"Адмін",areTyping:"пишуть",Cancel:"Скасувати",ChatName:"Назва чату",ChatNameRequired:"Назва чату є обов'язковою",Chat:"Чат",Chats:"Чати",ChooseChat:"Оберіть чат",Continue:"Продовжити",CreateGroupChat:"Створити груповий чат",Delete:"Видалити",Draft:"Чернетка",EnterMessage:"Введіть повідомлення",EnterUserName:"Введіть ім'я користувача",ExitChat:"Вийти з чату",FileTypeNotSupported:"Формат файлу не підтримується",isTyping:"пише",me:"я",Members:"Учасники",members:"учасники",NewGroup:"Нова група",NewMessage:"Нове повідомлення",NoChats:"Почніть свою першу розмову та подивіться, що станеться!",NoMessages:"Поки що немає повідомлень",NoOnlineUsers:"Немає онлайн-користувачів",Profile:"Профіль",RemoveMembers:"Видалити учасників","RemoveMembers?":"Ви впевнені, що хочете видалити учасників?",Reset:"Скинути",Search:"Пошук",Select:"Вибрати",Send:"Надіслати",StartChat:"Розпочати чат",NewUserChatDialogTitle:"Новий чат з користувачем",NewGroupChatDialogTitle:"Нова група",typing:"друкує",Users:"Користувачі",you:"ви",Block:"Заблокувати",UnBlock:"Розблокувати",Report:"Поскаржитися",ReportUser:"Поскаржитися на користувача",WhatsWrongWithThisUser:"Що не так з цим користувачем?",ProvideReason:"Підстава",ReportCreatedSuccessfully:"Звіт поданий успішно",ReportSubmitFailed:"Помилка при поданні звіту",MyProfile:"Мій профіль",YouBlocked:"Цей користувача вас заблокував",BlockList:"Список заблокованих",AddToBlockList:"Додати до списку заблокованих","AddToBlockList?":"Ви впевнені, що хочете додати {{name}} до списку заблокованих?",RemoveFromBlockList:"Видалити зі списку заблокованих","RemoveFromBlockList?":"Ви впевнені, що хочете видалити {{name}} зі списку заблокованих?",BlockListEmpty:"Список заблокованих порожній",NotificationSettings:"Налаштування сповіщень",Notifications:"Сповіщення",NotificationSound:"Звук сповіщення",PushNotifications:"Push-сповіщення",PleaseWait:"Будь ласка, зачекайте",Available:"Присутній",Busy:"Зайнятий",Away:"Відсутній",Online:"В мережі",IncomingCall:"Вхідний виклик",IncomingAudioCall:"Вхідний аудіо виклик від {{name}}",IncomingVideoCall:"Вхідний відео виклик від {{name}}",Accept:"Прийняти",Reject:"Відхилити",RejectedCall:"{{name}} відхилив виклик",MissedCall:"Пропущений виклик від {{name}}",AuthForm:{Login:"Логін",Password:"Пароль",Register:"Зареєструвати",Registration:"Реєстрація",LoginRequired:"Логін є обов'язковим",LoginMinLimit:"Логін має містити щонайменше {{limit}} символів",LoginMaxLimit:"Логін має містити не більше {{limit}} символів",PasswordRequired:"Пароль є обов'язковим",PasswordMinLimit:"Пароль має містити щонайменше {{limit}} символів",PasswordMaxLimit:"Пароль має містити не більше {{limit}} символів",LoginDescription:"Введіть ваш логін та пароль для доступу до акаунту",RegisterDescription:"Заповніть форму нижче для реєстрації","ToRegister?":"Ще не маєте акаунту?","ToLogin?":"Вже маєте акаунт?"},SingleViewForm:{Title:"Введіть свою електронну пошту, щоб почати чат",Subtitle:"Ми не будемо передавати вашу електронну пошту. Ваша електронна пошта використовується виключно для зв'язку з вами",NamePlaceholder:"Ім'я",NameRequired:"Ім'я є обов'язковим",EmailPlaceholder:"Електронна пошта",EmailRequired:"Електронна пошта є обов'язковою",EmailInvalid:"Невірний формат електронної пошти",AcceptTermsAndConditions:"Прийняти умови та положення",AcceptTermsAndConditionsError:"Ви повинні прийняти умови та положення",TermsAndConditionsText:"Натискаючи цю галочку, ви погоджуєтесь з",TermsAndConditionsLink:"умовами та положеннями",RememberMe:"Запам'ятати мене",RememberMeText:"Це мій приватний пристрій",Next:"Далі"},SingleViewChatError:"Опонента(ів) для чату не знайдено",Information:"Інформація",AI:{GetSummary:"Отримати резюме",ChangeMessageTone:"Змінити тон повідомлення",SummaryMessageTitle:"Тільки ти можеш бачити це повідомлення",forLast7Days:"за останні 7 днів",forLastDay:"за останній день",forUnreads:"для непрочитаних",MessageTone:"Змінити тон повідомлення",EmptyMessage:"Неможливо змінити тон пустого повідомлення",positive:"позитивний",negative:"негативний",cringe:"крінж"},CallHistory:{RejectedIncoming:"Відхилений вхідний",RejectedOutgoing:"Відхилений вихідний",Unanswered:"Неприйнятий",Missed:"Пропущений",Canceled:"Скасований",Ended:"Завершений",videoCall:"відео виклик",audioCall:"аудіо виклик",defaultCall:"виклик"}},Iu={en:"English",ua:"Ukrainian",el:"Greek"},GM=typeof window<"u"&&localStorage.getItem("translation")||"en";Qe.use(kM).init({resources:{en:{translation:QM},el:{translation:jM},ua:{translation:PM}},lng:GM,fallbackLng:"en",interpolation:{escapeValue:!1}});const ku=q=>{let e;const t=new Set,r=(V,l)=>{const i=typeof V=="function"?V(e):V;if(!Object.is(i,e)){const d=e;e=l??(typeof i!="object"||i===null)?i:Object.assign({},e,i),t.forEach(g=>g(e,d))}},A=()=>e,a={setState:r,getState:A,getInitialState:()=>s,subscribe:V=>(t.add(V),()=>t.delete(V))},s=e=q(r,A,a);return a},LM=(q=>q?ku(q):ku),FM=q=>q;function YM(q,e=FM){const t=M.useSyncExternalStore(q.subscribe,M.useCallback(()=>e(q.getState()),[q,e]),M.useCallback(()=>e(q.getInitialState()),[q,e]));return M.useDebugValue(t),t}const Tu=q=>{const e=LM(q),t=r=>YM(e,r);return Object.assign(t,e),t},je=(q=>q?Tu(q):Tu);var dr=(q=>(q.CHATS="chats",q.USERS="users",q))(dr||{});const Bu={activeTab:"chats"},Ro=je(q=>({...Bu,setActiveTab:e=>q({activeTab:e}),resetActiveTab:()=>q({activeTab:Bu.activeTab})})),zM=()=>{Ro.setState({activeTab:"chats"})},yi={visible:!1,title:""},Qo=je(q=>({...yi,showAlertBusy:(e="")=>q({visible:!0,title:e}),hideAlertBusy:()=>q({visible:!1,title:yi.title})})),KM=()=>{Qo.setState({visible:!1,title:yi.title})},JM={CHAT_WIDGET_CONNECTYCUBE_SINGLE_VIEW_CHAT_EXTERNAL_ID:"EXTERNAL-id-012345",CHAT_WIDGET_CONNECTYCUBE_SINGLE_VIEW_CHAT_NAME:"Test Store Name - PROD",CHAT_WIDGET_CONNECTYCUBE_SINGLE_VIEW_CHAT_OPPONENTS_IDS:"4Ja3BiEWTo,bfoosyJijU,o8k9iLdYiI",CHAT_WIDGET_CONNECTYCUBE_SINGLE_VIEW_CHAT_PHOTO:"/logo.png"},{CHAT_WIDGET_CONNECTYCUBE_SINGLE_VIEW_CHAT_EXTERNAL_ID:ZM,CHAT_WIDGET_CONNECTYCUBE_SINGLE_VIEW_CHAT_NAME:WM,CHAT_WIDGET_CONNECTYCUBE_SINGLE_VIEW_CHAT_PHOTO:HM,CHAT_WIDGET_CONNECTYCUBE_SINGLE_VIEW_CHAT_OPPONENTS_IDS:XM}=JM||"production";var jo=(q=>(q.SINGLE="1on1",q.GROUP="group",q))(jo||{});const SA={defaultChat:null,singleViewChat:{externalId:ZM,opponentUserIds:XM,name:WM,photo:HM}},wi=je(q=>({...SA,setDefaultChat:e=>q({defaultChat:e}),setSingleViewChat:e=>q({singleViewChat:e}),resetDefaultChat:()=>q({defaultChat:SA.defaultChat}),resetSingleViewChat:()=>q({singleViewChat:SA.singleViewChat})})),_M=q=>{wi.setState(q)},$M=()=>{wi.setState(SA)},ve={opened:!1,splitView:!1,singleView:!1,showChatStatus:!1,showOnlineUsersTab:!1,hideNewChatButton:!1,hideNewUserChatOption:!1,hideNewGroupChatOption:!1,imgLogoSource:"/logo.png"},Be=je((q,e)=>({...ve,setOpened:t=>q({opened:t}),setSplitView:t=>q({splitView:t}),setSingleView:t=>q({singleView:t,splitView:!1}),setShowChatStatus:t=>q({showChatStatus:t}),setShowOnlineUsersTab:t=>q({showOnlineUsersTab:t}),setHideNewChatButton:t=>q({hideNewChatButton:t}),setHideNewUserChatOption:t=>q({hideNewUserChatOption:t}),setHideNewGroupChatOption:t=>q({hideNewGroupChatOption:t}),setImgLogoSource:t=>q({imgLogoSource:t}),toggleOpened:()=>q({opened:!e().opened}),resetOpened:()=>q({opened:ve.opened}),resetSplitView:()=>q({splitView:ve.splitView}),resetSingleView:()=>q({singleView:ve.singleView}),resetShowChatStatus:()=>q({showChatStatus:ve.showChatStatus}),resetShowOnlineUsersTab:()=>q({showOnlineUsersTab:ve.showOnlineUsersTab}),resetHideNewChatButton:()=>q({hideNewChatButton:ve.hideNewChatButton}),resetHideNewUserChatOption:()=>q({hideNewUserChatOption:ve.hideNewUserChatOption}),resetHideNewGroupChatOption:()=>q({hideNewGroupChatOption:ve.hideNewGroupChatOption}),resetImgLogoSource:()=>q({imgLogoSource:ve.imgLogoSource})})),qb=q=>{Be.setState(q)},eb=()=>{Be.setState(ve)},Du=q=>Symbol.iterator in q,Nu=q=>"entries"in q,Uu=(q,e)=>{const t=q instanceof Map?q:new Map(q.entries()),r=e instanceof Map?e:new Map(e.entries());if(t.size!==r.size)return!1;for(const[A,n]of t)if(!r.has(A)||!Object.is(n,r.get(A)))return!1;return!0};function tb(q,e){return!!Object.is(q,e)||typeof q=="object"&&q!==null&&typeof e=="object"&&e!==null&&Object.getPrototypeOf(q)===Object.getPrototypeOf(e)&&(Du(q)&&Du(e)?Nu(q)&&Nu(e)?Uu(q,e):((t,r)=>{const A=t[Symbol.iterator](),n=r[Symbol.iterator]();let o=A.next(),a=n.next();for(;!o.done&&!a.done;){if(!Object.is(o.value,a.value))return!1;o=A.next(),a=n.next()}return!!o.done&&!!a.done})(q,e):Uu({entries:()=>Object.entries(q)},{entries:()=>Object.entries(e)}))}function Tt(q){const e=M.useRef(void 0);return t=>{const r=q(t);return tb(e.current,r)?e.current:e.current=r}}const Tr=q=>function(e){const t=M.useRef(q.getState()[e]);return M.useEffect(()=>{const r=q.subscribe(A=>A[e],A=>{t.current=A});return()=>r()},[e]),t},Ou=q=>{let e;const t=new Set,r=(a,s)=>{const V=typeof a=="function"?a(e):a;if(!Object.is(V,e)){const l=e;e=s??(typeof V!="object"||V===null)?V:Object.assign({},e,V),t.forEach(i=>i(e,l))}},A=()=>e,n={setState:r,getState:A,getInitialState:()=>o,subscribe:a=>(t.add(a),()=>t.delete(a))},o=e=q(r,A,n);return n},rb=q=>q,Ab=q=>{const e=(r=>r?Ou(r):Ou)(q),t=r=>(function(A,n=rb){const o=M.useSyncExternalStore(A.subscribe,M.useCallback(()=>n(A.getState()),[A,n]),M.useCallback(()=>n(A.getInitialState()),[A,n]));return M.useDebugValue(o),o})(e,r);return Object.assign(t,e),t},Wt=q=>Ab,Ht=q=>(e,t,r)=>{const A=r.subscribe;return r.subscribe=(n,o,a)=>{let s=n;if(o){const V=a?.equalityFn||Object.is;let l=n(r.getState());s=i=>{const d=n(i);if(!V(l,d)){const g=l;o(l=d,g)}},a?.fireImmediately&&o(l,l)}return A(s)},q(e,t,r)},Po=(q,e)=>`[@connectycube/react@4.7.11]${q?`[${q}]`:""}${e?`[${e}]`:""}`,nb=(q,e,...t)=>console.log(`${Po(q,e)}[Log]:`,...t),ob=(q,e,...t)=>console.info(`${Po(q,e)}[Info]:`,...t),ab=(q,e,...t)=>console.warn(`${Po(q,e)}[Warn]:`,...t),sb=(q,e,...t)=>console.error(`${Po(q,e)}[Error]:`,...t),fn=q=>({log:(e,...t)=>nb(q,e,...t),info:(e,...t)=>ob(q,e,...t),warn:(e,...t)=>ab(q,e,...t),error:(e,...t)=>sb(q,e,...t)}),hn=fn("useBlockList"),xA=fn("useChat"),ib=fn("useConnectyCube"),vi=fn("useUsers"),qt=fn("useVideochat"),Ei=q=>{let e;if(typeof q=="string"){const t=new Date(q).getTime();e=isNaN(t)?void 0:t}else typeof q=="number"&&(e=1e3*q);return e},Ru=q=>{let e;if(q<=30)e="Online";else if(q<3600)e=`Last seen ${Math.ceil(q/60)} minutes ago`;else if(q<86400)e=`Last seen ${Math.ceil(q/3600)} hours ago`;else{const t=new Date(Date.now()-1e3*q);e=`Last seen ${t.getUTCDate()}/${(t.getMonth()+1).toString().padStart(2,"0")}/${t.getFullYear()}`}return e},Qu=q=>Ei(q.last_message_date_sent)||Ei(q.updated_at)||Ei(q.created_at)||0,mn=(q,e)=>Qu(e)-Qu(q),AA=(q,e)=>{const t={total:0};return q.forEach(({_id:r,unread_messages_count:A=0})=>{const n=e===r?0:A;t[r]=n,t.total+=n}),t},Go={dialogs:[],totalDialogsReached:!1,selectedDialog:void 0,activatedDialogs:new Set,privateDialogsIds:{},unreadMessagesCount:{total:0}},Mi=Wt()(Ht((q,e)=>({...Go,upsertDialog:t=>{const r=e().dialogs||[],A=[t,...r.filter(o=>o._id!==t._id)],n=AA(A);q({dialogs:A,unreadMessagesCount:n})},upsertDialogs:t=>{const r=[...e().dialogs||[],...t],A=Array.from(new Map(r.map(o=>[o._id,o])).values()).sort(mn),n=AA(A);q({dialogs:A,unreadMessagesCount:n})},updateDialog:(t,r)=>{const A=(e().dialogs||[]).map(o=>o._id===t?{...o,...r}:o).sort(mn),n=AA(A);q({dialogs:A,unreadMessagesCount:n})},updateDialogOnMessage:(t,r,A=!1)=>{const n=e().selectedDialog,o=(e().dialogs||[]).map(s=>s._id===t?{...s,unread_messages_count:A||n&&n._id===r.dialog_id?s.unread_messages_count:(s.unread_messages_count||0)+1,last_message:r.body,last_message_date_sent:A?s.last_message_date_sent:parseInt(r.extension.date_sent)}:s).sort(mn),a=AA(o);q({dialogs:o,unreadMessagesCount:a})},updateDialogOnReadMessage:t=>{const r=(e().dialogs||[]).map(n=>n._id===t?{...n,unread_messages_count:Math.max(0,n.unread_messages_count-1)}:n),A=AA(r);q({dialogs:r,unreadMessagesCount:A})},addParticipantsToDialog:(t,r)=>{const A=(e().dialogs||[]).map(n=>(n._id===t&&(n.occupants_ids=Array.from(new Set([...n.occupants_ids,...r]))),n)).sort(mn);q({dialogs:A})},removeParticipantsFromDialog:(t,r)=>{const A=(e().dialogs||[]).map(n=>(n._id===t&&(n.occupants_ids=n.occupants_ids.filter(o=>!r.includes(o))),n)).sort(mn);q({dialogs:A})},removeDialog:t=>{const r=(e().dialogs||[]).filter(n=>n._id!==t),A=AA(r);q({dialogs:r,unreadMessagesCount:A})},setSelectedDialog:t=>{const r=e().dialogs||[],A=AA(r,t?._id);q({selectedDialog:t,unreadMessagesCount:A})},resetSelectedDialog:()=>{q({selectedDialog:Go.selectedDialog})},activateDialog:t=>{q({activatedDialogs:e().activatedDialogs?.add(t)})},resetActivatedDialogs:()=>{q({activatedDialogs:new Set})},addPrivateDialogId:(t,r)=>{const A={...e().privateDialogsIds||{},[t]:r};q({privateDialogsIds:A})},removePrivateDialogId:t=>{const r={...e().privateDialogsIds};delete r[t],q({privateDialogsIds:r})},setTotalDialogsReached:t=>{q({totalDialogsReached:t})},resetTotalDialogsReached:()=>{q({totalDialogsReached:Go.totalDialogsReached})},resetDialogsStore:()=>{q(Go)}})));var he;(function(q){q.WAIT="wait",q.LOST="lost",q.SENT="sent",q.READ="read"})(he||(he={}));const bi={messages:{},totalMessagesReached:[]},Ci=Wt()(Ht((q,e)=>({...bi,addMessage:(t,r)=>{const A=e().messages||{},n=[...A[t]||[],r],o={...A,[t]:n};q({messages:o})},addMessages:(t,r,A=!0)=>{const n=e().messages||{},o=n[t]||[],a=A?[...r,...o]:[...o,...r],s={...n,[t]:a};q({messages:s})},updateMessage:(t,r,A)=>{const n=e().messages||{},o=(n[t]||[]).map(s=>s._id===r?{...s,...A}:s),a={...n,[t]:o};q({messages:a})},updateMessageStatus:(t,r,A,n)=>{const o=e().messages||{},a=(o[t]||[]).map(V=>V._id===r?{...V,read_ids:n?V.read_ids?[...new Set([...V.read_ids,n])]:[n]:V.read_ids,read:A===he.READ?1:V.read,status:A===he.SENT&&V.status===he.LOST?V.status:A}:V),s={...o,[t]:a};q({messages:s})},markMessagesAsLost:()=>{const t=e().messages||{},r=Object.fromEntries(Object.entries(t).map(([A,n])=>[A,n.map(o=>o.status===he.WAIT?{...o,status:he.LOST}:o)]));q({messages:r})},removeMessages:(t,r)=>{const A=e().messages||{},n=(A[t]||[]).filter(a=>!r.includes(a._id)),o={...A,[t]:n};q({messages:o})},clearMessages:t=>{const r={...e().messages||{},[t]:[]};q({messages:r})},setTotalMessagesReached:(t,r)=>{const A=e().totalMessagesReached,n=new Set(A);r?n.add(t):n.delete(t),q({totalMessagesReached:Array.from(n)})},resetTotalMessagesReached:()=>{q({totalMessagesReached:bi.totalMessagesReached})},resetMessagesStore:()=>{q(bi)}})));var Xq;(function(q){q.DISCONNECTED="disconnected",q.CONNECTING="connecting",q.CONNECTED="connected",q.NOT_AUTHORIZED="not-authorized",q.ERROR="error"})(Xq||(Xq={}));const Si={attachedChatListeners:new Set,isOnline:navigator.onLine,isConnected:!1,chatStatus:Xq.DISCONNECTED,pingInterval:null,isNetworkStatusHandling:!1},xi=Wt()(Ht((q,e)=>({...Si,attachChatListeners:t=>{const r=e().attachedChatListeners??new Set;Object.entries(t).forEach(([A,n])=>{const o=A;r.has(o)||(Z.chat.addListener(o,n),r.add(o))}),q({attachedChatListeners:r})},handleNetworkStatus:()=>{const{isNetworkStatusHandling:t,setIsOnline:r}=e();t||(window.addEventListener("online",async()=>{await r(!0),xA.info("Network is online","🟢")}),window.addEventListener("offline",async()=>{await r(!1),xA.info("Network is offline","🔴")}),q({isNetworkStatusHandling:!0}))},setIsOnline:async t=>{const{isOnline:r,chatStatus:A,setChatStatus:n}=e();if(t!==r)if(q({isOnline:t}),t&&A!==Xq.ERROR)A!==Xq.DISCONNECTED&&A!==Xq.NOT_AUTHORIZED||n(Xq.CONNECTING);else try{await Z.chat.pingWithTimeout(1e3),n(Xq.CONNECTED)}catch{const{resetTotalDialogsReached:a,resetActivatedDialogs:s}=Mi.getState(),{resetTotalMessagesReached:V,markMessagesAsLost:l}=Ci.getState();Z.chat.terminate(),n(Xq.DISCONNECTED),a(),V(),s(),l()}},setIsConnected:t=>{const{isConnected:r,pingInterval:A,setIsOnline:n}=e();if(t!==r&&(q({isConnected:t}),A&&(clearInterval(A),q({pingInterval:Si.pingInterval})),t)){xA.info("chat is connected",'start "pingWithTimeout"');const o=setInterval(async()=>{try{await Z.chat.pingWithTimeout(1e3),await n(!0)}catch(a){xA.error("ping chat",a),await n(!1),setTimeout(async()=>{try{await Z.chat.pingWithTimeout(1e3),await n(!0)}catch(s){xA.error("ping chat (reserved)",s),await n(!1)}},5e3)}},4e4);q({pingInterval:o})}},setChatStatus:t=>{q({chatStatus:t})},resetChatStore:()=>{q({...Si})}}))),yn="ConnectyCubeBlockList",ju={blockedUsers:new Set,isFetchInited:!1,isFetched:!1},Pu=Wt()(Ht((q,e)=>({...ju,fetchBlockList:async()=>{e().isFetched||e().isFetchInited||(xi.subscribe(t=>t.isConnected,async(t,r)=>{if(t!==r){if(!t)return void hn.warn("fetchBlockList","chat is not connected");if((await Z.chat.privacylist.getNames()).default===yn){const A=(await Z.chat.privacylist.getList(yn)).items.reduce((n,o)=>(o.action===Z.PrivacyListAction.DENY&&n.add(+o.user_id),n),new Set);q({isFetched:!0,blockedUsers:A})}}},{fireImmediately:!0}),q({isFetchInited:!0}))},setBlockedUsers:t=>{q({blockedUsers:t})},resetBlockListStore:()=>{q(ju)}}))),wn={currentSession:null,currentUserId:null,currentUser:null},Lo=Wt()(Ht((q,e)=>({...wn,setCurrentUserId:t=>{q({currentUserId:t})},resetCurrentUserId:()=>{q({currentUserId:wn.currentUserId})},setCurrentSession:t=>{q({currentSession:t,currentUserId:t.user_id,currentUser:t?.user})},updateCurrentSession:t=>{const r=e().currentSession;r?q({currentSession:{...r,...t}}):ib.error("updateCurrentSession","Has no session to update")},resetCurrentSession:()=>{q({currentSession:wn.currentSession,currentUserId:wn.currentUserId})},resetConnectyCubeStore:()=>{q(wn)}}))),Gu={lastActivity:{}},Vb=Wt()(Ht((q,e)=>({...Gu,upsertLastActivity:(t,r)=>{q({lastActivity:{...e().lastActivity,[t]:r}})},resetLastActivityStore:()=>{q(Gu)}}))),Lu={messageEvent:void 0,messageSystemEvent:void 0,messageSentEvent:void 0,messageReadEvent:void 0,messageEditEvent:void 0,messageDeleteEvent:void 0,messageErrorEvent:void 0},lb=Wt()(Ht(q=>({...Lu,setMessageEvent:e=>{q({messageEvent:e})},setMessageSystemEvent:e=>{q({messageSystemEvent:e})},setMessageSentEvent:e=>{q({messageSentEvent:e})},setMessageReadEvent:e=>{q({messageReadEvent:e})},setMessageEditEvent:e=>{q({messageEditEvent:e})},setMessageDeleteEvent:e=>{q({messageDeleteEvent:e})},setMessageErrorEvent:e=>{q({messageErrorEvent:e})},resetMessageEventStore:()=>{q(Lu)}}))),Fu={typingStatus:{},typingTimers:{}},Yu=Wt()(Ht((q,e)=>({...Fu,setTypingStatus:(t,r,A)=>{const n=e().typingStatus||{},o=n[t]?new Set(n[t]):new Set;A?o.add(r):o.delete(r),q({typingStatus:{...n,[t]:[...o]}})},addTypingTimer:(t,r,A)=>{const n=e().typingTimers||{},o=n[t]||{},a={...n,[t]:{...o,[r]:A}};q({typingTimers:a})},clearTypingTimer:(t,r)=>{const A=e().typingTimers||{},n=A[t]||{};clearTimeout(n[r]),delete n[r];const o={...A,[t]:{...n}};q({typingTimers:o})},resetTypingStatusStore:()=>{q(Fu)}}))),zu={users:{},usersLastRequestAt:{},onlineUsers:{},onlineUsersLastRequestAt:0,onlineUsersCount:0},Ku=Wt()(Ht((q,e)=>({...zu,upsertUser:t=>{q({users:{...e().users,[t.id]:t}})},upsertUsers:t=>{q({users:t.reduce((r,A)=>({...r,[A.id]:A}),{...e().users})})},upsertUsersLastRequestAt:t=>{q({...e().usersLastRequestAt,...t})},setOnlineUsers:t=>{q({onlineUsers:t.reduce((r,A)=>({...r,[A.id]:A}),{})})},updateOnlineUser:t=>{e().onlineUsers[t.id]&&q({onlineUsers:{...e().onlineUsers,[t.id]:t}})},updateOnlineUsers:t=>{q({onlineUsers:t.reduce((r,A)=>r[A.id]?{...r,[A.id]:A}:r,{...e().onlineUsers})})},setOnlineUsersLastRequestAt:t=>{q({onlineUsersLastRequestAt:t})},setOnlineUsersCount:t=>{q({onlineUsersCount:t})},resetUsersStore:()=>{q(zu)}})));var gr,re;(function(q){q[q.USER=0]="USER",q[q.DISPLAY=1]="DISPLAY"})(gr||(gr={})),(function(q){q.ON_CALL="onCall",q.ON_STOP_CALLING="onStopCalling",q.ON_ACCEPT="onAccept",q.ON_REJECT="onReject",q.ON_STOP="onStop",q.ON_NOT_ANSWER="onNotAnswer",q.ON_CONNECTION_STATE="onConnectionState"})(re||(re={}));const pr={incomingCallCallData:null,incomingCallStopData:null,activeCallAcceptData:null,activeCallRejectData:null,activeCallStopData:null,activeCallNotAnswerData:null,activeCallConnectionStateData:null,deviceChangeEvent:null},cb={localStream:null,remoteStreams:{},userMediaParams:{video:!0,audio:!0},displayMediaParams:{video:!0,audio:!1},activeMedia:gr.USER},Br={activeCall:null,incomingCall:null,...pr,...cb,participantsIDs:new Set,attachedVideochatListeners:new Set},Ju=Wt()(Ht((q,e)=>({...Br,setActiveCall:t=>{q({activeCall:t})},resetActiveCall:()=>{q({activeCall:Br.activeCall})},setIncomingCall:t=>{q({incomingCall:t})},resetIncomingCall:()=>{q({incomingCall:Br.incomingCall})},setDeviceChangeEvent:t=>{q({deviceChangeEvent:t})},upsertSessionData:(t,r)=>{switch(t){case re.ON_CALL:q({incomingCallCallData:r});break;case re.ON_STOP_CALLING:q({incomingCallStopData:r});break;case re.ON_ACCEPT:q({activeCallAcceptData:r});break;case re.ON_REJECT:q({activeCallRejectData:r});break;case re.ON_STOP:q({activeCallStopData:r});break;case re.ON_NOT_ANSWER:q({activeCallNotAnswerData:r});break;case re.ON_CONNECTION_STATE:q({activeCallConnectionStateData:r})}},resetSessionData:t=>{switch(t){case re.ON_CALL:q({incomingCallCallData:pr.incomingCallCallData});break;case re.ON_STOP_CALLING:q({incomingCallStopData:pr.incomingCallStopData});break;case re.ON_ACCEPT:q({activeCallAcceptData:pr.activeCallAcceptData});break;case re.ON_REJECT:q({activeCallRejectData:pr.activeCallRejectData});break;case re.ON_STOP:q({activeCallStopData:pr.activeCallStopData});break;case re.ON_NOT_ANSWER:q({activeCallNotAnswerData:pr.activeCallNotAnswerData});break;case re.ON_CONNECTION_STATE:q({activeCallConnectionStateData:pr.activeCallConnectionStateData});break;default:q(pr)}},setLocalStream:t=>{q({localStream:t})},resetLocalStream:()=>{q({localStream:Br.localStream})},addRemoteStream:(t,r)=>{q({remoteStreams:{...e().remoteStreams,[t]:r}})},removeRemoteStream:t=>{const r={...e().remoteStreams};delete r[t],q({remoteStreams:r})},resetRemoteStreams:()=>{q({remoteStreams:Br.remoteStreams})},saveUserMediaParams:t=>{q({userMediaParams:t})},resetUserMediaParams:()=>{q({userMediaParams:Br.userMediaParams})},saveDisplayMediaParams:t=>{q({displayMediaParams:t})},resetDisplayMediaParams:()=>{q({displayMediaParams:Br.displayMediaParams})},saveActiveMedia:t=>{q({activeMedia:t})},setParticipantsIDs:t=>{q({participantsIDs:new Set(t)})},participantDidEnter:t=>{const r=new Set([...e().participantsIDs]);r.add(t),q({participantsIDs:r})},participantDidLeave:t=>{const r=new Set([...e().participantsIDs]);r.delete(t),q({participantsIDs:r})},attachVideochatListeners:t=>{const r=e().attachedVideochatListeners??new Set;Object.entries(t).forEach(([A,n])=>{const o=A;r.has(o)||(Z.videochat.addListener(o,n),r.add(o))}),q({attachedVideochatListeners:r})},resetVideochatStore:()=>{q({...Br})}}))),ub=Tr(Pu),Zu=Tr(xi),db=Tr(Lo),Fo=Tr(Mi),gb=Tr(Ci),pb=Tr(Yu),Wu=Tr(Ku),Ii=Tr(Ju),fb=()=>{const[q,e,t]=Pu(Tt(a=>[a.blockedUsers,a.setBlockedUsers,a.fetchBlockList])),r=Zu("isConnected"),A=ub("isFetched"),n=async(a,s)=>{if(!r.current)return void hn.warn("upsert",`${s} user ${a} failed, chat is not connected`);const V=new Set(q),l={name:yn,items:[{user_id:a,action:s,mutualBlock:!0}]};try{s===Z.PrivacyListAction.DENY?V.add(a):s===Z.PrivacyListAction.ALLOW&&V.delete(a),A.current?(await Z.chat.privacylist.setAsDefault(null),await Z.chat.privacylist.update(l),V.size>0&&await Z.chat.privacylist.setAsDefault(yn)):(await Z.chat.privacylist.create(l),await Z.chat.privacylist.setAsDefault(yn))}catch(i){return void hn.error("upsert",i)}finally{e(V)}},o=a=>q.has(a);return M.useEffect(()=>{t()},[]),{blockedUsers:Array.from(q),blockUser:async a=>{o(a)?hn.warn("block",`user ${a} is already blocked`):await n(a,Z.PrivacyListAction.DENY)},unblockUser:async a=>{o(a)?await n(a,Z.PrivacyListAction.ALLOW):hn.warn("unblock",`user ${a} is not blocked`)},isBlockedUser:o}},ki=43200,Hu=Symbol.for("constructDateFrom");function Ti(q,e){return typeof q=="function"?q(e):q&&typeof q=="object"&&Hu in q?q[Hu](e):q instanceof Date?new q.constructor(e):new Date(e)}function Dr(q,e){return Ti(q,q)}let hb={};function mb(){return hb}function Xu(q){const e=Dr(q),t=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()));return t.setUTCFullYear(e.getFullYear()),+q-+t}function Bi(q,...e){const t=Ti.bind(null,q||e.find(r=>typeof r=="object"));return e.map(t)}function Yo(q,e){const t=+Dr(q)-+Dr(e);return t<0?-1:t>0?1:t}function yb(q,e){const t=Dr(q);return+(function(r){const A=Dr(r);return A.setHours(23,59,59,999),A})(t)==+(function(r){const A=Dr(r),n=A.getMonth();return A.setFullYear(A.getFullYear(),n+1,0),A.setHours(23,59,59,999),A})(t)}function wb(q,e,t){const[r,A,n]=Bi(t?.in,q,q,e),o=Yo(A,n),a=Math.abs((function(l,i,d){const[g,p]=Bi(d?.in,l,i);return 12*(g.getFullYear()-p.getFullYear())+(g.getMonth()-p.getMonth())})(A,n));if(a<1)return 0;A.getMonth()===1&&A.getDate()>27&&A.setDate(30),A.setMonth(A.getMonth()-o*a);let s=Yo(A,n)===-o;yb(r)&&a===1&&Yo(r,n)===1&&(s=!1);const V=o*(a-+s);return V===0?0:V}function vb(q,e,t){const r=(function(n,o){return+Dr(n)-+Dr(o)})(q,e)/1e3;return(A=t?.roundingMethod,n=>{const o=(A?Math[A]:Math.trunc)(n);return o===0?0:o})(r);var A}const Eb={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}};function Di(q){return(e={})=>{const t=e.width?String(e.width):q.defaultWidth;return q.formats[t]||q.formats[q.defaultWidth]}}const Mb={date:Di({formats:{full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},defaultWidth:"full"}),time:Di({formats:{full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},defaultWidth:"full"}),dateTime:Di({formats:{full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},defaultWidth:"full"})},bb={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"};function vn(q){return(e,t)=>{let r;if((t?.context?String(t.context):"standalone")==="formatting"&&q.formattingValues){const A=q.defaultFormattingWidth||q.defaultWidth,n=t?.width?String(t.width):A;r=q.formattingValues[n]||q.formattingValues[A]}else{const A=q.defaultWidth,n=t?.width?String(t.width):q.defaultWidth;r=q.values[n]||q.values[A]}return r[q.argumentCallback?q.argumentCallback(e):e]}}function En(q){return(e,t={})=>{const r=t.width,A=r&&q.matchPatterns[r]||q.matchPatterns[q.defaultMatchWidth],n=e.match(A);if(!n)return null;const o=n[0],a=r&&q.parsePatterns[r]||q.parsePatterns[q.defaultParseWidth],s=Array.isArray(a)?(function(l,i){for(let d=0;d<l.length;d++)if(i(l[d]))return d})(a,l=>l.test(o)):(function(l,i){for(const d in l)if(Object.prototype.hasOwnProperty.call(l,d)&&i(l[d]))return d})(a,l=>l.test(o));let V;return V=q.valueCallback?q.valueCallback(s):s,V=t.valueCallback?t.valueCallback(V):V,{value:V,rest:e.slice(o.length)}}}var Mn;const Cb={code:"en-US",formatDistance:(q,e,t)=>{let r;const A=Eb[q];return r=typeof A=="string"?A:e===1?A.one:A.other.replace("{{count}}",e.toString()),t?.addSuffix?t.comparison&&t.comparison>0?"in "+r:r+" ago":r},formatLong:Mb,formatRelative:(q,e,t,r)=>bb[q],localize:{ordinalNumber:(q,e)=>{const t=Number(q),r=t%100;if(r>20||r<10)switch(r%10){case 1:return t+"st";case 2:return t+"nd";case 3:return t+"rd"}return t+"th"},era:vn({values:{narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},defaultWidth:"wide"}),quarter:vn({values:{narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},defaultWidth:"wide",argumentCallback:q=>q-1}),month:vn({values:{narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},defaultWidth:"wide"}),day:vn({values:{narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},defaultWidth:"wide"}),dayPeriod:vn({values:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},defaultWidth:"wide",formattingValues:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},defaultFormattingWidth:"wide"})},match:{ordinalNumber:(Mn={matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:q=>parseInt(q,10)},(q,e={})=>{const t=q.match(Mn.matchPattern);if(!t)return null;const r=t[0],A=q.match(Mn.parsePattern);if(!A)return null;let n=Mn.valueCallback?Mn.valueCallback(A[0]):A[0];return n=e.valueCallback?e.valueCallback(n):n,{value:n,rest:q.slice(r.length)}}),era:En({matchPatterns:{narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^b/i,/^(a|c)/i]},defaultParseWidth:"any"}),quarter:En({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},defaultMatchWidth:"wide",parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:"any",valueCallback:q=>q+1}),month:En({matchPatterns:{narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},defaultParseWidth:"any"}),day:En({matchPatterns:{narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},defaultParseWidth:"any"}),dayPeriod:En({matchPatterns:{narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},defaultMatchWidth:"any",parsePatterns:{any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},defaultParseWidth:"any"})},options:{weekStartsOn:0,firstWeekContainsDate:1}};function _u(q,e){return(function(t,r,A){const n=mb(),o=A?.locale??n.locale??Cb,a=Yo(t,r);if(isNaN(a))throw new RangeError("Invalid time value");const s=Object.assign({},A,{addSuffix:A?.addSuffix,comparison:a}),[V,l]=Bi(A?.in,...a>0?[r,t]:[t,r]),i=vb(l,V),d=(Xu(l)-Xu(V))/1e3,g=Math.round((i-d)/60);let p;if(g<2)return A?.includeSeconds?i<5?o.formatDistance("lessThanXSeconds",5,s):i<10?o.formatDistance("lessThanXSeconds",10,s):i<20?o.formatDistance("lessThanXSeconds",20,s):i<40?o.formatDistance("halfAMinute",0,s):i<60?o.formatDistance("lessThanXMinutes",1,s):o.formatDistance("xMinutes",1,s):g===0?o.formatDistance("lessThanXMinutes",1,s):o.formatDistance("xMinutes",g,s);if(g<45)return o.formatDistance("xMinutes",g,s);if(g<90)return o.formatDistance("aboutXHours",1,s);if(g<1440){const f=Math.round(g/60);return o.formatDistance("aboutXHours",f,s)}if(g<2520)return o.formatDistance("xDays",1,s);if(g<ki){const f=Math.round(g/1440);return o.formatDistance("xDays",f,s)}if(g<86400)return p=Math.round(g/ki),o.formatDistance("aboutXMonths",p,s);if(p=wb(l,V),p<12){const f=Math.round(g/ki);return o.formatDistance("xMonths",f,s)}{const f=p%12,v=Math.trunc(p/12);return f<3?o.formatDistance("aboutXYears",v,s):f<9?o.formatDistance("overXYears",v,s):o.formatDistance("almostXYears",v+1,s)}})(q,(function(t){return Ti(t,Date.now())})(q),e)}const zo=100,$u=()=>{const q=Lo(y=>y.currentUserId),[e,t,r,A,n,o,a,s,V,l,i]=Ku(Tt(y=>[y.users,y.upsertUser,y.upsertUsers,y.upsertUsersLastRequestAt,y.onlineUsers,y.setOnlineUsers,y.updateOnlineUser,y.updateOnlineUsers,y.setOnlineUsersLastRequestAt,y.onlineUsersCount,y.setOnlineUsersCount])),d=Wu("usersLastRequestAt"),g=Wu("onlineUsersLastRequestAt"),p=async y=>{const{items:m}=await Z.users.getV2(y),w={};return r(m),s(m),m.forEach(h=>{w[h.id]=Date.now()}),A(w),m},f=M.useCallback(async y=>{const{items:m}=await Z.users.getV2({full_name:{start_with:y},limit:zo}),{items:w}=await Z.users.getV2({login:{start_with:y},limit:zo}),h=new Map;return[...m,...w].forEach(u=>{h.set(u.id,u)}),Array.from(h.values()).filter(u=>u.id!==q)},[q]),v=async()=>{let y=l;try{const{count:m}=await Z.users.getOnlineCount();y=m,i(y)}catch(m){vi.error("getOnlineCount",m)}return y};return{users:e,fetchUsers:p,fetchUserById:async(y,m=!1)=>{const w=d.current[y]||0,h=Date.now()-w>3e4;let u=e[y];if(h||m){const E=await Z.users.getV2({id:y,limit:1}),C=E?.items?.[0];C&&(t(C),a(C),A({[y]:Date.now()}),u=C)}return u},fetchUsersByIds:async y=>{let m=[];const w=y.filter(h=>!m[h]);return w.length>0&&(m=await p({limit:zo,id:{in:w}})),m},searchUsers:f,onlineUsers:Object.values(n),fetchAllOnlineUsers:async(y=!1)=>{if(Date.now()-g.current>6e4||y){const m=await(async()=>{const w=await v(),h=[];try{let u=zo,E=0;for(;E<w;)h.push(Z.users.listOnline({limit:u,offset:E}).then(({users:S})=>S)),E+=u;const C=(await Promise.all(h)).flat();return r(C),o(C),C}catch(u){return vi.error("listOnline",u),[]}})();return V(Date.now()),m}return Object.values(n)},fetchOnlineUsers:async y=>{try{const{users:m}=await Z.users.listOnline(y);return r(m),o(m),m}catch(m){return vi.error("listOnlineWithParams",m),[]}},onlineUsersCount:l,fetchOnlineUsersCount:v}};var Ue;(function(q){q.NEW_DIALOG="dialog/NEW_DIALOG",q.ADDED_TO_DIALOG="dialog/ADDED_TO_DIALOG",q.REMOVED_FROM_DIALOG="dialog/REMOVED_FROM_DIALOG",q.ADD_PARTICIPANTS="dialog/ADD_PARTICIPANTS",q.REMOVE_PARTICIPANTS="dialog/REMOVE_PARTICIPANTS",q.DELETE_DIALOG="dialog/DELETE_DIALOG"})(Ue||(Ue={}));const Sb=()=>{const{fetchUsersByIds:q}=$u(),[e,t,r]=Lo(Tt(I=>[I.currentUserId,I.setCurrentUserId,I.resetCurrentUserId])),[A,n]=Vb(Tt(I=>[I.lastActivity,I.upsertLastActivity])),[o,a,s,V,l,i,d,g,p,f,v,y,m,w,h,u,E,C,S,k]=Mi(Tt(I=>[I.dialogs,I.upsertDialog,I.upsertDialogs,I.updateDialog,I.updateDialogOnMessage,I.updateDialogOnReadMessage,I.addParticipantsToDialog,I.removeParticipantsFromDialog,I.removeDialog,I.selectedDialog,I.setSelectedDialog,I.resetSelectedDialog,I.activateDialog,I.resetActivatedDialogs,I.addPrivateDialogId,I.removePrivateDialogId,I.unreadMessagesCount,I.totalDialogsReached,I.setTotalDialogsReached,I.resetTotalDialogsReached])),[D,L,Q,j,T,x,B,F,G,P,N]=Ci(Tt(I=>[I.messages,I.addMessage,I.addMessages,I.updateMessage,I.updateMessageStatus,I.markMessagesAsLost,I.removeMessages,I.clearMessages,I.totalMessagesReached,I.setTotalMessagesReached,I.resetTotalMessagesReached])),[Y,_,R,H,aq,Aq,qq,W,nq,cq,Mq,tq,Tq,Yq,Lq]=lb(Tt(I=>[I.messageEvent,I.messageSystemEvent,I.messageSentEvent,I.messageReadEvent,I.messageEditEvent,I.messageDeleteEvent,I.messageErrorEvent,I.setMessageEvent,I.setMessageSystemEvent,I.setMessageSentEvent,I.setMessageReadEvent,I.setMessageEditEvent,I.setMessageDeleteEvent,I.setMessageErrorEvent,I.resetMessageEventStore])),[$,gq,Rq,Jq,U,K,J]=xi(Tt(I=>[I.isOnline,I.isConnected,I.chatStatus,I.setIsConnected,I.setChatStatus,I.handleNetworkStatus,I.attachChatListeners])),[rq,oq,Vq,pq,Oq]=Yu(Tt(I=>[I.typingStatus,I.setTypingStatus,I.addTypingTimer,I.clearTypingTimer,I.resetTypingStatusStore])),Nq=db("currentUserId"),oe=Zu("chatStatus"),Ce=gb("messages"),Se=Fo("dialogs"),Xe=Fo("selectedDialog"),Ve=Fo("activatedDialogs"),Ye=Fo("privateDialogsIds"),Ft=pb("typingTimers"),cr=async(I=Xq.DISCONNECTED)=>{let z=!1;return Z.chat.isConnected&&(z=await Z.chat.disconnect(),Jq(!1),r(),Lq(),Oq(),U(I),at()),z},qA=(I=Xq.DISCONNECTED)=>{Z.chat.terminate(),U(I),at(),x()},at=()=>{w(),k(),N()},st=async I=>{const z={sort_desc:"date_sent",limit:100,skip:0,...I},{items:eq,skip:sq,limit:bq,total_entries:Qq}=await Z.chat.dialog.list(z);S(sq+bq>=Qq),s(eq);const Ae=eq.flatMap(mt=>mt.occupants_ids),te=Array.from(new Set(Ae));return q(te),eq},Yt=async(I,z=0)=>{try{const eq=await(async(sq,bq={})=>{const Qq={chat_dialog_id:sq,sort_desc:"date_sent",limit:100,skip:0,...bq};try{const{items:Ae,skip:te,limit:mt}=await Z.chat.message.list(Qq),Re=Ce.current[sq]??[],Jt=te+mt>Ae.length+Re.length;return P(sq,Jt),Ae.sort((bA,Io)=>bA._id.toString().localeCompare(Io._id.toString())).map(bA=>{const Io=bA.attachments?.map(Vi=>({...Vi,url:Z.storage.privateUrl(Vi.uid)}));return{...bA,attachments:Io,status:bA.read?he.READ:he.SENT}})}catch(Ae){if(Ae.code===404)return[];throw Ae}})(I,{skip:z});return Q(I,eq),eq}catch(eq){throw eq}},eA=async I=>Yt(I),it=I=>{if(I??=f,!I)throw"No dialog provided. You need to provide a dialog via function argument or select a dialog via 'selectDialog'.";if(I.type!==Z.DialogType.PRIVATE)return;const z=I.occupants_ids.find(eq=>eq!==e);return z&&h(z,I._id),z},tA=I=>Se.current.find(z=>z.type===Z.DialogType.PRIVATE&&z.occupants_ids.includes(I)),Iq=async I=>{const z={read:1,chat_dialog_id:I._id};await Z.chat.message.update("",z),V(I._id,{unread_messages_count:0})},pe=Z.chat.helpers.getBsonObjectId,we=(I,z,eq={})=>{if(z??=f,!z)throw"No dialog provided. You need to provide a dialog via function argument or select a dialog via 'selectDialog'.";const sq=it(z),bq=ke(I,null,z,sq,eq);zt(bq,I,z._id,e,sq,void 0,!1,eq)},ke=(I,z,eq,sq,bq)=>{const Qq={type:eq.type===Z.DialogType.PRIVATE?Z.ChatType.CHAT:Z.ChatType.GROUPCHAT,body:I,extension:{save_to_history:1,dialog_id:eq._id,...bq}};return z&&(Qq.extension.attachments=z),Z.chat.send(eq.type===Z.DialogType.PRIVATE?sq:eq._id,Qq)},zt=(I,z,eq,sq,bq,Qq,Ae,te)=>{const mt=Math.round(new Date().getTime()/1e3),Re={...te||{},_id:I,created_at:mt,updated_at:mt,chat_dialog_id:eq,message:z,sender_id:sq,recipient_id:bq,date_sent:mt,read:0,read_ids:[sq],delivered_ids:[sq],views_count:0,attachments:Qq||[],reactions:{},isLoading:Ae,status:oe.current===Xq.CONNECTED?he.WAIT:he.LOST},Jt={last_message:Re.message,last_message_user_id:Re.sender_id,last_message_date_sent:Re.date_sent};V(eq,Jt),L(eq,Re)},ae=(I,z,eq,sq={})=>{ur(eq,I,{dialogId:z,...sq})},Te=(I,z,eq=[],sq={})=>{const bq=z._id,Qq=z.occupants_ids.filter(Ae=>!eq.includes(Ae)&&Ae!==e);ae(I,bq,Qq,sq)},ur=(I,z,eq={})=>{const sq=Array.isArray(I)?I:[I],bq={body:z,extension:eq};sq.forEach(Qq=>{Z.chat.sendSystemMessage(Qq,bq)})},ze=(I,z)=>{typeof I=="number"&&z>=0&&n(I,Ru(z))},_e=()=>{oe.current!==Xq.CONNECTING&&(U(Xq.DISCONNECTED),at()),x()},sn=()=>{U(Xq.CONNECTED)},Kt=async(I={})=>{I?.condition==="not-authorized"||I?.text==="Password not verified"||I?.name==="SASLError"?await cr(Xq.NOT_AUTHORIZED)||qA(Xq.NOT_AUTHORIZED):U(Xq.ERROR)},ii=(I,z)=>{if(W({userId:I,message:z}),I===Nq.current||z.delay&&z.type===Z.ChatType.CHAT)return;const eq=z.dialog_id,sq=z.id,bq=z.body||"",Qq=z.type===Z.ChatType.CHAT?Nq.current:void 0,Ae=z.extension.attachments?.length>0?z.extension.attachments.map(te=>({...te,url:Z.storage.privateUrl(te.uid)})):void 0;zt(sq,bq,eq,I,Qq,Ae,!1,z.extension),oq(eq,I,!1),pq(eq,I),l(eq,z)},O=(I,z)=>{Yq({messageId:I,error:z})},iq=(I,z)=>{cq({lost:I,sent:z});const eq=z?he.SENT:I?he.LOST:void 0,sq=z?z.id:I?I.id:void 0,bq=z?z.extension.dialog_id:I?I.extension.dialog_id:void 0;eq&&sq&&bq&&T(bq,sq,eq)},fq=async I=>{const z=I.extension.dialogId,eq=I.userId;if(nq({message:I}),eq!==Nq.current)switch(I.body){case Ue.NEW_DIALOG:case Ue.ADDED_TO_DIALOG:{const sq=(await Z.chat.dialog.list({_id:z})).items[0];q(sq.occupants_ids),a(sq);break}case Ue.DELETE_DIALOG:await Z.chat.dialog.delete(z),p(z),F(z);break;case Ue.ADD_PARTICIPANTS:{const sq=I.extension.addedParticipantsIds.split(",").map(Number);q(sq),d(z,sq);break}case Ue.REMOVE_PARTICIPANTS:{const sq=I.extension.removedParticipantsIds.split(",").map(Number);g(z,sq);break}case Ue.REMOVED_FROM_DIALOG:g(z,[eq])}},Sq=(I,z,eq)=>{Mq({messageId:I,dialogId:z,userId:eq}),eq!==Nq.current&&T(z,I,he.READ,eq)},Zq=(I,z,eq)=>{const sq=eq||(bq=>{let Qq=Ye.current?.[bq];if(!Qq){const Ae=Se.current.find(te=>te.type===Z.DialogType.PRIVATE&&it(te)===bq);Ae&&(Qq=Ae._id,h(bq,Qq))}return Qq})(z);if(sq&&z&&z!==Nq.current)if(oq(sq,z,I),I){Ft.current?.[sq][z]&&pq(sq,z);const bq=setTimeout(()=>{oq(sq,z,!1),pq(sq,z)},6e3);Vq(sq,z,bq)}else oq(sq,z,!1),pq(sq,z)},ee=(I,z,eq,sq,bq)=>{tq({messageId:I,dialogId:sq,userId:bq,updatedBody:eq,isLast:z}),j(sq,I,{body:eq}),z&&l(sq,{id:I,body:eq},!0)},Pq=(I,z,eq)=>{Tq({messageId:I,dialogId:z,userId:eq}),B(z,[I])};return M.useEffect(()=>{K(),J({[Z.ChatEvent.DISCONNECTED]:_e,[Z.ChatEvent.RECONNECTED]:sn,[Z.ChatEvent.ERROR]:Kt,[Z.ChatEvent.MESSAGE]:ii,[Z.ChatEvent.ERROR_MESSAGE]:O,[Z.ChatEvent.SENT_MESSAGE]:iq,[Z.ChatEvent.SYSTEM_MESSAGE]:fq,[Z.ChatEvent.READ_MESSAGE]:Sq,[Z.ChatEvent.TYPING_MESSAGE]:Zq,[Z.ChatEvent.UPDATE_MESSAGE]:ee,[Z.ChatEvent.DELETE_MESSAGE]:Pq})},[]),{isConnected:gq,chatStatus:Rq,connect:async I=>{U(Xq.CONNECTING);try{const z=await Z.chat.connect(I);return z&&(U(Xq.CONNECTED),Jq(z),t(I.userId)),z}catch(z){return U(Xq.DISCONNECTED),console.error(`Failed to connect due to ${z}`),!1}},terminate:qA,disconnect:cr,dialogs:o,selectedDialog:f,totalDialogsReached:C,unreadMessagesCount:E,selectDialog:async I=>{if(!I)return y();I._id!==Xe.current?._id&&(v(I),Ve.current?.has(I._id)||(await eA(I._id),m(I._id)),I.unread_messages_count>0&&await Iq(I).catch(z=>{}))},unselectDialog:y,createChat:async(I,z)=>{const eq={type:Z.DialogType.PRIVATE,occupants_ids:[I],extensions:z},sq=await Z.chat.dialog.create(eq);return a(sq),P(sq._id,!0),h(I,sq._id),ae(Ue.NEW_DIALOG,sq._id,I),e&&q([I,e]),sq},createGroupChat:async(I,z,eq,sq)=>{const bq={name:z,photo:eq,type:Z.DialogType.GROUP,occupants_ids:I,extensions:sq},Qq=await Z.chat.dialog.create(bq);return a(Qq),P(Qq._id,!0),ae(Ue.NEW_DIALOG,Qq._id,I),e&&q([...I,e]),Qq},markDialogAsRead:Iq,addUsersToGroupChat:async I=>{if(!f)throw new Error("No dialog selected");const z=f._id,eq={push_all:{occupants_ids:I}};await Z.chat.dialog.update(z,eq),Te(Ue.ADD_PARTICIPANTS,f,[],{addedParticipantsIds:I.join()}),ae(Ue.ADDED_TO_DIALOG,z,I),q(I);const sq={occupants_ids:Array.from(new Set([...f.occupants_ids,...I]))};V(z,sq),v({...f,...sq})},removeUsersFromGroupChat:async I=>{if(!f)throw new Error("No dialog selected");const z=f._id,eq={pull_all:{occupants_ids:I}};await Z.chat.dialog.update(z,eq),ae(Ue.REMOVE_PARTICIPANTS,z,I),Te(Ue.REMOVE_PARTICIPANTS,f,I,{removedParticipantsIds:I.join()});const sq={occupants_ids:f.occupants_ids.filter(bq=>!I.includes(bq))};V(z,sq),v({...f,...sq})},leaveGroupChat:async I=>{if(I??=f,!I)throw"No dialog provided. You need to provide a dialog via function argument or select a dialog via 'selectDialog'.";const z=I._id;Te(Ue.REMOVED_FROM_DIALOG,I),await Z.chat.dialog.delete(z),p(z),F(z),y()},deleteChat:async I=>{if(I??=f,!I)throw"No dialog provided. You need to provide a dialog via function argument or select a dialog via 'selectDialog'.";const z=I._id,eq=it(I);eq&&(u(eq),ae(Ue.DELETE_DIALOG,z,eq)),await Z.chat.dialog.delete(z),p(z),F(z),y()},deleteGroupChat:async I=>{if(I??=f,!I)throw"No dialog provided. You need to provide a dialog via function argument or select a dialog via 'selectDialog'.";if(I.user_id!==e)throw"Only the group chat owner can delete the group chat.";const z=I._id;Te(Ue.DELETE_DIALOG,I),await Z.chat.dialog.delete(z,{force:1}),p(z),F(z),y()},fetchDialogs:st,fetchNextDialogs:async()=>{const I=Se.current.length;return st({skip:I})},lastMessageSentTimeString:I=>_u(I.last_message_date_sent?1e3*I.last_message_date_sent:I.created_at,{addSuffix:!0}),getDialogOpponentId:it,getPrivateDialogByUserId:tA,messages:D,totalMessagesReached:G,fetchMessages:eA,fetchNextMessages:async I=>{const z=(Ce.current[I]??[]).length;return Yt(I,z)},sendMessage:we,sendMessageByUserId:(I,z,eq={})=>{const sq=tA(z);if(!sq)throw"Dialog not found.";we(I,sq,eq)},sendAttachment:async(I,z)=>{if(z??=f,!z)throw"No dialog provided. You need to provide a dialog via function argument or select a dialog via 'selectDialog'.";const eq=z._id,sq=it(z),bq=Date.now()+"",Qq=I.map((Re,Jt)=>({uid:`local-${bq}-${Jt}`,type:Re.type,url:URL.createObjectURL(Re)}));zt(bq,"Attachment",eq,e,sq,Qq,!0);const Ae=I.map(Re=>{const{name:Jt,type:bA,size:Io}=Re,Vi={file:Re,name:Jt,type:bA,size:Io,public:!1};return Z.storage.createAndUpload(Vi)}),te=(await Promise.all(Ae)).map(({uid:Re,content_type:Jt=""})=>({uid:Re,type:Jt,url:Z.storage.privateUrl(Re)})),mt={_id:ke("Attachment",te,z,sq),attachments:Qq,isLoading:!1,status:oe.current===Xq.CONNECTED?he.WAIT:he.LOST};j(eq,bq,mt)},sendSignal:ur,readMessage:(I,z,eq)=>{Z.chat.sendReadStatus({messageId:I,userId:z,dialogId:eq}),T(eq,I,he.READ,z),i(eq)},editMessage:(I,z,eq)=>{if(eq??=f,!eq)throw"No dialog provided. You need to provide a dialog via function argument or select a dialog via 'selectDialog'.";const sq=eq._id,bq=eq.type===Z.DialogType.PRIVATE?it(eq):sq,Qq=eq.last_message_id===I;Z.chat.editMessage({to:bq,body:z,dialogId:sq,originMessageId:I,last:Qq}),j(sq,I,{message:z})},deleteMessages:async(I,z=[],eq=!1)=>{if(I??=f,!I)throw"No dialog provided. You need to provide a dialog via function argument or select a dialog via 'selectDialog'.";if(!z||z.length===0)throw"No messages to delete. You need to provide a message id or messages ids via function argument.";await Z.chat.message.delete(z,{force:eq?1:0}),B(I._id,z)},clearChatHistory:async I=>{if(I??=f,!I)throw"No dialog provided. You need to provide a dialog via function argument or select a dialog via 'selectDialog'.";await Z.chat.dialog.clearHistory(I._id),F(I._id)},messageSentTimeString:I=>_u(1e3*I.date_sent,{addSuffix:!0}),generateTempMessageId:pe,addTempMessage:(I,z,eq={})=>{if(z??=f,!z)throw"No dialog provided. You need to provide a dialog via function argument or select a dialog via 'selectDialog'.";const sq=Math.round(new Date().getTime()/1e3),bq=I||Z.chat.helpers.getBsonObjectId(),Qq={created_at:sq,updated_at:sq,date_sent:sq,message:eq.body,sender_id:0,...eq,_id:I||bq,chat_dialog_id:z._id,custom:!0};return L(z._id,Qq),bq},updateTempMessage:(I,z,eq={})=>{if(z??=f,!z)throw"No dialog provided. You need to provide a dialog via function argument or select a dialog via 'selectDialog'.";const sq={...eq,updated_at:Math.round(new Date().getTime()/1e3),chat_dialog_id:z._id,message:eq.body||eq.message,custom:!0};typeof sq.message!="string"&&delete sq.message,j(z._id,I,sq)},messageEvent:Y,messageErrorEvent:qq,messageSentEvent:R,messageReadEvent:H,messageEditEvent:aq,messageDeleteEvent:Aq,messageSystemEvent:_,lastActivity:A,getLastActivity:async I=>{try{const{seconds:z}=await Z.chat.getLastUserActivity(I),eq=Ru(z);return n(I,eq),eq}catch(z){return xA.error("getLastActivity",z),"Last seen recently"}},subscribeToLastActivity:I=>{Z.chat.subscribeToUserLastActivityStatus(I),Z.chat.addListener(Z.ChatEvent.USER_LAST_ACTIVITY,ze)},unsubscribeFromLastActivity:I=>{Z.chat.unsubscribeFromUserLastActivityStatus(I),Z.chat.removeListener(Z.ChatEvent.USER_LAST_ACTIVITY)},isOnline:$,typingStatus:rq,sendTypingStatus:I=>{if(I??=f,!I)throw"No dialog provided. You need to provide a dialog via function argument or select a dialog via 'selectDialog'.";Z.chat.sendIsTypingStatus(I.type===Z.DialogType.PRIVATE?it(I):I._id)}}};var Xt;(function(q){q.MUTE_AUDIO="audio-mute",q.UNMUTE_AUDIO="audio-unmute",q.MUTE_VIDEO="video-mute",q.UNMUTE_VIDEO="video-unmute"})(Xt||(Xt={}));const xb=()=>{const[q,e]=M.useState(0),[t,r,A,n,o,a,s,V,l,i,d,g,p,f,v,y,m,w,h,u,E,C,S,k,D,L,Q,j,T,x,B,F,G]=Ju(Tt($=>[$.activeCall,$.setActiveCall,$.incomingCall,$.setIncomingCall,$.resetIncomingCall,$.activeMedia,$.saveActiveMedia,$.userMediaParams,$.saveUserMediaParams,$.displayMediaParams,$.saveDisplayMediaParams,$.localStream,$.setLocalStream,$.remoteStreams,$.addRemoteStream,$.removeRemoteStream,$.deviceChangeEvent,$.setDeviceChangeEvent,$.incomingCallCallData,$.incomingCallStopData,$.activeCallAcceptData,$.activeCallRejectData,$.activeCallStopData,$.activeCallNotAnswerData,$.activeCallConnectionStateData,$.resetSessionData,$.participantsIDs,$.setParticipantsIDs,$.upsertSessionData,$.participantDidEnter,$.participantDidLeave,$.attachVideochatListeners,$.resetVideochatStore])),P=Ii("activeCall"),N=Ii("incomingCall");Ii("attachedVideochatListeners");const Y=M.useCallback(async $=>{if(A){const{currentUserID:gq,initiatorID:Rq,opponentsIDs:Jq}=A,U=[...Jq,Rq].filter(K=>K!==gq);L(),j(U);try{await H(A),A.accept($),o()}catch(K){qt.error("acceptCall",K),A.stop($)}finally{o()}}},[A]),_=M.useCallback($=>{A?.reject($),o()},[A]),R=M.useCallback($=>{G(),t?.stop($)},[t]),H=M.useCallback(async $=>{const gq=a===gr.DISPLAY?await $.getDisplayMedia(i):await $.getUserMedia(V);$.callType===Z.CallType.AUDIO&&gq.getVideoTracks().forEach(Rq=>Rq.enabled=!1),p(gq),r($)},[a,V,i]),aq=($,gq)=>{$.initiatorID!==$.currentUserID&&(n($),T(re.ON_CALL,{userInfo:gq}),qt.log("onCall",{session:$,ext:gq}))},Aq=($,gq,Rq)=>{x(gq),T(re.ON_ACCEPT,{userID:gq,userInfo:Rq}),qt.log("onAccept",{session:$,userID:gq,ext:Rq})},qq=($,gq,Rq)=>{B(gq),T(re.ON_REJECT,{userID:gq,userInfo:Rq}),qt.log("onReject",{session:$,userID:gq,ext:Rq})},W=($,gq,Rq)=>{P.current?.ID===$.ID&&(B(gq),y(gq),T(re.ON_STOP,{userID:gq,userInfo:Rq})),N.current?.ID===$.ID&&(T(re.ON_STOP_CALLING,{userID:gq,userInfo:Rq}),o()),qt.log("onStop",{session:$,userID:gq,ext:Rq})},nq=($,gq)=>{B(gq),T(re.ON_NOT_ANSWER,{userID:gq}),qt.log("onNotAnswer",{session:$,userID:gq})},cq=($,gq,Rq)=>{v(gq,Rq),qt.log("onRemoteStream",{session:$,userID:gq,stream:Rq})},Mq=($,gq,Rq)=>{T(re.ON_CONNECTION_STATE,{userID:gq,connectionState:Rq}),qt.log("onConnectionState",{session:$,userID:gq,connectionState:Rq})},tq=$=>{w($),qt.log("onDevicesChange",{event:$})},Tq=M.useMemo(()=>{const $=g?.getAudioTracks();return!$||$.length===0||$.every(gq=>!gq.enabled)},[g,q]),Yq=M.useMemo(()=>{const $=g?.getVideoTracks();return!$||$.length===0||$.every(gq=>!gq.enabled)},[g,q]),Lq=M.useCallback(async $=>{if(t){switch($){case Xt.MUTE_AUDIO:t.mute(Z.MediaType.AUDIO);break;case Xt.MUTE_VIDEO:t.mute(Z.MediaType.VIDEO);break;case Xt.UNMUTE_AUDIO:t.unmute(Z.MediaType.AUDIO);break;case Xt.UNMUTE_VIDEO:t.unmute(Z.MediaType.VIDEO)}e(gq=>gq+1)}},[t]);return M.useEffect(()=>{t&&Q.size===0&&R()},[t,Q]),M.useEffect(()=>{F({[Z.CallEvent.CALL]:aq,[Z.CallEvent.ACCEPT]:Aq,[Z.CallEvent.REJECT]:qq,[Z.CallEvent.STOP]:W,[Z.CallEvent.NOT_ANSWER]:nq,[Z.CallEvent.REMOTE_STREAM]:cq,[Z.CallEvent.CONNECTION_STATE]:Mq,[Z.CallEvent.DEVICES]:tq})},[]),{startCall:async($=[],gq=Z.CallType.VIDEO,Rq)=>{const Jq=Array.isArray($)?$:[$],U=Z.videochat.createNewSession(Jq,gq);try{L(),j(Jq),await H(U),U.call(Rq)}catch(K){qt.error("startCall",K),j([])}},acceptCall:Y,rejectCall:_,stopCall:R,activeCall:t,incomingCall:A,deviceChangeEvent:m,incomingCallCallData:h,incomingCallStopData:u,activeCallAcceptData:E,activeCallRejectData:C,activeCallStopData:S,activeCallNotAnswerData:k,activeCallConnectionStateData:D,resetSessionData:L,participantsIds:Array.from(Q),activeMedia:a,setActiveMedia:async $=>{$&&s($)},localStream:g,remoteStreams:f,getUserMedia:async $=>{try{const gq=await t?.getUserMedia($??V);return s(gr.USER),gq}catch(gq){qt.error("getUserMedia",{error:gq})}},getDisplayMedia:async $=>{try{const gq=await t?.getDisplayMedia($??i);return s(gr.DISPLAY),gq}catch(gq){qt.error("getDisplayMedia",{error:gq})}},getMediaDevices:async $=>{try{return await Z.videochat.getMediaDevices($)}catch(gq){qt.error("getMediaDevices",{error:gq})}},switchMediaTracks:async $=>{try{return await t?.switchMediaTracks($)}catch(gq){qt.error("switchMediaTracks",{error:gq})}},userMediaParams:V,setUserMediaParams:async $=>{$&&l($)},displayMediaParams:i,setDisplayMediaParams:async $=>{$&&d($)},isLocalAudioMuted:Tq,muteAudio:()=>{Lq(Xt.MUTE_AUDIO)},unmuteAudio:()=>{Lq(Xt.UNMUTE_AUDIO)},isLocalVideoMuted:Yq,muteVideo:()=>{Lq(Xt.MUTE_VIDEO)},unmuteVideo:()=>{Lq(Xt.UNMUTE_VIDEO)}}},Wq=()=>{const q=fb(),e=Sb(),t=$u(),r=xb(),[A,n,o,a,s,V]=Lo(Tt(g=>[g.currentSession,g.currentUserId,g.currentUser,g.setCurrentSession,g.updateCurrentSession,g.resetCurrentSession])),l=async g=>{const p=await Z.createSession(g);return d(p),p},i=async(g,p=!0)=>{let f=null;const{email:v,login:y,password:m}=g;try{v?f=await l({email:v,password:m}):y&&(f=await l({login:y,password:m}))}catch(w){if(w?.code!==404||!p||!m||!v&&!y)throw w;{const h=(await Z.users.signup(g)).user;h.email?f=await l({email:h.email,password:m}):h.login&&(f=await l({login:h.login,password:m}))}}return f},d=g=>{Z.setSession(g),a(g)};return{currentSession:A,currentUserId:n,currentUser:o,init:(g,p)=>{Z.init(g,p)},upsertConfig:(g={})=>Z.service?.sdkInstance?.config?.set?.(g),createSession:l,createEmptySession:()=>l(),createGuestSession:g=>l({guest:"1",full_name:g}),createUserSession:i,setSession:d,getSession:async()=>{const g=await Z.getSession();return a(g),g},destroySession:async()=>{await Z.destroySession(),V()},loginUser:async g=>(await i(g,!1))?.user??null,signupUser:async g=>(await i(g,!0))?.user??null,updateUser:async g=>{const{user:p}=await Z.users.update(g);return s({user:p,user_id:p.id}),p},deleteUser:async()=>{await Z.users.delete(),s({user:null,user_id:void 0})},...q,...e,...t,...r}},qd=(q=[])=>q.slice().filter(Boolean).sort((e,t)=>e.id-t.id).reduce((e,{id:t})=>`${e}:${t}`,Ko),Ib=q=>new Promise(e=>setTimeout(e,q)),kb=q=>q.replace(/@supports\s*\(\(*\s*-webkit-hyphens\s*:\s*none\s*\)*\s*and\s*\(not\s*\(margin-trim\s*:\s*inline\)\)\s*\)\s*or\s*\(\(*\s*-moz-orient\s*:\s*inline\s*\)*\s*and\s*\(not\s*\(color\s*:\s*rgb\(from\s+red\s+r\s+g\s+b\)\)\)\s*\)\s*\{\s*([\s\S]*?)\s*\}/gm,(e,t)=>t.trim()),yt=typeof window=="object"&&typeof document=="object";var bn=(q=>(q.WRAPPER="data-connectycube-chat-widget-wrapper",q.FOCUSED="data-connectycube-chat-widget-focused",q))(bn||{});const ed="15px",td="400",Ko="external_id",rd="::current_user";var fr=(q=>(q.GET_SUMMARY="ai:get-summary",q.CHANGE_TONE="ai:change-tone",q.DEFAULT="ai:default",q))(fr||{}),nA=(q=>(q.LAST_7_DAYS="last-7-days",q.LAST_DAY="last-day",q.UNREADS="unreads",q))(nA||{}),Jo=(q=>(q.POSITIVE="positive",q.NEGATIVE="negative",q.CRINGE="cringe",q))(Jo||{}),Ni=(q=>(q.AI_TEXT_SUMMARY="ai-text-summary",q))(Ni||{});const Zo="@connectycube/chat-widget:draftMessages",Tb=()=>{try{const q=yt?localStorage?.getItem(Zo):null;return q?JSON.parse(q):{}}catch(q){return console.error("Could not load state from localStorage",q),{}}},Wo=q=>{if(yt)try{const e=JSON.stringify(q);localStorage?.setItem(Zo,e)}catch(e){console.error("Could not save state to localStorage",e)}},Bb=()=>{if(yt)try{localStorage?.removeItem(Zo)}catch(q){console.error("Could not clear state from localStorage",q)}},Ui=Tb(),Ho=je(q=>({draftMessages:Ui,setDraftMessages:e=>{q({draftMessages:e}),Wo(e)},upsertDraftMessage:e=>{q(t=>{const r={...t.draftMessages,...e};return Wo(r),{draftMessages:r}})},deleteDraftMessage:e=>{q(t=>{const r={...t.draftMessages};return delete r[e],Wo(r),{draftMessages:r}})},resetDraftMessages:()=>{q({draftMessages:Ui}),Wo(Ui)}})),Db=()=>{Bb(),Ho.setState({draftMessages:{}})},Ad=async({hardwareOnly:q=!0,debug:e=!1}={})=>{const{cookieEnabled:t,deviceMemory:r,doNotTrack:A,hardwareConcurrency:n,language:o,languages:a,maxTouchPoints:s,platform:V,userAgent:l,vendor:i}=window.navigator,d=/Mobi|Android|iPhone|iPad|iPod/i.test(navigator.userAgent),{width:g,height:p,colorDepth:f,pixelDepth:v}=d?window.screen:{},y=new Date().getTimezoneOffset(),m=Intl.DateTimeFormat().resolvedOptions().timeZone,w="ontouchstart"in window,h=window.devicePixelRatio,u=Nb(e),E=await Qb(e),C=Rb(),S=Ub(e),k=Ob(),D=q?{audioInfo:C,audio:E,canvas:u,colorDepth:f,deviceMemory:r,devicePixelRatio:h,hardwareConcurrency:n,height:p,maxTouchPoints:s,pixelDepth:v,platform:V,touchSupport:w,webgl:S,webglInfo:k,width:g}:{audioInfo:C,audio:E,canvas:u,colorDepth:f,cookieEnabled:t,deviceMemory:r,devicePixelRatio:h,doNotTrack:A,hardwareConcurrency:n,height:p,language:o,languages:a,maxTouchPoints:s,pixelDepth:v,platform:V,timezone:m,timezoneOffset:y,touchSupport:w,userAgent:l,vendor:i,webgl:S,webglInfo:k,width:g};e&&console.log("Fingerprint data:",JSON.stringify(D,null,2));const L=JSON.stringify(D,null,2);return _o(L)},Nb=q=>{try{const e=document.createElement("canvas"),t=e.getContext("2d"),r="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`~1!2@3#4$5%6^7&8*9(0)-_=+[{]}|;:',<.>/?";t.textBaseline="top",t.font="14px 'Arial'",t.textBaseline="alphabetic",t.fillStyle="#f60",t.fillRect(125,1,62,20),t.fillStyle="#069",t.fillText(r,2,15),t.fillStyle="rgba(102, 204, 0, 0.7)",t.fillText(r,4,17);const A=e.toDataURL();return q?document.body.appendChild(e):t.clearRect(0,0,e.width,e.height),_o(A)}catch{return null}},Ub=q=>{try{const e=document.createElement("canvas"),t=e.getContext("webgl");e.width=256,e.height=128;const r="attribute vec2 attrVertex;varying vec2 varyinTexCoordinate;uniform vec2 uniformOffset;void main(){varyinTexCoordinate=attrVertex+uniformOffset;gl_Position=vec4(attrVertex,0,1);}",A="precision mediump float;varying vec2 varyinTexCoordinate;void main() {gl_FragColor=vec4(varyinTexCoordinate,0,1);}",n=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,n);const o=new Float32Array([-.2,-.9,0,.4,-.26,0,0,.7321,0]);t.bufferData(t.ARRAY_BUFFER,o,t.STATIC_DRAW),n.itemSize=3,n.numItems=3;const a=t.createProgram(),s=t.createShader(t.VERTEX_SHADER);t.shaderSource(s,r),t.compileShader(s);const V=t.createShader(t.FRAGMENT_SHADER);t.shaderSource(V,A),t.compileShader(V),t.attachShader(a,s),t.attachShader(a,V),t.linkProgram(a),t.useProgram(a),a.vertexPosAttrib=t.getAttribLocation(a,"attrVertex"),a.offsetUniform=t.getUniformLocation(a,"uniformOffset"),t.enableVertexAttribArray(a.vertexPosArray),t.vertexAttribPointer(a.vertexPosAttrib,n.itemSize,t.FLOAT,!1,0,0),t.uniform2f(a.offsetUniform,1,1),t.drawArrays(t.TRIANGLE_STRIP,0,n.numItems);const l=new Uint8Array(e.width*e.height*4);t.readPixels(0,0,e.width,e.height,t.RGBA,t.UNSIGNED_BYTE,l);const i=JSON.stringify(l).replace(/,?"[0-9]+":/g,"");return q?document.body.appendChild(e):t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT|t.STENCIL_BUFFER_BIT),_o(i)}catch{return null}},Ob=()=>{try{const q=document.createElement("canvas").getContext("webgl");return{VERSION:String(q.getParameter(q.VERSION)),SHADING_LANGUAGE_VERSION:String(q.getParameter(q.SHADING_LANGUAGE_VERSION)),VENDOR:String(q.getParameter(q.VENDOR)),SUPPORTED_EXTENSIONS:String(q.getSupportedExtensions())}}catch{return null}},Rb=()=>{try{const q=window.OfflineAudioContext||window.webkitOfflineAudioContext,e=44100,t=44100,r=new q(1,e,t);return{sampleRate:r.sampleRate,channelCount:r.destination.maxChannelCount,outputLatency:r.outputLatency,state:r.state,baseLatency:r.baseLatency}}catch{return null}},Qb=async q=>{try{const e=window.OfflineAudioContext||window.webkitOfflineAudioContext,t=44100,r=44100,A=new e(1,r,t),n=A.createOscillator();n.type="sine",n.frequency.value=440,n.connect(A.destination),n.start();const o=await A.startRendering(),s=o.getChannelData(0).reduce((V,l)=>V+Math.abs(l),0).toString();if(q){const V=jb(o),l=URL.createObjectURL(V),i=document.createElement("audio");i.controls=!0,i.src=l,document.body.appendChild(i)}return _o(s)}catch{return null}},jb=q=>{const e=q.numberOfChannels,t=q.length*e*2+44,r=new ArrayBuffer(t),A=new DataView(r);Xo(A,0,"RIFF"),A.setUint32(4,t-8,!0),Xo(A,8,"WAVE"),Xo(A,12,"fmt "),A.setUint32(16,16,!0),A.setUint16(20,1,!0),A.setUint16(22,e,!0),A.setUint32(24,q.sampleRate,!0),A.setUint32(28,q.sampleRate*e*2,!0),A.setUint16(32,e*2,!0),A.setUint16(34,16,!0),Xo(A,36,"data"),A.setUint32(40,t-44,!0);let n=44;for(let o=0;o<q.length;o++)for(let a=0;a<e;a++){const s=q.getChannelData(a)[o],V=Math.max(-1,Math.min(1,s))*32767;A.setInt16(n,V,!0),n+=2}return new Blob([A],{type:"audio/wav"})},Xo=(q,e,t)=>{for(let r=0;r<t.length;r++)q.setUint8(e+r,t.charCodeAt(r))},_o=q=>{const e=q.length&3,t=q.length-e,r=3432918353,A=461845907;let n,o,a;for(let V=0;V<t;V++)a=q.charCodeAt(V)&255|(q.charCodeAt(++V)&255)<<8|(q.charCodeAt(++V)&255)<<16|(q.charCodeAt(++V)&255)<<24,++V,a=(a&65535)*r+(((a>>>16)*r&65535)<<16)&4294967295,a=a<<15|a>>>17,a=(a&65535)*A+(((a>>>16)*A&65535)<<16)&4294967295,n^=a,n=n<<13|n>>>19,o=(n&65535)*5+(((n>>>16)*5&65535)<<16)&4294967295,n=(o&65535)+27492+(((o>>>16)+58964&65535)<<16);const s=t-1;switch(a=0,e){case 3:{a^=(q.charCodeAt(s+2)&255)<<16;break}case 2:{a^=(q.charCodeAt(s+1)&255)<<8;break}case 1:{a^=q.charCodeAt(s)&255;break}}return a=(a&65535)*r+(((a>>>16)*r&65535)<<16)&4294967295,a=a<<15|a>>>17,a=(a&65535)*A+(((a>>>16)*A&65535)<<16)&4294967295,n^=a,n^=q.length,n^=n>>>16,n=(n&65535)*2246822507+(((n>>>16)*2246822507&65535)<<16)&4294967295,n^=n>>>13,n=(n&65535)*3266489909+(((n>>>16)*3266489909&65535)<<16)&4294967295,n^=n>>>16,n>>>0};typeof window<"u"&&(window.getBrowserFingerprint=Ad);var nd=(q=>(q.UPDATE_USER="user/UPDATE",q))(nd||{}),Oe=(q=>(q.AVAILABLE="Available",q.BUSY="Busy",q.AWAY="Away",q))(Oe||{});const Oi="@connectycube/chat-widget:session",Ri="@connectycube/chat-widget:guest",Qi="@connectycube/chat-widget:rememberMe",od="widget_",Pb=(q,e)=>{Z.init(q,e)},Gb=async(q,e,t,r)=>{const A=!pd();if(A){const n=Nr();n&&(Z.setSession(n),await cd(n,q,e,t,r))}return A},ad=async()=>{const e=Nr()?.user?.login,t=typeof e=="string"&&(await fd(e)).substring(0,32);return e&&t?await $o(e,t):null},$o=async(q,e)=>{const t=await Z.createSession({login:q,password:e});return qa(t,Sn()),t},sd=async(q,e,t,r)=>{const A=zb(q),n=(await fd(A)).substring(0,32),o=q;let a;try{a=await $o(A,n),await cd(a,e,o,t,r)}catch(s){if(s?.code===404)a=await ld(A,n,e,o,t,r);else throw s}return a},id=async()=>{try{await Z.destroySession(),Pi()}catch(q){console.error(q)}},Vd=()=>{const q=Z.service?.getSession();return q||null},ld=async(q,e,t,r,A,n)=>{const o={login:q,password:e,full_name:t||q};return r&&(o.external_id=r+""),A&&(o.avatar=A),n&&(o.website=n),await Z.users.signup(o),$o(q,e)},Lb=(q={})=>Z.service?.sdkInstance?.config?.set?.(q),ji=async(q,e)=>{const t=e?.user_id??gd(),r=e?.token??Fb(),A=t&&r?{userId:t,password:r}:null;return A?q(A):Promise.reject(new Error("[useConnectyCube.connect] Missing userId and password"))},cd=async(q,e,t,r,A)=>{const n={};if(e&&q?.user?.full_name!==e&&(n.full_name=e),t&&q?.user?.external_id!==t+""&&(n.external_id=t+""),r&&q?.user?.avatar!==r&&(n.avatar=r),A&&q?.user?.website!==A&&(n.website=A),Object.keys(n).length>0){const{user:o}=await Z.users.update(n);o&&(q.user=o,qa(q,Sn()))}return q},qa=(q,e=!1)=>{yt&&!e&&localStorage.setItem(Oi,JSON.stringify(q))},Nr=()=>{const q=yt&&localStorage.getItem(Oi);return q?JSON.parse(q):Sn()?Vd():null},Pi=()=>{yt&&(localStorage.removeItem(Oi),localStorage.removeItem(Zo))},Ur=()=>{const q=Nr();return q?q.user:null},ud=q=>{if(typeof q?.custom_data=="string")try{return JSON.parse(q.custom_data)}catch(e){return console.error("Error parsing custom data:",e),null}return null},dd=()=>{const q=Ur();return ud(q)},Cn=q=>ud(q||Ur())?.userStatus??"Available",ea=async(q,e=!1)=>{const t=dd(),r=Object.assign({},t,q),A=JSON.stringify(r),n=Nr();let o=Ur();return o&&e?o={...o,custom_data:A}:o=(await Z.users.update({custom_data:A})).user,n&&qa({...n,user:o},Sn()),o},Fb=()=>{const q=Nr();return q?q.token:null},gd=()=>{const q=Nr();return q?q.user_id:null},pd=()=>{const e=(Sn()?null:Nr())?.updated_at??new Date(0).toISOString(),t=new Date(e).getTime(),A=Date.now()-t,n=6e4*119;return A>n},Yb=q=>{const e=Nr();return e?!!(q&&e.user?.external_id!==q):!1},fd=async q=>{const e=new TextEncoder().encode(q);let t;try{t=await crypto.subtle.digest("SHA-256",e)}catch{t=new Uint8Array(e.length).map(()=>Math.random()*256|0).buffer}return Array.from(new Uint8Array(t)).map(r=>r.toString(16).padStart(2,"0")).join("")},Je=(q,e=!0)=>q?q.full_name||q.login||`Unknown:${q.id}`:e?"Unknown":"",Gi=q=>q?/^(https?:\/\/|\/|\.\/|\.\.\/)/.test(q)?q:Z.storage.privateUrl(q):"",zb=q=>q?`${od}${q}`:`${od}${Math.random().toString(36).substring(2,14)}`,Kb=async(q,e)=>Z.data.create("UserReports",{reportedUserId:q,reason:e}),Jb=async q=>{const e=await Ad(),t=gd(),r=btoa(`${t}:${e}`),{endpoint:A,auth:n,p256dh:o}=q??{};if(A&&n&&o&&r)return Z.pushnotifications.subscriptions.create({notification_channel:Z.NotificationChannel.WEB,push_token:{environment:"production",web_endpoint:A,web_auth:n,web_p256dh:o},device:{platform:Z.DevicePlatform.WEB,udid:btoa(`${t}:${e}`)}})},Zb=async()=>{const e=(await Z.pushnotifications.subscriptions.list()).map(({subscription:t})=>Z.pushnotifications.subscriptions.delete(t.id));return Promise.all(e)},Wb=!!Z.videochat,Hb=(q=!1)=>{yt&&(q?localStorage.setItem(Qi,"1"):localStorage.removeItem(Qi))},Xb=(q=!1)=>{yt&&(q?localStorage.setItem(Ri,"1"):localStorage.removeItem(Ri))},_b=()=>yt?!!localStorage.getItem(Qi):!1,$b=()=>yt?!!localStorage.getItem(Ri):!1,Sn=()=>$b()&&!_b(),qC={CHAT_WIDGET_CONNECTYCUBE_TERMS_AND_CONDITIONS:"https://connectycube.com/terms-of-use/"},{CHAT_WIDGET_CONNECTYCUBE_TERMS_AND_CONDITIONS:eC}=qC||"production",le={userAuthorized:!1,attachmentsAccept:"*/*",attachmentsAcceptList:["*/*"],enableUserLogin:!1,enableCalls:!1,enableUserStatuses:!1,enableLastSeen:!1,enableContentReporting:!1,enableBlockList:!1,enableUrlPreview:!1,limitUrlsPreviews:1,termsAndConditions:eC},me=je((q,e)=>({...le,setUserAuthorized:t=>q({userAuthorized:t}),setAttachmentsAccept:t=>q({attachmentsAccept:t,attachmentsAcceptList:md(t)}),setEnableUserLogin:t=>q({enableUserLogin:t}),setEnableCalls:t=>q({enableCalls:t&&Wb}),setEnableUserStatuses:t=>q({enableUserStatuses:t}),setEnableLastSeen:t=>q({enableLastSeen:t}),setEnableContentReporting:t=>q({enableContentReporting:t}),setEnableBlockList:t=>q({enableBlockList:t}),setEnableUrlPreview:t=>q({enableUrlPreview:t}),setLimitUrlsPreviews:t=>q({limitUrlsPreviews:t>5?5:t}),setTermsAndConditions:t=>q({termsAndConditions:t}),resetUserAuthorized:()=>q({userAuthorized:le.userAuthorized}),resetAttachmentsAccept:()=>q({attachmentsAccept:le.attachmentsAccept,attachmentsAcceptList:le.attachmentsAcceptList}),resetEnableUserLogin:()=>q({enableUserLogin:le.enableUserLogin}),resetEnableCalls:()=>q({enableCalls:le.enableCalls}),resetEnableUserStatuses:()=>q({enableUserStatuses:le.enableUserStatuses}),resetEnableLastSeen:()=>q({enableLastSeen:le.enableLastSeen}),resetEnableContentReporting:()=>q({enableContentReporting:le.enableContentReporting}),resetEnableBlockList:()=>q({enableBlockList:le.enableBlockList}),resetEnableUrlPreview:()=>q({enableUrlPreview:le.enableUrlPreview}),resetLimitUrlsPreviews:()=>q({limitUrlsPreviews:le.limitUrlsPreviews}),resetTermsAndConditions:()=>q({termsAndConditions:le.termsAndConditions}),isSupportedFile:t=>rC(t,e().attachmentsAcceptList)})),hd=q=>{q.attachmentsAccept&&(q.attachmentsAcceptList=md(q.attachmentsAccept)),q.limitUrlsPreviews&&(q.limitUrlsPreviews=q.limitUrlsPreviews>5?5:q.limitUrlsPreviews),me.setState(q)},tC=()=>{me.setState(le)},md=q=>typeof q=="string"?q.split(/\s*,\s*|\s+/).map(e=>e.toLowerCase().trim()):null,rC=(q,e)=>{const{type:t,size:r}=q;if(e===null||typeof t!="string"||typeof r!="number"||r<=0||t.length===0)return!1;const A=t.toLowerCase(),[n,o]=A.split("/");return e.some(a=>a.startsWith("*")||a===A||a.endsWith("/*")&&a.startsWith(n)||a.startsWith(".")&&a.slice(1)===o)},AC={CHAT_WIDGET_CONNECTYCUBE_WEB_PUSH_SERVICE_WORKER_PATH:"/connectycube-chat-widget-sw.js",CHAT_WIDGET_CONNECTYCUBE_WEB_PUSH_VAPID_PUBLIC_KEY:"BGzym4pVV8NX8I186AY7nFufNJabnGndKRB8rm5-8S5UH8ME_WNGOprIt5vvFCocwYvLybC8cg2KhuQfploiP2Q"},{CHAT_WIDGET_CONNECTYCUBE_WEB_PUSH_VAPID_PUBLIC_KEY:nC,CHAT_WIDGET_CONNECTYCUBE_WEB_PUSH_SERVICE_WORKER_PATH:oC}=AC||"production",et={muted:!1,showNotifications:!1,playSound:!0,webPushNotifications:!1,webPushVapidPublicKey:nC,serviceWorkerPath:oC},oA=je(q=>({...et,setMuted:e=>q({muted:e}),resetMuted:()=>q({muted:et.muted}),setShowNotifications:e=>q({showNotifications:e}),resetShowNotifications:()=>q({showNotifications:et.showNotifications}),setPlaySound:e=>q({playSound:e}),resetPlaySound:()=>q({playSound:et.playSound}),setWebPushNotifications:e=>q({webPushNotifications:e}),resetWebPushNotifications:()=>q({webPushNotifications:et.webPushNotifications}),setWebPushVapidPublicKey:e=>q({webPushVapidPublicKey:e}),resetWebPushVapidPublicKey:()=>q({webPushVapidPublicKey:et.webPushVapidPublicKey}),setServiceWorkerPath:e=>q({serviceWorkerPath:e}),resetServiceWorkerPath:()=>q({serviceWorkerPath:et.serviceWorkerPath})})),aC=q=>{oA.setState(q)},sC=()=>{oA.setState(et)},ta={quickActions:{title:"",description:"",actions:[]}},Li=je(q=>({...ta,setQuickActions:e=>q({quickActions:e}),resetQuickActions:()=>q({quickActions:ta.quickActions})})),iC=q=>{Li.setState(q)},VC=()=>{Li.setState(ta)},hr={requestOnlineUsersInterval:300,enableOnlineUsersBadge:!1,onlineUsersCount:0},xn=je(q=>({requestOnlineUsersInterval:hr.requestOnlineUsersInterval,enableOnlineUsersBadge:hr.enableOnlineUsersBadge,onlineUsersCount:hr.onlineUsersCount,setRequestOnlineUsersInterval:e=>{q({requestOnlineUsersInterval:typeof e=="number"?e>30?e:30:hr.requestOnlineUsersInterval})},setEnableOnlineUsersBadge:e=>q({enableOnlineUsersBadge:e}),setOnlineUsersCount:e=>q({onlineUsersCount:e}),resetRequestOnlineUsersInterval:()=>q({requestOnlineUsersInterval:hr.requestOnlineUsersInterval}),resetEnableOnlineUsersBadge:()=>q({enableOnlineUsersBadge:hr.enableOnlineUsersBadge}),resetOnlineUsersCount:()=>q({onlineUsersCount:hr.onlineUsersCount})})),lC=()=>{xn.setState({onlineUsersCount:0})},yd={fetchedCount:0,queue:[],urlPreviews:new Map,isProcessing:!1},Fi=je((q,e)=>({...yd,addUrls:async t=>{const r=e(),A=t.filter(a=>!r.urlPreviews.has(a)&&!r.queue.includes(a));if(r.isProcessing||A.length===0)return;q({queue:[...r.queue,...A],isProcessing:!0});let n=r.fetchedCount;const o=new Map(r.urlPreviews);for(const a of A)try{const s=await Z.linkpreview.get(a);o.set(a,s),n++}catch(s){console.warn(`Failed to fetch link preview for ${a}`,s)}q({urlPreviews:o,fetchedCount:n,isProcessing:!1,queue:[]})},matchUrlsFromMessage:(t="")=>{const r=me.getState().limitUrlsPreviews;return(t.match(/https?:\/\/[^\s]+/g)||[]).slice(0,r)}})),cC=()=>{Fi.setState(yd)},In=je(q=>({visible:!1,userId:void 0,showProfile:e=>q({visible:!0,userId:e}),hideProfile:()=>q({visible:!1,userId:void 0})})),wd=()=>{In.setState({visible:!1,userId:void 0})},ra=je(q=>({unreadCount:0,setUnreadCount:e=>q({unreadCount:e}),resetUnreadCount:()=>q({unreadCount:0})})),uC=()=>{ra.setState({unreadCount:0})},dC=async()=>"Notification"in window?Notification.permission==="granted"?!0:await Notification.requestPermission()==="granted"?(console.log("Notifications are enabled"),!0):(console.warn("Notifications are disabled"),!1):(console.error("Notifications are not supported in this browser"),!1),gC=async q=>{let e=!1;try{q&&"serviceWorker"in navigator&&(e=!!await navigator.serviceWorker.register(q,{type:"module"}))}catch(t){throw new Error(`Registration failed: ${t}`)}return e},vd=async q=>{try{if(q&&"serviceWorker"in navigator)return navigator.serviceWorker.getRegistration(q)}catch(e){throw new Error(`Get registration failed: ${e}`)}},pC=q=>{const{endpoint:e="",keys:t={}}=q?.toJSON()??{},{p256dh:r="",auth:A=""}=t;return{endpoint:e,p256dh:r,auth:A}},Ed=async(q,e)=>{const t=await vd(q);let r=null;return t?.pushManager&&(r=await t.pushManager.getSubscription(),!r&&e&&(r=await t?.pushManager.subscribe({applicationServerKey:e,userVisibleOnly:!0})??null)),r},fC=async q=>(await Ed(q))?.unsubscribe()??!1,Md=()=>{const q=dd(),{showNotifications:e,playSound:t,webPushNotifications:r}=oA.getState();return{userStatus:q?.userStatus??Oe.AVAILABLE,isNotifications:q?.notifications??e,isNotificationSound:q?.notificationSound??t,isPushNotifications:q?.pushNotifications??r}},hC=Md(),IA=je(q=>({...hC,setUserStatus:async(e,t)=>{await ea({userStatus:e},t),q({userStatus:e})},setIsNotifications:async(e,t)=>{await ea({notifications:e},t),q({isNotifications:e})},setIsNotificationSound:async(e,t)=>{await ea({notificationSound:e},t),q({isNotificationSound:e})},setIsPushNotifications:async(e,t)=>{const r=await bd(e);await ea({pushNotifications:r},t),q({isPushNotifications:r})}})),bd=async q=>{const{serviceWorkerPath:e,webPushVapidPublicKey:t}=oA.getState();let r=!1;try{if(q){const A=await Ed(e,t),n=pC(A);await Jb(n),r=!0}else await fC(e),await Zb()}catch(A){console.error("Error managing push notifications subscription:",A)}return r},Cd=async()=>{const q=Md(),e=await bd(q.isPushNotifications);IA.setState({...q,isPushNotifications:e})},mC={CHAT_WIDGET_CONNECTYCUBE_GOOGLE_GENERATIVE_AI_API_KEY:"AIzaSyBVw8bUP84V-wIz6j3wMmlpGs-wHBRQv1M"},{CHAT_WIDGET_CONNECTYCUBE_GOOGLE_GENERATIVE_AI_API_KEY:yC}=mC||"production",kn={changeMessageTone:!1,textSummarization:!1,apiKey:yC},Sd=je(q=>({...kn,setChangeMessageTone:e=>q({changeMessageTone:!!e}),setTextSummarization:e=>q({textSummarization:!!e}),setApiKey:e=>q({apiKey:e}),resetChangeMessageTone:()=>q({changeMessageTone:kn.changeMessageTone}),resetTextSummarization:()=>q({textSummarization:kn.textSummarization}),resetApiKey:()=>q({apiKey:kn.apiKey})})),kA=je(q=>({shadowRoot:yt?document:{},shadowPortal:yt?document.body:null,setShadowRoot:e=>q({shadowRoot:e??document,shadowPortal:e??document.body})})),wC={chat:{streamManagement:{enable:!0}}},vC=({creds:q,config:e={},user:t={},enableUserLogin:r})=>{const A=M.useRef(!1),{id:n,name:o,avatar:a,userProfileLink:s}=t,V=Object.assign(wC,e),l=Be(d=>d.singleView),i=me(d=>d.setUserAuthorized);Xb(l),A.current||(A.current=!0,Pb(q,V),hd({userAuthorized:!pd()}),!r&&Yb(n)?(console.info(`[useAppAuthorization] user changed to id: ${n}, name: ${o}`),Pi(),i(!1)):Gb(o,n,a,s))},xd=q=>Symbol.iterator in q,Id=q=>"entries"in q,kd=(q,e)=>{const t=q instanceof Map?q:new Map(q.entries()),r=e instanceof Map?e:new Map(e.entries());if(t.size!==r.size)return!1;for(const[A,n]of t)if(!r.has(A)||!Object.is(n,r.get(A)))return!1;return!0},EC=(q,e)=>{const t=q[Symbol.iterator](),r=e[Symbol.iterator]();let A=t.next(),n=r.next();for(;!A.done&&!n.done;){if(!Object.is(A.value,n.value))return!1;A=t.next(),n=r.next()}return!!A.done&&!!n.done};function MC(q,e){return Object.is(q,e)?!0:typeof q!="object"||q===null||typeof e!="object"||e===null||Object.getPrototypeOf(q)!==Object.getPrototypeOf(e)?!1:xd(q)&&xd(e)?Id(q)&&Id(e)?kd(q,e):EC(q,e):kd({entries:()=>Object.entries(q)},{entries:()=>Object.entries(e)})}function Fq(q){const e=M.useRef(void 0);return t=>{const r=q(t);return MC(e.current,r)?e.current:e.current=r}}const bC=({open:q=ve.opened,embedView:e=!1,splitView:t=ve.splitView,singleView:r=ve.singleView,showChatStatus:A=ve.showChatStatus,showOnlineUsersTab:n=ve.showOnlineUsersTab,hideNewChatButton:o=ve.hideNewChatButton,hideNewUserChatOption:a=ve.hideNewUserChatOption,hideNewGroupChatOption:s=ve.hideNewGroupChatOption,imgLogoSource:V=ve.imgLogoSource,muted:l=et.muted,showNotifications:i=et.showNotifications,playSound:d=et.playSound,webPushNotifications:g=et.webPushNotifications,serviceWorkerPath:p=et.serviceWorkerPath,webPushVapidPublicKey:f=et.webPushVapidPublicKey,attachmentsAccept:v=le.attachmentsAccept,enableUserLogin:y=le.enableUserLogin,enableCalls:m=le.enableCalls,enableUserStatuses:w=le.enableUserStatuses,enableLastSeen:h=le.enableLastSeen,enableContentReporting:u=le.enableContentReporting,enableBlockList:E=le.enableBlockList,enableUrlPreview:C=le.enableUrlPreview,limitUrlsPreviews:S=le.limitUrlsPreviews,termsAndConditions:k=le.termsAndConditions,quickActions:D=ta.quickActions,defaultChat:L=SA.defaultChat,singleViewChat:Q=SA.singleViewChat,enableOnlineUsersBadge:j=hr.enableOnlineUsersBadge,getOnlineUsersInterval:T=hr.requestOnlineUsersInterval,ai:x=kn,onUnreadCountChange:B,onOnlineUsersCountChange:F,onOpenChange:G})=>{const[P,N,Y]=Be(Fq(nq=>[nq.opened,nq.setOpened,nq.toggleOpened])),_=ra(nq=>nq.unreadCount),[R,H,aq]=xn(Fq(nq=>[nq.onlineUsersCount,nq.setRequestOnlineUsersInterval,nq.setEnableOnlineUsersBadge])),[Aq,qq,W]=Sd(Fq(nq=>[nq.setChangeMessageTone,nq.setTextSummarization,nq.setApiKey]));M.useEffect(()=>{qb({opened:e||q,splitView:t&&!r,singleView:r,showChatStatus:A,showOnlineUsersTab:n&&!r,hideNewChatButton:o,hideNewUserChatOption:a,hideNewGroupChatOption:s,imgLogoSource:V})},[q,e,t,r,A,n,o,a,s,V]),M.useEffect(()=>{aC({muted:l,showNotifications:i,playSound:d,webPushNotifications:g,webPushVapidPublicKey:f,serviceWorkerPath:p})},[l,i,d,g,f,p]),M.useEffect(()=>{hd({attachmentsAccept:v,enableUserLogin:y,enableCalls:m,enableUserStatuses:w,enableLastSeen:h,enableContentReporting:u,enableBlockList:E,enableUrlPreview:C,limitUrlsPreviews:S,termsAndConditions:k})},[v,y,m,w,h,u,E,C,S,k]),M.useEffect(()=>{iC({quickActions:D})},[D]),M.useEffect(()=>{_M({defaultChat:L,singleViewChat:Q})},[L,Q]),M.useEffect(()=>{H(T)},[T,H]),M.useEffect(()=>{aq(j)},[j,aq]),M.useEffect(()=>{const{changeMessageTone:nq,textSummarization:cq,apiKey:Mq}=x;typeof nq=="boolean"&&Aq(nq),typeof cq=="boolean"&&qq(cq),typeof Mq=="string"&&W(Mq)},[x,Aq,qq,W]),M.useEffect(()=>{F?.(R)},[R,F]),M.useEffect(()=>{B?.(_)},[_,B]),M.useEffect(()=>{G?.(P)},[P,G]),M.useEffect(()=>{typeof window?.ConnectyCubeChatWidget=="object"?(window.ConnectyCubeChatWidget.open=()=>N(!0),window.ConnectyCubeChatWidget.close=()=>N(!1),window.ConnectyCubeChatWidget.toggle=Y):window.ConnectyCubeChatWidget={open:()=>N(!0),close:()=>N(!1),toggle:Y},setTimeout(()=>{window.ConnectyCubeChatWidget?.initialNotification&&window?.ConnectyCubeChatWidget?.open?.()},1e3)},[N,Y])};function Aa(q){const e=M.useRef(null),[t,r]=oA(Fq(i=>[i.muted,i.playSound])),A=me(i=>i.enableUserStatuses),[n,o]=IA(Fq(i=>[i.userStatus,i.isNotificationSound])),a=A&&(n===Oe.BUSY||n===Oe.AWAY),s=t||a,V=(i=!1)=>{!s&&r&&o&&e.current&&(e.current.loop=i,e.current.currentTime=0,e.current.play().catch(d=>{console.error("Error playing audio:",d)}))},l=()=>{e.current&&(e.current.pause(),e.current.currentTime=0)};return M.useEffect(()=>(e.current=new Audio(q),()=>{e.current&&(e.current.pause(),e.current=null)}),[q]),{play:V,stop:l}}var mr=(q=>(q.ACCEPT="accept",q.REJECT="reject",q.NOT_ANSWER="notAnswer",q.HUNG_UP="hungUp",q.CANCEL="cancel",q))(mr||{});const CC=je(q=>({startCallDate:null,setStartCallDate:()=>q({startCallDate:Date.now()}),resetStartCallDate:()=>q({startCallDate:null})}));function Td(){const{sendMessage:q,sendMessageByUserId:e,incomingCall:t,activeCall:r,activeCallAcceptData:A,activeCallStopData:n,activeCallNotAnswerData:o,resetSessionData:a}=Wq(),[s,V,l]=CC(Fq(v=>[v.startCallDate,v.setStartCallDate,v.resetStartCallDate])),i=(v,y,m)=>{const w=s?Math.floor((Date.now()-s)/1e3):0,h={callHistory:!0,callType:m,duration:w};y?e(v,y,h):q(v,void 0,h),l()},d=()=>{V()},g=v=>{i("reject",v,t?.callType)},p=v=>{i(s?"hungUp":"cancel",v,r?.callType)},f=v=>{i("notAnswer",v,r?.callType)};return M.useEffect(()=>{A&&(V(),a(re.ON_ACCEPT))},[A]),M.useEffect(()=>{n&&(l(),a(re.ON_STOP))},[n]),M.useEffect(()=>{o&&(f(o?.userID),a(re.ON_NOT_ANSWER))},[o]),{sendAcceptCall:d,sendRejectCall:g,sendHungUpCall:p,sendNotAnswerCall:f}}const SC=()=>{const{isConnected:q,dialogs:e,selectedDialog:t,getDialogOpponentId:r,getLastActivity:A,subscribeToLastActivity:n,unsubscribeFromLastActivity:o}=Wq(),a=Be(f=>f.opened),s=me(f=>f.enableLastSeen),V=M.useRef(void 0),l=M.useRef({}),i=M.useRef(0),d=async()=>{if(Date.now()-i.current<3e4)return;const f=new Set,v=[...e].sort((m,w)=>new Date(w.updated_at).getTime()-new Date(m.updated_at).getTime());for(let m=0;m<v.length;m++){const w=r(v[m]);if(typeof w=="number"&&(f.add(w),f.size>=10))break}const y=async()=>{await Promise.all([...f].map(A)),i.current=Date.now()};q?await y():l.current.fetchLastActivities=y},g=()=>{const f=r();if(!f)return;const v=()=>{n(f),V.current=f};q?v():l.current.subscribeToUserLastActivity=v},p=()=>{const f=V.current;if(!f)return;const v=()=>{o(f),V.current=void 0};q?v():l.current.unsubscribeFromUserLastActivity=v};M.useEffect(()=>{s&&a&&d()},[s,a]),M.useEffect(()=>{s&&(p(),t&&g())},[s,t]),M.useEffect(()=>{s&&q&&(l.current.unsubscribeFromUserLastActivity?.(),l.current.subscribeToUserLastActivity?.(),l.current.fetchLastActivities?.(),l.current={})},[s,q])},xC="data:audio/mpeg;base64,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VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVEAwAEAqqNia2BXsibLiPoqT/RjS0OaodnSN4T4c5YDWRqiTp/JFfYIciaSZYQg6CgrJDbmuhITiNzTKIqcOL1dKrEIiGhtAuxCmKpCIRXWP01pDQkJfTbLSsQSAkX02zMEJUPFTvxGQgkIcz9SubieZYjOk7jzq4xHIUikeDtYv/+rJsyyBAD/ZqcbLR6WUyAAANIAAAAQAAAaQAAAAgAAA0gAAABNy8CUupF7kffNTlCXolR6ZFUpJF8X97pkVSqUk7DcCUrEEpnC9y9P6dyZmZ21q2rap0SQ6FRDJB+ePuXgTN9/fW27m5WzLSHCwGVVViVUxBTUUzLjk5LjVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU=";function Bd(){const[q,e,t,r,A,n,o]=oA(Fq(h=>[h.muted,h.showNotifications,h.serviceWorkerPath,h.webPushVapidPublicKey,h.webPushNotifications,h.setShowNotifications,h.setWebPushNotifications])),a=me(h=>h.enableUserStatuses),[s,V]=IA(Fq(h=>[h.userStatus,h.isNotifications])),l=a&&(s===Oe.BUSY||s===Oe.AWAY),i=q||l,{users:d,dialogs:g,fetchDialogs:p}=Wq(),f=Aa(xC),v=async h=>g.find(({_id:u})=>u===h)??(await p({_id:h}))?.[0],y=async(h="",u="",E="/logo.png")=>{if(Notification.permission==="granted"){const C=t?await vd(t):null;return C?C.showNotification(h,{body:u,icon:E}):new Notification(h,{body:u,icon:E})}else console.warn("Notifications are disabled")},m=async(h="",u="",E="/logo.png")=>{if(!i&&(f.play(),e&&V))return y(h,u,E)},w=async(h,{body:u,dialog_id:E})=>{if(typeof E=="string"&&typeof u=="string"){const C=await v(E),S=d[h],k=S?.full_name||S?.login||"Unknown",D=C?.type===3,L=D?C?.name||k:`${k} in ${C?.name}`,Q=D&&S?.avatar||C?.photo||void 0;return m(L,u,Q)}};return M.useEffect(()=>{const h=t&&r&&A;!i&&(e||h)&&dC().then(u=>{u&&h?gC(t).then(o):(n(!1),o(!1))})},[i,e,t,r,A,n,o]),{showNotification:y,notifyWithSound:m,notifyOnMessage:w,playAudio:f.play}}function IC(){const[q,e]=M.useState(document.hasFocus());return M.useEffect(()=>{const t=()=>e(!0),r=()=>e(!1);return window.addEventListener("focus",t),window.addEventListener("blur",r),()=>{window.removeEventListener("focus",t),window.removeEventListener("blur",r)}},[]),{isFocused:q,isBlurred:!q}}function kC(q,e){let t=null;const r=function(...A){t!==null&&clearTimeout(t),t=setTimeout(()=>{q.apply(this,A)},e)};return r.cancel=()=>{t!==null&&clearTimeout(t)},r}const TC=(q={})=>{const{width:e=640,timeout:t=200}=q,[r,A]=M.useState(window.innerWidth>=640);return M.useEffect(()=>{const n=kC(()=>{A(o=>{const a=window.innerWidth>=e;return a!==o?a:o})},t);return window.addEventListener("resize",n),n(),()=>{window.removeEventListener("resize",n),n.cancel()}},[r,e,t]),{isWideScreen:r,isNarrowScreen:!r}};function Dd(q,e=!1){const{t}=jq(),{users:r,typingStatus:A,getDialogOpponentId:n}=Wq();return M.useMemo(()=>{if(q){const a=A[q._id]??[];if(q.type===Z.DialogType.PRIVATE)return n(q)===a[0]?`${t("typing")}...`:void 0;if(a.length>0){const V=a.map(i=>Je(r[i])).join(),l=a.length>1?t("areTyping"):t("isTyping");return e?`${l}: ${V}`:`${V} ${l}`}}},[q,A,r,t])}const Nd=(q=!1)=>{zM(),KM(),Db(),lC(),cC(),wd(),uC(),Cd(),q&&($M(),eb(),tC(),sC(),VC())};function BC(q,e){const t=b.createContext(e),r=n=>{const{children:o,...a}=n,s=b.useMemo(()=>a,Object.values(a));return c.jsx(t.Provider,{value:s,children:o})};r.displayName=q+"Provider";function A(n){const o=b.useContext(t);if(o)return o;if(e!==void 0)return e;throw new Error(`\`${n}\` must be used within \`${q}\``)}return[r,A]}function wt(q,e=[]){let t=[];function r(n,o){const a=b.createContext(o),s=t.length;t=[...t,o];const V=i=>{const{scope:d,children:g,...p}=i,f=d?.[q]?.[s]||a,v=b.useMemo(()=>p,Object.values(p));return c.jsx(f.Provider,{value:v,children:g})};V.displayName=n+"Provider";function l(i,d){const g=d?.[q]?.[s]||a,p=b.useContext(g);if(p)return p;if(o!==void 0)return o;throw new Error(`\`${i}\` must be used within \`${n}\``)}return[V,l]}const A=()=>{const n=t.map(o=>b.createContext(o));return function(a){const s=a?.[q]||n;return b.useMemo(()=>({[`__scope${q}`]:{...a,[q]:s}}),[a,s])}};return A.scopeName=q,[r,DC(A,...e)]}function DC(...q){const e=q[0];if(q.length===1)return e;const t=()=>{const r=q.map(A=>({useScope:A(),scopeName:A.scopeName}));return function(n){const o=r.reduce((a,{useScope:s,scopeName:V})=>{const i=s(n)[`__scope${V}`];return{...a,...i}},{});return b.useMemo(()=>({[`__scope${e.scopeName}`]:o}),[o])}};return t.scopeName=e.scopeName,t}function Ud(q,e){if(typeof q=="function")return q(e);q!=null&&(q.current=e)}function na(...q){return e=>{let t=!1;const r=q.map(A=>{const n=Ud(A,e);return!t&&typeof n=="function"&&(t=!0),n});if(t)return()=>{for(let A=0;A<r.length;A++){const n=r[A];typeof n=="function"?n():Ud(q[A],null)}}}}function se(...q){return b.useCallback(na(...q),q)}function Eq(q,e,{checkForDefaultPrevented:t=!0}={}){return function(A){if(q?.(A),t===!1||!A.defaultPrevented)return e?.(A)}}var Bt=globalThis?.document?b.useLayoutEffect:()=>{},NC=b[" useId ".trim().toString()]||(()=>{}),UC=0;function _t(q){const[e,t]=b.useState(NC());return Bt(()=>{t(r=>r??String(UC++))},[q]),q||(e?`radix-${e}`:"")}var OC=b[" useInsertionEffect ".trim().toString()]||Bt;function Or({prop:q,defaultProp:e,onChange:t=()=>{},caller:r}){const[A,n,o]=RC({defaultProp:e,onChange:t}),a=q!==void 0,s=a?q:A;{const l=b.useRef(q!==void 0);b.useEffect(()=>{const i=l.current;i!==a&&console.warn(`${r} is changing from ${i?"controlled":"uncontrolled"} to ${a?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),l.current=a},[a,r])}const V=b.useCallback(l=>{if(a){const i=QC(l)?l(q):l;i!==q&&o.current?.(i)}else n(l)},[a,q,n,o]);return[s,V]}function RC({defaultProp:q,onChange:e}){const[t,r]=b.useState(q),A=b.useRef(t),n=b.useRef(e);return OC(()=>{n.current=e},[e]),b.useEffect(()=>{A.current!==t&&(n.current?.(t),A.current=t)},[t,A]),[t,r,n]}function QC(q){return typeof q=="function"}function TA(q){const e=jC(q),t=b.forwardRef((r,A)=>{const{children:n,...o}=r,a=b.Children.toArray(n),s=a.find(PC);if(s){const V=s.props.children,l=a.map(i=>i===s?b.Children.count(V)>1?b.Children.only(null):b.isValidElement(V)?V.props.children:null:i);return c.jsx(e,{...o,ref:A,children:b.isValidElement(V)?b.cloneElement(V,void 0,l):null})}return c.jsx(e,{...o,ref:A,children:n})});return t.displayName=`${q}.Slot`,t}var Od=TA("Slot");function jC(q){const e=b.forwardRef((t,r)=>{const{children:A,...n}=t;if(b.isValidElement(A)){const o=LC(A),a=GC(n,A.props);return A.type!==b.Fragment&&(a.ref=r?na(r,o):o),b.cloneElement(A,a)}return b.Children.count(A)>1?b.Children.only(null):null});return e.displayName=`${q}.SlotClone`,e}var Rd=Symbol("radix.slottable");function Qd(q){const e=({children:t})=>c.jsx(c.Fragment,{children:t});return e.displayName=`${q}.Slottable`,e.__radixId=Rd,e}function PC(q){return b.isValidElement(q)&&typeof q.type=="function"&&"__radixId"in q.type&&q.type.__radixId===Rd}function GC(q,e){const t={...e};for(const r in e){const A=q[r],n=e[r];/^on[A-Z]/.test(r)?A&&n?t[r]=(...a)=>{const s=n(...a);return A(...a),s}:A&&(t[r]=A):r==="style"?t[r]={...A,...n}:r==="className"&&(t[r]=[A,n].filter(Boolean).join(" "))}return{...q,...t}}function LC(q){let e=Object.getOwnPropertyDescriptor(q.props,"ref")?.get,t=e&&"isReactWarning"in e&&e.isReactWarning;return t?q.ref:(e=Object.getOwnPropertyDescriptor(q,"ref")?.get,t=e&&"isReactWarning"in e&&e.isReactWarning,t?q.props.ref:q.props.ref||q.ref)}var FC=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Gq=FC.reduce((q,e)=>{const t=TA(`Primitive.${e}`),r=b.forwardRef((A,n)=>{const{asChild:o,...a}=A,s=o?t:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),c.jsx(s,{...a,ref:n})});return r.displayName=`Primitive.${e}`,{...q,[e]:r}},{});function jd(q,e){q&&qu.flushSync(()=>q.dispatchEvent(e))}function Dt(q){const e=b.useRef(q);return b.useEffect(()=>{e.current=q}),b.useMemo(()=>(...t)=>e.current?.(...t),[])}function YC(q,e=globalThis?.document){const t=Dt(q);b.useEffect(()=>{const r=A=>{A.key==="Escape"&&t(A)};return e.addEventListener("keydown",r,{capture:!0}),()=>e.removeEventListener("keydown",r,{capture:!0})},[t,e])}var zC="DismissableLayer",Yi="dismissableLayer.update",KC="dismissableLayer.pointerDownOutside",JC="dismissableLayer.focusOutside",Pd,Gd=b.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),oa=b.forwardRef((q,e)=>{const{disableOutsidePointerEvents:t=!1,onEscapeKeyDown:r,onPointerDownOutside:A,onFocusOutside:n,onInteractOutside:o,onDismiss:a,...s}=q,V=b.useContext(Gd),[l,i]=b.useState(null),d=l?.ownerDocument??globalThis?.document,[,g]=b.useState({}),p=se(e,C=>i(C)),f=Array.from(V.layers),[v]=[...V.layersWithOutsidePointerEventsDisabled].slice(-1),y=f.indexOf(v),m=l?f.indexOf(l):-1,w=V.layersWithOutsidePointerEventsDisabled.size>0,h=m>=y,u=HC(C=>{const S=C.target,k=[...V.branches].some(D=>D.contains(S));!h||k||(A?.(C),o?.(C),C.defaultPrevented||a?.())},d),E=XC(C=>{const S=C.target;[...V.branches].some(D=>D.contains(S))||(n?.(C),o?.(C),C.defaultPrevented||a?.())},d);return YC(C=>{m===V.layers.size-1&&(r?.(C),!C.defaultPrevented&&a&&(C.preventDefault(),a()))},d),b.useEffect(()=>{if(l)return t&&(V.layersWithOutsidePointerEventsDisabled.size===0&&(Pd=d.body.style.pointerEvents,d.body.style.pointerEvents="none"),V.layersWithOutsidePointerEventsDisabled.add(l)),V.layers.add(l),Ld(),()=>{t&&V.layersWithOutsidePointerEventsDisabled.size===1&&(d.body.style.pointerEvents=Pd)}},[l,d,t,V]),b.useEffect(()=>()=>{l&&(V.layers.delete(l),V.layersWithOutsidePointerEventsDisabled.delete(l),Ld())},[l,V]),b.useEffect(()=>{const C=()=>g({});return document.addEventListener(Yi,C),()=>document.removeEventListener(Yi,C)},[]),c.jsx(Gq.div,{...s,ref:p,style:{pointerEvents:w?h?"auto":"none":void 0,...q.style},onFocusCapture:Eq(q.onFocusCapture,E.onFocusCapture),onBlurCapture:Eq(q.onBlurCapture,E.onBlurCapture),onPointerDownCapture:Eq(q.onPointerDownCapture,u.onPointerDownCapture)})});oa.displayName=zC;var ZC="DismissableLayerBranch",WC=b.forwardRef((q,e)=>{const t=b.useContext(Gd),r=b.useRef(null),A=se(e,r);return b.useEffect(()=>{const n=r.current;if(n)return t.branches.add(n),()=>{t.branches.delete(n)}},[t.branches]),c.jsx(Gq.div,{...q,ref:A})});WC.displayName=ZC;function HC(q,e=globalThis?.document){const t=Dt(q),r=b.useRef(!1),A=b.useRef(()=>{});return b.useEffect(()=>{const n=a=>{if(a.target&&!r.current){let s=function(){Fd(KC,t,V,{discrete:!0})};const V={originalEvent:a};a.pointerType==="touch"?(e.removeEventListener("click",A.current),A.current=s,e.addEventListener("click",A.current,{once:!0})):s()}else e.removeEventListener("click",A.current);r.current=!1},o=window.setTimeout(()=>{e.addEventListener("pointerdown",n)},0);return()=>{window.clearTimeout(o),e.removeEventListener("pointerdown",n),e.removeEventListener("click",A.current)}},[e,t]),{onPointerDownCapture:()=>r.current=!0}}function XC(q,e=globalThis?.document){const t=Dt(q),r=b.useRef(!1);return b.useEffect(()=>{const A=n=>{n.target&&!r.current&&Fd(JC,t,{originalEvent:n},{discrete:!1})};return e.addEventListener("focusin",A),()=>e.removeEventListener("focusin",A)},[e,t]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function Ld(){const q=new CustomEvent(Yi);document.dispatchEvent(q)}function Fd(q,e,t,{discrete:r}){const A=t.originalEvent.target,n=new CustomEvent(q,{bubbles:!1,cancelable:!0,detail:t});e&&A.addEventListener(q,e,{once:!0}),r?jd(A,n):A.dispatchEvent(n)}var zi="focusScope.autoFocusOnMount",Ki="focusScope.autoFocusOnUnmount",Yd={bubbles:!1,cancelable:!0},_C="FocusScope",Ji=b.forwardRef((q,e)=>{const{loop:t=!1,trapped:r=!1,onMountAutoFocus:A,onUnmountAutoFocus:n,...o}=q,[a,s]=b.useState(null),V=Dt(A),l=Dt(n),i=b.useRef(null),d=se(e,f=>s(f)),g=b.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;b.useEffect(()=>{if(r){let f=function(w){if(g.paused||!a)return;const h=w.target;a.contains(h)?i.current=h:Rr(i.current,{select:!0})},v=function(w){if(g.paused||!a)return;const h=w.relatedTarget;h!==null&&(a.contains(h)||Rr(i.current,{select:!0}))},y=function(w){if(document.activeElement===document.body)for(const u of w)u.removedNodes.length>0&&Rr(a)};document.addEventListener("focusin",f),document.addEventListener("focusout",v);const m=new MutationObserver(y);return a&&m.observe(a,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",f),document.removeEventListener("focusout",v),m.disconnect()}}},[r,a,g.paused]),b.useEffect(()=>{if(a){Jd.add(g);const f=document.activeElement;if(!a.contains(f)){const y=new CustomEvent(zi,Yd);a.addEventListener(zi,V),a.dispatchEvent(y),y.defaultPrevented||($C(AS(zd(a)),{select:!0}),document.activeElement===f&&Rr(a))}return()=>{a.removeEventListener(zi,V),setTimeout(()=>{const y=new CustomEvent(Ki,Yd);a.addEventListener(Ki,l),a.dispatchEvent(y),y.defaultPrevented||Rr(f??document.body,{select:!0}),a.removeEventListener(Ki,l),Jd.remove(g)},0)}}},[a,V,l,g]);const p=b.useCallback(f=>{if(!t&&!r||g.paused)return;const v=f.key==="Tab"&&!f.altKey&&!f.ctrlKey&&!f.metaKey,y=document.activeElement;if(v&&y){const m=f.currentTarget,[w,h]=qS(m);w&&h?!f.shiftKey&&y===h?(f.preventDefault(),t&&Rr(w,{select:!0})):f.shiftKey&&y===w&&(f.preventDefault(),t&&Rr(h,{select:!0})):y===m&&f.preventDefault()}},[t,r,g.paused]);return c.jsx(Gq.div,{tabIndex:-1,...o,ref:d,onKeyDown:p})});Ji.displayName=_C;function $C(q,{select:e=!1}={}){const t=document.activeElement;for(const r of q)if(Rr(r,{select:e}),document.activeElement!==t)return}function qS(q){const e=zd(q),t=Kd(e,q),r=Kd(e.reverse(),q);return[t,r]}function zd(q){const e=[],t=document.createTreeWalker(q,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const A=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||A?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;t.nextNode();)e.push(t.currentNode);return e}function Kd(q,e){for(const t of q)if(!eS(t,{upTo:e}))return t}function eS(q,{upTo:e}){if(getComputedStyle(q).visibility==="hidden")return!0;for(;q;){if(e!==void 0&&q===e)return!1;if(getComputedStyle(q).display==="none")return!0;q=q.parentElement}return!1}function tS(q){return q instanceof HTMLInputElement&&"select"in q}function Rr(q,{select:e=!1}={}){if(q&&q.focus){const t=document.activeElement;q.focus({preventScroll:!0}),q!==t&&tS(q)&&e&&q.select()}}var Jd=rS();function rS(){let q=[];return{add(e){const t=q[0];e!==t&&t?.pause(),q=Zd(q,e),q.unshift(e)},remove(e){q=Zd(q,e),q[0]?.resume()}}}function Zd(q,e){const t=[...q],r=t.indexOf(e);return r!==-1&&t.splice(r,1),t}function AS(q){return q.filter(e=>e.tagName!=="A")}var nS="Portal",aa=b.forwardRef((q,e)=>{const{container:t,...r}=q,[A,n]=b.useState(!1);Bt(()=>n(!0),[]);const o=t||A&&globalThis?.document?.body;return o?Vn.createPortal(c.jsx(Gq.div,{...r,ref:e}),o):null});aa.displayName=nS;function oS(q,e){return b.useReducer((t,r)=>e[t][r]??t,q)}var vt=q=>{const{present:e,children:t}=q,r=aS(e),A=typeof t=="function"?t({present:r.isPresent}):b.Children.only(t),n=se(r.ref,sS(A));return typeof t=="function"||r.isPresent?b.cloneElement(A,{ref:n}):null};vt.displayName="Presence";function aS(q){const[e,t]=b.useState(),r=b.useRef(null),A=b.useRef(q),n=b.useRef("none"),o=q?"mounted":"unmounted",[a,s]=oS(o,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return b.useEffect(()=>{const V=sa(r.current);n.current=a==="mounted"?V:"none"},[a]),Bt(()=>{const V=r.current,l=A.current;if(l!==q){const d=n.current,g=sa(V);q?s("MOUNT"):g==="none"||V?.display==="none"?s("UNMOUNT"):s(l&&d!==g?"ANIMATION_OUT":"UNMOUNT"),A.current=q}},[q,s]),Bt(()=>{if(e){let V;const l=e.ownerDocument.defaultView??window,i=g=>{const f=sa(r.current).includes(CSS.escape(g.animationName));if(g.target===e&&f&&(s("ANIMATION_END"),!A.current)){const v=e.style.animationFillMode;e.style.animationFillMode="forwards",V=l.setTimeout(()=>{e.style.animationFillMode==="forwards"&&(e.style.animationFillMode=v)})}},d=g=>{g.target===e&&(n.current=sa(r.current))};return e.addEventListener("animationstart",d),e.addEventListener("animationcancel",i),e.addEventListener("animationend",i),()=>{l.clearTimeout(V),e.removeEventListener("animationstart",d),e.removeEventListener("animationcancel",i),e.removeEventListener("animationend",i)}}else s("ANIMATION_END")},[e,s]),{isPresent:["mounted","unmountSuspended"].includes(a),ref:b.useCallback(V=>{r.current=V?getComputedStyle(V):null,t(V)},[])}}function sa(q){return q?.animationName||"none"}function sS(q){let e=Object.getOwnPropertyDescriptor(q.props,"ref")?.get,t=e&&"isReactWarning"in e&&e.isReactWarning;return t?q.ref:(e=Object.getOwnPropertyDescriptor(q,"ref")?.get,t=e&&"isReactWarning"in e&&e.isReactWarning,t?q.props.ref:q.props.ref||q.ref)}var Zi=0;function Wd(){b.useEffect(()=>{const q=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",q[0]??Hd()),document.body.insertAdjacentElement("beforeend",q[1]??Hd()),Zi++,()=>{Zi===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(e=>e.remove()),Zi--}},[])}function Hd(){const q=document.createElement("span");return q.setAttribute("data-radix-focus-guard",""),q.tabIndex=0,q.style.outline="none",q.style.opacity="0",q.style.position="fixed",q.style.pointerEvents="none",q}var $t=function(){return $t=Object.assign||function(e){for(var t,r=1,A=arguments.length;r<A;r++){t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},$t.apply(this,arguments)};function Xd(q,e){var t={};for(var r in q)Object.prototype.hasOwnProperty.call(q,r)&&e.indexOf(r)<0&&(t[r]=q[r]);if(q!=null&&typeof Object.getOwnPropertySymbols=="function")for(var A=0,r=Object.getOwnPropertySymbols(q);A<r.length;A++)e.indexOf(r[A])<0&&Object.prototype.propertyIsEnumerable.call(q,r[A])&&(t[r[A]]=q[r[A]]);return t}function iS(q,e,t){if(t||arguments.length===2)for(var r=0,A=e.length,n;r<A;r++)(n||!(r in e))&&(n||(n=Array.prototype.slice.call(e,0,r)),n[r]=e[r]);return q.concat(n||Array.prototype.slice.call(e))}typeof SuppressedError=="function"&&SuppressedError;var ia="right-scroll-bar-position",Va="width-before-scroll-bar",VS="with-scroll-bars-hidden",lS="--removed-body-scroll-bar-size";function Wi(q,e){return typeof q=="function"?q(e):q&&(q.current=e),q}function cS(q,e){var t=M.useState(function(){return{value:q,callback:e,facade:{get current(){return t.value},set current(r){var A=t.value;A!==r&&(t.value=r,t.callback(r,A))}}}})[0];return t.callback=e,t.facade}var uS=typeof window<"u"?b.useLayoutEffect:b.useEffect,_d=new WeakMap;function dS(q,e){var t=cS(null,function(r){return q.forEach(function(A){return Wi(A,r)})});return uS(function(){var r=_d.get(t);if(r){var A=new Set(r),n=new Set(q),o=t.current;A.forEach(function(a){n.has(a)||Wi(a,null)}),n.forEach(function(a){A.has(a)||Wi(a,o)})}_d.set(t,q)},[q]),t}function gS(q){return q}function pS(q,e){e===void 0&&(e=gS);var t=[],r=!1,A={read:function(){if(r)throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return t.length?t[t.length-1]:q},useMedium:function(n){var o=e(n,r);return t.push(o),function(){t=t.filter(function(a){return a!==o})}},assignSyncMedium:function(n){for(r=!0;t.length;){var o=t;t=[],o.forEach(n)}t={push:function(a){return n(a)},filter:function(){return t}}},assignMedium:function(n){r=!0;var o=[];if(t.length){var a=t;t=[],a.forEach(n),o=t}var s=function(){var l=o;o=[],l.forEach(n)},V=function(){return Promise.resolve().then(s)};V(),t={push:function(l){o.push(l),V()},filter:function(l){return o=o.filter(l),t}}}};return A}function fS(q){q===void 0&&(q={});var e=pS(null);return e.options=$t({async:!0,ssr:!1},q),e}var $d=function(q){var e=q.sideCar,t=Xd(q,["sideCar"]);if(!e)throw new Error("Sidecar: please provide `sideCar` property to import the right car");var r=e.read();if(!r)throw new Error("Sidecar medium not found");return b.createElement(r,$t({},t))};$d.isSideCarExport=!0;function hS(q,e){return q.useMedium(e),$d}var qg=fS(),Hi=function(){},la=b.forwardRef(function(q,e){var t=b.useRef(null),r=b.useState({onScrollCapture:Hi,onWheelCapture:Hi,onTouchMoveCapture:Hi}),A=r[0],n=r[1],o=q.forwardProps,a=q.children,s=q.className,V=q.removeScrollBar,l=q.enabled,i=q.shards,d=q.sideCar,g=q.noRelative,p=q.noIsolation,f=q.inert,v=q.allowPinchZoom,y=q.as,m=y===void 0?"div":y,w=q.gapMode,h=Xd(q,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noRelative","noIsolation","inert","allowPinchZoom","as","gapMode"]),u=d,E=dS([t,e]),C=$t($t({},h),A);return b.createElement(b.Fragment,null,l&&b.createElement(u,{sideCar:qg,removeScrollBar:V,shards:i,noRelative:g,noIsolation:p,inert:f,setCallbacks:n,allowPinchZoom:!!v,lockRef:t,gapMode:w}),o?b.cloneElement(b.Children.only(a),$t($t({},C),{ref:E})):b.createElement(m,$t({},C,{className:s,ref:E}),a))});la.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1},la.classNames={fullWidth:Va,zeroRight:ia};var mS=function(){if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function yS(){if(!document)return null;var q=document.createElement("style");q.type="text/css";var e=mS();return e&&q.setAttribute("nonce",e),q}function wS(q,e){q.styleSheet?q.styleSheet.cssText=e:q.appendChild(document.createTextNode(e))}function vS(q){var e=document.head||document.getElementsByTagName("head")[0];e.appendChild(q)}var ES=function(){var q=0,e=null;return{add:function(t){q==0&&(e=yS())&&(wS(e,t),vS(e)),q++},remove:function(){q--,!q&&e&&(e.parentNode&&e.parentNode.removeChild(e),e=null)}}},MS=function(){var q=ES();return function(e,t){b.useEffect(function(){return q.add(e),function(){q.remove()}},[e&&t])}},eg=function(){var q=MS(),e=function(t){var r=t.styles,A=t.dynamic;return q(r,A),null};return e},bS={left:0,top:0,right:0,gap:0},Xi=function(q){return parseInt(q||"",10)||0},CS=function(q){var e=window.getComputedStyle(document.body),t=e[q==="padding"?"paddingLeft":"marginLeft"],r=e[q==="padding"?"paddingTop":"marginTop"],A=e[q==="padding"?"paddingRight":"marginRight"];return[Xi(t),Xi(r),Xi(A)]},SS=function(q){if(q===void 0&&(q="margin"),typeof window>"u")return bS;var e=CS(q),t=document.documentElement.clientWidth,r=window.innerWidth;return{left:e[0],top:e[1],right:e[2],gap:Math.max(0,r-t+e[2]-e[0])}},xS=eg(),BA="data-scroll-locked",IS=function(q,e,t,r){var A=q.left,n=q.top,o=q.right,a=q.gap;return t===void 0&&(t="margin"),`
47
47
  .`.concat(VS,` {
48
48
  overflow: hidden `).concat(r,`;
49
49
  padding-right: `).concat(a,"px ").concat(r,`;
@@ -3471,7 +3471,7 @@ var AA, UA, Wq, WA, iA, uA, tV, Kq, Ut, Qt, rV, js, Ys, Ls, Os, Fs, Nt, Xq, QA,
3471
3471
  })(Js || (Js = {})), (function(e) {
3472
3472
  e.DEV = "development", e.PROD = "production";
3473
3473
  })(Ps || (Ps = {}));
3474
- const tr = "4.7.10", lA = typeof window < "u" && typeof document == "object", MV = typeof process == "object" && typeof process.versions == "object" && !!process.versions.node, Xn = !1, _n = !1, Gt = MV ? require("node-fetch") : fetch, $n = MV ? require("form-data") : FormData;
3474
+ const tr = "4.7.11", lA = typeof window < "u" && typeof document == "object", MV = typeof process == "object" && typeof process.versions == "object" && !!process.versions.node, Xn = !1, _n = !1, Gt = MV ? require("node-fetch") : fetch, $n = MV ? require("form-data") : FormData;
3475
3475
  if (lA) try {
3476
3476
  window.adapter || (window.adapter = require("webrtc-adapter").default);
3477
3477
  } catch {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@connectycube/chat-widget",
3
3
  "description": "A customizable React chat widget built on the ConnectyCube platform, enabling real-time messaging, calls, and user engagement in any web app.",
4
- "version": "0.37.2",
4
+ "version": "0.37.3",
5
5
  "license": "GPL-3.0-only",
6
6
  "homepage": "https://github.com/ConnectyCube/connectycube-chat-widget/chat-widget#readme",
7
7
  "bugs": {
@@ -86,7 +86,7 @@
86
86
  },
87
87
  "dependencies": {
88
88
  "@ai-sdk/google": "^2.0.24",
89
- "@connectycube/react": "4.7.10",
89
+ "@connectycube/react": "4.7.11",
90
90
  "@radix-ui/react-alert-dialog": "^1.1.15",
91
91
  "@radix-ui/react-avatar": "^1.1.10",
92
92
  "@radix-ui/react-checkbox": "^1.3.3",