@talkjs/web-components 0.0.29 → 0.0.30
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/README.md +1 -1
- package/default.css +1 -1
- package/default.d.ts +159 -90
- package/default.js +1112 -1046
- package/default.standalone.js +94 -94
- package/globalConstants.js +32 -40
- package/package.json +1 -1
- package/theming.d.ts +49 -14
- package/theming.js +446 -436
package/default.js
CHANGED
|
@@ -1,87 +1,92 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
11
|
-
import {
|
|
12
|
-
import
|
|
13
|
-
import {
|
|
14
|
-
import
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import
|
|
21
|
-
import
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import
|
|
25
|
-
import
|
|
26
|
-
import
|
|
27
|
-
import {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
2
|
+
var vt = (e) => {
|
|
3
|
+
throw TypeError(e);
|
|
4
|
+
};
|
|
5
|
+
var ft = (e, t, n) => t.has(e) || vt("Cannot " + n);
|
|
6
|
+
var Y = (e, t, n) => (ft(e, t, "read from private field"), n ? n.call(e) : t.get(e)), me = (e, t, n) => t.has(e) ? vt("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(e) : t.set(e, n), st = (e, t, n, a) => (ft(e, t, "write to private field"), a ? a.call(e, n) : t.set(e, n), n);
|
|
7
|
+
import Ia from "htm";
|
|
8
|
+
import * as ue from "react";
|
|
9
|
+
import { useMemo as M, useRef as P, useState as b, useEffect as h, useCallback as H, createElement as le, Fragment as Na, useLayoutEffect as Ie, useContext as Ra, forwardRef as Je, useImperativeHandle as Ze } from "react";
|
|
10
|
+
import * as La from "universal-base64";
|
|
11
|
+
import { jsx as O, jsxs as K, Fragment as ve } from "react/jsx-runtime";
|
|
12
|
+
import ma from "wavesurfer.js";
|
|
13
|
+
import { Decoration as Dn, DecorationSet as _n, EditorView as Ca } from "prosemirror-view";
|
|
14
|
+
import { useSession as Pe, useStore as f, usePublicController as An, useTheme as W, schema as y, useEditorInternals as He, useController as Ue, useEmojiPicker as pa, usePopover as ha, EmojiPickerContext as On, PopoverContext as ga, useChatboxCallbacks as Fa, EditorInternalsContext as Tn, PermissionContext as dn, StoreContext as Sn, ThemeContext as In, ControllerContext as Nn, SessionContext as Rn, ChatboxCallbacksContext as va, PublicControllerContext as Ln } from "./globalConstants.js";
|
|
15
|
+
import { PluginKey as mn, Plugin as Cn, TextSelection as kt, EditorState as fa } from "prosemirror-state";
|
|
16
|
+
import { keymap as Mt } from "prosemirror-keymap";
|
|
17
|
+
import { history as ka, undo as Ma, redo as Ba } from "prosemirror-history";
|
|
18
|
+
import { baseKeymap as ye } from "prosemirror-commands";
|
|
19
|
+
import Pa, { EmailMatch as Ha, UrlMatch as Ua } from "autolinker";
|
|
20
|
+
import { ReplaceStep as ba } from "prosemirror-transform";
|
|
21
|
+
import { observable as U, ObservableHint as Bt, batch as Te, observe as Pt, internal as ya } from "@legendapp/state";
|
|
22
|
+
import { useObservable as te, useSelector as F, useObserveEffect as de, For as _t } from "@legendapp/state/react";
|
|
23
|
+
import { CSSTransition as wa } from "react-transition-group";
|
|
24
|
+
import { useFloating as Ya } from "@floating-ui/react-dom";
|
|
25
|
+
import * as it from "@radix-ui/react-popover";
|
|
26
|
+
import * as $e from "@radix-ui/react-dropdown-menu";
|
|
27
|
+
import { configureLegendState as $a } from "@legendapp/state/config/configureLegendState";
|
|
28
|
+
import { polyfillCountryFlagEmojis as ja } from "country-flag-emoji-polyfill";
|
|
29
|
+
import { ErrorBoundary as pn } from "react-error-boundary";
|
|
30
|
+
import { getTalkSession as xa } from "@talkjs/core";
|
|
31
|
+
import Va from "lodash.merge";
|
|
32
|
+
import { createRoot as Xa } from "react-dom/client";
|
|
33
|
+
var Ga = { TALK_GMK: "AIzaSyAs_WXNLlj31EHJI_Lw8siO2B3ZJLUzBH0", BASE_URL: "/", MODE: "production", DEV: !1, PROD: !0, SSR: !1 };
|
|
34
|
+
const za = function(e) {
|
|
35
|
+
return Ga[e];
|
|
36
|
+
}("TALK_GMK"), Ka = /[^a-zA-Z\u00C0-\u024F\u1E00-\u1EFF\u0400-\u044f\u0300-\u036e]+/, Wa = (e) => e.split(Ka).filter((t) => t).map((t) => t[0]).join("") || e[Symbol.iterator]().next().value || "";
|
|
37
|
+
function hn(e) {
|
|
33
38
|
const t = function(n) {
|
|
34
39
|
let a = 0;
|
|
35
40
|
for (let s = 0; s < n.length; s++) a = (a << 5) - a + n.charCodeAt(s), a |= 0;
|
|
36
41
|
return Math.abs(a);
|
|
37
|
-
}(e) %
|
|
38
|
-
return
|
|
42
|
+
}(e) % Ut.length;
|
|
43
|
+
return Ut[t];
|
|
39
44
|
}
|
|
40
|
-
function
|
|
45
|
+
function Qe(e, t) {
|
|
41
46
|
const n = t.lastIndex;
|
|
42
47
|
let a;
|
|
43
48
|
const s = [];
|
|
44
49
|
for (; (a = t.exec(e)) !== null; ) s.push(a);
|
|
45
50
|
return t.lastIndex = n, s;
|
|
46
51
|
}
|
|
47
|
-
function
|
|
52
|
+
function At(e, t, n) {
|
|
48
53
|
let a = 0;
|
|
49
54
|
const s = [];
|
|
50
55
|
for (const i of t) i.offset < a || (i.offset > a && s.push(e.substring(a, i.offset)), s.push(...n(i)), a = i.offset + i.matchedText.length);
|
|
51
56
|
return a < e.length && s.push(e.substring(a)), s;
|
|
52
57
|
}
|
|
53
|
-
function
|
|
58
|
+
function gn(e) {
|
|
54
59
|
try {
|
|
55
60
|
return new URL(e).hostname;
|
|
56
61
|
} catch (t) {
|
|
57
62
|
return;
|
|
58
63
|
}
|
|
59
64
|
}
|
|
60
|
-
function
|
|
65
|
+
function we(e) {
|
|
61
66
|
const t = e.replace(/%2F/g, "/").replace(/^.*?\/([^/]+?)(?:\?.*)?$/, "$1");
|
|
62
67
|
return decodeURIComponent(t);
|
|
63
68
|
}
|
|
64
|
-
function
|
|
69
|
+
function Ht(e, t) {
|
|
65
70
|
return e.localeCompare(t, void 0, { usage: "search", sensitivity: "base" }) === 0;
|
|
66
71
|
}
|
|
67
|
-
const
|
|
68
|
-
function
|
|
69
|
-
const t =
|
|
72
|
+
const Ut = ["#996666", "#9A6E61", "#8D7662", "#8E775E", "#948771", "#8A8360", "#888D65", "#6F8E63", "#749378", "#678975", "#779E86", "#639A8F", "#6D92A1", "#65869F", "#697E9A", "#736C9F", "#8C6495", "#956387", "#B05D54", "#B16D52", "#AF8751", "#AC8A56", "#B7A458", "#B5B35C", "#83AA5D", "#4F9D5D", "#5FA777", "#66B58F", "#5FB3AC", "#589AAF", "#4E7F9E", "#456CAC", "#6456B7", "#714AB2", "#9771B5", "#C154C1", "#B05E81", "#B04C6A", "#B94E48", "#AF593E", "#C5994B", "#B8C25D", "#87AB39", "#4FA83D", "#40A860", "#41AA78", "#3AB09E", "#3FC1AA", "#56B4BE", "#3EABBF", "#4682B4", "#7A58C1", "#9966CC", "#C54B8C", "#B44668", "#AE4560", "#A3807B", "#AB917A", "#ACA586", "#A8AF8E", "#9EA587", "#8BA690", "#7DA98D", "#7CB0A1", "#8BA9A5", "#7CA1A6", "#859FAF", "#8D90A1", "#A397B4", "#AE809E", "#C08081", "#BB8983", "#B19461", "#B5A27F", "#B8B56A", "#9AB973", "#7AC488", "#7CB7BB", "#80B3C4", "#788BBA", "#7A89B8", "#9678B6", "#CB8FA9", "#B57281", "#C6726B", "#C88A65", "#C2955D", "#C8B568", "#B9C46A", "#74C365", "#6FD0C5", "#6093D1", "#7666C6", "#D06DA1"], qa = Symbol("no_render");
|
|
73
|
+
function z(e) {
|
|
74
|
+
const t = te(!1), n = P({ _value: typeof e == "function" ? e() : e.peek(), get value() {
|
|
70
75
|
return setTimeout(() => {
|
|
71
76
|
t.set(!0);
|
|
72
77
|
}), n.current._value;
|
|
73
78
|
}, set value(a) {
|
|
74
79
|
n.current._value = a;
|
|
75
80
|
} });
|
|
76
|
-
return
|
|
77
|
-
if (!t.get()) return
|
|
81
|
+
return F(() => {
|
|
82
|
+
if (!t.get()) return qa;
|
|
78
83
|
const a = typeof e == "function" ? e() : e.get();
|
|
79
84
|
return n.current.value = a, a;
|
|
80
85
|
}), n.current;
|
|
81
86
|
}
|
|
82
|
-
function
|
|
83
|
-
const e =
|
|
84
|
-
return
|
|
87
|
+
function Ne() {
|
|
88
|
+
const e = Pe(), t = f(), n = An(), a = W(), s = z(t.app$.appMetadata), i = z(t.currentUser$), r = z(t.state$.currentConversation), o = z(t.t$), E = z(t.device$), u = z(t.themeCustom$), l = z(() => t.state$.typing.child(t.state$.extCurrentConversationId.get()).get()), c = z(() => t.state$.participants.child(t.state$.extCurrentConversationId.get()).get());
|
|
89
|
+
return M(() => ({ session: e, store: t, chatbox: n, theme: a, get app() {
|
|
85
90
|
return s.value;
|
|
86
91
|
}, get currentUser() {
|
|
87
92
|
return i.value;
|
|
@@ -94,14 +99,14 @@ function Ae() {
|
|
|
94
99
|
}, get themeCustom() {
|
|
95
100
|
return u.value.value;
|
|
96
101
|
}, get typing() {
|
|
97
|
-
return D.value;
|
|
98
|
-
}, get participants() {
|
|
99
102
|
return l.value;
|
|
100
|
-
}
|
|
103
|
+
}, get participants() {
|
|
104
|
+
return c.value;
|
|
105
|
+
} }), [s, n, r, i, E, t, o, a, u, l, c, e]);
|
|
101
106
|
}
|
|
102
|
-
function
|
|
103
|
-
const e =
|
|
104
|
-
return
|
|
107
|
+
function Fn() {
|
|
108
|
+
const e = Pe(), t = f(), n = W(), a = An(), s = z(t.app$.appMetadata), i = z(t.currentUser$), r = z(t.t$), o = z(t.device$), E = z(t.themeCustom$);
|
|
109
|
+
return M(() => ({ session: e, store: t, theme: n, conversationList: a, get app() {
|
|
105
110
|
return s.value;
|
|
106
111
|
}, get currentUser() {
|
|
107
112
|
return i.value;
|
|
@@ -113,12 +118,12 @@ function cn() {
|
|
|
113
118
|
return E.value.value;
|
|
114
119
|
} }), [s, a, i, o, e, t, r, n, E]);
|
|
115
120
|
}
|
|
116
|
-
class
|
|
121
|
+
class et {
|
|
117
122
|
constructor(t = {}) {
|
|
118
123
|
this._handlers = /* @__PURE__ */ new Set(), this._meta = t;
|
|
119
124
|
}
|
|
120
125
|
meta(t) {
|
|
121
|
-
return new
|
|
126
|
+
return new et(t);
|
|
122
127
|
}
|
|
123
128
|
_emit(t, n) {
|
|
124
129
|
for (const a of this._handlers) a({ level: t, data: n, timestamp: Date.now(), meta: this._meta });
|
|
@@ -142,72 +147,72 @@ class xe {
|
|
|
142
147
|
return this._handlers.add(t), () => this._handlers.delete(t);
|
|
143
148
|
}
|
|
144
149
|
}
|
|
145
|
-
const Ue = new xe(), q = new xe(), A = { code: "en-US", name: "English (US)", translation: { YESTERDAY: "Yesterday", TODAY: "Today", DAYS: "d", HOURS: "h", MINUTES: "m", JUST_NOW: "just now", LOCATION: "Location", CANCEL: "Cancel", INBOX: "Inbox", DESKTOP_NOTIFICATIONS: "Browser notifications", DESKTOP_NOTIFICATIONS_ERROR: "Can't enable browser notifications because your browser actively blocks them. Try looking in the settings or using a different browser.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} demo notification`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "If you keep your browser tab open, you'll see this pop up when someone talks to you.", SEND_BUTTON_TEXT: "Send", ENTRYBOX_TEXT_LIMIT: "Only 10,000 characters are allowed.", ENTRYBOX_PLACEHOLDER: "Say something...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "This conversation is no longer active.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "You can read, but not send messages.", MESSAGELIST_LOADING_OLDER: "Loading older messages...", MESSAGELIST_SHOW_OLDER: "Show older messages", MESSAGELIST_NEW_MARKER: "New", MESSAGE_SENT_VIA_EMAIL: "This message was sent via email", YOU_MARKER: "you", UPLOAD_IN_PROGRESS: "Uploading...", UPLOAD_SEND_FILE: "Send file", UPLOAD_SHARE_LOCATION: "Share location", UPLOAD_ERROR: "Unfortunately, something went wrong uploading. The file might be unsupported or too large.", SHARE_LOCATION_ERROR: "Cannot share location: ", LOADING: "Loading...", HUB_EMPTY: "Your chat history will show up here", HUB_SHOW_EARLIER: "Show earlier chats", INBOX_NO_CHATS_TITLE: "No chats yet!", INBOX_NO_CHATS_BODY: "Once you've had one or more conversations, they will show up here.", ENABLE_TRANSLATION: "Translate this conversation to English", DISABLE_TRANSLATION: "Show original", SEARCH_PLACEHOLDER_TEXT: "Search...", SEARCH_SEARCHING: "Searching...", SEARCH_NO_RESULTS: "No results found", SEARCH_NO_MORE_RESULTS: "No more results", CHAT_NOT_FOUND: "Chat not found", DELETE_MESSAGE: "Delete message", DELETION_EXPLANATION: "If you delete this message, it will disappear for everybody.", EDIT_MESSAGE: "Edit message", SAVE: "Save", EDITED_INDICATOR: "edited", REPLY_TO_MESSAGE: "Reply", REPLY_TO_ARIA_LABEL: (e, t) => `Replying to ${e}: ${t}`, REPLY_MODE_LEAVE_ARIA_LABEL: "Exit reply mode", ADD_REACTION: "Add reaction", AUTH_EXPIRED_OVERLAY_TITLE: "Your chat session has expired", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Refresh the page to continue", VOICE_MESSAGE: "Voice message", LEAVE_CONVERSATION: "Leave conversation", MARK_CONVERSATION_AS_UNREAD: "Mark as unread", STATUS_INDICATOR_ONLINE: "Active", STATUS_INDICATOR_OFFLINE: "Away", CONTACT_INFORMATION_HIDDEN: "hidden information" } }, Pa = { code: "ar", name: "Arabic", translation: { YESTERDAY: "الأمس", TODAY: "اليوم", DAYS: "يوم", HOURS: "ساعة", MINUTES: "دقيقة", JUST_NOW: "فقط الآن", LOCATION: "الموقع", CANCEL: "إلغاء", INBOX: "علبة الوارد", DESKTOP_NOTIFICATIONS: "إشعارات المتصفح", DESKTOP_NOTIFICATIONS_ERROR: "لا يمكن تمكين إشعارات المتصفح لأن متصفحك يمنعها بشكل نشط. جرّب البحث في الإعدادات أو استخدام متصفح آخر.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `إعلام ${e} التجريبي`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "إذا أبقيت علامة تبويب المتصفح مفتوحة ، فسترى هذا ينبثق عندما يتحدث شخص معك.", SEND_BUTTON_TEXT: "إرسال", ENTRYBOX_TEXT_LIMIT: "يُسمح فقط بـ 10.000 حرف.", ENTRYBOX_PLACEHOLDER: "قل شيئًا ...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "هذه المحادثة لم تعد نشطة.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "يمكنك القراءة ، لكن لا يمكنك إرسال الرسائل.", MESSAGELIST_LOADING_OLDER: "جارٍ تحميل الرسائل القديمة ...", MESSAGELIST_SHOW_OLDER: "عرض الرسائل الأقدم", MESSAGELIST_NEW_MARKER: "جديد", MESSAGE_SENT_VIA_EMAIL: "تم إرسال هذه الرسالة عبر البريد الإلكتروني", YOU_MARKER: "أنت", UPLOAD_IN_PROGRESS: "جارٍ التحميل ...", UPLOAD_SEND_FILE: "إرسال ملف", UPLOAD_SHARE_LOCATION: "مشاركة الموقع", UPLOAD_ERROR: "حدث خطأ ما في تحميل شيء. ربما يكون الملف غير متوافق أو كبير جدًا.", SHARE_LOCATION_ERROR: "لا يمكن مشاركة الموقع:", LOADING: "جارٍ التحميل ...", HUB_EMPTY: "سوف يظهر سجل الدردشات هنا", HUB_SHOW_EARLIER: "إظهار الدردشات السابقة", INBOX_NO_CHATS_TITLE: "لا توجد دردشات بعد!", INBOX_NO_CHATS_BODY: "بمجرد أن يكون لديك واحد أو أكثر من المحادثات ، سوف تظهر هنا.", ENABLE_TRANSLATION: "ترجم هذه المحادثة إلى العربية", DISABLE_TRANSLATION: "إظهار الأصلي", SEARCH_PLACEHOLDER_TEXT: "...بحث", SEARCH_SEARCHING: "...يتم الآن البحث", SEARCH_NO_RESULTS: "لم يتم العثور على نتائج", SEARCH_NO_MORE_RESULTS: "لا يوجد المزيد من النتائج", CHAT_NOT_FOUND: "لم يتم العثور على الدردشة", DELETE_MESSAGE: "احذف الرسالة", DELETION_EXPLANATION: "إذا قمت بحذف هذه الرسالة، فهي ستختفي للجميع.", EDIT_MESSAGE: "تعديل الرسالة", SAVE: "حفظ", EDITED_INDICATOR: "معدّلة", REPLY_TO_MESSAGE: "رد", ADD_REACTION: "أضف تفاعلاً", AUTH_EXPIRED_OVERLAY_TITLE: "انتهت جلسة الدردشة المخصصة لك", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "يُرجى إعادة تحميل الصفحة للمتابعة", VOICE_MESSAGE: "رسالة صوتية", CONTACT_INFORMATION_HIDDEN: "المعلومات المخفية", LEAVE_CONVERSATION: "الخروج من المحادثة", MARK_CONVERSATION_AS_UNREAD: "وضع علامة غير مقروءة", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Ha = { code: "bg-BG", name: "Bulgarian", translation: { YESTERDAY: "Вчера", TODAY: "Днес", DAYS: "Ден", HOURS: "Час", MINUTES: "m", JUST_NOW: "Току-що", LOCATION: "местоположението", CANCEL: "Откажи", INBOX: "Кутия", DESKTOP_NOTIFICATIONS: "Известия на браузъра", DESKTOP_NOTIFICATIONS_ERROR: "Не можете да активирате известията на браузъра, защото браузърът ви ги блокира активно. Опитайте да погледнете в настройките или да използвате друг браузър.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} демо известие`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Ако държите раздела на браузъра си отворен, ще видите този изскачащ прозорец, когато някой говори с вас.", SEND_BUTTON_TEXT: "Изпрати", ENTRYBOX_TEXT_LIMIT: "Разрешени са само до 10.000 знака.", ENTRYBOX_PLACEHOLDER: "Кажете нещо...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Този разговор вече не е активен.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Можете да четете, но не и да изпращате съобщения.", MESSAGELIST_LOADING_OLDER: "Зареждане на по-стари съобщения...", MESSAGELIST_SHOW_OLDER: "Показване на по-стари съобщения", MESSAGELIST_NEW_MARKER: "Нови", MESSAGE_SENT_VIA_EMAIL: "Това съобщение беше изпратено по имейл", YOU_MARKER: "Вие", UPLOAD_IN_PROGRESS: "Качване...", UPLOAD_SEND_FILE: "Изпращане на файл", UPLOAD_SHARE_LOCATION: "Споделяне на местоположението", UPLOAD_ERROR: "За съжаление нещо се обърка при качването. Файлът може да не се поддържа или е твърде голям.", SHARE_LOCATION_ERROR: "Не може да се сподели местоположението: ", LOADING: "Зареждане...", HUB_EMPTY: "Историята на вашите разговори ще се покаже тук", HUB_SHOW_EARLIER: "Показване на по-ранни чатове", INBOX_NO_CHATS_TITLE: "Все още нямате разговори!", INBOX_NO_CHATS_BODY: "След като проведете един или повече разговори, те ще се покажат тук.", ENABLE_TRANSLATION: "Преведете този разговор на български", DISABLE_TRANSLATION: "Показване на оригинал", SEARCH_PLACEHOLDER_TEXT: "Търсене...", SEARCH_SEARCHING: "Търсене...", SEARCH_NO_RESULTS: "Няма намерени резултати", SEARCH_NO_MORE_RESULTS: "Няма повече резултати", CHAT_NOT_FOUND: "Чатът не е намерен", DELETE_MESSAGE: "Изтриване на съобщение", DELETION_EXPLANATION: "Ако изтриете това съобщение, то ще изчезне за всички.", EDIT_MESSAGE: "Редактиране на съобщението", SAVE: "Запиши", EDITED_INDICATOR: "редактирано", REPLY_TO_MESSAGE: "Отговори", ADD_REACTION: "Добави реакция", AUTH_EXPIRED_OVERLAY_TITLE: "Вашата чат сесия е изтекла", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Обновете страницата, за да продължите", VOICE_MESSAGE: "Гласово съобщение", CONTACT_INFORMATION_HIDDEN: "Скрита информация", LEAVE_CONVERSATION: "Напускане на разговора", MARK_CONVERSATION_AS_UNREAD: "Маркирай като непрочетено", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Ua = { code: "bs-BA", name: "Bosnian", translation: { YESTERDAY: "Jučer", TODAY: "Danas", DAYS: "d", HOURS: "s", MINUTES: "m", JUST_NOW: "Upravo sad", LOCATION: "Lokacija", CANCEL: "Otkaži", INBOX: "Pretinac", DESKTOP_NOTIFICATIONS: "Obavijesti preglednika", DESKTOP_NOTIFICATIONS_ERROR: "Notifikacije preglednika se ne mogu omogućiti jer ih vaš preglednik aktivno blokira. Pokušajte pregledati postavke ili koristiti drugi preglednik.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} demo notifikacija`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Ako karticu preglednika ostavite otvorenu, pojavit će se ovaj pop-up kada netko razgovara s vama.", SEND_BUTTON_TEXT: "Pošalji", ENTRYBOX_TEXT_LIMIT: "Dozvoljeno je samo 10.000 znakova.", ENTRYBOX_PLACEHOLDER: "Reci nešto...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Ovaj razgovor više nije aktivan.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Možeš čitati, ali ne i slati poruke.", MESSAGELIST_LOADING_OLDER: "Učitavam starije poruke...", MESSAGELIST_SHOW_OLDER: "Prikaži starije poruke", MESSAGELIST_NEW_MARKER: "Novo", MESSAGE_SENT_VIA_EMAIL: "Ova poruka je poslana e-poštom", YOU_MARKER: "ti", UPLOAD_IN_PROGRESS: "Učitavam...", UPLOAD_SEND_FILE: "Pošalji datoteku", UPLOAD_SHARE_LOCATION: "Podijeli lokaciju", UPLOAD_ERROR: "Nažalost, nešto je pošlo krivo. Datoteka možda nije podržana ili je prevelika.", SHARE_LOCATION_ERROR: "Nije moguće podijeliti lokaciju: ", LOADING: "Učitavam...", HUB_EMPTY: "Ovdje će se prikazati vaša povijest razgovora", HUB_SHOW_EARLIER: "Prikaži ranije razgovore", INBOX_NO_CHATS_TITLE: "Nema razgovora!", INBOX_NO_CHATS_BODY: "Nakon što vodite jedan ili više razgovora, oni će se pojaviti ovdje.", ENABLE_TRANSLATION: "Prevedi ovaj razgovor na bosanski jezik", DISABLE_TRANSLATION: "Prikaži original", SEARCH_PLACEHOLDER_TEXT: "Pretraži...", SEARCH_SEARCHING: "Pretraživanje...", SEARCH_NO_RESULTS: "Nema rezultata", SEARCH_NO_MORE_RESULTS: "Nema više rezultata", CHAT_NOT_FOUND: "Ćaskanje nije pronađeno", DELETE_MESSAGE: "Obriši poruku", DELETION_EXPLANATION: "Ako izbrišete ovu poruku, ona će nestati za sve.", EDIT_MESSAGE: "Uredi poruku", SAVE: "Sačuvati", EDITED_INDICATOR: "uređeno", REPLY_TO_MESSAGE: "Odgovorite", ADD_REACTION: "Dodajte reakciju", AUTH_EXPIRED_OVERLAY_TITLE: "Vaša chat sesija je istekla", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Osvježite stranicu da nastavite", VOICE_MESSAGE: "Glasovna poruka", CONTACT_INFORMATION_HIDDEN: "Skrivene informacije", LEAVE_CONVERSATION: "Napusti razgovor", MARK_CONVERSATION_AS_UNREAD: "Označi kao nepročitano", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, ba = { code: "ca-ES", name: "Catalan (ES)", translation: { YESTERDAY: "Ahir", TODAY: "Avui", DAYS: "d", HOURS: "h", MINUTES: "m", JUST_NOW: "ara mateix", LOCATION: "Ubicació", CANCEL: "Cancel·lar", INBOX: "Safata d'entrada", DESKTOP_NOTIFICATIONS: "Notificacions d'escriptori", DESKTOP_NOTIFICATIONS_ERROR: "No es poden habilitar les notificacions del navegador perquè el teu navegador les bloqueja activament. Prova de buscar a la configuració o utilitza un altre navegador.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `Notificació de demostració de ${e}`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Si mantens la pestanya del navegador oberta, veuràs aquesta notificació quan algú et parli.", SEND_BUTTON_TEXT: "Enviar", ENTRYBOX_TEXT_LIMIT: "Només es permeten 10.000 caràcters.", ENTRYBOX_PLACEHOLDER: "Digues alguna cosa...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Aquesta conversa ja no està activa.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Pots llegir, però no enviar missatges.", MESSAGELIST_LOADING_OLDER: "Carregant missatges antics...", MESSAGELIST_SHOW_OLDER: "Mostrar missatges més antics", MESSAGELIST_NEW_MARKER: "Nou", MESSAGE_SENT_VIA_EMAIL: "Aquest missatge s'ha enviat per correu electrònic", YOU_MARKER: "tu", UPLOAD_IN_PROGRESS: "S'està pujant...", UPLOAD_SEND_FILE: "Enviar arxiu", UPLOAD_SHARE_LOCATION: "Compartir ubicació", UPLOAD_ERROR: "Desafortunadament, alguna cosa ha anat malament en pujar. L'arxiu pot ser no compatible o massa gran.", SHARE_LOCATION_ERROR: "No es pot compartir la ubicació: ", LOADING: "Carregant...", HUB_EMPTY: "El teu historial de xat apareixerà aquí", HUB_SHOW_EARLIER: "Mostra xats anteriors", INBOX_NO_CHATS_TITLE: "Encara no hi ha xats!", INBOX_NO_CHATS_BODY: "Un cop hagis tingut una o més converses, apareixeran aquí.", ENABLE_TRANSLATION: "Traduir aquesta conversa al català", DISABLE_TRANSLATION: "Mostrar original", SEARCH_PLACEHOLDER_TEXT: "Cerca...", SEARCH_SEARCHING: "Buscant...", SEARCH_NO_RESULTS: "No s'han trobat resultats", SEARCH_NO_MORE_RESULTS: "No hi ha més resultats", CHAT_NOT_FOUND: "Xat no trobat", DELETE_MESSAGE: "Esborrar missatge", DELETION_EXPLANATION: "Si esborres aquest missatge, desapareixerà per a tothom.", EDIT_MESSAGE: "Editar missatge", SAVE: "Desar", EDITED_INDICATOR: "editat", REPLY_TO_MESSAGE: "Respondre", REPLY_TO_ARIA_LABEL: (e, t) => `Responent a ${e}: ${t}`, REPLY_MODE_LEAVE_ARIA_LABEL: "Sortir del mode de resposta", ADD_REACTION: "Afegir reacció", VOICE_MESSAGE: "Missatge de veu", LEAVE_CONVERSATION: "Abandonar la conversa", MARK_CONVERSATION_AS_UNREAD: "marcar com no llegit", STATUS_INDICATOR_ONLINE: "Actiu", STATUS_INDICATOR_OFFLINE: "Absent", CONTACT_INFORMATION_HIDDEN: "informació oculta", AUTH_EXPIRED_OVERLAY_TITLE: "La teva sessió de xat ha caducat", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Actualitza la pàgina per continuar" } }, ya = { code: "cs-CZ", name: "Czech", translation: { YESTERDAY: "Včera", TODAY: "Dnes", DAYS: "d", HOURS: "h", MINUTES: "m", JUST_NOW: "právě teď", LOCATION: "Lokace", CANCEL: "Zrušit", INBOX: "Doručené", DESKTOP_NOTIFICATIONS: "Oznámení v prohlížeči", DESKTOP_NOTIFICATIONS_ERROR: "Nelze povolit notifikace prohlížeče, protože váš prohlížeč je aktivně blokuje. Zkuste se podívat na nastavení nebo zkuste použít jiný prohlížeč.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} demo notifikace`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Pokud necháte kartu prohlížeče otevřenou, uvidíte tento popup jakmile s vámi bude někdo mluvit.", SEND_BUTTON_TEXT: "Odeslat", ENTRYBOX_TEXT_LIMIT: "Je povoleno Maximálně 10.000 znaků.", ENTRYBOX_PLACEHOLDER: "Napište něco...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Tato konverzace již není aktivní.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Můžete číst, ale nemůžete posílat zprávy.", MESSAGELIST_LOADING_OLDER: "Nahrávám starší zprávy...", MESSAGELIST_SHOW_OLDER: "Zobrazit starší zprávy", MESSAGELIST_NEW_MARKER: "Nové", MESSAGE_SENT_VIA_EMAIL: "Tato zpráva byla odeslána přes mail.", YOU_MARKER: "vy", UPLOAD_IN_PROGRESS: "Nahrávám...", UPLOAD_SEND_FILE: "Poslat soubor", UPLOAD_SHARE_LOCATION: "Sdílet pozici", UPLOAD_ERROR: "Nepodařilo se nahrát soubor. Ten je buď nepodporován a/nebo příliš velký.", SHARE_LOCATION_ERROR: "Není možné sdílet pozici: ", LOADING: "Nahrávám...", HUB_EMPTY: "Vaše historie se zde zobrazí", HUB_SHOW_EARLIER: "Zobrazit dřívější konverzace", INBOX_NO_CHATS_TITLE: "Zatím zde nejsou žádné konverzace!", INBOX_NO_CHATS_BODY: "Jakmile budete mít jednu nebo více konverzací, objeví se zde.", ENABLE_TRANSLATION: "Přeložit tuto konverzaci do češtiny", DISABLE_TRANSLATION: "Zobrazit původní", SEARCH_PLACEHOLDER_TEXT: "Hledat...", SEARCH_SEARCHING: "Hledání...", SEARCH_NO_RESULTS: "Nenašly se žádné výsledky", SEARCH_NO_MORE_RESULTS: "Žádné další výsledky", CHAT_NOT_FOUND: "Chat nenalezen", DELETE_MESSAGE: "Smazat zprávu", DELETION_EXPLANATION: "Pokud tuto zprávu smažete, zmizí pro všechny.", EDIT_MESSAGE: "Upravit zprávu", SAVE: "Uložit", EDITED_INDICATOR: "upraveno", REPLY_TO_MESSAGE: "Odpovědět", ADD_REACTION: "Reagovat", AUTH_EXPIRED_OVERLAY_TITLE: "Váš chat byl kvůli nečinnosti odpojen", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Pro pokračování obnovte stránku", VOICE_MESSAGE: "Hlasová zpráva", CONTACT_INFORMATION_HIDDEN: "Skrytá informace", LEAVE_CONVERSATION: "Opustit konverzaci", MARK_CONVERSATION_AS_UNREAD: "Označit jako nepřečtené", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, wa = { code: "da-DK", name: "Danish", translation: { YESTERDAY: "I går", TODAY: "I dag", DAYS: "d", HOURS: "t", MINUTES: "m", JUST_NOW: "lige nu", LOCATION: "Placering", CANCEL: "Annuller", INBOX: "Indbakke", DESKTOP_NOTIFICATIONS: "Browsermeddelelser", DESKTOP_NOTIFICATIONS_ERROR: "Kan ikke aktivere Browsermeddelelser, fordi din browser aktivt blokerer dem. Prøv at kigge i indstillingerne eller benyt en anden browser.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} demomeddelelse`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Hvis du holder dit browser-faneblad åben, vil du se det her komme op, når nogen taler til dig.", SEND_BUTTON_TEXT: "Send", ENTRYBOX_TEXT_LIMIT: "Kun 10.000 tegn er tilladt.", ENTRYBOX_PLACEHOLDER: "Sig noget...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Denne samtale er ikke længere aktiv.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Du kan læse, men ikke sende beskeder.", MESSAGELIST_LOADING_OLDER: "Indlæser ældre beskeder...", MESSAGELIST_SHOW_OLDER: "Vis ældre beskeder", MESSAGELIST_NEW_MARKER: "Ny", MESSAGE_SENT_VIA_EMAIL: "Denne besked blev sendt via e-mail", YOU_MARKER: "dig", UPLOAD_IN_PROGRESS: "Overfører...", UPLOAD_SEND_FILE: "Send fil", UPLOAD_SHARE_LOCATION: "Del placering", UPLOAD_ERROR: "Der er sket noget forkert ved upload. Filen kan ikke understøttes eller filen er for stor.", SHARE_LOCATION_ERROR: "Kan ikke dele placering: ", LOADING: "Indlæser...", HUB_EMPTY: "Dine samtaler vises her", HUB_SHOW_EARLIER: "Vis tidligere chats", INBOX_NO_CHATS_TITLE: "Ingen chats endnu!", INBOX_NO_CHATS_BODY: "Når du har haft en eller flere samtaler, vises de her.", ENABLE_TRANSLATION: "Oversæt denne konversation til dansk", DISABLE_TRANSLATION: "Vis den oprindelige", SEARCH_PLACEHOLDER_TEXT: "Søg...", SEARCH_SEARCHING: "Søger...", SEARCH_NO_RESULTS: "Ingen resultater fundet", SEARCH_NO_MORE_RESULTS: "Ikke flere resultater", CHAT_NOT_FOUND: "Chat ikke fundet", DELETE_MESSAGE: "Slet besked", DELETION_EXPLANATION: "Hvis du sletter denne besked, vil ingen kunne se den.", EDIT_MESSAGE: "Rediger besked", SAVE: "Gem", EDITED_INDICATOR: "redigeret", REPLY_TO_MESSAGE: "Svar", ADD_REACTION: "Tilføj reaktion", AUTH_EXPIRED_OVERLAY_TITLE: "Din chatsession er udløbet", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Opdater siden for at fortsætte", VOICE_MESSAGE: "Talebesked", CONTACT_INFORMATION_HIDDEN: "Skjulte oplysninger", LEAVE_CONVERSATION: "Forlad samtale", MARK_CONVERSATION_AS_UNREAD: "Marker som ulæst", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Ya = { code: "de-DE", name: "German", translation: { YESTERDAY: "Gestern", TODAY: "Heute", DAYS: "d", HOURS: "h", MINUTES: "m", JUST_NOW: "gerade jetzt", LOCATION: "Standort", CANCEL: "Abbrechen", INBOX: "Inbox", DESKTOP_NOTIFICATIONS: "Browser-Benachrichtigungen", DESKTOP_NOTIFICATIONS_ERROR: "Browser-Benachrichtigungen können nicht aktiviert werden, da Ihr Browser sie aktiv blockiert. Versuchen Sie, in den Einstellungen nachzuschlagen oder einen anderen Browser zu verwenden.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} Demo-Benachrichtigung`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Wenn Sie Ihre Browser-Registerkarte geöffnet lassen, wird dies angezeigt, wenn jemand mit Ihnen spricht.", SEND_BUTTON_TEXT: "Senden", ENTRYBOX_TEXT_LIMIT: "Nur 10.000 Zeichen sind erlaubt.", ENTRYBOX_PLACEHOLDER: "Sag etwas...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Diese Konversation ist nicht mehr aktiv.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Sie können Nachrichten lesen, aber nicht senden.", MESSAGELIST_LOADING_OLDER: "Ältere Nachrichten werden geladen...", MESSAGELIST_SHOW_OLDER: "Zeige ältere Nachrichten", MESSAGELIST_NEW_MARKER: "Neu", MESSAGE_SENT_VIA_EMAIL: "Diese Nachricht wurde per E-Mail gesendet", YOU_MARKER: "du", UPLOAD_IN_PROGRESS: "Hochladen...", UPLOAD_SEND_FILE: "Datei senden", UPLOAD_SHARE_LOCATION: "Standort teilen", UPLOAD_ERROR: "Beim Hochladen ist ein Fehler aufgetreten. Die Datei ist möglicherweise nicht unterstützt oder zu groß.", SHARE_LOCATION_ERROR: "Standort kann nicht freigegeben werden: ", LOADING: "Laden...", HUB_EMPTY: "Ihr Chat-Verlauf wird hier angezeigt", HUB_SHOW_EARLIER: "Zeige frühere Chats", INBOX_NO_CHATS_TITLE: "Noch keine Chats!", INBOX_NO_CHATS_BODY: "Sobald Sie eine oder mehrere Unterhaltungen geführt haben, werden sie hier angezeigt.", ENABLE_TRANSLATION: "Dieses Gespräch auf Deutsch übersetzen", DISABLE_TRANSLATION: "Originaltext anzeigen", SEARCH_PLACEHOLDER_TEXT: "Suche...", SEARCH_SEARCHING: "Suchen...", SEARCH_NO_RESULTS: "Keine Suchergebnisse gefunden", SEARCH_NO_MORE_RESULTS: "Keine weiteren Suchergebnisse", CHAT_NOT_FOUND: "Chat nicht gefunden", DELETE_MESSAGE: "Nachricht löschen", DELETION_EXPLANATION: "Wenn Sie diese Nachricht löschen, wird sie für alle verschwinden.", EDIT_MESSAGE: "Nachricht bearbeiten", SAVE: "Speichern", EDITED_INDICATOR: "bearbeitet", REPLY_TO_MESSAGE: "Antworten", ADD_REACTION: "Reaktion hinzufügen", AUTH_EXPIRED_OVERLAY_TITLE: "Ihre Chatsitzung ist abgelaufen", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Laden Sie zum Fortfahren die Seite neu", VOICE_MESSAGE: "Sprachnachricht", CONTACT_INFORMATION_HIDDEN: "Geschützte Angaben", LEAVE_CONVERSATION: "Unterhaltung verlassen", MARK_CONVERSATION_AS_UNREAD: "als ungelesen markieren", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, $a = { code: "el-GR", name: "Greek (Greece)", translation: { YESTERDAY: "Χθές", TODAY: "Σήμερα", DAYS: "Ημέρες", HOURS: "'Ωρες", MINUTES: "Λεπτά", JUST_NOW: "Μόλις τώρα", LOCATION: "Τοποθεσία", CANCEL: "Ακύρωση", INBOX: "Εισερχόμενα", DESKTOP_NOTIFICATIONS: "Ειδοποιήσεις περιηγητή", DESKTOP_NOTIFICATIONS_ERROR: "Δεν είναι δυνατή η ενεργοποίηση των ειδοποιήσεων του προγράμματος περιήγησης, επειδή το πρόγραμμα περιήγησης τις αποκλείει ενεργά. Δοκιμάστε να τσεκάρετε τις ρυθμίσεις ή να χρησιμοποιήσετε διαφορετικό πρόγραμμα περιήγησης.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} Δοκιμαστική επίδειξη`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Αν διατηρήσετε ανοιχτή τη σελίδα του προγράμματος περιήγησης, θα δείτε αυτό το pop up (παράθυρο) όταν κάποιος σας μιλάει.", SEND_BUTTON_TEXT: "Αποστολή", ENTRYBOX_TEXT_LIMIT: "Επιτρέπονται μόνο 10.000 χαρακτήρες.", ENTRYBOX_PLACEHOLDER: "Πείτε κάτι...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Αυτή η συζήτηση δεν είναι πλέον ενεργή.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Μπορείτε να διαβάσετε αλλά δεν μπορείτε να στείλετε μηνύματα.", MESSAGELIST_LOADING_OLDER: "Φόρτωση παλαιοτέρων μηνυμάτων...", MESSAGELIST_SHOW_OLDER: "Εμφάνιση παλαιότερων μηνυμάτων", MESSAGELIST_NEW_MARKER: "Νέο", MESSAGE_SENT_VIA_EMAIL: "Αυτό το μήνυμα εστάλη μέσω ηλεκτρονικού ταχυδρομείου", YOU_MARKER: "Εσείς", UPLOAD_IN_PROGRESS: "Ανέβασμα...", UPLOAD_SEND_FILE: "Αποστολή αρχείου", UPLOAD_SHARE_LOCATION: "Κοινή χρήση τοποθεσίας", UPLOAD_ERROR: "Κάτι πήγε στραβά κατά τη φόρτωση. Το αρχείο ενδέχεται να μην υποστηρίζεται ή να είναι υπερβολικά μεγάλο.", SHARE_LOCATION_ERROR: "Δεν είναι δυνατή η χρήση κοινής τοποθεσίας: ", LOADING: "Φόρτωση...", HUB_EMPTY: "Το ιστορικό των συνομιλιών σας θα εμφανιστεί εδώ", HUB_SHOW_EARLIER: "Εμφάνιση προηγούμενων συνομιλιών", INBOX_NO_CHATS_TITLE: "Δεν υπάρχουν ακόμα συζητήσεις!", INBOX_NO_CHATS_BODY: "Μόλις έχετε μία ή περισσότερες συνομιλίες, θα εμφανιστούν εδώ.", ENABLE_TRANSLATION: "Μετάφραση αυτής της συνομιλίας στα ελληνικά", DISABLE_TRANSLATION: "Προβολή πρωτοτύπου", SEARCH_PLACEHOLDER_TEXT: "Αναζήτηση...", SEARCH_SEARCHING: "Αναζήτηση...", SEARCH_NO_RESULTS: "Δεν βρέθηκαν αποτελέσματα", SEARCH_NO_MORE_RESULTS: "Δεν υπάρχουν περισσότερα αποτελέσματα", CHAT_NOT_FOUND: "Η συνομιλία δεν βρέθηκε", DELETE_MESSAGE: "Διαγραφή μηνύματος", DELETION_EXPLANATION: "Εάν διαγράψετε αυτό το μήνυμα, θα εξαφανιστεί για όλους.", EDIT_MESSAGE: "Επεξεργασία μηνύματος", SAVE: "Αποθήκευση", EDITED_INDICATOR: "επεξεργασμένο", REPLY_TO_MESSAGE: "Απάντηση", ADD_REACTION: "Προσθήκη αντίδρασης", AUTH_EXPIRED_OVERLAY_TITLE: "Η συνεδρία της συνομιλίας σας έχει λήξει", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Ανανεώστε τη σελίδα για να συνεχίσετε", VOICE_MESSAGE: "Ηχητικό μήνυμα", CONTACT_INFORMATION_HIDDEN: "Κρυμμένες πληροφορίες", LEAVE_CONVERSATION: "Αποσυρθείτε από τη συζήτηση", MARK_CONVERSATION_AS_UNREAD: "Επισήμανση ως μη αναγνωσμένα", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, ja = { code: "es-ES", name: "Spanish", translation: { YESTERDAY: "Ayer", TODAY: "Hoy", DAYS: "d", HOURS: "h", MINUTES: "m", JUST_NOW: "justo ahora", LOCATION: "Ubicación", CANCEL: "Cancelar", INBOX: "Inbox", DESKTOP_NOTIFICATIONS: "Notificaciones del navigator", DESKTOP_NOTIFICATIONS_ERROR: "No se logró habilitar las notificaciones del navigador, comprueba que tu navegador no las esté bloqueando o intenta con otro navegador.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} notificación de prueba`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Si dejas esta pestaña abierta, verás este pop up cuando alguien te hable.", SEND_BUTTON_TEXT: "Enviar", ENTRYBOX_TEXT_LIMIT: "Sólo 10.000 caracteres permitidos.", ENTRYBOX_PLACEHOLDER: "Escribe algo...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Esta conversación ya no está activa.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Puedes leer pero no enviar mensajes.", MESSAGELIST_LOADING_OLDER: "Cargando mensajes pasados...", MESSAGELIST_SHOW_OLDER: "Ver mensajes pasados", MESSAGELIST_NEW_MARKER: "Nuevo", MESSAGE_SENT_VIA_EMAIL: "Este mensaje ha sido enviado vía email", YOU_MARKER: "tú", UPLOAD_IN_PROGRESS: "Subir...", UPLOAD_SEND_FILE: "Enviar archivo", UPLOAD_SHARE_LOCATION: "Compartir ubicación", UPLOAD_ERROR: "Ocurrió un problema subiendo el archivo. Puede que el archivo esté en un formato no soportado o que sea demasiado grande.", SHARE_LOCATION_ERROR: "No se logró compartir la ubicación: ", LOADING: "Cargando...", HUB_EMPTY: "Tu historial de conversaciones se mostrará aquí", HUB_SHOW_EARLIER: "Ver conversaciones pasadas", INBOX_NO_CHATS_TITLE: "¡Aún sin conversaciones!", INBOX_NO_CHATS_BODY: "Una vez que tengas una o más conversaciones, se mostrarán aquí.", ENABLE_TRANSLATION: "Traducir esta conversación al español", DISABLE_TRANSLATION: "Mostrar la conversación original", SEARCH_PLACEHOLDER_TEXT: "Buscar...", SEARCH_SEARCHING: "Buscando...", SEARCH_NO_RESULTS: "No se encontraron resultados", SEARCH_NO_MORE_RESULTS: "No hay más resultados", CHAT_NOT_FOUND: "Chat no encontrado", DELETE_MESSAGE: "Eliminar mensaje", DELETION_EXPLANATION: "Este mensaje desaparecerá para todos si lo borras.", EDIT_MESSAGE: "Editar mensaje", SAVE: "Guardar", EDITED_INDICATOR: "editado", REPLY_TO_MESSAGE: "Responder", ADD_REACTION: "Añadir reacción", AUTH_EXPIRED_OVERLAY_TITLE: "Su sesión de chat ha expirado", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Actualice la página para continuar", VOICE_MESSAGE: "Mensaje de voz", CONTACT_INFORMATION_HIDDEN: "Información oculta", LEAVE_CONVERSATION: "Abandonar conversación", MARK_CONVERSATION_AS_UNREAD: "Marcar como no leída", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, xa = { code: "et-EE", name: "Estonian", translation: { YESTERDAY: "Eile", TODAY: "Täna", DAYS: "p", HOURS: "t", MINUTES: "m", JUST_NOW: "Just nüüd", LOCATION: "Asukoht", CANCEL: "Katkesta", INBOX: "Postkast", DESKTOP_NOTIFICATIONS: "Veebibrauseri teated", DESKTOP_NOTIFICATIONS_ERROR: "Töölaua teatisi ei saa lubada, kuna Teie brauser blokeerib need aktiivselt. Proovige muuta seadeid või kasutada mõnda muud brauserit.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} demo teavitus`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Kui hoiate oma brauseri vahekaardi lahti ja näete seda hüpikakent, siis keegi soovib Teiega rääkida.", SEND_BUTTON_TEXT: "Saada", ENTRYBOX_TEXT_LIMIT: "Ainult kuni 10.000 tähemärki on lubatud.", ENTRYBOX_PLACEHOLDER: "Kirjuta midagi...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "See vestlus ei ole enam aktiivne.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Sa saad lugeda teateid, aga mitte kirjutada.", MESSAGELIST_LOADING_OLDER: "Laen vanemaid teateid...", MESSAGELIST_SHOW_OLDER: "Näita vanemaid teateid", MESSAGELIST_NEW_MARKER: "Uus", MESSAGE_SENT_VIA_EMAIL: "See teade on saadetud e-postiga", YOU_MARKER: "Sina", UPLOAD_IN_PROGRESS: "Laen...", UPLOAD_SEND_FILE: "Saada fail", UPLOAD_SHARE_LOCATION: "Jaga faili asukohta", UPLOAD_ERROR: "Nüüd läks midagi nihu, seoses faili ülesse laadimisega. Tundmatu fail või liiga suur.", SHARE_LOCATION_ERROR: "Ei suuda jagada faili asukohta: ", LOADING: "Laen...", HUB_EMPTY: "Siin on Sinu vestluste ajalugu", HUB_SHOW_EARLIER: "Näita vanemaid vestlusi", INBOX_NO_CHATS_TITLE: "Pole ühtegi vestlust!", INBOX_NO_CHATS_BODY: "Kui Sul tekib üks või rohkem vestlust, siis on need kuvatakse siin.", ENABLE_TRANSLATION: "Tõlgi see vestlus eesti keelde", DISABLE_TRANSLATION: "Näita algteksti", SEARCH_PLACEHOLDER_TEXT: "Otsi...", SEARCH_SEARCHING: "Otsin...", SEARCH_NO_RESULTS: "Otsingu tulemused puuduvad", SEARCH_NO_MORE_RESULTS: "Rohkem tulemusi ei ole ", CHAT_NOT_FOUND: "Vestlust ei leitud", DELETE_MESSAGE: "Kustuta sõnum", DELETION_EXPLANATION: "Kui kustutate selle sõnumi, kaob see kõigi jaoks.", EDIT_MESSAGE: "Redigeeri sõnumit", SAVE: "Salvesta", EDITED_INDICATOR: "muudetud", REPLY_TO_MESSAGE: "Vasta", ADD_REACTION: "Lisa reaktsioon", AUTH_EXPIRED_OVERLAY_TITLE: "Teie vestlussessioon on lõppenud", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Jätkamiseks värskendage lehte", VOICE_MESSAGE: "Häälsõnum", CONTACT_INFORMATION_HIDDEN: "Varjatud informatsioon", LEAVE_CONVERSATION: "Lahku vestlusest", MARK_CONVERSATION_AS_UNREAD: "Märgi mitteloetuks", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Va = { code: "fa", name: "Persian (Farsi)", translation: { YESTERDAY: "دیروز", TODAY: "امروز", DAYS: "روز", HOURS: "ساعت", MINUTES: "دقیقه", JUST_NOW: "هم اکنون", LOCATION: "مکان", CANCEL: "لغو", INBOX: "صندوق", DESKTOP_NOTIFICATIONS: "اطلاعیههای مرورگر", DESKTOP_NOTIFICATIONS_ERROR: "خطا در فعال سازی اعلان های مرورگر، مرورگر شما آنها را مسدود می کند سعی کنید تنظیمات مرورگر را تغییر دهید یا از یک مرورگر دیگر استفاده کنید.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `نوتیفیکیشن دمو ${e}`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "اگر صفحه ی مرورگر را باز نگهدارید این را موقعه ای که کسی با شما صحبت کند خواهید دید", SEND_BUTTON_TEXT: "بفرست", ENTRYBOX_TEXT_LIMIT: "فقط ۱۰،۰۰۰ حروف مجاز می باشد.", ENTRYBOX_PLACEHOLDER: "...چیزی بنویسید", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: ".این مکالمه دیگر فعال نمی باشد", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "شما می توانید بخوانید اما نمی توانید پیام بفرستید", MESSAGELIST_LOADING_OLDER: "...در حال بارگذاری پیام های قدیمی تر", MESSAGELIST_SHOW_OLDER: "نشان دادن پیام های قدیمی", MESSAGELIST_NEW_MARKER: "جدید", MESSAGE_SENT_VIA_EMAIL: "پیام توسط ایمل ارسال شد", YOU_MARKER: "شما", UPLOAD_IN_PROGRESS: "...در حال بارگذاری", UPLOAD_SEND_FILE: "فرستادن پوشه", UPLOAD_SHARE_LOCATION: "اشتراک گذاری مکان", UPLOAD_ERROR: "متاسفانه بارگذاری با مشکل روبه رو شد. ممکن است فایل حجیم باشد یا ساپورت نشده باشد.", SHARE_LOCATION_ERROR: "خطا در اشتراک گذاری مکان: ", LOADING: "...بارگذاری", HUB_EMPTY: "تاریخچه گفتگو اینجا نمایان می شود", HUB_SHOW_EARLIER: "دیدن گفتگو های قبلی", INBOX_NO_CHATS_TITLE: "هنوز گفتگویی وجود ندارد", INBOX_NO_CHATS_BODY: "بعد از داشتن یک مکالمه یا بیشتر، آنها اینجا نمایان می شوند.", ENABLE_TRANSLATION: "این مکالمه را به فارسی ترجمه کن", DISABLE_TRANSLATION: "زبان اصلی را نشان بده", SEARCH_PLACEHOLDER_TEXT: "...جستجو", SEARCH_SEARCHING: "...در حال جستجو", SEARCH_NO_RESULTS: "نتیجه ای یافت نشد", SEARCH_NO_MORE_RESULTS: "نتیجه بیشتری وجود ندارد", CHAT_NOT_FOUND: "مکالمه پیدا نشد", DELETE_MESSAGE: "حذف پیام ", DELETION_EXPLANATION: "اگر این پیام را حذف کنید، برای همه ناپدید می شود.", EDIT_MESSAGE: "ویرایش پیام", SAVE: "ذخیره", EDITED_INDICATOR: "ویرایششده", REPLY_TO_MESSAGE: "پاسخ دادن", ADD_REACTION: "واکنش را اضافه کنید", AUTH_EXPIRED_OVERLAY_TITLE: "جلسه چت شما منقضی شده است", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "برای ادامه صفحه را بازخوانی کنید", VOICE_MESSAGE: "پیام صوتی", CONTACT_INFORMATION_HIDDEN: "اطلاعات پنهان", LEAVE_CONVERSATION: "خروج از گفتگو", MARK_CONVERSATION_AS_UNREAD: "به عنوان خوانده نشده علامت گذاری کن", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Xa = { code: "fi-FI", name: "Finnish", translation: { YESTERDAY: "Eilen", TODAY: "Tänään", DAYS: "p", HOURS: "t", MINUTES: "m", JUST_NOW: "juuri nyt", LOCATION: "Sijainti", CANCEL: "Peruuta", INBOX: "Saapuneet", DESKTOP_NOTIFICATIONS: "Selaimen ilmoitukset", DESKTOP_NOTIFICATIONS_ERROR: "Työpöydän ilmoituksia ei voitu kytkeä päälle, koska selaimesi estää ne aktiivisesti. Koeta tutkia sen asetuksia tai vaihda selainta.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} demo ilmoitus`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Jos pidät tämän sivun auki, näet vastaavan ilmoituksen kun joku puhuu sinulle.", SEND_BUTTON_TEXT: "Lähetä", ENTRYBOX_TEXT_LIMIT: "Maksimissaan 10000 merkkiä.", ENTRYBOX_PLACEHOLDER: "Sano jotain...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Tämä keskustelu ei ole enää aktiivinen.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Voit lukea, mutta et lähettää viestejä.", MESSAGELIST_LOADING_OLDER: "Ladataan vanhoja viestejä..", MESSAGELIST_SHOW_OLDER: "Näytä vanhat viestit", MESSAGELIST_NEW_MARKER: "Uusi", MESSAGE_SENT_VIA_EMAIL: "Tämä viesti on lähetetty sähköpostin välityksellä", YOU_MARKER: "sinä", UPLOAD_IN_PROGRESS: "Ladataan...", UPLOAD_SEND_FILE: "Lähetä tiedosto", UPLOAD_SHARE_LOCATION: "Jaa sijainti", UPLOAD_ERROR: "Valitettavasti jokin meni vikaan. Tiedostotyyppiä ei ehkä tueta tai se saattaa olla liian suuri.", SHARE_LOCATION_ERROR: "Sijaintia ei pystytty jakamaan: ", LOADING: "Ladataan...", HUB_EMPTY: "Keskusteluhistoriasi näkyy tässä", HUB_SHOW_EARLIER: "Näytä aiemmat keskustelut", INBOX_NO_CHATS_TITLE: "Ei keskusteluja, vielä!", INBOX_NO_CHATS_BODY: "Kun olet käynyt yhden tai useamman keskustelun, ne näkyvät täällä.", ENABLE_TRANSLATION: "Käännä keskustelu kielelle suomi", DISABLE_TRANSLATION: "Näytä alkuperäinen", SEARCH_PLACEHOLDER_TEXT: "Etsi...", SEARCH_SEARCHING: "Etsiminen...", SEARCH_NO_RESULTS: "Tuloksia ei löytynyt", SEARCH_NO_MORE_RESULTS: "Ei enempää tuloksia", CHAT_NOT_FOUND: "Keskustelua ei löytynyt", DELETE_MESSAGE: "Poista viesti", DELETION_EXPLANATION: "Jos poistat tämän viestin, se häviää kaikilta.", EDIT_MESSAGE: "Muokkaa viestiä", SAVE: "Tallenna", EDITED_INDICATOR: "muokattu", REPLY_TO_MESSAGE: "Vastaa", ADD_REACTION: "Lisää reaktio", AUTH_EXPIRED_OVERLAY_TITLE: "Istuntosi on vanhentunut", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Päivitä sivu jatkaaksesi", VOICE_MESSAGE: "Ääniviesti", CONTACT_INFORMATION_HIDDEN: "Piilotetut tiedot", LEAVE_CONVERSATION: "Poistu keskustelusta", MARK_CONVERSATION_AS_UNREAD: "Merkitse lukemattomaksi", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Ga = { code: "fr-FR", name: "French", translation: { YESTERDAY: "Hier", TODAY: "Aujourd'hui", DAYS: "j", HOURS: "h", MINUTES: "m", JUST_NOW: "maintenant", LOCATION: "Emplacement", CANCEL: "Annuler", INBOX: "Boîte de réception", DESKTOP_NOTIFICATIONS: "Notifications du navigateur", DESKTOP_NOTIFICATIONS_ERROR: "Impossible d'activer les notifications du navigateur car votre navigateur les bloque. Essayez de changer ses paramètres ou de changer de navigateur.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `Notification de démonstration ${e}`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Si vous maintenez l'onglet ouvert dans votre navigateur vous verrez apparaître une alerte lorsque quelqu'un vous parlera.", SEND_BUTTON_TEXT: "Envoyer", ENTRYBOX_TEXT_LIMIT: "Seuls 10.000 caractères sont autorisés.", ENTRYBOX_PLACEHOLDER: "Ecrivez quelque chose...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Cette conversation n'est plus active.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Vous pouvez lire, mais pas envoyer de messages.", MESSAGELIST_LOADING_OLDER: "Chargement des anciens messages ...", MESSAGELIST_SHOW_OLDER: "Afficher les anciens messages", MESSAGELIST_NEW_MARKER: "Nouveau", MESSAGE_SENT_VIA_EMAIL: "Ce message a été envoyé par e-mail", YOU_MARKER: "vous", UPLOAD_IN_PROGRESS: "Envoi en cours...", UPLOAD_SEND_FILE: "Envoyer un fichier", UPLOAD_SHARE_LOCATION: "Partager mon emplacement", UPLOAD_ERROR: "Un problème est survenu lors de l'envoi: le fichier est peut-être non pris en charge ou trop volumineux.", SHARE_LOCATION_ERROR: "Impossible de partager votre emplacement: ", LOADING: "Chargement en cours...", HUB_EMPTY: "Votre historique de discussion apparaîtra ici", HUB_SHOW_EARLIER: "Afficher les conversations précédentes", INBOX_NO_CHATS_TITLE: "Aucune conversation pour l'instant!", INBOX_NO_CHATS_BODY: "Une fois que vous aurez eu une ou plusieurs conversations, elles apparaîtront ici.", ENABLE_TRANSLATION: "Traduire cette conversation en français", DISABLE_TRANSLATION: "Remontrer la conversation originale", SEARCH_PLACEHOLDER_TEXT: "Rechercher...", SEARCH_SEARCHING: "Recherche...", SEARCH_NO_RESULTS: "Aucun résultat trouvé", SEARCH_NO_MORE_RESULTS: "Il n’y a plus de résultats", CHAT_NOT_FOUND: "Conversation introuvable", DELETE_MESSAGE: "Supprimer le message", DELETION_EXPLANATION: "Si vous supprimez ce message, il disparaîtra pour tout le monde.", EDIT_MESSAGE: "Modifier le message", SAVE: "Enregistrer", EDITED_INDICATOR: "modifié", REPLY_TO_MESSAGE: "Répondre", ADD_REACTION: "Ajouter une réaction", AUTH_EXPIRED_OVERLAY_TITLE: "Votre session de chat a expiré", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Actualisez la page pour continuer", VOICE_MESSAGE: "Message vocal", CONTACT_INFORMATION_HIDDEN: "Informations masquées", LEAVE_CONVERSATION: "Quitter la conversation", MARK_CONVERSATION_AS_UNREAD: "Marquer comme non lu", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, za = { code: "he-IL", name: "Hebrew", translation: { YESTERDAY: "אתמול", TODAY: "היום", DAYS: "d", HOURS: "h", MINUTES: "m", JUST_NOW: "עכשיו", LOCATION: "מיקום", CANCEL: "בטל", INBOX: "דואר נכנס", DESKTOP_NOTIFICATIONS: "התראות דפדפן", DESKTOP_NOTIFICATIONS_ERROR: "לא ניתן להפעיל התראות במרועה דפדפן מכיוון שהדפדפן שלך חוסם אותן באופן פעיל. נסה להסתכל בהגדרות או להשתמש בדפדפן אחר.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} הודעה על הדגמה`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "אם אתה שומר על כרטיסיית הדפדפן שלך פתוחה, תראה את זה צץ כשמישהו ידבר איתך.", SEND_BUTTON_TEXT: "שלח", ENTRYBOX_TEXT_LIMIT: "רק 10.000 תווים", ENTRYBOX_PLACEHOLDER: "תגיד משהו...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "שיחה זו אינה פעילה עוד.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "אתה יכול לקרוא, אך לא לשלוח הודעות.", MESSAGELIST_LOADING_OLDER: "טוען הודעות ישנות...", MESSAGELIST_SHOW_OLDER: "הצג הודעות ישנות", MESSAGELIST_NEW_MARKER: "חדש", MESSAGE_SENT_VIA_EMAIL: "הודעה זאת נשלחה דרך אימייל", YOU_MARKER: "אתה", UPLOAD_IN_PROGRESS: "מעלה ...", UPLOAD_SEND_FILE: "שלח קובץ", UPLOAD_SHARE_LOCATION: "שתף מיקום", UPLOAD_ERROR: "לרוע המזל משהו השתבש בהעלאה. ייתכן שהקובץ אינו נתמך או גדול מדי.", SHARE_LOCATION_ERROR: "לא ניתן לשתף מיקום: ", LOADING: "טוען...", HUB_EMPTY: "היסטוריית הצ'אט שלך תופיע כאן", HUB_SHOW_EARLIER: "הצג צ'אטים קודמים", INBOX_NO_CHATS_TITLE: "אין עדיין צ'אטים!", INBOX_NO_CHATS_BODY: "לאחר שניהלת שיחה אחת או יותר, הם יופיעו כאן.", ENABLE_TRANSLATION: "תרגם שיחה זו לעברית", DISABLE_TRANSLATION: "הצג מקור", SEARCH_PLACEHOLDER_TEXT: "...חפש", SEARCH_SEARCHING: "...מחפש", SEARCH_NO_RESULTS: "לא נמצאו תוצאות", SEARCH_NO_MORE_RESULTS: "אין תוצאות נוספות", CHAT_NOT_FOUND: "הצ'אט לא נמצא", DELETE_MESSAGE: "מחיקת הודעה", DELETION_EXPLANATION: "אם תמחק הודעה זו, היא תיעלם עבור כולם.", EDIT_MESSAGE: "עריכת הודעה", SAVE: "שמור", EDITED_INDICATOR: "ערוך", REPLY_TO_MESSAGE: "השב", ADD_REACTION: "הוספת תגובה", AUTH_EXPIRED_OVERLAY_TITLE: "הפעלת הצ׳אט שלכם פגה", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "רעננו את העמוד כדי להמשיך", VOICE_MESSAGE: "הודעה קולית", CONTACT_INFORMATION_HIDDEN: "מידע מוסתר", LEAVE_CONVERSATION: "צא מהשיחה", MARK_CONVERSATION_AS_UNREAD: "סמן כלא נקרא", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Ka = { code: "hi-IN", name: "Hindi (IN)", translation: { YESTERDAY: "कल", TODAY: "आज", DAYS: "d", HOURS: "h", MINUTES: "m", JUST_NOW: "अभी", LOCATION: "जगह", CANCEL: "रद्द करें", INBOX: "इनबॉक्स", DESKTOP_NOTIFICATIONS: "ब्राउज़र सूचनाएं", DESKTOP_NOTIFICATIONS_ERROR: "ब्राउज़र सूचनाएं सक्षम नहीं कर सकता क्योंकि आपका ब्राउज़र सक्रिय रूप से उन्हें ब्लॉक करता है। सेटिंग्स में देखने या एक अलग ब्राउज़र का उपयोग करने का प्रयास करें।", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} डेमो अधिसूचना`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "यदि आप अपना ब्राउज़र टैब खुला रखते हैं, तो यह पॉप अप आपको तब दिखाई देगा जब कोई आपसे बात करेगा।", SEND_BUTTON_TEXT: "भेजें", ENTRYBOX_TEXT_LIMIT: "केवल 10,000 वर्णों की अनुमति है।", ENTRYBOX_PLACEHOLDER: "कुछ कहिए...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "यह चैट अब सक्रिय नहीं है।", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "आप पढ़ सकते हैं, लेकिन संदेश नहीं भेज सकते।", MESSAGELIST_LOADING_OLDER: "पुराने संदेश लोड हो रहे हैं ...", MESSAGELIST_SHOW_OLDER: "पुराने संदेश दिखाएं", MESSAGELIST_NEW_MARKER: "नया", MESSAGE_SENT_VIA_EMAIL: "यह संदेश ईमेल के माध्यम से भेजा गया था", YOU_MARKER: "आप", UPLOAD_IN_PROGRESS: "अपलोड हो रहा है...", UPLOAD_SEND_FILE: "फाइल भेजें", UPLOAD_SHARE_LOCATION: "जगह शेयर करें", UPLOAD_ERROR: "दुर्भाग्य से, अपलोड करते समय कुछ गलत हो गया। फ़ाइल असमर्थित या बहुत बड़ी हो सकती है।", SHARE_LOCATION_ERROR: "जगह शेयर नहीं हो पाया: ", LOADING: "लोड हो रहा है...", HUB_EMPTY: "आपका चैट इतिहास यहां दिखाई देगा", HUB_SHOW_EARLIER: "पहले की चैट दिखाओ", INBOX_NO_CHATS_TITLE: "अभी तक कोई चैट नहीं!", INBOX_NO_CHATS_BODY: "एक बार जब आप एक या अधिक चैट कर लेते हैं, तो वे यहां दिखाई देंगे।", ENABLE_TRANSLATION: "इस बातचीत का हिंदी में अनुवाद कीजिए", DISABLE_TRANSLATION: "मूल दिखाएँ", SEARCH_PLACEHOLDER_TEXT: "खोजें...", SEARCH_SEARCHING: "खोज जारी है...", SEARCH_NO_RESULTS: "कोई परिणाम नहीं मिला", SEARCH_NO_MORE_RESULTS: "और कोई परिणाम नहीं", CHAT_NOT_FOUND: "चैट नहीं मिली", DELETE_MESSAGE: "संदेश डिलीट करें", DELETION_EXPLANATION: "यदि आप इस संदेश को हटाते हैं, तो यह सभी के लिए गायब हो जाएगा.", EDIT_MESSAGE: "संदेश में बदलाव करें", SAVE: "सहेजें", EDITED_INDICATOR: "संपादित किया गया", REPLY_TO_MESSAGE: "जवाब दीजिए ।", ADD_REACTION: "प्रतिक्रिया जोड़ें", AUTH_EXPIRED_OVERLAY_TITLE: "आपका चैट सेशन समाप्त हो चुका है", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "आगे बढ़ने के लिए रिफ्रेश करें", VOICE_MESSAGE: "वॉयस मैसेज", CONTACT_INFORMATION_HIDDEN: "छुपी हुई जानकारी", LEAVE_CONVERSATION: "बातचीत को ख़त्म करें", MARK_CONVERSATION_AS_UNREAD: "अपठित के रूप में चिह्नित करें", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Wa = { code: "hr-HR", name: "Croatian", translation: { YESTERDAY: "Jučer", TODAY: "Danas", DAYS: "d", HOURS: "s", MINUTES: "m", JUST_NOW: "Upravo sad", LOCATION: "Lokacija", CANCEL: "Otkaži", INBOX: "Pretinac", DESKTOP_NOTIFICATIONS: "Obavijesti preglednika", DESKTOP_NOTIFICATIONS_ERROR: "Notifikacije preglednika nisu omogućene jer ih vaš preglednik aktivno blokira. Pokušajte pogledati postavke ili koristiti neki drugi preglednik.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} demo notifikacija`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Ako karticu preglednika ostavite otvorenu, pojavit će se ovaj pop-up kada netko razgovara s vama.", SEND_BUTTON_TEXT: "Pošalji", ENTRYBOX_TEXT_LIMIT: "Dozvoljeno je samo 10.000 znakova.", ENTRYBOX_PLACEHOLDER: "Reci nešto...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Ovaj razgovor više nije aktivan.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Možeš čitati, ali ne i slati poruke.", MESSAGELIST_LOADING_OLDER: "Učitavam starije poruke...", MESSAGELIST_SHOW_OLDER: "Prikaži starije poruke", MESSAGELIST_NEW_MARKER: "Novo", MESSAGE_SENT_VIA_EMAIL: "Ova poruka je poslana e-poštom", YOU_MARKER: "ti", UPLOAD_IN_PROGRESS: "Učitavam...", UPLOAD_SEND_FILE: "Pošalji datoteku", UPLOAD_SHARE_LOCATION: "Podijeli lokaciju", UPLOAD_ERROR: "Nažalost, nešto je pošlo krivo. Datoteka možda nije podržana ili je prevelika.", SHARE_LOCATION_ERROR: "Nije moguće podijeliti lokaciju: ", LOADING: "Učitavam...", HUB_EMPTY: "Ovdje će se prikazati vaša povijest razgovora", HUB_SHOW_EARLIER: "Prikaži ranije razgovore", INBOX_NO_CHATS_TITLE: "Nema razgovora!", INBOX_NO_CHATS_BODY: "Nakon što vodite jedan ili više razgovora, oni će se pojaviti ovdje.", ENABLE_TRANSLATION: "Prevedi ovaj razgovor na hrvatski jezik", DISABLE_TRANSLATION: "Prikaži original", SEARCH_PLACEHOLDER_TEXT: "Pretraži...", SEARCH_SEARCHING: "Pretraživanje...", SEARCH_NO_RESULTS: "Nema rezultata", SEARCH_NO_MORE_RESULTS: "Nema više rezultata", CHAT_NOT_FOUND: "Razgovor nije pronađen", DELETE_MESSAGE: "Obriši poruku", DELETION_EXPLANATION: "Ako izbrišete ovu poruku, nestat će za sve.", EDIT_MESSAGE: "Uredi poruku", SAVE: "Spremi", EDITED_INDICATOR: "uređivao", REPLY_TO_MESSAGE: "Odgovorite", ADD_REACTION: "Dodajte reakciju", AUTH_EXPIRED_OVERLAY_TITLE: "Vaša sesija razgovora je istekla", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Osvježite stranicu za nastavak", VOICE_MESSAGE: "Glasovna poruka", CONTACT_INFORMATION_HIDDEN: "Skrivene informacije", LEAVE_CONVERSATION: "Napustiti razgovor", MARK_CONVERSATION_AS_UNREAD: "Označi kao nepročitano", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, qa = { code: "hu-HU", name: "Hungarian", translation: { YESTERDAY: "Tegnap", TODAY: "Ma", DAYS: "n", HOURS: "ó", MINUTES: "p", JUST_NOW: "éppen most", LOCATION: "Helyszín", CANCEL: "Visszavonás", INBOX: "Postaláda", DESKTOP_NOTIFICATIONS: "Böngésző értesítések", DESKTOP_NOTIFICATIONS_ERROR: "Azért nem tudja bekapcsolni a böngésző értesítések funkciót, mert böngészője aktívan blokkolja azt. Tekintse meg a beállításokat vagy használjon másik böngészőt.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} demo értesítés`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Ha nyitva hagyja böngészőjét, felugró ablak fog megjelenni, ha valaki beszélni szeretne Önnel.", SEND_BUTTON_TEXT: "Küldés", ENTRYBOX_TEXT_LIMIT: "Mindőssze 10.000 karakter megengedett.", ENTRYBOX_PLACEHOLDER: "Mondjon valamit...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Ez a beszélgetés már nem aktív.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Elolvashatja az üzeneteket, de nem küldhet újat.", MESSAGELIST_LOADING_OLDER: "Korábbi üzenetek betöltése...", MESSAGELIST_SHOW_OLDER: "Korábbi üzenetek megjelenítése", MESSAGELIST_NEW_MARKER: "Új", MESSAGE_SENT_VIA_EMAIL: "Ez az üzenet e-mailben került elküldésre", YOU_MARKER: "Ön", UPLOAD_IN_PROGRESS: "Feltöltés...", UPLOAD_SEND_FILE: "Fájl küldése", UPLOAD_SHARE_LOCATION: "Helyszín megosztása", UPLOAD_ERROR: "Sajnos hiba történt a feltöltés során. A fájl nem támogatott vagy túl nagy.", SHARE_LOCATION_ERROR: "Helyszín megosztása nem lehetséges: ", LOADING: "Betöltés...", HUB_EMPTY: "A beszélgetések előzményei itt láthatók", HUB_SHOW_EARLIER: "Korábbi beszélgetések megjelenítése", INBOX_NO_CHATS_TITLE: "Még nincs megjeleníthető beszélgetés!", INBOX_NO_CHATS_BODY: "Amint egy vagy több beszélgetéssel rendelkezik, azok itt fognak megjelenni.", ENABLE_TRANSLATION: "A beszélgetés lefordítása erre a nyelvre: magyar", DISABLE_TRANSLATION: "Eredeti megjelenítése", SEARCH_PLACEHOLDER_TEXT: "Keresés...", SEARCH_SEARCHING: "Keresés...", SEARCH_NO_RESULTS: "Nincs találat", SEARCH_NO_MORE_RESULTS: "Nincs több találat", CHAT_NOT_FOUND: "A csevegés nem található", DELETE_MESSAGE: "Üzenet törlése", DELETION_EXPLANATION: "Ha törlöd ezt az üzenetet, az mindenki számára eltűnik.", EDIT_MESSAGE: "Üzenet szerkesztése", SAVE: "Mentés", EDITED_INDICATOR: "szerkesztve", REPLY_TO_MESSAGE: "Válaszadás", ADD_REACTION: "Reagálás erre", AUTH_EXPIRED_OVERLAY_TITLE: "Chat munkamenete lejárt", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Folytatáshoz frissítse az oldalt", VOICE_MESSAGE: "Hangüzenet", CONTACT_INFORMATION_HIDDEN: "Rejtett információ", LEAVE_CONVERSATION: "Kilépés a beszélgetésből", MARK_CONVERSATION_AS_UNREAD: "Megjelölés olvasatlanként", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Ja = { code: "id-ID", name: "Bahasa Indonesia", translation: { YESTERDAY: "Kemarin", TODAY: "Hari ini", DAYS: "h", HOURS: "j", MINUTES: "m", JUST_NOW: "sekarang", LOCATION: "Lokasi", CANCEL: "Batal", INBOX: "Kotak Masuk", DESKTOP_NOTIFICATIONS: "Notifikasi peramban", DESKTOP_NOTIFICATIONS_ERROR: "Tidak dapat mengaktifkan pemberitahuan browser karena browser Anda secara aktif memblokir mereka. Coba cari di pengaturan atau menggunakan browser yang berbeda.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `pemberitahuan demo ${e}`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Jika Anda membiarkan tab browser tetap terbuka, Anda akan melihat ini muncul ketika seseorang berbicara kepada Anda.", SEND_BUTTON_TEXT: "Kirim", ENTRYBOX_TEXT_LIMIT: "Hanya 10.000 karakter yang diizinkan.", ENTRYBOX_PLACEHOLDER: "Katakan sesuatu...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Percakapan ini tidak lagi aktif.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Anda dapat membaca, tetapi tidak mengirim pesan.", MESSAGELIST_LOADING_OLDER: "Memuat pesan lama...", MESSAGELIST_SHOW_OLDER: "Tampilkan pesan yang lebih lama", MESSAGELIST_NEW_MARKER: "Baru", MESSAGE_SENT_VIA_EMAIL: "Pesan ini dikirim melalui email", YOU_MARKER: "Anda", UPLOAD_IN_PROGRESS: "Mengunggah...", UPLOAD_SEND_FILE: "Kirim mengajukan", UPLOAD_SHARE_LOCATION: "Bagikan lokasi", UPLOAD_ERROR: "Ada yang salah diunggah. File mungkin tidak didukung atau terlalu besar.", SHARE_LOCATION_ERROR: "Tidak dapat membagikan lokasi: ", LOADING: "Memuat...", HUB_EMPTY: "Riwayat obrolan Anda akan muncul di sini", HUB_SHOW_EARLIER: "Tampilkan obrolan sebelumnya", INBOX_NO_CHATS_TITLE: "Belum ada obrolan!", INBOX_NO_CHATS_BODY: "Setelah Anda melakukan satu atau lebih percakapan, mereka akan muncul di sini.", ENABLE_TRANSLATION: "Terjemahkan percakapan ini ke Indonesia", DISABLE_TRANSLATION: "Perlihatkan asli", SEARCH_PLACEHOLDER_TEXT: "Cari...", SEARCH_SEARCHING: "Mencari...", SEARCH_NO_RESULTS: "Tidak ditemukan hasil", SEARCH_NO_MORE_RESULTS: "Tidak ada hasil lainnya", CHAT_NOT_FOUND: "Obrolan tidak ditemukan", DELETE_MESSAGE: "Hapus pesan", DELETION_EXPLANATION: "Jika pesan ini Anda hapus, pesan ini akan tidak terlihat bagi siapa pun.", EDIT_MESSAGE: "Sunting pesan", SAVE: "Mentés", EDITED_INDICATOR: "diedit", REPLY_TO_MESSAGE: "Balas", ADD_REACTION: "Tambah reaksi", AUTH_EXPIRED_OVERLAY_TITLE: "Sesi obrolan Anda sudah lewat batas waktu", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Muat ulang halaman untuk melanjutkan", VOICE_MESSAGE: "Pesan suara", CONTACT_INFORMATION_HIDDEN: "Informasi tersembunyi", LEAVE_CONVERSATION: "Tinggalkan percakapan", MARK_CONVERSATION_AS_UNREAD: "Tandai sebagai Belum dibaca", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Za = { code: "is-IS", name: "Íslenska", translation: { YESTERDAY: "Í gær", TODAY: "Í dag", DAYS: "dagar", HOURS: "klst.", MINUTES: "mín.", JUST_NOW: "núna", LOCATION: "Staðsetning", CANCEL: "Hætta við", INBOX: "Pósthólf", DESKTOP_NOTIFICATIONS: "Tilkynningar í vafra", DESKTOP_NOTIFICATIONS_ERROR: "Ekki er hægt að birta tilkynningar í vafra vegna þess að vafrinn sem þú notar hindrar það. Reyndu að leita að stillingum eða að nota annan vafra.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} prufutilkynning`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Ef flipinn í vafranum er opinn muntu sjá þessa tilkynningu birtast þegar einhver sendir þér skilaboð.", SEND_BUTTON_TEXT: "Senda", ENTRYBOX_TEXT_LIMIT: "Aðeins 10.000 stafir komast fyrir.", ENTRYBOX_PLACEHOLDER: "Segðu eitthvað...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Þessar samræður eru ekki lengar virkar.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Þú getur lesið, en ekki sent skilaboð.", MESSAGELIST_LOADING_OLDER: "Sæki eldri skilaboð...", MESSAGELIST_SHOW_OLDER: "Sýna eldri skilaboð", MESSAGELIST_NEW_MARKER: "Ný", MESSAGE_SENT_VIA_EMAIL: "Þessi skilaboð voru send með tölvupósti", YOU_MARKER: "þú", UPLOAD_IN_PROGRESS: "Hleð upp...", UPLOAD_SEND_FILE: "Senda skrá", UPLOAD_SHARE_LOCATION: "Deila staðsetningu", UPLOAD_ERROR: "Því miður fór eitthvað úrskeiðis við að hlaða upp. Skráin gæti verið af rangri tegund eð of stór.", SHARE_LOCATION_ERROR: "Ekki er hægt að deila staðsetningu: ", LOADING: "Hleð...", HUB_EMPTY: "Fyrri samtöl munu birtast hér", HUB_SHOW_EARLIER: "Sýna fyrri samtöl", INBOX_NO_CHATS_TITLE: "Engin samtöl enn!", INBOX_NO_CHATS_BODY: "Þegar þú hefur átt eitt eða fleiri samtöl, munu þau birtast hér.", ENABLE_TRANSLATION: "Þýða þetta samtal á ensku", DISABLE_TRANSLATION: "Sýna upprunalegt", SEARCH_PLACEHOLDER_TEXT: "Leita...", SEARCH_SEARCHING: "Leita...", SEARCH_NO_RESULTS: "Ekkert fannst", SEARCH_NO_MORE_RESULTS: "Engar fleiri niðurstöður", CHAT_NOT_FOUND: "Samtal fannst ekki", DELETE_MESSAGE: "Eyða skilaboðum", DELETION_EXPLANATION: "Ef þú eyðir þessum skilaboðum munu þau hverfa hjá öllum.", EDIT_MESSAGE: "Breyta skilaboðum", SAVE: "Vista", EDITED_INDICATOR: "breytt", REPLY_TO_MESSAGE: "Svara", REPLY_TO_ARIA_LABEL: (e, t) => `Svara ${e}: ${t}`, REPLY_MODE_LEAVE_ARIA_LABEL: "Fara úr svari", ADD_REACTION: "Setja inn viðbrögð", AUTH_EXPIRED_OVERLAY_TITLE: "Spjallið hefur runnið út", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Endurnýjaðu síðuna til að halda áfram", VOICE_MESSAGE: "Raddskilaboð", LEAVE_CONVERSATION: "Skilja eftir skilaboð", MARK_CONVERSATION_AS_UNREAD: "Merkja sem ólesið", STATUS_INDICATOR_ONLINE: "Virk", STATUS_INDICATOR_OFFLINE: "Ekki við", CONTACT_INFORMATION_HIDDEN: "faldar upplýsingar" } }, Qa = { code: "it-IT", name: "Italian", translation: { YESTERDAY: "Ieri", TODAY: "Oggi", DAYS: "g", HOURS: "o", MINUTES: "m", JUST_NOW: "adesso", LOCATION: "Posizione", CANCEL: "Annulla", INBOX: "Posta in arrivo", DESKTOP_NOTIFICATIONS: "Notifiche browser", DESKTOP_NOTIFICATIONS_ERROR: "Impossibile abilitare le notifiche browser perché il browser le blocca attivamente. Prova a cercare le impostazioni o utilizzare un browser diverso.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} demo notification`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Se si mantiene aperta la scheda del browser, questo verrà visualizzato quando qualcuno ti parla.", SEND_BUTTON_TEXT: "Invia", ENTRYBOX_TEXT_LIMIT: "Sono consentiti solo 10.000 caratteri.", ENTRYBOX_PLACEHOLDER: "Dì qualcosa...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Questa conversazione non è più attiva.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Puoi leggere, ma non inviare messaggi.", MESSAGELIST_LOADING_OLDER: "Caricamento dei messaggi precedenti...", MESSAGELIST_SHOW_OLDER: "Mostra messaggi precedenti", MESSAGELIST_NEW_MARKER: "Nuovo", MESSAGE_SENT_VIA_EMAIL: "Questo messaggio è stato inviato via email", YOU_MARKER: "tu", UPLOAD_IN_PROGRESS: "Caricamento in corso...", UPLOAD_SEND_FILE: "Invia file", UPLOAD_SHARE_LOCATION: "Condividi posizione", UPLOAD_ERROR: "Qualcosa è andato storto durante il caricamento. Il file potrebbe non essere supportato o troppo grande.", SHARE_LOCATION_ERROR: "Impossibile condividere la posizione: ", LOADING: "Caricamento in corso...", HUB_EMPTY: "La cronologia della tua chat verrà mostrata qui", HUB_SHOW_EARLIER: "Mostra chat precedenti", INBOX_NO_CHATS_TITLE: "Non ci sono ancora chat!", INBOX_NO_CHATS_BODY: "Una volta che hai avuto una o più conversazioni, verranno visualizzate qui.", ENABLE_TRANSLATION: "Traduci questa conversazione in italiano", DISABLE_TRANSLATION: "Mostra l'originale", SEARCH_PLACEHOLDER_TEXT: "Cerca...", SEARCH_SEARCHING: "Cercando...", SEARCH_NO_RESULTS: "Nessun risultato trovato", SEARCH_NO_MORE_RESULTS: "Non ci sono più risultati", CHAT_NOT_FOUND: "Chat non trovata", DELETE_MESSAGE: "Elimina messaggio", DELETION_EXPLANATION: "Se elimini il messaggio, questo scomparirà per tutti.", EDIT_MESSAGE: "Modifica messaggio", SAVE: "Salva", EDITED_INDICATOR: "modificato", REPLY_TO_MESSAGE: "Rispondi", ADD_REACTION: "Aggiungi reazione", AUTH_EXPIRED_OVERLAY_TITLE: "La sessione di chat è scaduta", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Aggiorna la pagina per continuare", VOICE_MESSAGE: "Messaggio vocale", CONTACT_INFORMATION_HIDDEN: "Informazioni nascoste", LEAVE_CONVERSATION: "Abbandona la conversazione", MARK_CONVERSATION_AS_UNREAD: "Segna come non letto", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, es = { code: "ja-JP", name: "Japanese", translation: { YESTERDAY: "昨日", TODAY: "今日", DAYS: "日前", HOURS: "時間前", MINUTES: "分前", JUST_NOW: "たった今", LOCATION: "場所", CANCEL: "キャンセル", INBOX: "受信箱", DESKTOP_NOTIFICATIONS: "ブラウザの通知", DESKTOP_NOTIFICATIONS_ERROR: "ブラウザの通知はブロックされているため、ブラウザの通知を有効にできません。設定を確認するか、別のブラウザを使用してください。", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} デモ通知`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "ブラウザのタブを開いたままにしておくと、誰かがあなたに話しかけたときにこのポップアップが表示されます。", SEND_BUTTON_TEXT: "送信", ENTRYBOX_TEXT_LIMIT: "許可されているのは10.000文字までです。", ENTRYBOX_PLACEHOLDER: "メッセージを入力してください", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "この会話はもうアクティブではありません。", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "あなたは読むことはできますが、メッセージを送ることはできません。", MESSAGELIST_LOADING_OLDER: "古いメッセージを読み込んでいます...", MESSAGELIST_SHOW_OLDER: "古いメッセージを表示", MESSAGELIST_NEW_MARKER: "新着", MESSAGE_SENT_VIA_EMAIL: "このメッセージはメールで送信されました", YOU_MARKER: "あなたは", UPLOAD_IN_PROGRESS: "アップロード中...", UPLOAD_SEND_FILE: "ファイル送信", UPLOAD_SHARE_LOCATION: "共有場所", UPLOAD_ERROR: "アップロード中に問題が発生しました。ファイルがサポートされていないか、大きすぎる可能性があります。", SHARE_LOCATION_ERROR: "場所を共有できません: ", LOADING: "読み込み中...", HUB_EMPTY: "あなたのチャット履歴がここに表示されます", HUB_SHOW_EARLIER: "以前のチャットを表示", INBOX_NO_CHATS_TITLE: "まだチャットがありません!", INBOX_NO_CHATS_BODY: "会話が1つ以上あると、ここに表示されます", ENABLE_TRANSLATION: "この会話を日本語に翻訳する", DISABLE_TRANSLATION: "オリジナルを表示", SEARCH_PLACEHOLDER_TEXT: "検索...", SEARCH_SEARCHING: "検索中...", SEARCH_NO_RESULTS: "結果が見つかりません", SEARCH_NO_MORE_RESULTS: "これ以上結果はありません", CHAT_NOT_FOUND: "チャットが見つかりませんでした", DELETE_MESSAGE: "メッセージを削除する", DELETION_EXPLANATION: "このメッセージを削除すると、全ての人に表示されなくなります。", EDIT_MESSAGE: "メッセージを編集する", SAVE: "上書き保存", EDITED_INDICATOR: "編集", REPLY_TO_MESSAGE: "返信する", ADD_REACTION: "リアクションを追加", AUTH_EXPIRED_OVERLAY_TITLE: "チャットセッションの有効期限が切れました", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "続けるにはページを更新してください", VOICE_MESSAGE: "ボイスメッセージ", CONTACT_INFORMATION_HIDDEN: "機密情報", LEAVE_CONVERSATION: "会話をやめる", MARK_CONVERSATION_AS_UNREAD: "未読としてマーク", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, ts = { code: "ka-GE", name: "Georgian", translation: { YESTERDAY: "გუშინ", TODAY: "დღეს", DAYS: "დღ", HOURS: "სთ", MINUTES: "წთ", JUST_NOW: "ახლა", LOCATION: "ადგილმდებარეობა", CANCEL: "გაუქმება", INBOX: "მიღებული შეტყობინება", DESKTOP_NOTIFICATIONS: "ბრაუზერის შეტყობინებები", DESKTOP_NOTIFICATIONS_ERROR: "შეუძლებელია ბრაუზერის შეტკობინებების ჩართვა. ეს ბრაუზერი ბლოკავს მათ. სცადე ცვლილება ოპციებიდან ან გამოიყენე სხვა ბრაუზერი.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} შეტყობინებების დემო ვერსია`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "თუ დატოვებ ბრაუზერის ფანჯარას გახსნილს, როცა ვიღაც მოგწერს საუბარი ამოვარდება დესკტოპზე.", SEND_BUTTON_TEXT: "გაგზავნა", ENTRYBOX_TEXT_LIMIT: "დაშვებულია მხოლოდ 10.000 სიმბოლო.", ENTRYBOX_PLACEHOLDER: "დაწერე რაღაც...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "ეს დიალოგი აღარ არის ხელმისაწვდომი.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "შეგიძლია წაიკითხო, მაგრამ ვერ გააგზავნი შეტყობინებას.", MESSAGELIST_LOADING_OLDER: "იტვირთება ძველი შეტყობინებები...", MESSAGELIST_SHOW_OLDER: "ძველი შეტყობინებების ჩვენება", MESSAGELIST_NEW_MARKER: "ახალი", MESSAGE_SENT_VIA_EMAIL: "ეს შეტყობინება გამოგზავნილია იმეილით", YOU_MARKER: "you", UPLOAD_IN_PROGRESS: "იტვირთება...", UPLOAD_SEND_FILE: "ფაილის გაგზავნა", UPLOAD_SHARE_LOCATION: "ადგილმდებარეობის გაზიარება", UPLOAD_ERROR: "პრობლემაა ატვირთვისას. ფაილის შესაძლოა არის არათავსებადი ან ძალიან დიდი.", SHARE_LOCATION_ERROR: "შეუძლებელია ადგილმდებარეობის გაზიარება: ", LOADING: "იტვირთება...", HUB_EMPTY: "საუბრების ისტორია გამოჩნდება აქ", HUB_SHOW_EARLIER: "წინა საუბრების ნახვა", INBOX_NO_CHATS_TITLE: "ჯერ-ჯერობით არ არის საუბრები!", INBOX_NO_CHATS_BODY: "უკვე დასრულებული საუბარები გამოჩნდება აქ", ENABLE_TRANSLATION: "თარგმნეთ ეს საუბარი ინგლისურად", DISABLE_TRANSLATION: "ორიგინალის ჩვენება", SEARCH_PLACEHOLDER_TEXT: "ძიება...", SEARCH_SEARCHING: "მიმდინარეობს ძიება...", SEARCH_NO_RESULTS: "შედეგები ვერ ქართველი", SEARCH_NO_MORE_RESULTS: "სხვა შედეგი ვერ მოიძებნა", CHAT_NOT_FOUND: "ჩატი ვერ მოიძებნა", DELETE_MESSAGE: "შეტყობინების წაშლა ", DELETION_EXPLANATION: "თუ ამ შეტყობინებას წაშლით, ის ყველასთვის გაქრება.", EDIT_MESSAGE: "შეტყობინების რედაქტირება", SAVE: "შენახვა", EDITED_INDICATOR: "რედაქტირებულია", REPLY_TO_MESSAGE: "პასუხის გაცემა", ADD_REACTION: "დაამატეთ რეაქცია", AUTH_EXPIRED_OVERLAY_TITLE: "თქვენი ჩეთის სესიის ვადა ამოიწურა", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "განაახლეთ გვერდი გასაგრძელებლად", VOICE_MESSAGE: "ხმოვანი შეტყობინება", CONTACT_INFORMATION_HIDDEN: "ფარული ინფორმაცია", LEAVE_CONVERSATION: "საუბრის დატოვება", MARK_CONVERSATION_AS_UNREAD: "წაუკითხავად მონიშვნა", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, ns = { code: "ko-KR", name: "Korean (South Korea)", translation: { YESTERDAY: "어제", TODAY: "오늘", DAYS: "일 전", HOURS: "시간 전", MINUTES: "분 전", JUST_NOW: "방금", LOCATION: "위치", CANCEL: "취소", INBOX: "대화 목록", DESKTOP_NOTIFICATIONS: "브라우저 알림", DESKTOP_NOTIFICATIONS_ERROR: "브라우저 알림을 표시할 수 없습니다. 브라우저 설정을 확인하거나 다른 브라우저를 사용해주세요.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} 데모 알림`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "브라우저 탭을 열어 둔 상태에서 누군가 대화 할 때 이 팝업이 표시됩니다.", SEND_BUTTON_TEXT: "전송", ENTRYBOX_TEXT_LIMIT: "최대 10,000자까지 입력할 수 있습니다.", ENTRYBOX_PLACEHOLDER: "메세지를 입력하세요...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "채팅이 종료되었습니다.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "읽기만 가능하며 메시지를 보낼 수 없습니다.", MESSAGELIST_LOADING_OLDER: "이전 메시지 로드 중...", MESSAGELIST_SHOW_OLDER: "이전 메시지 표시", MESSAGELIST_NEW_MARKER: "새 메시지", MESSAGE_SENT_VIA_EMAIL: "이 메시지는 이메일을 통해 전송되었습니다.", YOU_MARKER: "나", UPLOAD_IN_PROGRESS: "업로드 중...", UPLOAD_SEND_FILE: "파일 전송", UPLOAD_SHARE_LOCATION: "위치 공유", UPLOAD_ERROR: "업로드가 실패했습니다. 파일이 지원되지 않거나 너무 클 수 있습니다.", SHARE_LOCATION_ERROR: "위치를 공유 할 수 없습니다: ", LOADING: "로드 중...", HUB_EMPTY: "채팅 기록이 여기에 표시됩니다", HUB_SHOW_EARLIER: "이전 채팅보기", INBOX_NO_CHATS_TITLE: "아직 채팅이 없습니다!", INBOX_NO_CHATS_BODY: "대화가 하나 이상 있으면 여기에 표시됩니다.", ENABLE_TRANSLATION: "이 대화를 한국어로 번역", DISABLE_TRANSLATION: "원본 표시", SEARCH_PLACEHOLDER_TEXT: "검색...", SEARCH_SEARCHING: "검색 중...", SEARCH_NO_RESULTS: "검색 결과 없음", SEARCH_NO_MORE_RESULTS: "추가 검색 결과 없음", CHAT_NOT_FOUND: "대화를 찾지 못했습니다", DELETE_MESSAGE: "메시지 삭제", DELETION_EXPLANATION: "이 메시지를 삭제하면 모든 사람이 볼 수 없게 됩니다.", EDIT_MESSAGE: "메시지 편집하기", SAVE: "저장", EDITED_INDICATOR: "편집", REPLY_TO_MESSAGE: "회신", ADD_REACTION: "반응 추가", AUTH_EXPIRED_OVERLAY_TITLE: "채팅 세션이 만료되었습니다", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "계속하려면 페이지를 새로고침하세요", VOICE_MESSAGE: "음성 메시지", CONTACT_INFORMATION_HIDDEN: "숨겨진 정보", LEAVE_CONVERSATION: "대화 떠나기", MARK_CONVERSATION_AS_UNREAD: "읽지 않은 상태로 표시", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, as = { code: "nb-NO", name: "Norwegian (Bokmål)", translation: { YESTERDAY: "I går", TODAY: "I dag", DAYS: "d", HOURS: "h", MINUTES: "m", JUST_NOW: "Nå", LOCATION: "Plassering", CANCEL: "Avbryt", INBOX: "Innboks", DESKTOP_NOTIFICATIONS: "Nettleservarsler", DESKTOP_NOTIFICATIONS_ERROR: "Kan ikke aktivere Nettleservarsler fordi nettleseren din aktivt blokkerer dem. Prøv å se i innstillingene eller bruke en annen nettleser.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} demo varslinger`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Hvis du holder nettleservinduet åpent, vil du se dette varsel når noen snakker til deg.", SEND_BUTTON_TEXT: "Send", ENTRYBOX_TEXT_LIMIT: "Kun 10.000 tegn er tillatt.", ENTRYBOX_PLACEHOLDER: "Si noe...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Denne samtale er ikke lengre aktiv.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Du kan lese, men ikke sende meldinger.", MESSAGELIST_LOADING_OLDER: "Laster eldre meldinger...", MESSAGELIST_SHOW_OLDER: "Vis eldre meldinger", MESSAGELIST_NEW_MARKER: "Ny", MESSAGE_SENT_VIA_EMAIL: "Denne meldingen er sendt via e-post", YOU_MARKER: "deg", UPLOAD_IN_PROGRESS: "Laster opp...", UPLOAD_SEND_FILE: "Send fil", UPLOAD_SHARE_LOCATION: "Del din plassering", UPLOAD_ERROR: "Noe gikk galt i uplastingen. Det kan være filen ikke støttes eller for stor.", SHARE_LOCATION_ERROR: "Kan ikke dele plasseringen: ", LOADING: "Laster...", HUB_EMPTY: "Din chats historikk vil vises her", HUB_SHOW_EARLIER: "Vis tidligere chats", INBOX_NO_CHATS_TITLE: "Ingen chats enda!", INBOX_NO_CHATS_BODY: "Så snart du får en eller flere samtaler, vil de vises her.", ENABLE_TRANSLATION: "Oversett denne samtalen til norsk", DISABLE_TRANSLATION: "Vis original", SEARCH_PLACEHOLDER_TEXT: "Søk...", SEARCH_SEARCHING: "Søker...", SEARCH_NO_RESULTS: "Finner ingen resultater", SEARCH_NO_MORE_RESULTS: "Ingen flere resultater", CHAT_NOT_FOUND: "Chat ikke funnet", DELETE_MESSAGE: "Slett melding", DELETION_EXPLANATION: "Hvis du sletter denne meldingen, forsvinner den for alle.", EDIT_MESSAGE: "Rediger melding", SAVE: "Lagre", EDITED_INDICATOR: "redigert", REPLY_TO_MESSAGE: "Svar", ADD_REACTION: "Legg til reaksjon", AUTH_EXPIRED_OVERLAY_TITLE: "Chatøkten er utløpt", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Oppdater siden for å fortsette", VOICE_MESSAGE: "Lydmelding", CONTACT_INFORMATION_HIDDEN: "Skjult informasjon", LEAVE_CONVERSATION: "Forlat samtalen", MARK_CONVERSATION_AS_UNREAD: "Merk som ulest", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, ss = { code: "nl-NL", name: "Dutch", translation: { YESTERDAY: "Gisteren", TODAY: "Vandaag", DAYS: "d", HOURS: "u", MINUTES: "m", JUST_NOW: "zojuist", LOCATION: "Locatie", CANCEL: "Annuleren", INBOX: "Inbox", DESKTOP_NOTIFICATIONS: "Browsermeldingen", DESKTOP_NOTIFICATIONS_ERROR: "Browsermeldingen kunnen niet geactiveerd worden omdat de browser het blokkeert. Check de instellingen van je browser of probeer een andere browser.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} demo notificatie`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Als je je browser open houdt, zie je deze popup als iemand tegen je praat.", SEND_BUTTON_TEXT: "Verzenden", ENTRYBOX_TEXT_LIMIT: "Maximaal 10.000 tekens toegestaan.", ENTRYBOX_PLACEHOLDER: "Typ een bericht...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Dit gesprek is niet actief meer.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Je kunt geen berichten sturen.", MESSAGELIST_LOADING_OLDER: "Eerdere berichten laden...", MESSAGELIST_SHOW_OLDER: "Laad eerdere berichten", MESSAGELIST_NEW_MARKER: "Nieuw", MESSAGE_SENT_VIA_EMAIL: "Dit bericht is verstuurd via e-mail", YOU_MARKER: "jij", UPLOAD_IN_PROGRESS: "Uploaden...", UPLOAD_SEND_FILE: "Verzend bestand", UPLOAD_SHARE_LOCATION: "Deel locatie", UPLOAD_ERROR: "Er ging iets mis. Het bestand wordt niet ondersteund of is te groot.", SHARE_LOCATION_ERROR: "Locatie delen mislukt: ", LOADING: "Bezig met laden...", HUB_EMPTY: "Berichtengeschiedenis wordt hier weergegeven", HUB_SHOW_EARLIER: "Laat eerdere berichten zien", INBOX_NO_CHATS_TITLE: "Nog geen chats!", INBOX_NO_CHATS_BODY: "Zodra je een of meerdere conversaties hebt gehad, worden deze hier weergegeven.", ENABLE_TRANSLATION: "Vertaal dit gesprek naar het Nederlands", DISABLE_TRANSLATION: "Toon oorspronkelijk gesprek", SEARCH_PLACEHOLDER_TEXT: "Zoek...", SEARCH_SEARCHING: "Zoeken...", SEARCH_NO_RESULTS: "Geen resultaten gevonden", SEARCH_NO_MORE_RESULTS: "Niet meer resultaten", CHAT_NOT_FOUND: "Chat niet gevonden", DELETE_MESSAGE: "Bericht verwijderen", DELETION_EXPLANATION: "Als je dit bericht verwijdert, zal het voor iedereen verdwijnen.", EDIT_MESSAGE: "Bericht bewerken", SAVE: "Opslaan", EDITED_INDICATOR: "bewerkt", REPLY_TO_MESSAGE: "Beantwoorden", ADD_REACTION: "Reactie toevoegen", AUTH_EXPIRED_OVERLAY_TITLE: "Je chatsessie is verlopen", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Ververs de pagina om door te gaan", VOICE_MESSAGE: "Spraakbericht", CONTACT_INFORMATION_HIDDEN: "verborgen informatie", LEAVE_CONVERSATION: "Gesprek verlaten", MARK_CONVERSATION_AS_UNREAD: "Markeren als ongelezen", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, is = { code: "pl-PL", name: "Polish", translation: { YESTERDAY: "Wczoraj", TODAY: "Dzisiaj", DAYS: "d", HOURS: "h", MINUTES: "m", JUST_NOW: "teraz", LOCATION: "Lokalizacja", CANCEL: "Anuluj", INBOX: "Skrzynka odbiorcza", DESKTOP_NOTIFICATIONS: "Powiadomienia", DESKTOP_NOTIFICATIONS_ERROR: "Nie można aktywować powiadomień, ponieważ twoja przeglądarka je blokuje. Proszę zmienić ustawienie lub spróbować innej przeglądarki.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} przykładowe powiadomienie`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Jeśli zostawisz tę kartę otwartą, zobaczysz takie powiadomienie, gdy ktoś napisze do Ciebie.", SEND_BUTTON_TEXT: "Wyślij", ENTRYBOX_TEXT_LIMIT: "Nie można wysyłać więcej niż 10000 znaków.", ENTRYBOX_PLACEHOLDER: "Napisz coś...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Ten czat nie jest aktywny.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Możesz czytać wiadomości, ale nie możesz ich wysyłać.", MESSAGELIST_LOADING_OLDER: "Wczytuję starsze wiadomości...", MESSAGELIST_SHOW_OLDER: "Zobacz starsze wiadomości", MESSAGELIST_NEW_MARKER: "Nowe", MESSAGE_SENT_VIA_EMAIL: "Ta wiadomość została wysłana przez email.", YOU_MARKER: "ty", UPLOAD_IN_PROGRESS: "Przesyłanie...", UPLOAD_SEND_FILE: "Prześlij plik", UPLOAD_SHARE_LOCATION: "Udostępnij lokalizację", UPLOAD_ERROR: "Coś poszło nie tak. Plik może być zbyt duży lub jest nieobsługiwany.", SHARE_LOCATION_ERROR: "Nie da się udostępnić lokalizacji: ", LOADING: "Ładowanie...", HUB_EMPTY: "Twoje czaty pojawią się tutaj", HUB_SHOW_EARLIER: "Zobacz starsze czaty", INBOX_NO_CHATS_TITLE: "Brak czatów!", INBOX_NO_CHATS_BODY: "Rozpoczęte konwersacje pojawią się tutaj.", ENABLE_TRANSLATION: "Przetłumacz tę konwersację na język polski", DISABLE_TRANSLATION: "Pokaż oryginał", SEARCH_PLACEHOLDER_TEXT: "Wyszukaj...", SEARCH_SEARCHING: "Wyszukiwanie...", SEARCH_NO_RESULTS: "Nie znaleziono wyników", SEARCH_NO_MORE_RESULTS: "Nie ma innych wyników", CHAT_NOT_FOUND: "Nie znaleziono konwersacji", DELETE_MESSAGE: "Usuń wiadomość", DELETION_EXPLANATION: "Jeśli usuniesz tę wiadomość, przestanie być widoczna dla wszystkich.", EDIT_MESSAGE: "Edytuj wiadomość", SAVE: "Zapisz", EDITED_INDICATOR: "edytowano", REPLY_TO_MESSAGE: "Odpowiedz", ADD_REACTION: "Dodaj reakcję", AUTH_EXPIRED_OVERLAY_TITLE: "Twoja sesja wygasła", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Odśwież stronę, aby kontynuować", VOICE_MESSAGE: "Wiadomość głosowa", CONTACT_INFORMATION_HIDDEN: "Ukryte informacje", LEAVE_CONVERSATION: "Opuść konwersację", MARK_CONVERSATION_AS_UNREAD: "Oznacz jako nieprzeczytane", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, rs = { code: "pt-BR", name: "Portuguese (Brazil)", translation: { YESTERDAY: "Ontem", TODAY: "Hoje", DAYS: "d", HOURS: "h", MINUTES: "m", JUST_NOW: "agora mesmo", LOCATION: "Localização", CANCEL: "Cancelar", INBOX: "Caixa de entrada", DESKTOP_NOTIFICATIONS: "Notificações do navegador", DESKTOP_NOTIFICATIONS_ERROR: "Não é possível ativar as notificações da navegador porque seu navegador as bloqueia. Tente procurar nas configurações ou usar um navegador diferente.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} notificação de demonstração`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Se você mantiver a guia do navegador aberta, verá essa mensagem quando alguém falar com você.", SEND_BUTTON_TEXT: "Enviar", ENTRYBOX_TEXT_LIMIT: "Apenas 10.000 caracteres são permitidos.", ENTRYBOX_PLACEHOLDER: "Diga algo...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Esta conversa não está mais ativa.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Você pode ler, mas não enviar mensagens.", MESSAGELIST_LOADING_OLDER: "Carregando mensagens antigas...", MESSAGELIST_SHOW_OLDER: "Mostrar mensagens mais antigas", MESSAGELIST_NEW_MARKER: "Novo", MESSAGE_SENT_VIA_EMAIL: "Esta mensagem foi enviada via email.", YOU_MARKER: "Você", UPLOAD_IN_PROGRESS: "Carregando...", UPLOAD_SEND_FILE: "Enviar arquivo", UPLOAD_SHARE_LOCATION: "Compartilhar localização", UPLOAD_ERROR: "Algo deu errado ao fazer o upload. O arquivo pode não ter suporte ou ser muito grande.", SHARE_LOCATION_ERROR: "Não é possível compartilhar o local: ", LOADING: "Carregando...", HUB_EMPTY: "Seu histórico de conversas será exibido aqui", HUB_SHOW_EARLIER: "Mostrar conversas anteriores", INBOX_NO_CHATS_TITLE: "Ainda não há chats!", INBOX_NO_CHATS_BODY: "Depois de ter uma ou mais conversas, elas serão exibidas aqui.", ENABLE_TRANSLATION: "Traduzir esta conversa para português", DISABLE_TRANSLATION: "Ver a conversa não traduzida", SEARCH_PLACEHOLDER_TEXT: "Busca...", SEARCH_SEARCHING: "Consultando...", SEARCH_NO_RESULTS: "Resultados nao encontrados", SEARCH_NO_MORE_RESULTS: "Não há mais resultados", CHAT_NOT_FOUND: "Conversa não encontrada", DELETE_MESSAGE: "Excluir mensagem", DELETION_EXPLANATION: "Se você excluir esta mensagem, ela desaparecerá para todos.", EDIT_MESSAGE: "Editar mensagem", SAVE: "Salvar", EDITED_INDICATOR: "editada", REPLY_TO_MESSAGE: "Responder", ADD_REACTION: "Adicionar reação", AUTH_EXPIRED_OVERLAY_TITLE: "Sua sessão de chat expirou", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Atualize a página para continuar", VOICE_MESSAGE: "Mensagem de voz", LEAVE_CONVERSATION: "Sair da conversa", MARK_CONVERSATION_AS_UNREAD: "Marcar como não lida", CONTACT_INFORMATION_HIDDEN: "Informação oculta", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, os = { code: "ro-RO", name: "Romanian (Romania)", translation: { YESTERDAY: "Ieri", TODAY: "Astăzi", DAYS: "z", HOURS: "o", MINUTES: "m", JUST_NOW: "chiar acum", LOCATION: "Locație", CANCEL: "Anulare", INBOX: "Inbox", DESKTOP_NOTIFICATIONS: "Notificări browser", DESKTOP_NOTIFICATIONS_ERROR: "Nu se pot activa notificări browser deoarece browserul dvs. le blochează în mod activ. Încercați să căutați în setări sau utilizând un alt browser.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `Notificare de debit ${e}`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Dacă țineți fișa browserului deschis, veți vedea acest pop-up atunci când cineva vorbește cu dvs.", SEND_BUTTON_TEXT: "Trimiteți", ENTRYBOX_TEXT_LIMIT: "Sunt permise numai 10.000 de caractere.", ENTRYBOX_PLACEHOLDER: "Spune ceva...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Această conversație nu mai este activă.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Puteți citi, dar nu puteți trimite mesaje.", MESSAGELIST_LOADING_OLDER: "Încărcarea mesajelor mai vechi...", MESSAGELIST_SHOW_OLDER: "Afișați mesaje mai vechi", MESSAGELIST_NEW_MARKER: "Nou", MESSAGE_SENT_VIA_EMAIL: "Acest mesaj a fost trimis prin e-mail", YOU_MARKER: "voi", UPLOAD_IN_PROGRESS: "Încărcarea...", UPLOAD_SEND_FILE: "Trimiteți fișierul", UPLOAD_SHARE_LOCATION: "Distribuiți locația", UPLOAD_ERROR: "Sa încărcat ceva în mod greșit. Fișierul ar putea fi neacceptat sau prea mare.", SHARE_LOCATION_ERROR: "Nu se poate partaja locația: ", LOADING: "Încărcare...", HUB_EMPTY: "Istoricul chat-ului dvs. va apărea aici", HUB_SHOW_EARLIER: "Afișați discuțiile anterioare", INBOX_NO_CHATS_TITLE: "Încă nu vorbești!", INBOX_NO_CHATS_BODY: "După ce ați avut una sau mai multe conversații, acestea vor apărea aici.", ENABLE_TRANSLATION: "Traduceți această conversație în română", DISABLE_TRANSLATION: "Arată originalul", SEARCH_PLACEHOLDER_TEXT: "Căutare...", SEARCH_SEARCHING: "Se caută...", SEARCH_NO_RESULTS: "Nu s-au găsit rezultate", SEARCH_NO_MORE_RESULTS: "Nu mai există rezultate", CHAT_NOT_FOUND: "Conversația nu a fost găsită", DELETE_MESSAGE: "Șterge mesajul", DELETION_EXPLANATION: "Dacă ștergi acest mesaj, acesta va dispărea pentru toată lumea.", EDIT_MESSAGE: "Redactează mesajul", SAVE: "Salvare", EDITED_INDICATOR: "editat", REPLY_TO_MESSAGE: "Răspundeți", ADD_REACTION: "Adaugă o reacție", AUTH_EXPIRED_OVERLAY_TITLE: "Sesiunea dumneavoastră de chat a expirat", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Reîmprospătați pagina pentru a continua", VOICE_MESSAGE: "Mesaj vocal", CONTACT_INFORMATION_HIDDEN: "Informații ascunse", LEAVE_CONVERSATION: "Părăsește conversația", MARK_CONVERSATION_AS_UNREAD: "Marcheaza ca necitit", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Es = { code: "ru-RU", name: "Russian", translation: { YESTERDAY: "Вчера", TODAY: "Сегодня", DAYS: "д", HOURS: "ч", MINUTES: "м", JUST_NOW: "только что", LOCATION: "Местоположение", CANCEL: "Отмена", INBOX: "Входящие", DESKTOP_NOTIFICATIONS: "Оповещения", DESKTOP_NOTIFICATIONS_ERROR: "Невозможно включить оповещения, потому что ваш браузер активно блокирует их. Проверьте ваши настройки или попробуйте другой браузер.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} демо-оповещение`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Если вкладка вашего браузера открыта, вы увидите всплывающее окошко оповещения когда кто-то отправит вам сообщение.", SEND_BUTTON_TEXT: "Отправить", ENTRYBOX_TEXT_LIMIT: "Разрешено использовать только 10 тысяч символов.", ENTRYBOX_PLACEHOLDER: "Напишите что-нибудь...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Этот разговор больше неактивен.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Вы можете читать, но не отправлять сообщения.", MESSAGELIST_LOADING_OLDER: "Загрузка старых сообщения...", MESSAGELIST_SHOW_OLDER: "Показать старые сообщения", MESSAGELIST_NEW_MARKER: "Новые", MESSAGE_SENT_VIA_EMAIL: "Это сообщение было отправлено по электронной почте", YOU_MARKER: "вы", UPLOAD_IN_PROGRESS: "Загрузка...", UPLOAD_SEND_FILE: "Отправить файл", UPLOAD_SHARE_LOCATION: "Поделиться местоположением", UPLOAD_ERROR: "Что-то пошло не так: такой файл не поддерживается или он слишком большой.", SHARE_LOCATION_ERROR: "Не удается поделиться местоположением: ", LOADING: "Загрузка...", HUB_EMPTY: "Здесь появится ваша история чата", HUB_SHOW_EARLIER: "Показать предыдущие чаты", INBOX_NO_CHATS_TITLE: "Пока нет чатов!", INBOX_NO_CHATS_BODY: "Как только у вас будет один или несколько разговоров, они появятся здесь.", ENABLE_TRANSLATION: "Переведите этот разговор на русский", DISABLE_TRANSLATION: "Show source", SEARCH_PLACEHOLDER_TEXT: "поиск...", SEARCH_SEARCHING: "Поиск...", SEARCH_NO_RESULTS: "Результаты не найдены", SEARCH_NO_MORE_RESULTS: "Больше результатов нет", CHAT_NOT_FOUND: "Чат не найден", DELETE_MESSAGE: "Удалить сообщение", DELETION_EXPLANATION: "Если вы удалите это сообщение, оно исчезнет для всех.", EDIT_MESSAGE: "Изменить сообщение", SAVE: "сохранить", EDITED_INDICATOR: "изменено", REPLY_TO_MESSAGE: "Ответить", ADD_REACTION: "Добавить реакцию", AUTH_EXPIRED_OVERLAY_TITLE: "Срок действия вашего сеанса чата истек", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Обновите страницу, чтобы продолжить", VOICE_MESSAGE: "Голосовое сообщение", CONTACT_INFORMATION_HIDDEN: "Информация скрыта", LEAVE_CONVERSATION: "Выйти из беседы", MARK_CONVERSATION_AS_UNREAD: "Отметить как непрочитанное", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, us = { code: "sq-AL", name: "Albanian", translation: { YESTERDAY: "Dje", TODAY: "Sot", DAYS: "d", HOURS: "o", MINUTES: "m", JUST_NOW: "Tani", LOCATION: "Pozicion", CANCEL: "Anulo", INBOX: "Inbox", DESKTOP_NOTIFICATIONS: "Njoftimet e shfletuesit", DESKTOP_NOTIFICATIONS_ERROR: "Nuk mund të aktivizohen njoftimet në shfletues sepse shfletuesi juaj i bllokon ato në mënyrë aktive. Provoni të shikoni cilësimet ose përdorni një shfletues të ndryshëm.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} njoftime në desktop`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Lënia e skedës së shfletuesit tuaj të hapur do të pop-up kur dikush flet me ju.", SEND_BUTTON_TEXT: "Dërgo", ENTRYBOX_TEXT_LIMIT: "Lejohen vetëm 10,000 karaktere", ENTRYBOX_PLACEHOLDER: "Thuaj diçka...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Kjo bisedë nuk është më aktive.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Mund të lexoni por jo të dërgoni mesazhe.", MESSAGELIST_LOADING_OLDER: "Duke ngarkuar mesazhe më të vjetra...", MESSAGELIST_SHOW_OLDER: "Trego mesazhe më të vjetra", MESSAGELIST_NEW_MARKER: "E ri", MESSAGE_SENT_VIA_EMAIL: "Ky mesazh u dërgua si email", YOU_MARKER: "ti", UPLOAD_IN_PROGRESS: "Ngarkim...", UPLOAD_SEND_FILE: "Dërgo datotekën", UPLOAD_SHARE_LOCATION: "Ndani lokacionin", UPLOAD_ERROR: "Na vjen keq, diçka nuk shkoi si duhet. Dosja mund të mos ket mbështetje ose mund të jetë shumë e madhe.", SHARE_LOCATION_ERROR: "Nuk mund të ndahet lokacioni: ", LOADING: "Ngarkim...", HUB_EMPTY: "Këtu do të paraqitet/ shfaqet historia e bisedës tuaj", HUB_SHOW_EARLIER: "Shfaqi bisedat e mëparshme", INBOX_NO_CHATS_TITLE: "Nuk ka biseda!", INBOX_NO_CHATS_BODY: "Pasi të keni një ose më shumë biseda, ato do të paraqiten/shfaqen këtu.", ENABLE_TRANSLATION: "Përkthejeni këtë bisedë në shqiptare", DISABLE_TRANSLATION: "Shikoni origjinalin", SEARCH_PLACEHOLDER_TEXT: "Kërko...", SEARCH_SEARCHING: "Kërko...", SEARCH_NO_RESULTS: "Nuk ka rezultate", SEARCH_NO_MORE_RESULTS: "Nuk ka më rezultate", CHAT_NOT_FOUND: "Biseda nuk u gjet", DELETE_MESSAGE: "Fshi mesazhin", DELETION_EXPLANATION: "Nëse e fshini këtë mesazh, ai do të zhduket për të gjithë.", EDIT_MESSAGE: "Redakto mesazhin", SAVE: "Ruaj", EDITED_INDICATOR: "redaktuar", REPLY_TO_MESSAGE: "Përgjigj", ADD_REACTION: "Shtoni reagimin", AUTH_EXPIRED_OVERLAY_TITLE: "Sesioni juaj i bisedës ka skaduar", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Rifresko faqen për të vazhduar", VOICE_MESSAGE: "Mesazh zanor", CONTACT_INFORMATION_HIDDEN: "informacione të fshehura", LEAVE_CONVERSATION: "Largohu nga bashkëbisedimi", MARK_CONVERSATION_AS_UNREAD: "Shëno si të palexuar", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Ds = { code: "sr-SP", name: "Serbian", translation: { YESTERDAY: "Juče", TODAY: "Danas", DAYS: "d", HOURS: "s", MINUTES: "m", JUST_NOW: "Upravo sad", LOCATION: "Lokacija", CANCEL: "Otkaži", INBOX: "Pretinac", DESKTOP_NOTIFICATIONS: "Browser Notifikacija", DESKTOP_NOTIFICATIONS_ERROR: "Browser notifikacije nisu omogućene jer ih vaš pregledač aktivno blokira. Pokušajte pogledati postavke ili koristiti neki drugi pregledač.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} demo notifikacija`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Ako karticu pregledača ostavite otvorenu, pojaviće se ovaj pop-up kada neko razgovara s vama.", SEND_BUTTON_TEXT: "Pošalji", ENTRYBOX_TEXT_LIMIT: "Dozvoljeno je samo 10.000 znakova.", ENTRYBOX_PLACEHOLDER: "Kaži nešto...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Ovaj razgovor više nije aktivan.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Možete da čitate, ali ne i da šaljete poruke.", MESSAGELIST_LOADING_OLDER: "Učitavam starije poruke...", MESSAGELIST_SHOW_OLDER: "Prikaži starije poruke", MESSAGELIST_NEW_MARKER: "Novo", MESSAGE_SENT_VIA_EMAIL: "Ova poruka je poslana imejlom", YOU_MARKER: "ti", UPLOAD_IN_PROGRESS: "Učitavam...", UPLOAD_SEND_FILE: "Pošalji datoteku", UPLOAD_SHARE_LOCATION: "Podeli lokaciju", UPLOAD_ERROR: "Nažalost, nešto je pošlo krivo. Datoteka možda nije podržana ili je prevelika.", SHARE_LOCATION_ERROR: "Nije moguće podeliti lokaciju: ", LOADING: "Učitavam...", HUB_EMPTY: "Ovde će biti prikazana istorija razgovora", HUB_SHOW_EARLIER: "Prikaži ranije razgovore", INBOX_NO_CHATS_TITLE: "Nema razgovora!", INBOX_NO_CHATS_BODY: "Nakon što vodite jedan ili više razgovora, oni će se pojaviti ovde.", ENABLE_TRANSLATION: "Prevedi ovaj razgovor na srpski jezik", DISABLE_TRANSLATION: "Prikaži original", SEARCH_PLACEHOLDER_TEXT: "Pretraži...", SEARCH_SEARCHING: "Pretraživanje...", SEARCH_NO_RESULTS: "Nema rezultata", SEARCH_NO_MORE_RESULTS: "Nema više rezultata", CHAT_NOT_FOUND: "Ćaskanje nije pronađeno", DELETE_MESSAGE: "Izbriši poruku", DELETION_EXPLANATION: "Ako obrišete ovu poruku, ona neće biti vidljiva ni za koga.", EDIT_MESSAGE: "Ispravi poruku", SAVE: "Sačuvaj", EDITED_INDICATOR: "ispravljeno", REPLY_TO_MESSAGE: "Odgovorite", ADD_REACTION: "Dodaj reakciju", AUTH_EXPIRED_OVERLAY_TITLE: "Vaša sesija ćaskanja je istekla", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Osvežite stranicu da biste nastavili", VOICE_MESSAGE: "Glasovna poruka", CONTACT_INFORMATION_HIDDEN: "Sakrivene informacije", LEAVE_CONVERSATION: "Napusti razgovor", MARK_CONVERSATION_AS_UNREAD: "Označi kao nepročitanu", REPLY_TO_ARIA_LABEL: (e, t) => `Odgovarate korisniku ${e}: ${t}`, REPLY_MODE_LEAVE_ARIA_LABEL: "Izađi iz moda pisanja odgovora", STATUS_INDICATOR_ONLINE: "Aktivan", STATUS_INDICATOR_OFFLINE: "Neaktivan" } }, ls = { code: "sv-SE", name: "Swedish (Sweden)", translation: { YESTERDAY: "Igår", TODAY: "Idag", DAYS: "d", HOURS: "h", MINUTES: "m", JUST_NOW: "just nu", LOCATION: "Plats", CANCEL: "Avbryt", INBOX: "Inkorg", DESKTOP_NOTIFICATIONS: "Webbläsarnotiser", DESKTOP_NOTIFICATIONS_ERROR: "Kan inte aktivera webbläsarnotiser eftersom din webbläsare aktivt blockerar dem. Se över inställningarna eller använd en annan webbläsare.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} demonotis`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Om du har fliken i webbläsaren öppen så kommer den här notisen visas när någon pratar med dig.", SEND_BUTTON_TEXT: "Skicka", ENTRYBOX_TEXT_LIMIT: "Max 10 000 tecken är tillåtet.", ENTRYBOX_PLACEHOLDER: "Skriv ett meddelande...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Den här konversationen är inte längre aktiv.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Du kan läsa men inte skicka meddelanden.", MESSAGELIST_LOADING_OLDER: "Läser in tidigare meddelanden...", MESSAGELIST_SHOW_OLDER: "Visa tidigare meddelanden", MESSAGELIST_NEW_MARKER: "Nytt", MESSAGE_SENT_VIA_EMAIL: "Detta meddelande skickades via e-post", YOU_MARKER: "du", UPLOAD_IN_PROGRESS: "Laddar upp...", UPLOAD_SEND_FILE: "Skicka fil", UPLOAD_SHARE_LOCATION: "Dela plats", UPLOAD_ERROR: "Något gick fel vid uppladdningen. Filen kan vara av en typ som inte stöds eller är för stor.", SHARE_LOCATION_ERROR: "Kan inte dela plats: ", LOADING: "Laddar...", HUB_EMPTY: "Din chatthistorik kommer att visas här", HUB_SHOW_EARLIER: "Visa tidigare chattar", INBOX_NO_CHATS_TITLE: "Inga chattar ännu!", INBOX_NO_CHATS_BODY: "När du har haft en eller flera konversationer kommer de att visas här.", ENABLE_TRANSLATION: "Översätt den här konversationen till svenska", DISABLE_TRANSLATION: "Visa original", SEARCH_PLACEHOLDER_TEXT: "Sök...", SEARCH_SEARCHING: "Söker...", SEARCH_NO_RESULTS: "Inga resultat hittades", SEARCH_NO_MORE_RESULTS: "Inga fler resultat", CHAT_NOT_FOUND: "Chatten hittades inte", DELETE_MESSAGE: "Radera meddelandet", DELETION_EXPLANATION: "Om du raderar det här meddelandet försvinner det för alla.", EDIT_MESSAGE: "Redigera meddelandet", SAVE: "Spara", EDITED_INDICATOR: "redigerad", REPLY_TO_MESSAGE: "Svara", ADD_REACTION: "Lägg till reaktion", AUTH_EXPIRED_OVERLAY_TITLE: "Din chatsession har gått ut", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Uppdatera sidan för att fortsätta", VOICE_MESSAGE: "Röstmeddelande", CONTACT_INFORMATION_HIDDEN: "Dold information", LEAVE_CONVERSATION: "Lämna konversationen", MARK_CONVERSATION_AS_UNREAD: "Markera som oläst", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, cs = { code: "tr-TR", name: "Turkish", translation: { YESTERDAY: "Dün", TODAY: "Bugün", DAYS: "g", HOURS: "s", MINUTES: "d", JUST_NOW: "az önce", LOCATION: "Konum", CANCEL: "İptal", INBOX: "Gelen Kutusu", SEND_BUTTON_TEXT: "Gönder", ENTRYBOX_TEXT_LIMIT: "En fazla 10.000 karaktere izin veriliyor.", ENTRYBOX_PLACEHOLDER: "Bir şeyler söyle...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Bu konuşma artık aktif değil.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Mesajları okuyabilirsiniz ancak mesaj gönderemezsiniz.", MESSAGELIST_LOADING_OLDER: "Eski mesajlar yükleniyor...", MESSAGELIST_SHOW_OLDER: "Eski mesajları göster", MESSAGELIST_NEW_MARKER: "Yeni", DESKTOP_NOTIFICATIONS: "Tarayıcı bildirimleri", DESKTOP_NOTIFICATIONS_ERROR: "Tarayıcınız aktif olarak engellediğinden tarayıcı bildirimlerini etkinleştiremiyoruz. Ayarları kontrol etmeyi veya farklı bir tarayıcı kullanmayı deneyebilirsiniz.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} test bildirimi`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Eğer tarayıcınızın penceresini açık tutarsanız biri mesaj yazdığında bu bildirimi göreceksiniz.", MESSAGE_SENT_VIA_EMAIL: "Bu mesaj e-posta ile gönderilmiştir.", YOU_MARKER: "siz", UPLOAD_IN_PROGRESS: "Yükleniyor...", UPLOAD_SEND_FILE: "Dosya gönder", UPLOAD_SHARE_LOCATION: "Konum paylaş", UPLOAD_ERROR: "Yükleme sırasında bir şeyler yanlış gitti. Dosya desteklenmiyor veya izin verilenden büyük olabilir.", SHARE_LOCATION_ERROR: "Konum paylaşılamadı: ", LOADING: "Yükleniyor...", HUB_EMPTY: "Konuşma geçmişiniz burada görünecek", HUB_SHOW_EARLIER: "Önceki konuşmaları göster", INBOX_NO_CHATS_TITLE: "Henüz konuşma yok!", INBOX_NO_CHATS_BODY: "Bir veya daha fazla konuşma başlattığınız konuşmalar burada belirecek.", ENABLE_TRANSLATION: "Bu konuşmayı Türkçe'ye çevir", DISABLE_TRANSLATION: "Orijinali göster", SEARCH_PLACEHOLDER_TEXT: "Ara...", SEARCH_SEARCHING: "Arıyor...", SEARCH_NO_RESULTS: "Sonuç bulunamadı", SEARCH_NO_MORE_RESULTS: "Başka sonuç bulunamadı.", CHAT_NOT_FOUND: "Sohbet bulunamadı", DELETE_MESSAGE: "Mesajı sil", DELETION_EXPLANATION: "Bu mesajı silerseniz herkes için görünmez olacaktır.", EDIT_MESSAGE: "Mesajı düzenle", SAVE: "Kaydet", EDITED_INDICATOR: "düzenlenmiş", REPLY_TO_MESSAGE: "Yanıtla", ADD_REACTION: "Tepki ekle", AUTH_EXPIRED_OVERLAY_TITLE: "Sohbet oturumunuz sona erdi", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Devam etmek için sayfayı yenileyin", VOICE_MESSAGE: "Sesli mesaj", CONTACT_INFORMATION_HIDDEN: "Gizli bilgi", LEAVE_CONVERSATION: "Konuşmadan ayrıl", MARK_CONVERSATION_AS_UNREAD: "Okunmamış olarak işaretle", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, _s = { code: "uk-UA", name: "Ukrainian (Ukraine)", translation: { YESTERDAY: "Вчора", TODAY: "Сьогодні", DAYS: "d", HOURS: "h", MINUTES: "м", JUST_NOW: "просто зараз", LOCATION: "Місцезнаходження", CANCEL: "Скасувати", INBOX: "Вхідні", DESKTOP_NOTIFICATIONS: "Сповіщення в браузері", DESKTOP_NOTIFICATIONS_ERROR: "Неможливо ввімкнути сповіщення в браузері, оскільки ваш веб-переглядач активно їх блокує. Спробуйте переглянути налаштування або використовувати інший браузер.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `Демо-повідомлення про ${e}`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Якщо ви відкриєте вкладку веб-переглядача відкритою, ви побачите це спливаюче вікно, коли хтось спілкується з вами.", SEND_BUTTON_TEXT: "Надіслати", ENTRYBOX_TEXT_LIMIT: "Дозволено лише 10 000 символів.", ENTRYBOX_PLACEHOLDER: "Скажи щось...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Ця розмова більше не активна.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Ви можете читати, але не надсилати повідомлення.", MESSAGELIST_LOADING_OLDER: "Завантаження старих повідомлень...", MESSAGELIST_SHOW_OLDER: "Показати старіші повідомлення", MESSAGELIST_NEW_MARKER: "Нові", MESSAGE_SENT_VIA_EMAIL: "Це повідомлення надіслано електронною поштою", YOU_MARKER: "ти", UPLOAD_IN_PROGRESS: "Завантаження...", UPLOAD_SEND_FILE: "Надіслати файл", UPLOAD_SHARE_LOCATION: "Поділитися місцезнаходженням", UPLOAD_ERROR: "На жаль, під час завантаження щось не вдалось. Файл може бути непідтримуваним або занадто великим.", SHARE_LOCATION_ERROR: "Неможливо поділити місцезнаходження: ", LOADING: "Завантаження...", HUB_EMPTY: "Тут відобразиться ваша історія чатів", HUB_SHOW_EARLIER: "Показати попередні чати", INBOX_NO_CHATS_TITLE: "Чатів ще немає!", INBOX_NO_CHATS_BODY: "Після того, як ви проведете одну чи кілька бесід, вони з’являться тут.", ENABLE_TRANSLATION: "Перекласти цю розмову англійською", DISABLE_TRANSLATION: "Показати оригінал", SEARCH_PLACEHOLDER_TEXT: "Пошук...", SEARCH_SEARCHING: "Пошук...", SEARCH_NO_RESULTS: "Не знайдено результатів", SEARCH_NO_MORE_RESULTS: "Більше немає результатів", CHAT_NOT_FOUND: "Чат не знайдено", DELETE_MESSAGE: "Видалити повідомлення", DELETION_EXPLANATION: "Якщо ви видалите це повідомлення, воно зникне для всіх.", EDIT_MESSAGE: "Редагувати повідомлення", SAVE: "Зберегти", EDITED_INDICATOR: "відредаговано", REPLY_TO_MESSAGE: "Відповісти", ADD_REACTION: "Додати реакцію", AUTH_EXPIRED_OVERLAY_TITLE: "Ваша сесія в чаті закінчилась", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Оновіть сторінку, щоб продовжити", VOICE_MESSAGE: "Голосове повідомлення", CONTACT_INFORMATION_HIDDEN: "Прихована інформація", LEAVE_CONVERSATION: "Залишити розмову", MARK_CONVERSATION_AS_UNREAD: "Відзначити як непрочитане", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, As = { code: "vi-VN", name: "Vietnamese", translation: { YESTERDAY: "Hôm qua", TODAY: "Hôm nay", DAYS: "ngày", HOURS: "giờ", MINUTES: "phút", JUST_NOW: "vừa xong", LOCATION: "Địa điểm", CANCEL: "Hủy", INBOX: "Hộp thư đến", DESKTOP_NOTIFICATIONS: "Thông báo trình duyệt", DESKTOP_NOTIFICATIONS_ERROR: "Không thể bật thông báo trên trình duyệt vì trình duyệt của bạn đang tắt chức năng này. Hãy thử tìm trong cài đặt trình duyệt hoặc sử dụng một trình duyệt khác.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} thông báo thử nghiệm`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Nếu bạn giữ tab trình duyệt của bạn mở, bạn sẽ thấy cửa sổ bật lên khi ai đó nói chuyện với bạn.", SEND_BUTTON_TEXT: "Gửi", ENTRYBOX_TEXT_LIMIT: "Tối đa 10.000 ký tự.", ENTRYBOX_PLACEHOLDER: "Nói gì đó...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Cuộc hội thoại này không còn hoạt động.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Bạn có thể đọc, nhưng không thể gửi tin nhắn.", MESSAGELIST_LOADING_OLDER: "Đang tải tin nhắn cũ...", MESSAGELIST_SHOW_OLDER: "Hiển thị tin nhắn trước đó", MESSAGELIST_NEW_MARKER: "Mới", MESSAGE_SENT_VIA_EMAIL: "Tin nhắn này đã được gửi qua email", YOU_MARKER: "bạn", UPLOAD_IN_PROGRESS: "Đang tải lên...", UPLOAD_SEND_FILE: "Gửi tệp", UPLOAD_SHARE_LOCATION: "Chia sẻ vị trí", UPLOAD_ERROR: "Thật không may, quá trình tải lên không thành công. Tệp không được hỗ trợ hoặc quá lớn.", SHARE_LOCATION_ERROR: "Không thể chia sẻ vị trí: ", LOADING: "Đang tải...", HUB_EMPTY: "Lịch sử trò chuyện của bạn sẽ hiển thị ở đây", HUB_SHOW_EARLIER: "Hiển thị các cuộc trò chuyện trước đó", INBOX_NO_CHATS_TITLE: "Chưa có cuộc trò chuyện nào!", INBOX_NO_CHATS_BODY: "Khi bạn đã có một hoặc nhiều cuộc trò chuyện, chúng sẽ hiển thị ở đây.", ENABLE_TRANSLATION: "Dịch cuộc hội thoại sang Tiếng Việt", DISABLE_TRANSLATION: "Hiển thị nội dung gốc", SEARCH_PLACEHOLDER_TEXT: "TÌm kiếm...", SEARCH_SEARCHING: "Đang tìm kiếm...", SEARCH_NO_RESULTS: "Không tìm thấy kết quả nào", SEARCH_NO_MORE_RESULTS: "Không có kết quả nào khác", CHAT_NOT_FOUND: "Không tìm thấy cuộc trò chuyện", DELETE_MESSAGE: "Xóa tin nhắn", DELETION_EXPLANATION: "Nếu bạn xóa tin nhắn này, tất cả mọi người sẽ không còn thấy nó.", EDIT_MESSAGE: "Chỉnh sửa tin nhắn", SAVE: "lưu", EDITED_INDICATOR: "đã chỉnh sửa", REPLY_TO_MESSAGE: "đáp lại", ADD_REACTION: "Thêm biểu tượng cảm xúc", AUTH_EXPIRED_OVERLAY_TITLE: "Phiên trò chuyện của bạn đã hết hạn", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Hãy làm mới trang để tiếp tục", VOICE_MESSAGE: "Tin nhắn thoại", CONTACT_INFORMATION_HIDDEN: "Thông tin ẩn", LEAVE_CONVERSATION: "Thoát khỏi cuộc trò chuyện", MARK_CONVERSATION_AS_UNREAD: "Đánh dấu là chưa đọc", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Os = { code: "zh-CN", name: "Chinese (Simplified)", translation: { YESTERDAY: "昨天", TODAY: "今天", DAYS: "天", HOURS: "小时", MINUTES: "分钟", JUST_NOW: "刚才", LOCATION: "地点", CANCEL: "取消", INBOX: "收件箱", DESKTOP_NOTIFICATIONS: "浏览器通知", DESKTOP_NOTIFICATIONS_ERROR: "因浏览器设置为阻止,所以无法激活浏览器提醒。请去设置里查看或者尝试其他的浏览器。", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} 演示提醒`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "只要保持浏览器开着,如果有人和你对话,将会自动弹出对话窗口。", SEND_BUTTON_TEXT: "发送", ENTRYBOX_TEXT_LIMIT: "不超过10,000个字符。", ENTRYBOX_PLACEHOLDER: "写点什么吧……", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "该对话已结束。", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "你只能阅读信息,不能发送信息。", MESSAGELIST_LOADING_OLDER: "载入之前的信息……", MESSAGELIST_SHOW_OLDER: "显示之前的信息", MESSAGELIST_NEW_MARKER: "新消息", MESSAGE_SENT_VIA_EMAIL: "该信息已通过邮件发送。", YOU_MARKER: "你", UPLOAD_IN_PROGRESS: "上传中……", UPLOAD_SEND_FILE: "发送文件", UPLOAD_SHARE_LOCATION: "分享地址", UPLOAD_ERROR: "上传出错。文件格式不支持或者太大。", SHARE_LOCATION_ERROR: "无法分享地址: ", LOADING: "正在载入……", HUB_EMPTY: "你的聊天记录将在此显示。", HUB_SHOW_EARLIER: "显示之前的聊天记录。", INBOX_NO_CHATS_TITLE: "暂无任何聊天记录!", INBOX_NO_CHATS_BODY: "如果你有一个或多个对话窗口进行中,将显示在这里。", ENABLE_TRANSLATION: "翻译至简体中文", DISABLE_TRANSLATION: "查看原文", SEARCH_PLACEHOLDER_TEXT: "搜索...", SEARCH_SEARCHING: "正在搜索...", SEARCH_NO_RESULTS: "未找到结果", SEARCH_NO_MORE_RESULTS: "无更多结果", CHAT_NOT_FOUND: "未找到“聊天”", DELETE_MESSAGE: "删除消息", DELETION_EXPLANATION: "如果您删除此消息,那么所有人都将无法再看到它。", EDIT_MESSAGE: "编辑消息", SAVE: "保存", EDITED_INDICATOR: "本消息有改动", REPLY_TO_MESSAGE: "回复", ADD_REACTION: "添加反应", AUTH_EXPIRED_OVERLAY_TITLE: "您的聊天会话已过期", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "刷新页面以继续", VOICE_MESSAGE: "语音消息", CONTACT_INFORMATION_HIDDEN: "隐藏信息", LEAVE_CONVERSATION: "离开对话", MARK_CONVERSATION_AS_UNREAD: "标记为未读", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Ts = { code: "zh-TW", name: "Chinese (Traditional)", translation: { YESTERDAY: "昨天", TODAY: "昨天", DAYS: "天", HOURS: "小時", MINUTES: "分", JUST_NOW: "現在", LOCATION: "地點", CANCEL: "取消", INBOX: "收件箱", DESKTOP_NOTIFICATIONS: "瀏覽器通知", DESKTOP_NOTIFICATIONS_ERROR: "無法啟用瀏覽器通知,因為您的瀏覽器主動阻止它們。 嘗試查看設置或使用其他瀏覽器。", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} 演示通知`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "如果您持續打開瀏覽器標籤頁,當有人與您通話時,您會看到此彈出窗口。", SEND_BUTTON_TEXT: "發送", ENTRYBOX_TEXT_LIMIT: "只允許10.000個字符。", ENTRYBOX_PLACEHOLDER: "說些什麼...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "此對話不再有效。", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "您可以閱讀,但不能發送消息。", MESSAGELIST_LOADING_OLDER: "加載舊訊息...", MESSAGELIST_SHOW_OLDER: "顯示較舊的訊息", MESSAGELIST_NEW_MARKER: "新的", MESSAGE_SENT_VIA_EMAIL: "此訊息是通過電郵發送的", YOU_MARKER: "您", UPLOAD_IN_PROGRESS: "上傳中...", UPLOAD_SEND_FILE: "發送文件", UPLOAD_SHARE_LOCATION: "共享位置", UPLOAD_ERROR: "不幸的是,上傳出了問題。 該文件可能不受支持或太大。", SHARE_LOCATION_ERROR: "無法分享位置:", LOADING: "載入中...", HUB_EMPTY: "您的聊天記錄將顯示在此處", HUB_SHOW_EARLIER: "顯示早先的聊天記錄", INBOX_NO_CHATS_TITLE: "還沒聊天!", INBOX_NO_CHATS_BODY: "一旦您進行了一次或多次對話,他們就會顯示在此處。", ENABLE_TRANSLATION: "翻譯此對話至繁體中文", DISABLE_TRANSLATION: "顯示原文", SEARCH_PLACEHOLDER_TEXT: "搜尋...", SEARCH_SEARCHING: "正在搜尋...", SEARCH_NO_RESULTS: "找不到任何結果", SEARCH_NO_MORE_RESULTS: "沒有其他結果", CHAT_NOT_FOUND: "查無對話", DELETE_MESSAGE: "刪除訊息", DELETION_EXPLANATION: "您如果刪除這條訊息,所有人都將看不到它。", EDIT_MESSAGE: "編輯訊息", SAVE: "儲存", EDITED_INDICATOR: "已編輯", REPLY_TO_MESSAGE: "回覆", ADD_REACTION: "加入表情回應", AUTH_EXPIRED_OVERLAY_TITLE: "您的會話過程已過期", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "請刷新頁面以繼續", VOICE_MESSAGE: "語音訊息", CONTACT_INFORMATION_HIDDEN: "隱藏訊息", LEAVE_CONVERSATION: "離開對話", MARK_CONVERSATION_AS_UNREAD: "標記為未讀", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Lt = { ar: Pa, bg: Ha, bs: Ua, ca: ba, cs: ya, da: wa, de: Ya, el: $a, en: A, es: ja, et: xa, fa: Va, fi: Xa, fr: Ga, he: za, hi: Ka, hr: Wa, hu: qa, id: Ja, is: Za, it: Qa, ja: es, ka: ts, ko: ns, nb: as, nl: ss, pl: is, pt: rs, ro: os, ru: Es, sq: us, sr: Ds, sv: ls, tr: cs, uk: _s, vi: As, zh: Os, zhTw: Ts };
|
|
146
|
-
function
|
|
147
|
-
const t = e.replace(/_/g, "-").toLowerCase(), n =
|
|
150
|
+
const Xe = new et(), ee = new et(), A = { code: "en-US", name: "English (US)", translation: { YESTERDAY: "Yesterday", TODAY: "Today", DAYS: "d", HOURS: "h", MINUTES: "m", JUST_NOW: "just now", LOCATION: "Location", CANCEL: "Cancel", INBOX: "Inbox", DESKTOP_NOTIFICATIONS: "Browser notifications", DESKTOP_NOTIFICATIONS_ERROR: "Can't enable browser notifications because your browser actively blocks them. Try looking in the settings or using a different browser.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} demo notification`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "If you keep your browser tab open, you'll see this pop up when someone talks to you.", SEND_BUTTON_TEXT: "Send", ENTRYBOX_TEXT_LIMIT: "Only 10,000 characters are allowed.", ENTRYBOX_PLACEHOLDER: "Say something...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "This conversation is no longer active.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "You can read, but not send messages.", MESSAGELIST_LOADING_OLDER: "Loading older messages...", MESSAGELIST_SHOW_OLDER: "Show older messages", MESSAGELIST_NEW_MARKER: "New", MESSAGE_SENT_VIA_EMAIL: "This message was sent via email", YOU_MARKER: "you", UPLOAD_IN_PROGRESS: "Uploading...", UPLOAD_SEND_FILE: "Send file", UPLOAD_SHARE_LOCATION: "Share location", UPLOAD_ERROR: "Unfortunately, something went wrong uploading. The file might be unsupported or too large.", SHARE_LOCATION_ERROR: "Cannot share location: ", LOADING: "Loading...", HUB_EMPTY: "Your chat history will show up here", HUB_SHOW_EARLIER: "Show earlier chats", INBOX_NO_CHATS_TITLE: "No chats yet!", INBOX_NO_CHATS_BODY: "Once you've had one or more conversations, they will show up here.", ENABLE_TRANSLATION: "Translate this conversation to English", DISABLE_TRANSLATION: "Show original", SEARCH_PLACEHOLDER_TEXT: "Search...", SEARCH_SEARCHING: "Searching...", SEARCH_NO_RESULTS: "No results found", SEARCH_NO_MORE_RESULTS: "No more results", CHAT_NOT_FOUND: "Chat not found", DELETE_MESSAGE: "Delete message", DELETION_EXPLANATION: "If you delete this message, it will disappear for everybody.", EDIT_MESSAGE: "Edit message", SAVE: "Save", EDITED_INDICATOR: "edited", REPLY_TO_MESSAGE: "Reply", REPLY_TO_ARIA_LABEL: (e, t) => `Replying to ${e}: ${t}`, REPLY_MODE_LEAVE_ARIA_LABEL: "Exit reply mode", ADD_REACTION: "Add reaction", AUTH_EXPIRED_OVERLAY_TITLE: "Your chat session has expired", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Refresh the page to continue", VOICE_MESSAGE: "Voice message", LEAVE_CONVERSATION: "Leave conversation", MARK_CONVERSATION_AS_UNREAD: "Mark as unread", STATUS_INDICATOR_ONLINE: "Active", STATUS_INDICATOR_OFFLINE: "Away", CONTACT_INFORMATION_HIDDEN: "hidden information" } }, Ja = { code: "ar", name: "Arabic", translation: { YESTERDAY: "الأمس", TODAY: "اليوم", DAYS: "يوم", HOURS: "ساعة", MINUTES: "دقيقة", JUST_NOW: "فقط الآن", LOCATION: "الموقع", CANCEL: "إلغاء", INBOX: "علبة الوارد", DESKTOP_NOTIFICATIONS: "إشعارات المتصفح", DESKTOP_NOTIFICATIONS_ERROR: "لا يمكن تمكين إشعارات المتصفح لأن متصفحك يمنعها بشكل نشط. جرّب البحث في الإعدادات أو استخدام متصفح آخر.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `إعلام ${e} التجريبي`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "إذا أبقيت علامة تبويب المتصفح مفتوحة ، فسترى هذا ينبثق عندما يتحدث شخص معك.", SEND_BUTTON_TEXT: "إرسال", ENTRYBOX_TEXT_LIMIT: "يُسمح فقط بـ 10.000 حرف.", ENTRYBOX_PLACEHOLDER: "قل شيئًا ...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "هذه المحادثة لم تعد نشطة.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "يمكنك القراءة ، لكن لا يمكنك إرسال الرسائل.", MESSAGELIST_LOADING_OLDER: "جارٍ تحميل الرسائل القديمة ...", MESSAGELIST_SHOW_OLDER: "عرض الرسائل الأقدم", MESSAGELIST_NEW_MARKER: "جديد", MESSAGE_SENT_VIA_EMAIL: "تم إرسال هذه الرسالة عبر البريد الإلكتروني", YOU_MARKER: "أنت", UPLOAD_IN_PROGRESS: "جارٍ التحميل ...", UPLOAD_SEND_FILE: "إرسال ملف", UPLOAD_SHARE_LOCATION: "مشاركة الموقع", UPLOAD_ERROR: "حدث خطأ ما في تحميل شيء. ربما يكون الملف غير متوافق أو كبير جدًا.", SHARE_LOCATION_ERROR: "لا يمكن مشاركة الموقع:", LOADING: "جارٍ التحميل ...", HUB_EMPTY: "سوف يظهر سجل الدردشات هنا", HUB_SHOW_EARLIER: "إظهار الدردشات السابقة", INBOX_NO_CHATS_TITLE: "لا توجد دردشات بعد!", INBOX_NO_CHATS_BODY: "بمجرد أن يكون لديك واحد أو أكثر من المحادثات ، سوف تظهر هنا.", ENABLE_TRANSLATION: "ترجم هذه المحادثة إلى العربية", DISABLE_TRANSLATION: "إظهار الأصلي", SEARCH_PLACEHOLDER_TEXT: "...بحث", SEARCH_SEARCHING: "...يتم الآن البحث", SEARCH_NO_RESULTS: "لم يتم العثور على نتائج", SEARCH_NO_MORE_RESULTS: "لا يوجد المزيد من النتائج", CHAT_NOT_FOUND: "لم يتم العثور على الدردشة", DELETE_MESSAGE: "احذف الرسالة", DELETION_EXPLANATION: "إذا قمت بحذف هذه الرسالة، فهي ستختفي للجميع.", EDIT_MESSAGE: "تعديل الرسالة", SAVE: "حفظ", EDITED_INDICATOR: "معدّلة", REPLY_TO_MESSAGE: "رد", ADD_REACTION: "أضف تفاعلاً", AUTH_EXPIRED_OVERLAY_TITLE: "انتهت جلسة الدردشة المخصصة لك", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "يُرجى إعادة تحميل الصفحة للمتابعة", VOICE_MESSAGE: "رسالة صوتية", CONTACT_INFORMATION_HIDDEN: "المعلومات المخفية", LEAVE_CONVERSATION: "الخروج من المحادثة", MARK_CONVERSATION_AS_UNREAD: "وضع علامة غير مقروءة", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Za = { code: "bg-BG", name: "Bulgarian", translation: { YESTERDAY: "Вчера", TODAY: "Днес", DAYS: "Ден", HOURS: "Час", MINUTES: "m", JUST_NOW: "Току-що", LOCATION: "местоположението", CANCEL: "Откажи", INBOX: "Кутия", DESKTOP_NOTIFICATIONS: "Известия на браузъра", DESKTOP_NOTIFICATIONS_ERROR: "Не можете да активирате известията на браузъра, защото браузърът ви ги блокира активно. Опитайте да погледнете в настройките или да използвате друг браузър.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} демо известие`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Ако държите раздела на браузъра си отворен, ще видите този изскачащ прозорец, когато някой говори с вас.", SEND_BUTTON_TEXT: "Изпрати", ENTRYBOX_TEXT_LIMIT: "Разрешени са само до 10.000 знака.", ENTRYBOX_PLACEHOLDER: "Кажете нещо...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Този разговор вече не е активен.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Можете да четете, но не и да изпращате съобщения.", MESSAGELIST_LOADING_OLDER: "Зареждане на по-стари съобщения...", MESSAGELIST_SHOW_OLDER: "Показване на по-стари съобщения", MESSAGELIST_NEW_MARKER: "Нови", MESSAGE_SENT_VIA_EMAIL: "Това съобщение беше изпратено по имейл", YOU_MARKER: "Вие", UPLOAD_IN_PROGRESS: "Качване...", UPLOAD_SEND_FILE: "Изпращане на файл", UPLOAD_SHARE_LOCATION: "Споделяне на местоположението", UPLOAD_ERROR: "За съжаление нещо се обърка при качването. Файлът може да не се поддържа или е твърде голям.", SHARE_LOCATION_ERROR: "Не може да се сподели местоположението: ", LOADING: "Зареждане...", HUB_EMPTY: "Историята на вашите разговори ще се покаже тук", HUB_SHOW_EARLIER: "Показване на по-ранни чатове", INBOX_NO_CHATS_TITLE: "Все още нямате разговори!", INBOX_NO_CHATS_BODY: "След като проведете един или повече разговори, те ще се покажат тук.", ENABLE_TRANSLATION: "Преведете този разговор на български", DISABLE_TRANSLATION: "Показване на оригинал", SEARCH_PLACEHOLDER_TEXT: "Търсене...", SEARCH_SEARCHING: "Търсене...", SEARCH_NO_RESULTS: "Няма намерени резултати", SEARCH_NO_MORE_RESULTS: "Няма повече резултати", CHAT_NOT_FOUND: "Чатът не е намерен", DELETE_MESSAGE: "Изтриване на съобщение", DELETION_EXPLANATION: "Ако изтриете това съобщение, то ще изчезне за всички.", EDIT_MESSAGE: "Редактиране на съобщението", SAVE: "Запиши", EDITED_INDICATOR: "редактирано", REPLY_TO_MESSAGE: "Отговори", ADD_REACTION: "Добави реакция", AUTH_EXPIRED_OVERLAY_TITLE: "Вашата чат сесия е изтекла", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Обновете страницата, за да продължите", VOICE_MESSAGE: "Гласово съобщение", CONTACT_INFORMATION_HIDDEN: "Скрита информация", LEAVE_CONVERSATION: "Напускане на разговора", MARK_CONVERSATION_AS_UNREAD: "Маркирай като непрочетено", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Qa = { code: "bs-BA", name: "Bosnian", translation: { YESTERDAY: "Jučer", TODAY: "Danas", DAYS: "d", HOURS: "s", MINUTES: "m", JUST_NOW: "Upravo sad", LOCATION: "Lokacija", CANCEL: "Otkaži", INBOX: "Pretinac", DESKTOP_NOTIFICATIONS: "Obavijesti preglednika", DESKTOP_NOTIFICATIONS_ERROR: "Notifikacije preglednika se ne mogu omogućiti jer ih vaš preglednik aktivno blokira. Pokušajte pregledati postavke ili koristiti drugi preglednik.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} demo notifikacija`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Ako karticu preglednika ostavite otvorenu, pojavit će se ovaj pop-up kada netko razgovara s vama.", SEND_BUTTON_TEXT: "Pošalji", ENTRYBOX_TEXT_LIMIT: "Dozvoljeno je samo 10.000 znakova.", ENTRYBOX_PLACEHOLDER: "Reci nešto...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Ovaj razgovor više nije aktivan.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Možeš čitati, ali ne i slati poruke.", MESSAGELIST_LOADING_OLDER: "Učitavam starije poruke...", MESSAGELIST_SHOW_OLDER: "Prikaži starije poruke", MESSAGELIST_NEW_MARKER: "Novo", MESSAGE_SENT_VIA_EMAIL: "Ova poruka je poslana e-poštom", YOU_MARKER: "ti", UPLOAD_IN_PROGRESS: "Učitavam...", UPLOAD_SEND_FILE: "Pošalji datoteku", UPLOAD_SHARE_LOCATION: "Podijeli lokaciju", UPLOAD_ERROR: "Nažalost, nešto je pošlo krivo. Datoteka možda nije podržana ili je prevelika.", SHARE_LOCATION_ERROR: "Nije moguće podijeliti lokaciju: ", LOADING: "Učitavam...", HUB_EMPTY: "Ovdje će se prikazati vaša povijest razgovora", HUB_SHOW_EARLIER: "Prikaži ranije razgovore", INBOX_NO_CHATS_TITLE: "Nema razgovora!", INBOX_NO_CHATS_BODY: "Nakon što vodite jedan ili više razgovora, oni će se pojaviti ovdje.", ENABLE_TRANSLATION: "Prevedi ovaj razgovor na bosanski jezik", DISABLE_TRANSLATION: "Prikaži original", SEARCH_PLACEHOLDER_TEXT: "Pretraži...", SEARCH_SEARCHING: "Pretraživanje...", SEARCH_NO_RESULTS: "Nema rezultata", SEARCH_NO_MORE_RESULTS: "Nema više rezultata", CHAT_NOT_FOUND: "Ćaskanje nije pronađeno", DELETE_MESSAGE: "Obriši poruku", DELETION_EXPLANATION: "Ako izbrišete ovu poruku, ona će nestati za sve.", EDIT_MESSAGE: "Uredi poruku", SAVE: "Sačuvati", EDITED_INDICATOR: "uređeno", REPLY_TO_MESSAGE: "Odgovorite", ADD_REACTION: "Dodajte reakciju", AUTH_EXPIRED_OVERLAY_TITLE: "Vaša chat sesija je istekla", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Osvježite stranicu da nastavite", VOICE_MESSAGE: "Glasovna poruka", CONTACT_INFORMATION_HIDDEN: "Skrivene informacije", LEAVE_CONVERSATION: "Napusti razgovor", MARK_CONVERSATION_AS_UNREAD: "Označi kao nepročitano", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, es = { code: "ca-ES", name: "Catalan (ES)", translation: { YESTERDAY: "Ahir", TODAY: "Avui", DAYS: "d", HOURS: "h", MINUTES: "m", JUST_NOW: "ara mateix", LOCATION: "Ubicació", CANCEL: "Cancel·lar", INBOX: "Safata d'entrada", DESKTOP_NOTIFICATIONS: "Notificacions d'escriptori", DESKTOP_NOTIFICATIONS_ERROR: "No es poden habilitar les notificacions del navegador perquè el teu navegador les bloqueja activament. Prova de buscar a la configuració o utilitza un altre navegador.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `Notificació de demostració de ${e}`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Si mantens la pestanya del navegador oberta, veuràs aquesta notificació quan algú et parli.", SEND_BUTTON_TEXT: "Enviar", ENTRYBOX_TEXT_LIMIT: "Només es permeten 10.000 caràcters.", ENTRYBOX_PLACEHOLDER: "Digues alguna cosa...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Aquesta conversa ja no està activa.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Pots llegir, però no enviar missatges.", MESSAGELIST_LOADING_OLDER: "Carregant missatges antics...", MESSAGELIST_SHOW_OLDER: "Mostrar missatges més antics", MESSAGELIST_NEW_MARKER: "Nou", MESSAGE_SENT_VIA_EMAIL: "Aquest missatge s'ha enviat per correu electrònic", YOU_MARKER: "tu", UPLOAD_IN_PROGRESS: "S'està pujant...", UPLOAD_SEND_FILE: "Enviar arxiu", UPLOAD_SHARE_LOCATION: "Compartir ubicació", UPLOAD_ERROR: "Desafortunadament, alguna cosa ha anat malament en pujar. L'arxiu pot ser no compatible o massa gran.", SHARE_LOCATION_ERROR: "No es pot compartir la ubicació: ", LOADING: "Carregant...", HUB_EMPTY: "El teu historial de xat apareixerà aquí", HUB_SHOW_EARLIER: "Mostra xats anteriors", INBOX_NO_CHATS_TITLE: "Encara no hi ha xats!", INBOX_NO_CHATS_BODY: "Un cop hagis tingut una o més converses, apareixeran aquí.", ENABLE_TRANSLATION: "Traduir aquesta conversa al català", DISABLE_TRANSLATION: "Mostrar original", SEARCH_PLACEHOLDER_TEXT: "Cerca...", SEARCH_SEARCHING: "Buscant...", SEARCH_NO_RESULTS: "No s'han trobat resultats", SEARCH_NO_MORE_RESULTS: "No hi ha més resultats", CHAT_NOT_FOUND: "Xat no trobat", DELETE_MESSAGE: "Esborrar missatge", DELETION_EXPLANATION: "Si esborres aquest missatge, desapareixerà per a tothom.", EDIT_MESSAGE: "Editar missatge", SAVE: "Desar", EDITED_INDICATOR: "editat", REPLY_TO_MESSAGE: "Respondre", REPLY_TO_ARIA_LABEL: (e, t) => `Responent a ${e}: ${t}`, REPLY_MODE_LEAVE_ARIA_LABEL: "Sortir del mode de resposta", ADD_REACTION: "Afegir reacció", VOICE_MESSAGE: "Missatge de veu", LEAVE_CONVERSATION: "Abandonar la conversa", MARK_CONVERSATION_AS_UNREAD: "marcar com no llegit", STATUS_INDICATOR_ONLINE: "Actiu", STATUS_INDICATOR_OFFLINE: "Absent", CONTACT_INFORMATION_HIDDEN: "informació oculta", AUTH_EXPIRED_OVERLAY_TITLE: "La teva sessió de xat ha caducat", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Actualitza la pàgina per continuar" } }, ts = { code: "cs-CZ", name: "Czech", translation: { YESTERDAY: "Včera", TODAY: "Dnes", DAYS: "d", HOURS: "h", MINUTES: "m", JUST_NOW: "právě teď", LOCATION: "Lokace", CANCEL: "Zrušit", INBOX: "Doručené", DESKTOP_NOTIFICATIONS: "Oznámení v prohlížeči", DESKTOP_NOTIFICATIONS_ERROR: "Nelze povolit notifikace prohlížeče, protože váš prohlížeč je aktivně blokuje. Zkuste se podívat na nastavení nebo zkuste použít jiný prohlížeč.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} demo notifikace`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Pokud necháte kartu prohlížeče otevřenou, uvidíte tento popup jakmile s vámi bude někdo mluvit.", SEND_BUTTON_TEXT: "Odeslat", ENTRYBOX_TEXT_LIMIT: "Je povoleno Maximálně 10.000 znaků.", ENTRYBOX_PLACEHOLDER: "Napište něco...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Tato konverzace již není aktivní.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Můžete číst, ale nemůžete posílat zprávy.", MESSAGELIST_LOADING_OLDER: "Nahrávám starší zprávy...", MESSAGELIST_SHOW_OLDER: "Zobrazit starší zprávy", MESSAGELIST_NEW_MARKER: "Nové", MESSAGE_SENT_VIA_EMAIL: "Tato zpráva byla odeslána přes mail.", YOU_MARKER: "vy", UPLOAD_IN_PROGRESS: "Nahrávám...", UPLOAD_SEND_FILE: "Poslat soubor", UPLOAD_SHARE_LOCATION: "Sdílet pozici", UPLOAD_ERROR: "Nepodařilo se nahrát soubor. Ten je buď nepodporován a/nebo příliš velký.", SHARE_LOCATION_ERROR: "Není možné sdílet pozici: ", LOADING: "Nahrávám...", HUB_EMPTY: "Vaše historie se zde zobrazí", HUB_SHOW_EARLIER: "Zobrazit dřívější konverzace", INBOX_NO_CHATS_TITLE: "Zatím zde nejsou žádné konverzace!", INBOX_NO_CHATS_BODY: "Jakmile budete mít jednu nebo více konverzací, objeví se zde.", ENABLE_TRANSLATION: "Přeložit tuto konverzaci do češtiny", DISABLE_TRANSLATION: "Zobrazit původní", SEARCH_PLACEHOLDER_TEXT: "Hledat...", SEARCH_SEARCHING: "Hledání...", SEARCH_NO_RESULTS: "Nenašly se žádné výsledky", SEARCH_NO_MORE_RESULTS: "Žádné další výsledky", CHAT_NOT_FOUND: "Chat nenalezen", DELETE_MESSAGE: "Smazat zprávu", DELETION_EXPLANATION: "Pokud tuto zprávu smažete, zmizí pro všechny.", EDIT_MESSAGE: "Upravit zprávu", SAVE: "Uložit", EDITED_INDICATOR: "upraveno", REPLY_TO_MESSAGE: "Odpovědět", ADD_REACTION: "Reagovat", AUTH_EXPIRED_OVERLAY_TITLE: "Váš chat byl kvůli nečinnosti odpojen", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Pro pokračování obnovte stránku", VOICE_MESSAGE: "Hlasová zpráva", CONTACT_INFORMATION_HIDDEN: "Skrytá informace", LEAVE_CONVERSATION: "Opustit konverzaci", MARK_CONVERSATION_AS_UNREAD: "Označit jako nepřečtené", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, ns = { code: "da-DK", name: "Danish", translation: { YESTERDAY: "I går", TODAY: "I dag", DAYS: "d", HOURS: "t", MINUTES: "m", JUST_NOW: "lige nu", LOCATION: "Placering", CANCEL: "Annuller", INBOX: "Indbakke", DESKTOP_NOTIFICATIONS: "Browsermeddelelser", DESKTOP_NOTIFICATIONS_ERROR: "Kan ikke aktivere Browsermeddelelser, fordi din browser aktivt blokerer dem. Prøv at kigge i indstillingerne eller benyt en anden browser.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} demomeddelelse`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Hvis du holder dit browser-faneblad åben, vil du se det her komme op, når nogen taler til dig.", SEND_BUTTON_TEXT: "Send", ENTRYBOX_TEXT_LIMIT: "Kun 10.000 tegn er tilladt.", ENTRYBOX_PLACEHOLDER: "Sig noget...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Denne samtale er ikke længere aktiv.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Du kan læse, men ikke sende beskeder.", MESSAGELIST_LOADING_OLDER: "Indlæser ældre beskeder...", MESSAGELIST_SHOW_OLDER: "Vis ældre beskeder", MESSAGELIST_NEW_MARKER: "Ny", MESSAGE_SENT_VIA_EMAIL: "Denne besked blev sendt via e-mail", YOU_MARKER: "dig", UPLOAD_IN_PROGRESS: "Overfører...", UPLOAD_SEND_FILE: "Send fil", UPLOAD_SHARE_LOCATION: "Del placering", UPLOAD_ERROR: "Der er sket noget forkert ved upload. Filen kan ikke understøttes eller filen er for stor.", SHARE_LOCATION_ERROR: "Kan ikke dele placering: ", LOADING: "Indlæser...", HUB_EMPTY: "Dine samtaler vises her", HUB_SHOW_EARLIER: "Vis tidligere chats", INBOX_NO_CHATS_TITLE: "Ingen chats endnu!", INBOX_NO_CHATS_BODY: "Når du har haft en eller flere samtaler, vises de her.", ENABLE_TRANSLATION: "Oversæt denne konversation til dansk", DISABLE_TRANSLATION: "Vis den oprindelige", SEARCH_PLACEHOLDER_TEXT: "Søg...", SEARCH_SEARCHING: "Søger...", SEARCH_NO_RESULTS: "Ingen resultater fundet", SEARCH_NO_MORE_RESULTS: "Ikke flere resultater", CHAT_NOT_FOUND: "Chat ikke fundet", DELETE_MESSAGE: "Slet besked", DELETION_EXPLANATION: "Hvis du sletter denne besked, vil ingen kunne se den.", EDIT_MESSAGE: "Rediger besked", SAVE: "Gem", EDITED_INDICATOR: "redigeret", REPLY_TO_MESSAGE: "Svar", ADD_REACTION: "Tilføj reaktion", AUTH_EXPIRED_OVERLAY_TITLE: "Din chatsession er udløbet", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Opdater siden for at fortsætte", VOICE_MESSAGE: "Talebesked", CONTACT_INFORMATION_HIDDEN: "Skjulte oplysninger", LEAVE_CONVERSATION: "Forlad samtale", MARK_CONVERSATION_AS_UNREAD: "Marker som ulæst", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, as = { code: "de-DE", name: "German", translation: { YESTERDAY: "Gestern", TODAY: "Heute", DAYS: "d", HOURS: "h", MINUTES: "m", JUST_NOW: "gerade jetzt", LOCATION: "Standort", CANCEL: "Abbrechen", INBOX: "Inbox", DESKTOP_NOTIFICATIONS: "Browser-Benachrichtigungen", DESKTOP_NOTIFICATIONS_ERROR: "Browser-Benachrichtigungen können nicht aktiviert werden, da Ihr Browser sie aktiv blockiert. Versuchen Sie, in den Einstellungen nachzuschlagen oder einen anderen Browser zu verwenden.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} Demo-Benachrichtigung`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Wenn Sie Ihre Browser-Registerkarte geöffnet lassen, wird dies angezeigt, wenn jemand mit Ihnen spricht.", SEND_BUTTON_TEXT: "Senden", ENTRYBOX_TEXT_LIMIT: "Nur 10.000 Zeichen sind erlaubt.", ENTRYBOX_PLACEHOLDER: "Sag etwas...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Diese Konversation ist nicht mehr aktiv.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Sie können Nachrichten lesen, aber nicht senden.", MESSAGELIST_LOADING_OLDER: "Ältere Nachrichten werden geladen...", MESSAGELIST_SHOW_OLDER: "Zeige ältere Nachrichten", MESSAGELIST_NEW_MARKER: "Neu", MESSAGE_SENT_VIA_EMAIL: "Diese Nachricht wurde per E-Mail gesendet", YOU_MARKER: "du", UPLOAD_IN_PROGRESS: "Hochladen...", UPLOAD_SEND_FILE: "Datei senden", UPLOAD_SHARE_LOCATION: "Standort teilen", UPLOAD_ERROR: "Beim Hochladen ist ein Fehler aufgetreten. Die Datei ist möglicherweise nicht unterstützt oder zu groß.", SHARE_LOCATION_ERROR: "Standort kann nicht freigegeben werden: ", LOADING: "Laden...", HUB_EMPTY: "Ihr Chat-Verlauf wird hier angezeigt", HUB_SHOW_EARLIER: "Zeige frühere Chats", INBOX_NO_CHATS_TITLE: "Noch keine Chats!", INBOX_NO_CHATS_BODY: "Sobald Sie eine oder mehrere Unterhaltungen geführt haben, werden sie hier angezeigt.", ENABLE_TRANSLATION: "Dieses Gespräch auf Deutsch übersetzen", DISABLE_TRANSLATION: "Originaltext anzeigen", SEARCH_PLACEHOLDER_TEXT: "Suche...", SEARCH_SEARCHING: "Suchen...", SEARCH_NO_RESULTS: "Keine Suchergebnisse gefunden", SEARCH_NO_MORE_RESULTS: "Keine weiteren Suchergebnisse", CHAT_NOT_FOUND: "Chat nicht gefunden", DELETE_MESSAGE: "Nachricht löschen", DELETION_EXPLANATION: "Wenn Sie diese Nachricht löschen, wird sie für alle verschwinden.", EDIT_MESSAGE: "Nachricht bearbeiten", SAVE: "Speichern", EDITED_INDICATOR: "bearbeitet", REPLY_TO_MESSAGE: "Antworten", ADD_REACTION: "Reaktion hinzufügen", AUTH_EXPIRED_OVERLAY_TITLE: "Ihre Chatsitzung ist abgelaufen", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Laden Sie zum Fortfahren die Seite neu", VOICE_MESSAGE: "Sprachnachricht", CONTACT_INFORMATION_HIDDEN: "Geschützte Angaben", LEAVE_CONVERSATION: "Unterhaltung verlassen", MARK_CONVERSATION_AS_UNREAD: "als ungelesen markieren", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, ss = { code: "el-GR", name: "Greek (Greece)", translation: { YESTERDAY: "Χθές", TODAY: "Σήμερα", DAYS: "Ημέρες", HOURS: "'Ωρες", MINUTES: "Λεπτά", JUST_NOW: "Μόλις τώρα", LOCATION: "Τοποθεσία", CANCEL: "Ακύρωση", INBOX: "Εισερχόμενα", DESKTOP_NOTIFICATIONS: "Ειδοποιήσεις περιηγητή", DESKTOP_NOTIFICATIONS_ERROR: "Δεν είναι δυνατή η ενεργοποίηση των ειδοποιήσεων του προγράμματος περιήγησης, επειδή το πρόγραμμα περιήγησης τις αποκλείει ενεργά. Δοκιμάστε να τσεκάρετε τις ρυθμίσεις ή να χρησιμοποιήσετε διαφορετικό πρόγραμμα περιήγησης.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} Δοκιμαστική επίδειξη`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Αν διατηρήσετε ανοιχτή τη σελίδα του προγράμματος περιήγησης, θα δείτε αυτό το pop up (παράθυρο) όταν κάποιος σας μιλάει.", SEND_BUTTON_TEXT: "Αποστολή", ENTRYBOX_TEXT_LIMIT: "Επιτρέπονται μόνο 10.000 χαρακτήρες.", ENTRYBOX_PLACEHOLDER: "Πείτε κάτι...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Αυτή η συζήτηση δεν είναι πλέον ενεργή.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Μπορείτε να διαβάσετε αλλά δεν μπορείτε να στείλετε μηνύματα.", MESSAGELIST_LOADING_OLDER: "Φόρτωση παλαιοτέρων μηνυμάτων...", MESSAGELIST_SHOW_OLDER: "Εμφάνιση παλαιότερων μηνυμάτων", MESSAGELIST_NEW_MARKER: "Νέο", MESSAGE_SENT_VIA_EMAIL: "Αυτό το μήνυμα εστάλη μέσω ηλεκτρονικού ταχυδρομείου", YOU_MARKER: "Εσείς", UPLOAD_IN_PROGRESS: "Ανέβασμα...", UPLOAD_SEND_FILE: "Αποστολή αρχείου", UPLOAD_SHARE_LOCATION: "Κοινή χρήση τοποθεσίας", UPLOAD_ERROR: "Κάτι πήγε στραβά κατά τη φόρτωση. Το αρχείο ενδέχεται να μην υποστηρίζεται ή να είναι υπερβολικά μεγάλο.", SHARE_LOCATION_ERROR: "Δεν είναι δυνατή η χρήση κοινής τοποθεσίας: ", LOADING: "Φόρτωση...", HUB_EMPTY: "Το ιστορικό των συνομιλιών σας θα εμφανιστεί εδώ", HUB_SHOW_EARLIER: "Εμφάνιση προηγούμενων συνομιλιών", INBOX_NO_CHATS_TITLE: "Δεν υπάρχουν ακόμα συζητήσεις!", INBOX_NO_CHATS_BODY: "Μόλις έχετε μία ή περισσότερες συνομιλίες, θα εμφανιστούν εδώ.", ENABLE_TRANSLATION: "Μετάφραση αυτής της συνομιλίας στα ελληνικά", DISABLE_TRANSLATION: "Προβολή πρωτοτύπου", SEARCH_PLACEHOLDER_TEXT: "Αναζήτηση...", SEARCH_SEARCHING: "Αναζήτηση...", SEARCH_NO_RESULTS: "Δεν βρέθηκαν αποτελέσματα", SEARCH_NO_MORE_RESULTS: "Δεν υπάρχουν περισσότερα αποτελέσματα", CHAT_NOT_FOUND: "Η συνομιλία δεν βρέθηκε", DELETE_MESSAGE: "Διαγραφή μηνύματος", DELETION_EXPLANATION: "Εάν διαγράψετε αυτό το μήνυμα, θα εξαφανιστεί για όλους.", EDIT_MESSAGE: "Επεξεργασία μηνύματος", SAVE: "Αποθήκευση", EDITED_INDICATOR: "επεξεργασμένο", REPLY_TO_MESSAGE: "Απάντηση", ADD_REACTION: "Προσθήκη αντίδρασης", AUTH_EXPIRED_OVERLAY_TITLE: "Η συνεδρία της συνομιλίας σας έχει λήξει", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Ανανεώστε τη σελίδα για να συνεχίσετε", VOICE_MESSAGE: "Ηχητικό μήνυμα", CONTACT_INFORMATION_HIDDEN: "Κρυμμένες πληροφορίες", LEAVE_CONVERSATION: "Αποσυρθείτε από τη συζήτηση", MARK_CONVERSATION_AS_UNREAD: "Επισήμανση ως μη αναγνωσμένα", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, is = { code: "es-ES", name: "Spanish", translation: { YESTERDAY: "Ayer", TODAY: "Hoy", DAYS: "d", HOURS: "h", MINUTES: "m", JUST_NOW: "justo ahora", LOCATION: "Ubicación", CANCEL: "Cancelar", INBOX: "Inbox", DESKTOP_NOTIFICATIONS: "Notificaciones del navigator", DESKTOP_NOTIFICATIONS_ERROR: "No se logró habilitar las notificaciones del navigador, comprueba que tu navegador no las esté bloqueando o intenta con otro navegador.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} notificación de prueba`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Si dejas esta pestaña abierta, verás este pop up cuando alguien te hable.", SEND_BUTTON_TEXT: "Enviar", ENTRYBOX_TEXT_LIMIT: "Sólo 10.000 caracteres permitidos.", ENTRYBOX_PLACEHOLDER: "Escribe algo...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Esta conversación ya no está activa.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Puedes leer pero no enviar mensajes.", MESSAGELIST_LOADING_OLDER: "Cargando mensajes pasados...", MESSAGELIST_SHOW_OLDER: "Ver mensajes pasados", MESSAGELIST_NEW_MARKER: "Nuevo", MESSAGE_SENT_VIA_EMAIL: "Este mensaje ha sido enviado vía email", YOU_MARKER: "tú", UPLOAD_IN_PROGRESS: "Subir...", UPLOAD_SEND_FILE: "Enviar archivo", UPLOAD_SHARE_LOCATION: "Compartir ubicación", UPLOAD_ERROR: "Ocurrió un problema subiendo el archivo. Puede que el archivo esté en un formato no soportado o que sea demasiado grande.", SHARE_LOCATION_ERROR: "No se logró compartir la ubicación: ", LOADING: "Cargando...", HUB_EMPTY: "Tu historial de conversaciones se mostrará aquí", HUB_SHOW_EARLIER: "Ver conversaciones pasadas", INBOX_NO_CHATS_TITLE: "¡Aún sin conversaciones!", INBOX_NO_CHATS_BODY: "Una vez que tengas una o más conversaciones, se mostrarán aquí.", ENABLE_TRANSLATION: "Traducir esta conversación al español", DISABLE_TRANSLATION: "Mostrar la conversación original", SEARCH_PLACEHOLDER_TEXT: "Buscar...", SEARCH_SEARCHING: "Buscando...", SEARCH_NO_RESULTS: "No se encontraron resultados", SEARCH_NO_MORE_RESULTS: "No hay más resultados", CHAT_NOT_FOUND: "Chat no encontrado", DELETE_MESSAGE: "Eliminar mensaje", DELETION_EXPLANATION: "Este mensaje desaparecerá para todos si lo borras.", EDIT_MESSAGE: "Editar mensaje", SAVE: "Guardar", EDITED_INDICATOR: "editado", REPLY_TO_MESSAGE: "Responder", ADD_REACTION: "Añadir reacción", AUTH_EXPIRED_OVERLAY_TITLE: "Su sesión de chat ha expirado", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Actualice la página para continuar", VOICE_MESSAGE: "Mensaje de voz", CONTACT_INFORMATION_HIDDEN: "Información oculta", LEAVE_CONVERSATION: "Abandonar conversación", MARK_CONVERSATION_AS_UNREAD: "Marcar como no leída", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, rs = { code: "et-EE", name: "Estonian", translation: { YESTERDAY: "Eile", TODAY: "Täna", DAYS: "p", HOURS: "t", MINUTES: "m", JUST_NOW: "Just nüüd", LOCATION: "Asukoht", CANCEL: "Katkesta", INBOX: "Postkast", DESKTOP_NOTIFICATIONS: "Veebibrauseri teated", DESKTOP_NOTIFICATIONS_ERROR: "Töölaua teatisi ei saa lubada, kuna Teie brauser blokeerib need aktiivselt. Proovige muuta seadeid või kasutada mõnda muud brauserit.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} demo teavitus`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Kui hoiate oma brauseri vahekaardi lahti ja näete seda hüpikakent, siis keegi soovib Teiega rääkida.", SEND_BUTTON_TEXT: "Saada", ENTRYBOX_TEXT_LIMIT: "Ainult kuni 10.000 tähemärki on lubatud.", ENTRYBOX_PLACEHOLDER: "Kirjuta midagi...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "See vestlus ei ole enam aktiivne.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Sa saad lugeda teateid, aga mitte kirjutada.", MESSAGELIST_LOADING_OLDER: "Laen vanemaid teateid...", MESSAGELIST_SHOW_OLDER: "Näita vanemaid teateid", MESSAGELIST_NEW_MARKER: "Uus", MESSAGE_SENT_VIA_EMAIL: "See teade on saadetud e-postiga", YOU_MARKER: "Sina", UPLOAD_IN_PROGRESS: "Laen...", UPLOAD_SEND_FILE: "Saada fail", UPLOAD_SHARE_LOCATION: "Jaga faili asukohta", UPLOAD_ERROR: "Nüüd läks midagi nihu, seoses faili ülesse laadimisega. Tundmatu fail või liiga suur.", SHARE_LOCATION_ERROR: "Ei suuda jagada faili asukohta: ", LOADING: "Laen...", HUB_EMPTY: "Siin on Sinu vestluste ajalugu", HUB_SHOW_EARLIER: "Näita vanemaid vestlusi", INBOX_NO_CHATS_TITLE: "Pole ühtegi vestlust!", INBOX_NO_CHATS_BODY: "Kui Sul tekib üks või rohkem vestlust, siis on need kuvatakse siin.", ENABLE_TRANSLATION: "Tõlgi see vestlus eesti keelde", DISABLE_TRANSLATION: "Näita algteksti", SEARCH_PLACEHOLDER_TEXT: "Otsi...", SEARCH_SEARCHING: "Otsin...", SEARCH_NO_RESULTS: "Otsingu tulemused puuduvad", SEARCH_NO_MORE_RESULTS: "Rohkem tulemusi ei ole ", CHAT_NOT_FOUND: "Vestlust ei leitud", DELETE_MESSAGE: "Kustuta sõnum", DELETION_EXPLANATION: "Kui kustutate selle sõnumi, kaob see kõigi jaoks.", EDIT_MESSAGE: "Redigeeri sõnumit", SAVE: "Salvesta", EDITED_INDICATOR: "muudetud", REPLY_TO_MESSAGE: "Vasta", ADD_REACTION: "Lisa reaktsioon", AUTH_EXPIRED_OVERLAY_TITLE: "Teie vestlussessioon on lõppenud", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Jätkamiseks värskendage lehte", VOICE_MESSAGE: "Häälsõnum", CONTACT_INFORMATION_HIDDEN: "Varjatud informatsioon", LEAVE_CONVERSATION: "Lahku vestlusest", MARK_CONVERSATION_AS_UNREAD: "Märgi mitteloetuks", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, os = { code: "fa", name: "Persian (Farsi)", translation: { YESTERDAY: "دیروز", TODAY: "امروز", DAYS: "روز", HOURS: "ساعت", MINUTES: "دقیقه", JUST_NOW: "هم اکنون", LOCATION: "مکان", CANCEL: "لغو", INBOX: "صندوق", DESKTOP_NOTIFICATIONS: "اطلاعیههای مرورگر", DESKTOP_NOTIFICATIONS_ERROR: "خطا در فعال سازی اعلان های مرورگر، مرورگر شما آنها را مسدود می کند سعی کنید تنظیمات مرورگر را تغییر دهید یا از یک مرورگر دیگر استفاده کنید.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `نوتیفیکیشن دمو ${e}`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "اگر صفحه ی مرورگر را باز نگهدارید این را موقعه ای که کسی با شما صحبت کند خواهید دید", SEND_BUTTON_TEXT: "بفرست", ENTRYBOX_TEXT_LIMIT: "فقط ۱۰،۰۰۰ حروف مجاز می باشد.", ENTRYBOX_PLACEHOLDER: "...چیزی بنویسید", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: ".این مکالمه دیگر فعال نمی باشد", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "شما می توانید بخوانید اما نمی توانید پیام بفرستید", MESSAGELIST_LOADING_OLDER: "...در حال بارگذاری پیام های قدیمی تر", MESSAGELIST_SHOW_OLDER: "نشان دادن پیام های قدیمی", MESSAGELIST_NEW_MARKER: "جدید", MESSAGE_SENT_VIA_EMAIL: "پیام توسط ایمل ارسال شد", YOU_MARKER: "شما", UPLOAD_IN_PROGRESS: "...در حال بارگذاری", UPLOAD_SEND_FILE: "فرستادن پوشه", UPLOAD_SHARE_LOCATION: "اشتراک گذاری مکان", UPLOAD_ERROR: "متاسفانه بارگذاری با مشکل روبه رو شد. ممکن است فایل حجیم باشد یا ساپورت نشده باشد.", SHARE_LOCATION_ERROR: "خطا در اشتراک گذاری مکان: ", LOADING: "...بارگذاری", HUB_EMPTY: "تاریخچه گفتگو اینجا نمایان می شود", HUB_SHOW_EARLIER: "دیدن گفتگو های قبلی", INBOX_NO_CHATS_TITLE: "هنوز گفتگویی وجود ندارد", INBOX_NO_CHATS_BODY: "بعد از داشتن یک مکالمه یا بیشتر، آنها اینجا نمایان می شوند.", ENABLE_TRANSLATION: "این مکالمه را به فارسی ترجمه کن", DISABLE_TRANSLATION: "زبان اصلی را نشان بده", SEARCH_PLACEHOLDER_TEXT: "...جستجو", SEARCH_SEARCHING: "...در حال جستجو", SEARCH_NO_RESULTS: "نتیجه ای یافت نشد", SEARCH_NO_MORE_RESULTS: "نتیجه بیشتری وجود ندارد", CHAT_NOT_FOUND: "مکالمه پیدا نشد", DELETE_MESSAGE: "حذف پیام ", DELETION_EXPLANATION: "اگر این پیام را حذف کنید، برای همه ناپدید می شود.", EDIT_MESSAGE: "ویرایش پیام", SAVE: "ذخیره", EDITED_INDICATOR: "ویرایششده", REPLY_TO_MESSAGE: "پاسخ دادن", ADD_REACTION: "واکنش را اضافه کنید", AUTH_EXPIRED_OVERLAY_TITLE: "جلسه چت شما منقضی شده است", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "برای ادامه صفحه را بازخوانی کنید", VOICE_MESSAGE: "پیام صوتی", CONTACT_INFORMATION_HIDDEN: "اطلاعات پنهان", LEAVE_CONVERSATION: "خروج از گفتگو", MARK_CONVERSATION_AS_UNREAD: "به عنوان خوانده نشده علامت گذاری کن", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Es = { code: "fi-FI", name: "Finnish", translation: { YESTERDAY: "Eilen", TODAY: "Tänään", DAYS: "p", HOURS: "t", MINUTES: "m", JUST_NOW: "juuri nyt", LOCATION: "Sijainti", CANCEL: "Peruuta", INBOX: "Saapuneet", DESKTOP_NOTIFICATIONS: "Selaimen ilmoitukset", DESKTOP_NOTIFICATIONS_ERROR: "Työpöydän ilmoituksia ei voitu kytkeä päälle, koska selaimesi estää ne aktiivisesti. Koeta tutkia sen asetuksia tai vaihda selainta.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} demo ilmoitus`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Jos pidät tämän sivun auki, näet vastaavan ilmoituksen kun joku puhuu sinulle.", SEND_BUTTON_TEXT: "Lähetä", ENTRYBOX_TEXT_LIMIT: "Maksimissaan 10000 merkkiä.", ENTRYBOX_PLACEHOLDER: "Sano jotain...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Tämä keskustelu ei ole enää aktiivinen.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Voit lukea, mutta et lähettää viestejä.", MESSAGELIST_LOADING_OLDER: "Ladataan vanhoja viestejä..", MESSAGELIST_SHOW_OLDER: "Näytä vanhat viestit", MESSAGELIST_NEW_MARKER: "Uusi", MESSAGE_SENT_VIA_EMAIL: "Tämä viesti on lähetetty sähköpostin välityksellä", YOU_MARKER: "sinä", UPLOAD_IN_PROGRESS: "Ladataan...", UPLOAD_SEND_FILE: "Lähetä tiedosto", UPLOAD_SHARE_LOCATION: "Jaa sijainti", UPLOAD_ERROR: "Valitettavasti jokin meni vikaan. Tiedostotyyppiä ei ehkä tueta tai se saattaa olla liian suuri.", SHARE_LOCATION_ERROR: "Sijaintia ei pystytty jakamaan: ", LOADING: "Ladataan...", HUB_EMPTY: "Keskusteluhistoriasi näkyy tässä", HUB_SHOW_EARLIER: "Näytä aiemmat keskustelut", INBOX_NO_CHATS_TITLE: "Ei keskusteluja, vielä!", INBOX_NO_CHATS_BODY: "Kun olet käynyt yhden tai useamman keskustelun, ne näkyvät täällä.", ENABLE_TRANSLATION: "Käännä keskustelu kielelle suomi", DISABLE_TRANSLATION: "Näytä alkuperäinen", SEARCH_PLACEHOLDER_TEXT: "Etsi...", SEARCH_SEARCHING: "Etsiminen...", SEARCH_NO_RESULTS: "Tuloksia ei löytynyt", SEARCH_NO_MORE_RESULTS: "Ei enempää tuloksia", CHAT_NOT_FOUND: "Keskustelua ei löytynyt", DELETE_MESSAGE: "Poista viesti", DELETION_EXPLANATION: "Jos poistat tämän viestin, se häviää kaikilta.", EDIT_MESSAGE: "Muokkaa viestiä", SAVE: "Tallenna", EDITED_INDICATOR: "muokattu", REPLY_TO_MESSAGE: "Vastaa", ADD_REACTION: "Lisää reaktio", AUTH_EXPIRED_OVERLAY_TITLE: "Istuntosi on vanhentunut", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Päivitä sivu jatkaaksesi", VOICE_MESSAGE: "Ääniviesti", CONTACT_INFORMATION_HIDDEN: "Piilotetut tiedot", LEAVE_CONVERSATION: "Poistu keskustelusta", MARK_CONVERSATION_AS_UNREAD: "Merkitse lukemattomaksi", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, us = { code: "fr-FR", name: "French", translation: { YESTERDAY: "Hier", TODAY: "Aujourd'hui", DAYS: "j", HOURS: "h", MINUTES: "m", JUST_NOW: "maintenant", LOCATION: "Emplacement", CANCEL: "Annuler", INBOX: "Boîte de réception", DESKTOP_NOTIFICATIONS: "Notifications du navigateur", DESKTOP_NOTIFICATIONS_ERROR: "Impossible d'activer les notifications du navigateur car votre navigateur les bloque. Essayez de changer ses paramètres ou de changer de navigateur.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `Notification de démonstration ${e}`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Si vous maintenez l'onglet ouvert dans votre navigateur vous verrez apparaître une alerte lorsque quelqu'un vous parlera.", SEND_BUTTON_TEXT: "Envoyer", ENTRYBOX_TEXT_LIMIT: "Seuls 10.000 caractères sont autorisés.", ENTRYBOX_PLACEHOLDER: "Ecrivez quelque chose...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Cette conversation n'est plus active.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Vous pouvez lire, mais pas envoyer de messages.", MESSAGELIST_LOADING_OLDER: "Chargement des anciens messages ...", MESSAGELIST_SHOW_OLDER: "Afficher les anciens messages", MESSAGELIST_NEW_MARKER: "Nouveau", MESSAGE_SENT_VIA_EMAIL: "Ce message a été envoyé par e-mail", YOU_MARKER: "vous", UPLOAD_IN_PROGRESS: "Envoi en cours...", UPLOAD_SEND_FILE: "Envoyer un fichier", UPLOAD_SHARE_LOCATION: "Partager mon emplacement", UPLOAD_ERROR: "Un problème est survenu lors de l'envoi: le fichier est peut-être non pris en charge ou trop volumineux.", SHARE_LOCATION_ERROR: "Impossible de partager votre emplacement: ", LOADING: "Chargement en cours...", HUB_EMPTY: "Votre historique de discussion apparaîtra ici", HUB_SHOW_EARLIER: "Afficher les conversations précédentes", INBOX_NO_CHATS_TITLE: "Aucune conversation pour l'instant!", INBOX_NO_CHATS_BODY: "Une fois que vous aurez eu une ou plusieurs conversations, elles apparaîtront ici.", ENABLE_TRANSLATION: "Traduire cette conversation en français", DISABLE_TRANSLATION: "Remontrer la conversation originale", SEARCH_PLACEHOLDER_TEXT: "Rechercher...", SEARCH_SEARCHING: "Recherche...", SEARCH_NO_RESULTS: "Aucun résultat trouvé", SEARCH_NO_MORE_RESULTS: "Il n’y a plus de résultats", CHAT_NOT_FOUND: "Conversation introuvable", DELETE_MESSAGE: "Supprimer le message", DELETION_EXPLANATION: "Si vous supprimez ce message, il disparaîtra pour tout le monde.", EDIT_MESSAGE: "Modifier le message", SAVE: "Enregistrer", EDITED_INDICATOR: "modifié", REPLY_TO_MESSAGE: "Répondre", ADD_REACTION: "Ajouter une réaction", AUTH_EXPIRED_OVERLAY_TITLE: "Votre session de chat a expiré", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Actualisez la page pour continuer", VOICE_MESSAGE: "Message vocal", CONTACT_INFORMATION_HIDDEN: "Informations masquées", LEAVE_CONVERSATION: "Quitter la conversation", MARK_CONVERSATION_AS_UNREAD: "Marquer comme non lu", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, ls = { code: "he-IL", name: "Hebrew", translation: { YESTERDAY: "אתמול", TODAY: "היום", DAYS: "d", HOURS: "h", MINUTES: "m", JUST_NOW: "עכשיו", LOCATION: "מיקום", CANCEL: "בטל", INBOX: "דואר נכנס", DESKTOP_NOTIFICATIONS: "התראות דפדפן", DESKTOP_NOTIFICATIONS_ERROR: "לא ניתן להפעיל התראות במרועה דפדפן מכיוון שהדפדפן שלך חוסם אותן באופן פעיל. נסה להסתכל בהגדרות או להשתמש בדפדפן אחר.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} הודעה על הדגמה`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "אם אתה שומר על כרטיסיית הדפדפן שלך פתוחה, תראה את זה צץ כשמישהו ידבר איתך.", SEND_BUTTON_TEXT: "שלח", ENTRYBOX_TEXT_LIMIT: "רק 10.000 תווים", ENTRYBOX_PLACEHOLDER: "תגיד משהו...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "שיחה זו אינה פעילה עוד.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "אתה יכול לקרוא, אך לא לשלוח הודעות.", MESSAGELIST_LOADING_OLDER: "טוען הודעות ישנות...", MESSAGELIST_SHOW_OLDER: "הצג הודעות ישנות", MESSAGELIST_NEW_MARKER: "חדש", MESSAGE_SENT_VIA_EMAIL: "הודעה זאת נשלחה דרך אימייל", YOU_MARKER: "אתה", UPLOAD_IN_PROGRESS: "מעלה ...", UPLOAD_SEND_FILE: "שלח קובץ", UPLOAD_SHARE_LOCATION: "שתף מיקום", UPLOAD_ERROR: "לרוע המזל משהו השתבש בהעלאה. ייתכן שהקובץ אינו נתמך או גדול מדי.", SHARE_LOCATION_ERROR: "לא ניתן לשתף מיקום: ", LOADING: "טוען...", HUB_EMPTY: "היסטוריית הצ'אט שלך תופיע כאן", HUB_SHOW_EARLIER: "הצג צ'אטים קודמים", INBOX_NO_CHATS_TITLE: "אין עדיין צ'אטים!", INBOX_NO_CHATS_BODY: "לאחר שניהלת שיחה אחת או יותר, הם יופיעו כאן.", ENABLE_TRANSLATION: "תרגם שיחה זו לעברית", DISABLE_TRANSLATION: "הצג מקור", SEARCH_PLACEHOLDER_TEXT: "...חפש", SEARCH_SEARCHING: "...מחפש", SEARCH_NO_RESULTS: "לא נמצאו תוצאות", SEARCH_NO_MORE_RESULTS: "אין תוצאות נוספות", CHAT_NOT_FOUND: "הצ'אט לא נמצא", DELETE_MESSAGE: "מחיקת הודעה", DELETION_EXPLANATION: "אם תמחק הודעה זו, היא תיעלם עבור כולם.", EDIT_MESSAGE: "עריכת הודעה", SAVE: "שמור", EDITED_INDICATOR: "ערוך", REPLY_TO_MESSAGE: "השב", ADD_REACTION: "הוספת תגובה", AUTH_EXPIRED_OVERLAY_TITLE: "הפעלת הצ׳אט שלכם פגה", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "רעננו את העמוד כדי להמשיך", VOICE_MESSAGE: "הודעה קולית", CONTACT_INFORMATION_HIDDEN: "מידע מוסתר", LEAVE_CONVERSATION: "צא מהשיחה", MARK_CONVERSATION_AS_UNREAD: "סמן כלא נקרא", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, cs = { code: "hi-IN", name: "Hindi (IN)", translation: { YESTERDAY: "कल", TODAY: "आज", DAYS: "d", HOURS: "h", MINUTES: "m", JUST_NOW: "अभी", LOCATION: "जगह", CANCEL: "रद्द करें", INBOX: "इनबॉक्स", DESKTOP_NOTIFICATIONS: "ब्राउज़र सूचनाएं", DESKTOP_NOTIFICATIONS_ERROR: "ब्राउज़र सूचनाएं सक्षम नहीं कर सकता क्योंकि आपका ब्राउज़र सक्रिय रूप से उन्हें ब्लॉक करता है। सेटिंग्स में देखने या एक अलग ब्राउज़र का उपयोग करने का प्रयास करें।", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} डेमो अधिसूचना`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "यदि आप अपना ब्राउज़र टैब खुला रखते हैं, तो यह पॉप अप आपको तब दिखाई देगा जब कोई आपसे बात करेगा।", SEND_BUTTON_TEXT: "भेजें", ENTRYBOX_TEXT_LIMIT: "केवल 10,000 वर्णों की अनुमति है।", ENTRYBOX_PLACEHOLDER: "कुछ कहिए...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "यह चैट अब सक्रिय नहीं है।", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "आप पढ़ सकते हैं, लेकिन संदेश नहीं भेज सकते।", MESSAGELIST_LOADING_OLDER: "पुराने संदेश लोड हो रहे हैं ...", MESSAGELIST_SHOW_OLDER: "पुराने संदेश दिखाएं", MESSAGELIST_NEW_MARKER: "नया", MESSAGE_SENT_VIA_EMAIL: "यह संदेश ईमेल के माध्यम से भेजा गया था", YOU_MARKER: "आप", UPLOAD_IN_PROGRESS: "अपलोड हो रहा है...", UPLOAD_SEND_FILE: "फाइल भेजें", UPLOAD_SHARE_LOCATION: "जगह शेयर करें", UPLOAD_ERROR: "दुर्भाग्य से, अपलोड करते समय कुछ गलत हो गया। फ़ाइल असमर्थित या बहुत बड़ी हो सकती है।", SHARE_LOCATION_ERROR: "जगह शेयर नहीं हो पाया: ", LOADING: "लोड हो रहा है...", HUB_EMPTY: "आपका चैट इतिहास यहां दिखाई देगा", HUB_SHOW_EARLIER: "पहले की चैट दिखाओ", INBOX_NO_CHATS_TITLE: "अभी तक कोई चैट नहीं!", INBOX_NO_CHATS_BODY: "एक बार जब आप एक या अधिक चैट कर लेते हैं, तो वे यहां दिखाई देंगे।", ENABLE_TRANSLATION: "इस बातचीत का हिंदी में अनुवाद कीजिए", DISABLE_TRANSLATION: "मूल दिखाएँ", SEARCH_PLACEHOLDER_TEXT: "खोजें...", SEARCH_SEARCHING: "खोज जारी है...", SEARCH_NO_RESULTS: "कोई परिणाम नहीं मिला", SEARCH_NO_MORE_RESULTS: "और कोई परिणाम नहीं", CHAT_NOT_FOUND: "चैट नहीं मिली", DELETE_MESSAGE: "संदेश डिलीट करें", DELETION_EXPLANATION: "यदि आप इस संदेश को हटाते हैं, तो यह सभी के लिए गायब हो जाएगा.", EDIT_MESSAGE: "संदेश में बदलाव करें", SAVE: "सहेजें", EDITED_INDICATOR: "संपादित किया गया", REPLY_TO_MESSAGE: "जवाब दीजिए ।", ADD_REACTION: "प्रतिक्रिया जोड़ें", AUTH_EXPIRED_OVERLAY_TITLE: "आपका चैट सेशन समाप्त हो चुका है", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "आगे बढ़ने के लिए रिफ्रेश करें", VOICE_MESSAGE: "वॉयस मैसेज", CONTACT_INFORMATION_HIDDEN: "छुपी हुई जानकारी", LEAVE_CONVERSATION: "बातचीत को ख़त्म करें", MARK_CONVERSATION_AS_UNREAD: "अपठित के रूप में चिह्नित करें", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Ds = { code: "hr-HR", name: "Croatian", translation: { YESTERDAY: "Jučer", TODAY: "Danas", DAYS: "d", HOURS: "s", MINUTES: "m", JUST_NOW: "Upravo sad", LOCATION: "Lokacija", CANCEL: "Otkaži", INBOX: "Pretinac", DESKTOP_NOTIFICATIONS: "Obavijesti preglednika", DESKTOP_NOTIFICATIONS_ERROR: "Notifikacije preglednika nisu omogućene jer ih vaš preglednik aktivno blokira. Pokušajte pogledati postavke ili koristiti neki drugi preglednik.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} demo notifikacija`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Ako karticu preglednika ostavite otvorenu, pojavit će se ovaj pop-up kada netko razgovara s vama.", SEND_BUTTON_TEXT: "Pošalji", ENTRYBOX_TEXT_LIMIT: "Dozvoljeno je samo 10.000 znakova.", ENTRYBOX_PLACEHOLDER: "Reci nešto...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Ovaj razgovor više nije aktivan.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Možeš čitati, ali ne i slati poruke.", MESSAGELIST_LOADING_OLDER: "Učitavam starije poruke...", MESSAGELIST_SHOW_OLDER: "Prikaži starije poruke", MESSAGELIST_NEW_MARKER: "Novo", MESSAGE_SENT_VIA_EMAIL: "Ova poruka je poslana e-poštom", YOU_MARKER: "ti", UPLOAD_IN_PROGRESS: "Učitavam...", UPLOAD_SEND_FILE: "Pošalji datoteku", UPLOAD_SHARE_LOCATION: "Podijeli lokaciju", UPLOAD_ERROR: "Nažalost, nešto je pošlo krivo. Datoteka možda nije podržana ili je prevelika.", SHARE_LOCATION_ERROR: "Nije moguće podijeliti lokaciju: ", LOADING: "Učitavam...", HUB_EMPTY: "Ovdje će se prikazati vaša povijest razgovora", HUB_SHOW_EARLIER: "Prikaži ranije razgovore", INBOX_NO_CHATS_TITLE: "Nema razgovora!", INBOX_NO_CHATS_BODY: "Nakon što vodite jedan ili više razgovora, oni će se pojaviti ovdje.", ENABLE_TRANSLATION: "Prevedi ovaj razgovor na hrvatski jezik", DISABLE_TRANSLATION: "Prikaži original", SEARCH_PLACEHOLDER_TEXT: "Pretraži...", SEARCH_SEARCHING: "Pretraživanje...", SEARCH_NO_RESULTS: "Nema rezultata", SEARCH_NO_MORE_RESULTS: "Nema više rezultata", CHAT_NOT_FOUND: "Razgovor nije pronađen", DELETE_MESSAGE: "Obriši poruku", DELETION_EXPLANATION: "Ako izbrišete ovu poruku, nestat će za sve.", EDIT_MESSAGE: "Uredi poruku", SAVE: "Spremi", EDITED_INDICATOR: "uređivao", REPLY_TO_MESSAGE: "Odgovorite", ADD_REACTION: "Dodajte reakciju", AUTH_EXPIRED_OVERLAY_TITLE: "Vaša sesija razgovora je istekla", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Osvježite stranicu za nastavak", VOICE_MESSAGE: "Glasovna poruka", CONTACT_INFORMATION_HIDDEN: "Skrivene informacije", LEAVE_CONVERSATION: "Napustiti razgovor", MARK_CONVERSATION_AS_UNREAD: "Označi kao nepročitano", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, _s = { code: "hu-HU", name: "Hungarian", translation: { YESTERDAY: "Tegnap", TODAY: "Ma", DAYS: "n", HOURS: "ó", MINUTES: "p", JUST_NOW: "éppen most", LOCATION: "Helyszín", CANCEL: "Visszavonás", INBOX: "Postaláda", DESKTOP_NOTIFICATIONS: "Böngésző értesítések", DESKTOP_NOTIFICATIONS_ERROR: "Azért nem tudja bekapcsolni a böngésző értesítések funkciót, mert böngészője aktívan blokkolja azt. Tekintse meg a beállításokat vagy használjon másik böngészőt.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} demo értesítés`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Ha nyitva hagyja böngészőjét, felugró ablak fog megjelenni, ha valaki beszélni szeretne Önnel.", SEND_BUTTON_TEXT: "Küldés", ENTRYBOX_TEXT_LIMIT: "Mindőssze 10.000 karakter megengedett.", ENTRYBOX_PLACEHOLDER: "Mondjon valamit...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Ez a beszélgetés már nem aktív.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Elolvashatja az üzeneteket, de nem küldhet újat.", MESSAGELIST_LOADING_OLDER: "Korábbi üzenetek betöltése...", MESSAGELIST_SHOW_OLDER: "Korábbi üzenetek megjelenítése", MESSAGELIST_NEW_MARKER: "Új", MESSAGE_SENT_VIA_EMAIL: "Ez az üzenet e-mailben került elküldésre", YOU_MARKER: "Ön", UPLOAD_IN_PROGRESS: "Feltöltés...", UPLOAD_SEND_FILE: "Fájl küldése", UPLOAD_SHARE_LOCATION: "Helyszín megosztása", UPLOAD_ERROR: "Sajnos hiba történt a feltöltés során. A fájl nem támogatott vagy túl nagy.", SHARE_LOCATION_ERROR: "Helyszín megosztása nem lehetséges: ", LOADING: "Betöltés...", HUB_EMPTY: "A beszélgetések előzményei itt láthatók", HUB_SHOW_EARLIER: "Korábbi beszélgetések megjelenítése", INBOX_NO_CHATS_TITLE: "Még nincs megjeleníthető beszélgetés!", INBOX_NO_CHATS_BODY: "Amint egy vagy több beszélgetéssel rendelkezik, azok itt fognak megjelenni.", ENABLE_TRANSLATION: "A beszélgetés lefordítása erre a nyelvre: magyar", DISABLE_TRANSLATION: "Eredeti megjelenítése", SEARCH_PLACEHOLDER_TEXT: "Keresés...", SEARCH_SEARCHING: "Keresés...", SEARCH_NO_RESULTS: "Nincs találat", SEARCH_NO_MORE_RESULTS: "Nincs több találat", CHAT_NOT_FOUND: "A csevegés nem található", DELETE_MESSAGE: "Üzenet törlése", DELETION_EXPLANATION: "Ha törlöd ezt az üzenetet, az mindenki számára eltűnik.", EDIT_MESSAGE: "Üzenet szerkesztése", SAVE: "Mentés", EDITED_INDICATOR: "szerkesztve", REPLY_TO_MESSAGE: "Válaszadás", ADD_REACTION: "Reagálás erre", AUTH_EXPIRED_OVERLAY_TITLE: "Chat munkamenete lejárt", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Folytatáshoz frissítse az oldalt", VOICE_MESSAGE: "Hangüzenet", CONTACT_INFORMATION_HIDDEN: "Rejtett információ", LEAVE_CONVERSATION: "Kilépés a beszélgetésből", MARK_CONVERSATION_AS_UNREAD: "Megjelölés olvasatlanként", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, As = { code: "id-ID", name: "Bahasa Indonesia", translation: { YESTERDAY: "Kemarin", TODAY: "Hari ini", DAYS: "h", HOURS: "j", MINUTES: "m", JUST_NOW: "sekarang", LOCATION: "Lokasi", CANCEL: "Batal", INBOX: "Kotak Masuk", DESKTOP_NOTIFICATIONS: "Notifikasi peramban", DESKTOP_NOTIFICATIONS_ERROR: "Tidak dapat mengaktifkan pemberitahuan browser karena browser Anda secara aktif memblokir mereka. Coba cari di pengaturan atau menggunakan browser yang berbeda.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `pemberitahuan demo ${e}`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Jika Anda membiarkan tab browser tetap terbuka, Anda akan melihat ini muncul ketika seseorang berbicara kepada Anda.", SEND_BUTTON_TEXT: "Kirim", ENTRYBOX_TEXT_LIMIT: "Hanya 10.000 karakter yang diizinkan.", ENTRYBOX_PLACEHOLDER: "Katakan sesuatu...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Percakapan ini tidak lagi aktif.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Anda dapat membaca, tetapi tidak mengirim pesan.", MESSAGELIST_LOADING_OLDER: "Memuat pesan lama...", MESSAGELIST_SHOW_OLDER: "Tampilkan pesan yang lebih lama", MESSAGELIST_NEW_MARKER: "Baru", MESSAGE_SENT_VIA_EMAIL: "Pesan ini dikirim melalui email", YOU_MARKER: "Anda", UPLOAD_IN_PROGRESS: "Mengunggah...", UPLOAD_SEND_FILE: "Kirim mengajukan", UPLOAD_SHARE_LOCATION: "Bagikan lokasi", UPLOAD_ERROR: "Ada yang salah diunggah. File mungkin tidak didukung atau terlalu besar.", SHARE_LOCATION_ERROR: "Tidak dapat membagikan lokasi: ", LOADING: "Memuat...", HUB_EMPTY: "Riwayat obrolan Anda akan muncul di sini", HUB_SHOW_EARLIER: "Tampilkan obrolan sebelumnya", INBOX_NO_CHATS_TITLE: "Belum ada obrolan!", INBOX_NO_CHATS_BODY: "Setelah Anda melakukan satu atau lebih percakapan, mereka akan muncul di sini.", ENABLE_TRANSLATION: "Terjemahkan percakapan ini ke Indonesia", DISABLE_TRANSLATION: "Perlihatkan asli", SEARCH_PLACEHOLDER_TEXT: "Cari...", SEARCH_SEARCHING: "Mencari...", SEARCH_NO_RESULTS: "Tidak ditemukan hasil", SEARCH_NO_MORE_RESULTS: "Tidak ada hasil lainnya", CHAT_NOT_FOUND: "Obrolan tidak ditemukan", DELETE_MESSAGE: "Hapus pesan", DELETION_EXPLANATION: "Jika pesan ini Anda hapus, pesan ini akan tidak terlihat bagi siapa pun.", EDIT_MESSAGE: "Sunting pesan", SAVE: "Mentés", EDITED_INDICATOR: "diedit", REPLY_TO_MESSAGE: "Balas", ADD_REACTION: "Tambah reaksi", AUTH_EXPIRED_OVERLAY_TITLE: "Sesi obrolan Anda sudah lewat batas waktu", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Muat ulang halaman untuk melanjutkan", VOICE_MESSAGE: "Pesan suara", CONTACT_INFORMATION_HIDDEN: "Informasi tersembunyi", LEAVE_CONVERSATION: "Tinggalkan percakapan", MARK_CONVERSATION_AS_UNREAD: "Tandai sebagai Belum dibaca", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Os = { code: "is-IS", name: "Íslenska", translation: { YESTERDAY: "Í gær", TODAY: "Í dag", DAYS: "dagar", HOURS: "klst.", MINUTES: "mín.", JUST_NOW: "núna", LOCATION: "Staðsetning", CANCEL: "Hætta við", INBOX: "Pósthólf", DESKTOP_NOTIFICATIONS: "Tilkynningar í vafra", DESKTOP_NOTIFICATIONS_ERROR: "Ekki er hægt að birta tilkynningar í vafra vegna þess að vafrinn sem þú notar hindrar það. Reyndu að leita að stillingum eða að nota annan vafra.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} prufutilkynning`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Ef flipinn í vafranum er opinn muntu sjá þessa tilkynningu birtast þegar einhver sendir þér skilaboð.", SEND_BUTTON_TEXT: "Senda", ENTRYBOX_TEXT_LIMIT: "Aðeins 10.000 stafir komast fyrir.", ENTRYBOX_PLACEHOLDER: "Segðu eitthvað...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Þessar samræður eru ekki lengar virkar.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Þú getur lesið, en ekki sent skilaboð.", MESSAGELIST_LOADING_OLDER: "Sæki eldri skilaboð...", MESSAGELIST_SHOW_OLDER: "Sýna eldri skilaboð", MESSAGELIST_NEW_MARKER: "Ný", MESSAGE_SENT_VIA_EMAIL: "Þessi skilaboð voru send með tölvupósti", YOU_MARKER: "þú", UPLOAD_IN_PROGRESS: "Hleð upp...", UPLOAD_SEND_FILE: "Senda skrá", UPLOAD_SHARE_LOCATION: "Deila staðsetningu", UPLOAD_ERROR: "Því miður fór eitthvað úrskeiðis við að hlaða upp. Skráin gæti verið af rangri tegund eð of stór.", SHARE_LOCATION_ERROR: "Ekki er hægt að deila staðsetningu: ", LOADING: "Hleð...", HUB_EMPTY: "Fyrri samtöl munu birtast hér", HUB_SHOW_EARLIER: "Sýna fyrri samtöl", INBOX_NO_CHATS_TITLE: "Engin samtöl enn!", INBOX_NO_CHATS_BODY: "Þegar þú hefur átt eitt eða fleiri samtöl, munu þau birtast hér.", ENABLE_TRANSLATION: "Þýða þetta samtal á ensku", DISABLE_TRANSLATION: "Sýna upprunalegt", SEARCH_PLACEHOLDER_TEXT: "Leita...", SEARCH_SEARCHING: "Leita...", SEARCH_NO_RESULTS: "Ekkert fannst", SEARCH_NO_MORE_RESULTS: "Engar fleiri niðurstöður", CHAT_NOT_FOUND: "Samtal fannst ekki", DELETE_MESSAGE: "Eyða skilaboðum", DELETION_EXPLANATION: "Ef þú eyðir þessum skilaboðum munu þau hverfa hjá öllum.", EDIT_MESSAGE: "Breyta skilaboðum", SAVE: "Vista", EDITED_INDICATOR: "breytt", REPLY_TO_MESSAGE: "Svara", REPLY_TO_ARIA_LABEL: (e, t) => `Svara ${e}: ${t}`, REPLY_MODE_LEAVE_ARIA_LABEL: "Fara úr svari", ADD_REACTION: "Setja inn viðbrögð", AUTH_EXPIRED_OVERLAY_TITLE: "Spjallið hefur runnið út", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Endurnýjaðu síðuna til að halda áfram", VOICE_MESSAGE: "Raddskilaboð", LEAVE_CONVERSATION: "Skilja eftir skilaboð", MARK_CONVERSATION_AS_UNREAD: "Merkja sem ólesið", STATUS_INDICATOR_ONLINE: "Virk", STATUS_INDICATOR_OFFLINE: "Ekki við", CONTACT_INFORMATION_HIDDEN: "faldar upplýsingar" } }, Ts = { code: "it-IT", name: "Italian", translation: { YESTERDAY: "Ieri", TODAY: "Oggi", DAYS: "g", HOURS: "o", MINUTES: "m", JUST_NOW: "adesso", LOCATION: "Posizione", CANCEL: "Annulla", INBOX: "Posta in arrivo", DESKTOP_NOTIFICATIONS: "Notifiche browser", DESKTOP_NOTIFICATIONS_ERROR: "Impossibile abilitare le notifiche browser perché il browser le blocca attivamente. Prova a cercare le impostazioni o utilizzare un browser diverso.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} demo notification`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Se si mantiene aperta la scheda del browser, questo verrà visualizzato quando qualcuno ti parla.", SEND_BUTTON_TEXT: "Invia", ENTRYBOX_TEXT_LIMIT: "Sono consentiti solo 10.000 caratteri.", ENTRYBOX_PLACEHOLDER: "Dì qualcosa...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Questa conversazione non è più attiva.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Puoi leggere, ma non inviare messaggi.", MESSAGELIST_LOADING_OLDER: "Caricamento dei messaggi precedenti...", MESSAGELIST_SHOW_OLDER: "Mostra messaggi precedenti", MESSAGELIST_NEW_MARKER: "Nuovo", MESSAGE_SENT_VIA_EMAIL: "Questo messaggio è stato inviato via email", YOU_MARKER: "tu", UPLOAD_IN_PROGRESS: "Caricamento in corso...", UPLOAD_SEND_FILE: "Invia file", UPLOAD_SHARE_LOCATION: "Condividi posizione", UPLOAD_ERROR: "Qualcosa è andato storto durante il caricamento. Il file potrebbe non essere supportato o troppo grande.", SHARE_LOCATION_ERROR: "Impossibile condividere la posizione: ", LOADING: "Caricamento in corso...", HUB_EMPTY: "La cronologia della tua chat verrà mostrata qui", HUB_SHOW_EARLIER: "Mostra chat precedenti", INBOX_NO_CHATS_TITLE: "Non ci sono ancora chat!", INBOX_NO_CHATS_BODY: "Una volta che hai avuto una o più conversazioni, verranno visualizzate qui.", ENABLE_TRANSLATION: "Traduci questa conversazione in italiano", DISABLE_TRANSLATION: "Mostra l'originale", SEARCH_PLACEHOLDER_TEXT: "Cerca...", SEARCH_SEARCHING: "Cercando...", SEARCH_NO_RESULTS: "Nessun risultato trovato", SEARCH_NO_MORE_RESULTS: "Non ci sono più risultati", CHAT_NOT_FOUND: "Chat non trovata", DELETE_MESSAGE: "Elimina messaggio", DELETION_EXPLANATION: "Se elimini il messaggio, questo scomparirà per tutti.", EDIT_MESSAGE: "Modifica messaggio", SAVE: "Salva", EDITED_INDICATOR: "modificato", REPLY_TO_MESSAGE: "Rispondi", ADD_REACTION: "Aggiungi reazione", AUTH_EXPIRED_OVERLAY_TITLE: "La sessione di chat è scaduta", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Aggiorna la pagina per continuare", VOICE_MESSAGE: "Messaggio vocale", CONTACT_INFORMATION_HIDDEN: "Informazioni nascoste", LEAVE_CONVERSATION: "Abbandona la conversazione", MARK_CONVERSATION_AS_UNREAD: "Segna come non letto", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, ds = { code: "ja-JP", name: "Japanese", translation: { YESTERDAY: "昨日", TODAY: "今日", DAYS: "日前", HOURS: "時間前", MINUTES: "分前", JUST_NOW: "たった今", LOCATION: "場所", CANCEL: "キャンセル", INBOX: "受信箱", DESKTOP_NOTIFICATIONS: "ブラウザの通知", DESKTOP_NOTIFICATIONS_ERROR: "ブラウザの通知はブロックされているため、ブラウザの通知を有効にできません。設定を確認するか、別のブラウザを使用してください。", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} デモ通知`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "ブラウザのタブを開いたままにしておくと、誰かがあなたに話しかけたときにこのポップアップが表示されます。", SEND_BUTTON_TEXT: "送信", ENTRYBOX_TEXT_LIMIT: "許可されているのは10.000文字までです。", ENTRYBOX_PLACEHOLDER: "メッセージを入力してください", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "この会話はもうアクティブではありません。", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "あなたは読むことはできますが、メッセージを送ることはできません。", MESSAGELIST_LOADING_OLDER: "古いメッセージを読み込んでいます...", MESSAGELIST_SHOW_OLDER: "古いメッセージを表示", MESSAGELIST_NEW_MARKER: "新着", MESSAGE_SENT_VIA_EMAIL: "このメッセージはメールで送信されました", YOU_MARKER: "あなたは", UPLOAD_IN_PROGRESS: "アップロード中...", UPLOAD_SEND_FILE: "ファイル送信", UPLOAD_SHARE_LOCATION: "共有場所", UPLOAD_ERROR: "アップロード中に問題が発生しました。ファイルがサポートされていないか、大きすぎる可能性があります。", SHARE_LOCATION_ERROR: "場所を共有できません: ", LOADING: "読み込み中...", HUB_EMPTY: "あなたのチャット履歴がここに表示されます", HUB_SHOW_EARLIER: "以前のチャットを表示", INBOX_NO_CHATS_TITLE: "まだチャットがありません!", INBOX_NO_CHATS_BODY: "会話が1つ以上あると、ここに表示されます", ENABLE_TRANSLATION: "この会話を日本語に翻訳する", DISABLE_TRANSLATION: "オリジナルを表示", SEARCH_PLACEHOLDER_TEXT: "検索...", SEARCH_SEARCHING: "検索中...", SEARCH_NO_RESULTS: "結果が見つかりません", SEARCH_NO_MORE_RESULTS: "これ以上結果はありません", CHAT_NOT_FOUND: "チャットが見つかりませんでした", DELETE_MESSAGE: "メッセージを削除する", DELETION_EXPLANATION: "このメッセージを削除すると、全ての人に表示されなくなります。", EDIT_MESSAGE: "メッセージを編集する", SAVE: "上書き保存", EDITED_INDICATOR: "編集", REPLY_TO_MESSAGE: "返信する", ADD_REACTION: "リアクションを追加", AUTH_EXPIRED_OVERLAY_TITLE: "チャットセッションの有効期限が切れました", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "続けるにはページを更新してください", VOICE_MESSAGE: "ボイスメッセージ", CONTACT_INFORMATION_HIDDEN: "機密情報", LEAVE_CONVERSATION: "会話をやめる", MARK_CONVERSATION_AS_UNREAD: "未読としてマーク", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Ss = { code: "ka-GE", name: "Georgian", translation: { YESTERDAY: "გუშინ", TODAY: "დღეს", DAYS: "დღ", HOURS: "სთ", MINUTES: "წთ", JUST_NOW: "ახლა", LOCATION: "ადგილმდებარეობა", CANCEL: "გაუქმება", INBOX: "მიღებული შეტყობინება", DESKTOP_NOTIFICATIONS: "ბრაუზერის შეტყობინებები", DESKTOP_NOTIFICATIONS_ERROR: "შეუძლებელია ბრაუზერის შეტკობინებების ჩართვა. ეს ბრაუზერი ბლოკავს მათ. სცადე ცვლილება ოპციებიდან ან გამოიყენე სხვა ბრაუზერი.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} შეტყობინებების დემო ვერსია`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "თუ დატოვებ ბრაუზერის ფანჯარას გახსნილს, როცა ვიღაც მოგწერს საუბარი ამოვარდება დესკტოპზე.", SEND_BUTTON_TEXT: "გაგზავნა", ENTRYBOX_TEXT_LIMIT: "დაშვებულია მხოლოდ 10.000 სიმბოლო.", ENTRYBOX_PLACEHOLDER: "დაწერე რაღაც...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "ეს დიალოგი აღარ არის ხელმისაწვდომი.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "შეგიძლია წაიკითხო, მაგრამ ვერ გააგზავნი შეტყობინებას.", MESSAGELIST_LOADING_OLDER: "იტვირთება ძველი შეტყობინებები...", MESSAGELIST_SHOW_OLDER: "ძველი შეტყობინებების ჩვენება", MESSAGELIST_NEW_MARKER: "ახალი", MESSAGE_SENT_VIA_EMAIL: "ეს შეტყობინება გამოგზავნილია იმეილით", YOU_MARKER: "you", UPLOAD_IN_PROGRESS: "იტვირთება...", UPLOAD_SEND_FILE: "ფაილის გაგზავნა", UPLOAD_SHARE_LOCATION: "ადგილმდებარეობის გაზიარება", UPLOAD_ERROR: "პრობლემაა ატვირთვისას. ფაილის შესაძლოა არის არათავსებადი ან ძალიან დიდი.", SHARE_LOCATION_ERROR: "შეუძლებელია ადგილმდებარეობის გაზიარება: ", LOADING: "იტვირთება...", HUB_EMPTY: "საუბრების ისტორია გამოჩნდება აქ", HUB_SHOW_EARLIER: "წინა საუბრების ნახვა", INBOX_NO_CHATS_TITLE: "ჯერ-ჯერობით არ არის საუბრები!", INBOX_NO_CHATS_BODY: "უკვე დასრულებული საუბარები გამოჩნდება აქ", ENABLE_TRANSLATION: "თარგმნეთ ეს საუბარი ინგლისურად", DISABLE_TRANSLATION: "ორიგინალის ჩვენება", SEARCH_PLACEHOLDER_TEXT: "ძიება...", SEARCH_SEARCHING: "მიმდინარეობს ძიება...", SEARCH_NO_RESULTS: "შედეგები ვერ ქართველი", SEARCH_NO_MORE_RESULTS: "სხვა შედეგი ვერ მოიძებნა", CHAT_NOT_FOUND: "ჩატი ვერ მოიძებნა", DELETE_MESSAGE: "შეტყობინების წაშლა ", DELETION_EXPLANATION: "თუ ამ შეტყობინებას წაშლით, ის ყველასთვის გაქრება.", EDIT_MESSAGE: "შეტყობინების რედაქტირება", SAVE: "შენახვა", EDITED_INDICATOR: "რედაქტირებულია", REPLY_TO_MESSAGE: "პასუხის გაცემა", ADD_REACTION: "დაამატეთ რეაქცია", AUTH_EXPIRED_OVERLAY_TITLE: "თქვენი ჩეთის სესიის ვადა ამოიწურა", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "განაახლეთ გვერდი გასაგრძელებლად", VOICE_MESSAGE: "ხმოვანი შეტყობინება", CONTACT_INFORMATION_HIDDEN: "ფარული ინფორმაცია", LEAVE_CONVERSATION: "საუბრის დატოვება", MARK_CONVERSATION_AS_UNREAD: "წაუკითხავად მონიშვნა", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Is = { code: "ko-KR", name: "Korean (South Korea)", translation: { YESTERDAY: "어제", TODAY: "오늘", DAYS: "일 전", HOURS: "시간 전", MINUTES: "분 전", JUST_NOW: "방금", LOCATION: "위치", CANCEL: "취소", INBOX: "대화 목록", DESKTOP_NOTIFICATIONS: "브라우저 알림", DESKTOP_NOTIFICATIONS_ERROR: "브라우저 알림을 표시할 수 없습니다. 브라우저 설정을 확인하거나 다른 브라우저를 사용해주세요.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} 데모 알림`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "브라우저 탭을 열어 둔 상태에서 누군가 대화 할 때 이 팝업이 표시됩니다.", SEND_BUTTON_TEXT: "전송", ENTRYBOX_TEXT_LIMIT: "최대 10,000자까지 입력할 수 있습니다.", ENTRYBOX_PLACEHOLDER: "메세지를 입력하세요...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "채팅이 종료되었습니다.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "읽기만 가능하며 메시지를 보낼 수 없습니다.", MESSAGELIST_LOADING_OLDER: "이전 메시지 로드 중...", MESSAGELIST_SHOW_OLDER: "이전 메시지 표시", MESSAGELIST_NEW_MARKER: "새 메시지", MESSAGE_SENT_VIA_EMAIL: "이 메시지는 이메일을 통해 전송되었습니다.", YOU_MARKER: "나", UPLOAD_IN_PROGRESS: "업로드 중...", UPLOAD_SEND_FILE: "파일 전송", UPLOAD_SHARE_LOCATION: "위치 공유", UPLOAD_ERROR: "업로드가 실패했습니다. 파일이 지원되지 않거나 너무 클 수 있습니다.", SHARE_LOCATION_ERROR: "위치를 공유 할 수 없습니다: ", LOADING: "로드 중...", HUB_EMPTY: "채팅 기록이 여기에 표시됩니다", HUB_SHOW_EARLIER: "이전 채팅보기", INBOX_NO_CHATS_TITLE: "아직 채팅이 없습니다!", INBOX_NO_CHATS_BODY: "대화가 하나 이상 있으면 여기에 표시됩니다.", ENABLE_TRANSLATION: "이 대화를 한국어로 번역", DISABLE_TRANSLATION: "원본 표시", SEARCH_PLACEHOLDER_TEXT: "검색...", SEARCH_SEARCHING: "검색 중...", SEARCH_NO_RESULTS: "검색 결과 없음", SEARCH_NO_MORE_RESULTS: "추가 검색 결과 없음", CHAT_NOT_FOUND: "대화를 찾지 못했습니다", DELETE_MESSAGE: "메시지 삭제", DELETION_EXPLANATION: "이 메시지를 삭제하면 모든 사람이 볼 수 없게 됩니다.", EDIT_MESSAGE: "메시지 편집하기", SAVE: "저장", EDITED_INDICATOR: "편집", REPLY_TO_MESSAGE: "회신", ADD_REACTION: "반응 추가", AUTH_EXPIRED_OVERLAY_TITLE: "채팅 세션이 만료되었습니다", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "계속하려면 페이지를 새로고침하세요", VOICE_MESSAGE: "음성 메시지", CONTACT_INFORMATION_HIDDEN: "숨겨진 정보", LEAVE_CONVERSATION: "대화 떠나기", MARK_CONVERSATION_AS_UNREAD: "읽지 않은 상태로 표시", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Ns = { code: "nb-NO", name: "Norwegian (Bokmål)", translation: { YESTERDAY: "I går", TODAY: "I dag", DAYS: "d", HOURS: "h", MINUTES: "m", JUST_NOW: "Nå", LOCATION: "Plassering", CANCEL: "Avbryt", INBOX: "Innboks", DESKTOP_NOTIFICATIONS: "Nettleservarsler", DESKTOP_NOTIFICATIONS_ERROR: "Kan ikke aktivere Nettleservarsler fordi nettleseren din aktivt blokkerer dem. Prøv å se i innstillingene eller bruke en annen nettleser.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} demo varslinger`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Hvis du holder nettleservinduet åpent, vil du se dette varsel når noen snakker til deg.", SEND_BUTTON_TEXT: "Send", ENTRYBOX_TEXT_LIMIT: "Kun 10.000 tegn er tillatt.", ENTRYBOX_PLACEHOLDER: "Si noe...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Denne samtale er ikke lengre aktiv.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Du kan lese, men ikke sende meldinger.", MESSAGELIST_LOADING_OLDER: "Laster eldre meldinger...", MESSAGELIST_SHOW_OLDER: "Vis eldre meldinger", MESSAGELIST_NEW_MARKER: "Ny", MESSAGE_SENT_VIA_EMAIL: "Denne meldingen er sendt via e-post", YOU_MARKER: "deg", UPLOAD_IN_PROGRESS: "Laster opp...", UPLOAD_SEND_FILE: "Send fil", UPLOAD_SHARE_LOCATION: "Del din plassering", UPLOAD_ERROR: "Noe gikk galt i uplastingen. Det kan være filen ikke støttes eller for stor.", SHARE_LOCATION_ERROR: "Kan ikke dele plasseringen: ", LOADING: "Laster...", HUB_EMPTY: "Din chats historikk vil vises her", HUB_SHOW_EARLIER: "Vis tidligere chats", INBOX_NO_CHATS_TITLE: "Ingen chats enda!", INBOX_NO_CHATS_BODY: "Så snart du får en eller flere samtaler, vil de vises her.", ENABLE_TRANSLATION: "Oversett denne samtalen til norsk", DISABLE_TRANSLATION: "Vis original", SEARCH_PLACEHOLDER_TEXT: "Søk...", SEARCH_SEARCHING: "Søker...", SEARCH_NO_RESULTS: "Finner ingen resultater", SEARCH_NO_MORE_RESULTS: "Ingen flere resultater", CHAT_NOT_FOUND: "Chat ikke funnet", DELETE_MESSAGE: "Slett melding", DELETION_EXPLANATION: "Hvis du sletter denne meldingen, forsvinner den for alle.", EDIT_MESSAGE: "Rediger melding", SAVE: "Lagre", EDITED_INDICATOR: "redigert", REPLY_TO_MESSAGE: "Svar", ADD_REACTION: "Legg til reaksjon", AUTH_EXPIRED_OVERLAY_TITLE: "Chatøkten er utløpt", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Oppdater siden for å fortsette", VOICE_MESSAGE: "Lydmelding", CONTACT_INFORMATION_HIDDEN: "Skjult informasjon", LEAVE_CONVERSATION: "Forlat samtalen", MARK_CONVERSATION_AS_UNREAD: "Merk som ulest", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Rs = { code: "nl-NL", name: "Dutch", translation: { YESTERDAY: "Gisteren", TODAY: "Vandaag", DAYS: "d", HOURS: "u", MINUTES: "m", JUST_NOW: "zojuist", LOCATION: "Locatie", CANCEL: "Annuleren", INBOX: "Inbox", DESKTOP_NOTIFICATIONS: "Browsermeldingen", DESKTOP_NOTIFICATIONS_ERROR: "Browsermeldingen kunnen niet geactiveerd worden omdat de browser het blokkeert. Check de instellingen van je browser of probeer een andere browser.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} demo notificatie`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Als je je browser open houdt, zie je deze popup als iemand tegen je praat.", SEND_BUTTON_TEXT: "Verzenden", ENTRYBOX_TEXT_LIMIT: "Maximaal 10.000 tekens toegestaan.", ENTRYBOX_PLACEHOLDER: "Typ een bericht...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Dit gesprek is niet actief meer.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Je kunt geen berichten sturen.", MESSAGELIST_LOADING_OLDER: "Eerdere berichten laden...", MESSAGELIST_SHOW_OLDER: "Laad eerdere berichten", MESSAGELIST_NEW_MARKER: "Nieuw", MESSAGE_SENT_VIA_EMAIL: "Dit bericht is verstuurd via e-mail", YOU_MARKER: "jij", UPLOAD_IN_PROGRESS: "Uploaden...", UPLOAD_SEND_FILE: "Verzend bestand", UPLOAD_SHARE_LOCATION: "Deel locatie", UPLOAD_ERROR: "Er ging iets mis. Het bestand wordt niet ondersteund of is te groot.", SHARE_LOCATION_ERROR: "Locatie delen mislukt: ", LOADING: "Bezig met laden...", HUB_EMPTY: "Berichtengeschiedenis wordt hier weergegeven", HUB_SHOW_EARLIER: "Laat eerdere berichten zien", INBOX_NO_CHATS_TITLE: "Nog geen chats!", INBOX_NO_CHATS_BODY: "Zodra je een of meerdere conversaties hebt gehad, worden deze hier weergegeven.", ENABLE_TRANSLATION: "Vertaal dit gesprek naar het Nederlands", DISABLE_TRANSLATION: "Toon oorspronkelijk gesprek", SEARCH_PLACEHOLDER_TEXT: "Zoek...", SEARCH_SEARCHING: "Zoeken...", SEARCH_NO_RESULTS: "Geen resultaten gevonden", SEARCH_NO_MORE_RESULTS: "Niet meer resultaten", CHAT_NOT_FOUND: "Chat niet gevonden", DELETE_MESSAGE: "Bericht verwijderen", DELETION_EXPLANATION: "Als je dit bericht verwijdert, zal het voor iedereen verdwijnen.", EDIT_MESSAGE: "Bericht bewerken", SAVE: "Opslaan", EDITED_INDICATOR: "bewerkt", REPLY_TO_MESSAGE: "Beantwoorden", ADD_REACTION: "Reactie toevoegen", AUTH_EXPIRED_OVERLAY_TITLE: "Je chatsessie is verlopen", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Ververs de pagina om door te gaan", VOICE_MESSAGE: "Spraakbericht", CONTACT_INFORMATION_HIDDEN: "verborgen informatie", LEAVE_CONVERSATION: "Gesprek verlaten", MARK_CONVERSATION_AS_UNREAD: "Markeren als ongelezen", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Ls = { code: "pl-PL", name: "Polish", translation: { YESTERDAY: "Wczoraj", TODAY: "Dzisiaj", DAYS: "d", HOURS: "h", MINUTES: "m", JUST_NOW: "teraz", LOCATION: "Lokalizacja", CANCEL: "Anuluj", INBOX: "Skrzynka odbiorcza", DESKTOP_NOTIFICATIONS: "Powiadomienia", DESKTOP_NOTIFICATIONS_ERROR: "Nie można aktywować powiadomień, ponieważ twoja przeglądarka je blokuje. Proszę zmienić ustawienie lub spróbować innej przeglądarki.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} przykładowe powiadomienie`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Jeśli zostawisz tę kartę otwartą, zobaczysz takie powiadomienie, gdy ktoś napisze do Ciebie.", SEND_BUTTON_TEXT: "Wyślij", ENTRYBOX_TEXT_LIMIT: "Nie można wysyłać więcej niż 10000 znaków.", ENTRYBOX_PLACEHOLDER: "Napisz coś...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Ten czat nie jest aktywny.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Możesz czytać wiadomości, ale nie możesz ich wysyłać.", MESSAGELIST_LOADING_OLDER: "Wczytuję starsze wiadomości...", MESSAGELIST_SHOW_OLDER: "Zobacz starsze wiadomości", MESSAGELIST_NEW_MARKER: "Nowe", MESSAGE_SENT_VIA_EMAIL: "Ta wiadomość została wysłana przez email.", YOU_MARKER: "ty", UPLOAD_IN_PROGRESS: "Przesyłanie...", UPLOAD_SEND_FILE: "Prześlij plik", UPLOAD_SHARE_LOCATION: "Udostępnij lokalizację", UPLOAD_ERROR: "Coś poszło nie tak. Plik może być zbyt duży lub jest nieobsługiwany.", SHARE_LOCATION_ERROR: "Nie da się udostępnić lokalizacji: ", LOADING: "Ładowanie...", HUB_EMPTY: "Twoje czaty pojawią się tutaj", HUB_SHOW_EARLIER: "Zobacz starsze czaty", INBOX_NO_CHATS_TITLE: "Brak czatów!", INBOX_NO_CHATS_BODY: "Rozpoczęte konwersacje pojawią się tutaj.", ENABLE_TRANSLATION: "Przetłumacz tę konwersację na język polski", DISABLE_TRANSLATION: "Pokaż oryginał", SEARCH_PLACEHOLDER_TEXT: "Wyszukaj...", SEARCH_SEARCHING: "Wyszukiwanie...", SEARCH_NO_RESULTS: "Nie znaleziono wyników", SEARCH_NO_MORE_RESULTS: "Nie ma innych wyników", CHAT_NOT_FOUND: "Nie znaleziono konwersacji", DELETE_MESSAGE: "Usuń wiadomość", DELETION_EXPLANATION: "Jeśli usuniesz tę wiadomość, przestanie być widoczna dla wszystkich.", EDIT_MESSAGE: "Edytuj wiadomość", SAVE: "Zapisz", EDITED_INDICATOR: "edytowano", REPLY_TO_MESSAGE: "Odpowiedz", ADD_REACTION: "Dodaj reakcję", AUTH_EXPIRED_OVERLAY_TITLE: "Twoja sesja wygasła", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Odśwież stronę, aby kontynuować", VOICE_MESSAGE: "Wiadomość głosowa", CONTACT_INFORMATION_HIDDEN: "Ukryte informacje", LEAVE_CONVERSATION: "Opuść konwersację", MARK_CONVERSATION_AS_UNREAD: "Oznacz jako nieprzeczytane", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, ms = { code: "pt-BR", name: "Portuguese (Brazil)", translation: { YESTERDAY: "Ontem", TODAY: "Hoje", DAYS: "d", HOURS: "h", MINUTES: "m", JUST_NOW: "agora mesmo", LOCATION: "Localização", CANCEL: "Cancelar", INBOX: "Caixa de entrada", DESKTOP_NOTIFICATIONS: "Notificações do navegador", DESKTOP_NOTIFICATIONS_ERROR: "Não é possível ativar as notificações da navegador porque seu navegador as bloqueia. Tente procurar nas configurações ou usar um navegador diferente.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} notificação de demonstração`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Se você mantiver a guia do navegador aberta, verá essa mensagem quando alguém falar com você.", SEND_BUTTON_TEXT: "Enviar", ENTRYBOX_TEXT_LIMIT: "Apenas 10.000 caracteres são permitidos.", ENTRYBOX_PLACEHOLDER: "Diga algo...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Esta conversa não está mais ativa.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Você pode ler, mas não enviar mensagens.", MESSAGELIST_LOADING_OLDER: "Carregando mensagens antigas...", MESSAGELIST_SHOW_OLDER: "Mostrar mensagens mais antigas", MESSAGELIST_NEW_MARKER: "Novo", MESSAGE_SENT_VIA_EMAIL: "Esta mensagem foi enviada via email.", YOU_MARKER: "Você", UPLOAD_IN_PROGRESS: "Carregando...", UPLOAD_SEND_FILE: "Enviar arquivo", UPLOAD_SHARE_LOCATION: "Compartilhar localização", UPLOAD_ERROR: "Algo deu errado ao fazer o upload. O arquivo pode não ter suporte ou ser muito grande.", SHARE_LOCATION_ERROR: "Não é possível compartilhar o local: ", LOADING: "Carregando...", HUB_EMPTY: "Seu histórico de conversas será exibido aqui", HUB_SHOW_EARLIER: "Mostrar conversas anteriores", INBOX_NO_CHATS_TITLE: "Ainda não há chats!", INBOX_NO_CHATS_BODY: "Depois de ter uma ou mais conversas, elas serão exibidas aqui.", ENABLE_TRANSLATION: "Traduzir esta conversa para português", DISABLE_TRANSLATION: "Ver a conversa não traduzida", SEARCH_PLACEHOLDER_TEXT: "Busca...", SEARCH_SEARCHING: "Consultando...", SEARCH_NO_RESULTS: "Resultados nao encontrados", SEARCH_NO_MORE_RESULTS: "Não há mais resultados", CHAT_NOT_FOUND: "Conversa não encontrada", DELETE_MESSAGE: "Excluir mensagem", DELETION_EXPLANATION: "Se você excluir esta mensagem, ela desaparecerá para todos.", EDIT_MESSAGE: "Editar mensagem", SAVE: "Salvar", EDITED_INDICATOR: "editada", REPLY_TO_MESSAGE: "Responder", ADD_REACTION: "Adicionar reação", AUTH_EXPIRED_OVERLAY_TITLE: "Sua sessão de chat expirou", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Atualize a página para continuar", VOICE_MESSAGE: "Mensagem de voz", LEAVE_CONVERSATION: "Sair da conversa", MARK_CONVERSATION_AS_UNREAD: "Marcar como não lida", CONTACT_INFORMATION_HIDDEN: "Informação oculta", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Cs = { code: "ro-RO", name: "Romanian (Romania)", translation: { YESTERDAY: "Ieri", TODAY: "Astăzi", DAYS: "z", HOURS: "o", MINUTES: "m", JUST_NOW: "chiar acum", LOCATION: "Locație", CANCEL: "Anulare", INBOX: "Inbox", DESKTOP_NOTIFICATIONS: "Notificări browser", DESKTOP_NOTIFICATIONS_ERROR: "Nu se pot activa notificări browser deoarece browserul dvs. le blochează în mod activ. Încercați să căutați în setări sau utilizând un alt browser.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `Notificare de debit ${e}`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Dacă țineți fișa browserului deschis, veți vedea acest pop-up atunci când cineva vorbește cu dvs.", SEND_BUTTON_TEXT: "Trimiteți", ENTRYBOX_TEXT_LIMIT: "Sunt permise numai 10.000 de caractere.", ENTRYBOX_PLACEHOLDER: "Spune ceva...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Această conversație nu mai este activă.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Puteți citi, dar nu puteți trimite mesaje.", MESSAGELIST_LOADING_OLDER: "Încărcarea mesajelor mai vechi...", MESSAGELIST_SHOW_OLDER: "Afișați mesaje mai vechi", MESSAGELIST_NEW_MARKER: "Nou", MESSAGE_SENT_VIA_EMAIL: "Acest mesaj a fost trimis prin e-mail", YOU_MARKER: "voi", UPLOAD_IN_PROGRESS: "Încărcarea...", UPLOAD_SEND_FILE: "Trimiteți fișierul", UPLOAD_SHARE_LOCATION: "Distribuiți locația", UPLOAD_ERROR: "Sa încărcat ceva în mod greșit. Fișierul ar putea fi neacceptat sau prea mare.", SHARE_LOCATION_ERROR: "Nu se poate partaja locația: ", LOADING: "Încărcare...", HUB_EMPTY: "Istoricul chat-ului dvs. va apărea aici", HUB_SHOW_EARLIER: "Afișați discuțiile anterioare", INBOX_NO_CHATS_TITLE: "Încă nu vorbești!", INBOX_NO_CHATS_BODY: "După ce ați avut una sau mai multe conversații, acestea vor apărea aici.", ENABLE_TRANSLATION: "Traduceți această conversație în română", DISABLE_TRANSLATION: "Arată originalul", SEARCH_PLACEHOLDER_TEXT: "Căutare...", SEARCH_SEARCHING: "Se caută...", SEARCH_NO_RESULTS: "Nu s-au găsit rezultate", SEARCH_NO_MORE_RESULTS: "Nu mai există rezultate", CHAT_NOT_FOUND: "Conversația nu a fost găsită", DELETE_MESSAGE: "Șterge mesajul", DELETION_EXPLANATION: "Dacă ștergi acest mesaj, acesta va dispărea pentru toată lumea.", EDIT_MESSAGE: "Redactează mesajul", SAVE: "Salvare", EDITED_INDICATOR: "editat", REPLY_TO_MESSAGE: "Răspundeți", ADD_REACTION: "Adaugă o reacție", AUTH_EXPIRED_OVERLAY_TITLE: "Sesiunea dumneavoastră de chat a expirat", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Reîmprospătați pagina pentru a continua", VOICE_MESSAGE: "Mesaj vocal", CONTACT_INFORMATION_HIDDEN: "Informații ascunse", LEAVE_CONVERSATION: "Părăsește conversația", MARK_CONVERSATION_AS_UNREAD: "Marcheaza ca necitit", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, ps = { code: "ru-RU", name: "Russian", translation: { YESTERDAY: "Вчера", TODAY: "Сегодня", DAYS: "д", HOURS: "ч", MINUTES: "м", JUST_NOW: "только что", LOCATION: "Местоположение", CANCEL: "Отмена", INBOX: "Входящие", DESKTOP_NOTIFICATIONS: "Оповещения", DESKTOP_NOTIFICATIONS_ERROR: "Невозможно включить оповещения, потому что ваш браузер активно блокирует их. Проверьте ваши настройки или попробуйте другой браузер.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} демо-оповещение`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Если вкладка вашего браузера открыта, вы увидите всплывающее окошко оповещения когда кто-то отправит вам сообщение.", SEND_BUTTON_TEXT: "Отправить", ENTRYBOX_TEXT_LIMIT: "Разрешено использовать только 10 тысяч символов.", ENTRYBOX_PLACEHOLDER: "Напишите что-нибудь...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Этот разговор больше неактивен.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Вы можете читать, но не отправлять сообщения.", MESSAGELIST_LOADING_OLDER: "Загрузка старых сообщения...", MESSAGELIST_SHOW_OLDER: "Показать старые сообщения", MESSAGELIST_NEW_MARKER: "Новые", MESSAGE_SENT_VIA_EMAIL: "Это сообщение было отправлено по электронной почте", YOU_MARKER: "вы", UPLOAD_IN_PROGRESS: "Загрузка...", UPLOAD_SEND_FILE: "Отправить файл", UPLOAD_SHARE_LOCATION: "Поделиться местоположением", UPLOAD_ERROR: "Что-то пошло не так: такой файл не поддерживается или он слишком большой.", SHARE_LOCATION_ERROR: "Не удается поделиться местоположением: ", LOADING: "Загрузка...", HUB_EMPTY: "Здесь появится ваша история чата", HUB_SHOW_EARLIER: "Показать предыдущие чаты", INBOX_NO_CHATS_TITLE: "Пока нет чатов!", INBOX_NO_CHATS_BODY: "Как только у вас будет один или несколько разговоров, они появятся здесь.", ENABLE_TRANSLATION: "Переведите этот разговор на русский", DISABLE_TRANSLATION: "Show source", SEARCH_PLACEHOLDER_TEXT: "поиск...", SEARCH_SEARCHING: "Поиск...", SEARCH_NO_RESULTS: "Результаты не найдены", SEARCH_NO_MORE_RESULTS: "Больше результатов нет", CHAT_NOT_FOUND: "Чат не найден", DELETE_MESSAGE: "Удалить сообщение", DELETION_EXPLANATION: "Если вы удалите это сообщение, оно исчезнет для всех.", EDIT_MESSAGE: "Изменить сообщение", SAVE: "сохранить", EDITED_INDICATOR: "изменено", REPLY_TO_MESSAGE: "Ответить", ADD_REACTION: "Добавить реакцию", AUTH_EXPIRED_OVERLAY_TITLE: "Срок действия вашего сеанса чата истек", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Обновите страницу, чтобы продолжить", VOICE_MESSAGE: "Голосовое сообщение", CONTACT_INFORMATION_HIDDEN: "Информация скрыта", LEAVE_CONVERSATION: "Выйти из беседы", MARK_CONVERSATION_AS_UNREAD: "Отметить как непрочитанное", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, hs = { code: "sq-AL", name: "Albanian", translation: { YESTERDAY: "Dje", TODAY: "Sot", DAYS: "d", HOURS: "o", MINUTES: "m", JUST_NOW: "Tani", LOCATION: "Pozicion", CANCEL: "Anulo", INBOX: "Inbox", DESKTOP_NOTIFICATIONS: "Njoftimet e shfletuesit", DESKTOP_NOTIFICATIONS_ERROR: "Nuk mund të aktivizohen njoftimet në shfletues sepse shfletuesi juaj i bllokon ato në mënyrë aktive. Provoni të shikoni cilësimet ose përdorni një shfletues të ndryshëm.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} njoftime në desktop`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Lënia e skedës së shfletuesit tuaj të hapur do të pop-up kur dikush flet me ju.", SEND_BUTTON_TEXT: "Dërgo", ENTRYBOX_TEXT_LIMIT: "Lejohen vetëm 10,000 karaktere", ENTRYBOX_PLACEHOLDER: "Thuaj diçka...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Kjo bisedë nuk është më aktive.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Mund të lexoni por jo të dërgoni mesazhe.", MESSAGELIST_LOADING_OLDER: "Duke ngarkuar mesazhe më të vjetra...", MESSAGELIST_SHOW_OLDER: "Trego mesazhe më të vjetra", MESSAGELIST_NEW_MARKER: "E ri", MESSAGE_SENT_VIA_EMAIL: "Ky mesazh u dërgua si email", YOU_MARKER: "ti", UPLOAD_IN_PROGRESS: "Ngarkim...", UPLOAD_SEND_FILE: "Dërgo datotekën", UPLOAD_SHARE_LOCATION: "Ndani lokacionin", UPLOAD_ERROR: "Na vjen keq, diçka nuk shkoi si duhet. Dosja mund të mos ket mbështetje ose mund të jetë shumë e madhe.", SHARE_LOCATION_ERROR: "Nuk mund të ndahet lokacioni: ", LOADING: "Ngarkim...", HUB_EMPTY: "Këtu do të paraqitet/ shfaqet historia e bisedës tuaj", HUB_SHOW_EARLIER: "Shfaqi bisedat e mëparshme", INBOX_NO_CHATS_TITLE: "Nuk ka biseda!", INBOX_NO_CHATS_BODY: "Pasi të keni një ose më shumë biseda, ato do të paraqiten/shfaqen këtu.", ENABLE_TRANSLATION: "Përkthejeni këtë bisedë në shqiptare", DISABLE_TRANSLATION: "Shikoni origjinalin", SEARCH_PLACEHOLDER_TEXT: "Kërko...", SEARCH_SEARCHING: "Kërko...", SEARCH_NO_RESULTS: "Nuk ka rezultate", SEARCH_NO_MORE_RESULTS: "Nuk ka më rezultate", CHAT_NOT_FOUND: "Biseda nuk u gjet", DELETE_MESSAGE: "Fshi mesazhin", DELETION_EXPLANATION: "Nëse e fshini këtë mesazh, ai do të zhduket për të gjithë.", EDIT_MESSAGE: "Redakto mesazhin", SAVE: "Ruaj", EDITED_INDICATOR: "redaktuar", REPLY_TO_MESSAGE: "Përgjigj", ADD_REACTION: "Shtoni reagimin", AUTH_EXPIRED_OVERLAY_TITLE: "Sesioni juaj i bisedës ka skaduar", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Rifresko faqen për të vazhduar", VOICE_MESSAGE: "Mesazh zanor", CONTACT_INFORMATION_HIDDEN: "informacione të fshehura", LEAVE_CONVERSATION: "Largohu nga bashkëbisedimi", MARK_CONVERSATION_AS_UNREAD: "Shëno si të palexuar", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, gs = { code: "sr-SP", name: "Serbian", translation: { YESTERDAY: "Juče", TODAY: "Danas", DAYS: "d", HOURS: "s", MINUTES: "m", JUST_NOW: "Upravo sad", LOCATION: "Lokacija", CANCEL: "Otkaži", INBOX: "Pretinac", DESKTOP_NOTIFICATIONS: "Browser Notifikacija", DESKTOP_NOTIFICATIONS_ERROR: "Browser notifikacije nisu omogućene jer ih vaš pregledač aktivno blokira. Pokušajte pogledati postavke ili koristiti neki drugi pregledač.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} demo notifikacija`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Ako karticu pregledača ostavite otvorenu, pojaviće se ovaj pop-up kada neko razgovara s vama.", SEND_BUTTON_TEXT: "Pošalji", ENTRYBOX_TEXT_LIMIT: "Dozvoljeno je samo 10.000 znakova.", ENTRYBOX_PLACEHOLDER: "Kaži nešto...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Ovaj razgovor više nije aktivan.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Možete da čitate, ali ne i da šaljete poruke.", MESSAGELIST_LOADING_OLDER: "Učitavam starije poruke...", MESSAGELIST_SHOW_OLDER: "Prikaži starije poruke", MESSAGELIST_NEW_MARKER: "Novo", MESSAGE_SENT_VIA_EMAIL: "Ova poruka je poslana imejlom", YOU_MARKER: "ti", UPLOAD_IN_PROGRESS: "Učitavam...", UPLOAD_SEND_FILE: "Pošalji datoteku", UPLOAD_SHARE_LOCATION: "Podeli lokaciju", UPLOAD_ERROR: "Nažalost, nešto je pošlo krivo. Datoteka možda nije podržana ili je prevelika.", SHARE_LOCATION_ERROR: "Nije moguće podeliti lokaciju: ", LOADING: "Učitavam...", HUB_EMPTY: "Ovde će biti prikazana istorija razgovora", HUB_SHOW_EARLIER: "Prikaži ranije razgovore", INBOX_NO_CHATS_TITLE: "Nema razgovora!", INBOX_NO_CHATS_BODY: "Nakon što vodite jedan ili više razgovora, oni će se pojaviti ovde.", ENABLE_TRANSLATION: "Prevedi ovaj razgovor na srpski jezik", DISABLE_TRANSLATION: "Prikaži original", SEARCH_PLACEHOLDER_TEXT: "Pretraži...", SEARCH_SEARCHING: "Pretraživanje...", SEARCH_NO_RESULTS: "Nema rezultata", SEARCH_NO_MORE_RESULTS: "Nema više rezultata", CHAT_NOT_FOUND: "Ćaskanje nije pronađeno", DELETE_MESSAGE: "Izbriši poruku", DELETION_EXPLANATION: "Ako obrišete ovu poruku, ona neće biti vidljiva ni za koga.", EDIT_MESSAGE: "Ispravi poruku", SAVE: "Sačuvaj", EDITED_INDICATOR: "ispravljeno", REPLY_TO_MESSAGE: "Odgovorite", ADD_REACTION: "Dodaj reakciju", AUTH_EXPIRED_OVERLAY_TITLE: "Vaša sesija ćaskanja je istekla", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Osvežite stranicu da biste nastavili", VOICE_MESSAGE: "Glasovna poruka", CONTACT_INFORMATION_HIDDEN: "Sakrivene informacije", LEAVE_CONVERSATION: "Napusti razgovor", MARK_CONVERSATION_AS_UNREAD: "Označi kao nepročitanu", REPLY_TO_ARIA_LABEL: (e, t) => `Odgovarate korisniku ${e}: ${t}`, REPLY_MODE_LEAVE_ARIA_LABEL: "Izađi iz moda pisanja odgovora", STATUS_INDICATOR_ONLINE: "Aktivan", STATUS_INDICATOR_OFFLINE: "Neaktivan" } }, Fs = { code: "sv-SE", name: "Swedish (Sweden)", translation: { YESTERDAY: "Igår", TODAY: "Idag", DAYS: "d", HOURS: "h", MINUTES: "m", JUST_NOW: "just nu", LOCATION: "Plats", CANCEL: "Avbryt", INBOX: "Inkorg", DESKTOP_NOTIFICATIONS: "Webbläsarnotiser", DESKTOP_NOTIFICATIONS_ERROR: "Kan inte aktivera webbläsarnotiser eftersom din webbläsare aktivt blockerar dem. Se över inställningarna eller använd en annan webbläsare.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} demonotis`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Om du har fliken i webbläsaren öppen så kommer den här notisen visas när någon pratar med dig.", SEND_BUTTON_TEXT: "Skicka", ENTRYBOX_TEXT_LIMIT: "Max 10 000 tecken är tillåtet.", ENTRYBOX_PLACEHOLDER: "Skriv ett meddelande...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Den här konversationen är inte längre aktiv.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Du kan läsa men inte skicka meddelanden.", MESSAGELIST_LOADING_OLDER: "Läser in tidigare meddelanden...", MESSAGELIST_SHOW_OLDER: "Visa tidigare meddelanden", MESSAGELIST_NEW_MARKER: "Nytt", MESSAGE_SENT_VIA_EMAIL: "Detta meddelande skickades via e-post", YOU_MARKER: "du", UPLOAD_IN_PROGRESS: "Laddar upp...", UPLOAD_SEND_FILE: "Skicka fil", UPLOAD_SHARE_LOCATION: "Dela plats", UPLOAD_ERROR: "Något gick fel vid uppladdningen. Filen kan vara av en typ som inte stöds eller är för stor.", SHARE_LOCATION_ERROR: "Kan inte dela plats: ", LOADING: "Laddar...", HUB_EMPTY: "Din chatthistorik kommer att visas här", HUB_SHOW_EARLIER: "Visa tidigare chattar", INBOX_NO_CHATS_TITLE: "Inga chattar ännu!", INBOX_NO_CHATS_BODY: "När du har haft en eller flera konversationer kommer de att visas här.", ENABLE_TRANSLATION: "Översätt den här konversationen till svenska", DISABLE_TRANSLATION: "Visa original", SEARCH_PLACEHOLDER_TEXT: "Sök...", SEARCH_SEARCHING: "Söker...", SEARCH_NO_RESULTS: "Inga resultat hittades", SEARCH_NO_MORE_RESULTS: "Inga fler resultat", CHAT_NOT_FOUND: "Chatten hittades inte", DELETE_MESSAGE: "Radera meddelandet", DELETION_EXPLANATION: "Om du raderar det här meddelandet försvinner det för alla.", EDIT_MESSAGE: "Redigera meddelandet", SAVE: "Spara", EDITED_INDICATOR: "redigerad", REPLY_TO_MESSAGE: "Svara", ADD_REACTION: "Lägg till reaktion", AUTH_EXPIRED_OVERLAY_TITLE: "Din chatsession har gått ut", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Uppdatera sidan för att fortsätta", VOICE_MESSAGE: "Röstmeddelande", CONTACT_INFORMATION_HIDDEN: "Dold information", LEAVE_CONVERSATION: "Lämna konversationen", MARK_CONVERSATION_AS_UNREAD: "Markera som oläst", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, vs = { code: "tr-TR", name: "Turkish", translation: { YESTERDAY: "Dün", TODAY: "Bugün", DAYS: "g", HOURS: "s", MINUTES: "d", JUST_NOW: "az önce", LOCATION: "Konum", CANCEL: "İptal", INBOX: "Gelen Kutusu", SEND_BUTTON_TEXT: "Gönder", ENTRYBOX_TEXT_LIMIT: "En fazla 10.000 karaktere izin veriliyor.", ENTRYBOX_PLACEHOLDER: "Bir şeyler söyle...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Bu konuşma artık aktif değil.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Mesajları okuyabilirsiniz ancak mesaj gönderemezsiniz.", MESSAGELIST_LOADING_OLDER: "Eski mesajlar yükleniyor...", MESSAGELIST_SHOW_OLDER: "Eski mesajları göster", MESSAGELIST_NEW_MARKER: "Yeni", DESKTOP_NOTIFICATIONS: "Tarayıcı bildirimleri", DESKTOP_NOTIFICATIONS_ERROR: "Tarayıcınız aktif olarak engellediğinden tarayıcı bildirimlerini etkinleştiremiyoruz. Ayarları kontrol etmeyi veya farklı bir tarayıcı kullanmayı deneyebilirsiniz.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} test bildirimi`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Eğer tarayıcınızın penceresini açık tutarsanız biri mesaj yazdığında bu bildirimi göreceksiniz.", MESSAGE_SENT_VIA_EMAIL: "Bu mesaj e-posta ile gönderilmiştir.", YOU_MARKER: "siz", UPLOAD_IN_PROGRESS: "Yükleniyor...", UPLOAD_SEND_FILE: "Dosya gönder", UPLOAD_SHARE_LOCATION: "Konum paylaş", UPLOAD_ERROR: "Yükleme sırasında bir şeyler yanlış gitti. Dosya desteklenmiyor veya izin verilenden büyük olabilir.", SHARE_LOCATION_ERROR: "Konum paylaşılamadı: ", LOADING: "Yükleniyor...", HUB_EMPTY: "Konuşma geçmişiniz burada görünecek", HUB_SHOW_EARLIER: "Önceki konuşmaları göster", INBOX_NO_CHATS_TITLE: "Henüz konuşma yok!", INBOX_NO_CHATS_BODY: "Bir veya daha fazla konuşma başlattığınız konuşmalar burada belirecek.", ENABLE_TRANSLATION: "Bu konuşmayı Türkçe'ye çevir", DISABLE_TRANSLATION: "Orijinali göster", SEARCH_PLACEHOLDER_TEXT: "Ara...", SEARCH_SEARCHING: "Arıyor...", SEARCH_NO_RESULTS: "Sonuç bulunamadı", SEARCH_NO_MORE_RESULTS: "Başka sonuç bulunamadı.", CHAT_NOT_FOUND: "Sohbet bulunamadı", DELETE_MESSAGE: "Mesajı sil", DELETION_EXPLANATION: "Bu mesajı silerseniz herkes için görünmez olacaktır.", EDIT_MESSAGE: "Mesajı düzenle", SAVE: "Kaydet", EDITED_INDICATOR: "düzenlenmiş", REPLY_TO_MESSAGE: "Yanıtla", ADD_REACTION: "Tepki ekle", AUTH_EXPIRED_OVERLAY_TITLE: "Sohbet oturumunuz sona erdi", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Devam etmek için sayfayı yenileyin", VOICE_MESSAGE: "Sesli mesaj", CONTACT_INFORMATION_HIDDEN: "Gizli bilgi", LEAVE_CONVERSATION: "Konuşmadan ayrıl", MARK_CONVERSATION_AS_UNREAD: "Okunmamış olarak işaretle", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, fs = { code: "uk-UA", name: "Ukrainian (Ukraine)", translation: { YESTERDAY: "Вчора", TODAY: "Сьогодні", DAYS: "d", HOURS: "h", MINUTES: "м", JUST_NOW: "просто зараз", LOCATION: "Місцезнаходження", CANCEL: "Скасувати", INBOX: "Вхідні", DESKTOP_NOTIFICATIONS: "Сповіщення в браузері", DESKTOP_NOTIFICATIONS_ERROR: "Неможливо ввімкнути сповіщення в браузері, оскільки ваш веб-переглядач активно їх блокує. Спробуйте переглянути налаштування або використовувати інший браузер.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `Демо-повідомлення про ${e}`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Якщо ви відкриєте вкладку веб-переглядача відкритою, ви побачите це спливаюче вікно, коли хтось спілкується з вами.", SEND_BUTTON_TEXT: "Надіслати", ENTRYBOX_TEXT_LIMIT: "Дозволено лише 10 000 символів.", ENTRYBOX_PLACEHOLDER: "Скажи щось...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Ця розмова більше не активна.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Ви можете читати, але не надсилати повідомлення.", MESSAGELIST_LOADING_OLDER: "Завантаження старих повідомлень...", MESSAGELIST_SHOW_OLDER: "Показати старіші повідомлення", MESSAGELIST_NEW_MARKER: "Нові", MESSAGE_SENT_VIA_EMAIL: "Це повідомлення надіслано електронною поштою", YOU_MARKER: "ти", UPLOAD_IN_PROGRESS: "Завантаження...", UPLOAD_SEND_FILE: "Надіслати файл", UPLOAD_SHARE_LOCATION: "Поділитися місцезнаходженням", UPLOAD_ERROR: "На жаль, під час завантаження щось не вдалось. Файл може бути непідтримуваним або занадто великим.", SHARE_LOCATION_ERROR: "Неможливо поділити місцезнаходження: ", LOADING: "Завантаження...", HUB_EMPTY: "Тут відобразиться ваша історія чатів", HUB_SHOW_EARLIER: "Показати попередні чати", INBOX_NO_CHATS_TITLE: "Чатів ще немає!", INBOX_NO_CHATS_BODY: "Після того, як ви проведете одну чи кілька бесід, вони з’являться тут.", ENABLE_TRANSLATION: "Перекласти цю розмову англійською", DISABLE_TRANSLATION: "Показати оригінал", SEARCH_PLACEHOLDER_TEXT: "Пошук...", SEARCH_SEARCHING: "Пошук...", SEARCH_NO_RESULTS: "Не знайдено результатів", SEARCH_NO_MORE_RESULTS: "Більше немає результатів", CHAT_NOT_FOUND: "Чат не знайдено", DELETE_MESSAGE: "Видалити повідомлення", DELETION_EXPLANATION: "Якщо ви видалите це повідомлення, воно зникне для всіх.", EDIT_MESSAGE: "Редагувати повідомлення", SAVE: "Зберегти", EDITED_INDICATOR: "відредаговано", REPLY_TO_MESSAGE: "Відповісти", ADD_REACTION: "Додати реакцію", AUTH_EXPIRED_OVERLAY_TITLE: "Ваша сесія в чаті закінчилась", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Оновіть сторінку, щоб продовжити", VOICE_MESSAGE: "Голосове повідомлення", CONTACT_INFORMATION_HIDDEN: "Прихована інформація", LEAVE_CONVERSATION: "Залишити розмову", MARK_CONVERSATION_AS_UNREAD: "Відзначити як непрочитане", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, ks = { code: "vi-VN", name: "Vietnamese", translation: { YESTERDAY: "Hôm qua", TODAY: "Hôm nay", DAYS: "ngày", HOURS: "giờ", MINUTES: "phút", JUST_NOW: "vừa xong", LOCATION: "Địa điểm", CANCEL: "Hủy", INBOX: "Hộp thư đến", DESKTOP_NOTIFICATIONS: "Thông báo trình duyệt", DESKTOP_NOTIFICATIONS_ERROR: "Không thể bật thông báo trên trình duyệt vì trình duyệt của bạn đang tắt chức năng này. Hãy thử tìm trong cài đặt trình duyệt hoặc sử dụng một trình duyệt khác.", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} thông báo thử nghiệm`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "Nếu bạn giữ tab trình duyệt của bạn mở, bạn sẽ thấy cửa sổ bật lên khi ai đó nói chuyện với bạn.", SEND_BUTTON_TEXT: "Gửi", ENTRYBOX_TEXT_LIMIT: "Tối đa 10.000 ký tự.", ENTRYBOX_PLACEHOLDER: "Nói gì đó...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "Cuộc hội thoại này không còn hoạt động.", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "Bạn có thể đọc, nhưng không thể gửi tin nhắn.", MESSAGELIST_LOADING_OLDER: "Đang tải tin nhắn cũ...", MESSAGELIST_SHOW_OLDER: "Hiển thị tin nhắn trước đó", MESSAGELIST_NEW_MARKER: "Mới", MESSAGE_SENT_VIA_EMAIL: "Tin nhắn này đã được gửi qua email", YOU_MARKER: "bạn", UPLOAD_IN_PROGRESS: "Đang tải lên...", UPLOAD_SEND_FILE: "Gửi tệp", UPLOAD_SHARE_LOCATION: "Chia sẻ vị trí", UPLOAD_ERROR: "Thật không may, quá trình tải lên không thành công. Tệp không được hỗ trợ hoặc quá lớn.", SHARE_LOCATION_ERROR: "Không thể chia sẻ vị trí: ", LOADING: "Đang tải...", HUB_EMPTY: "Lịch sử trò chuyện của bạn sẽ hiển thị ở đây", HUB_SHOW_EARLIER: "Hiển thị các cuộc trò chuyện trước đó", INBOX_NO_CHATS_TITLE: "Chưa có cuộc trò chuyện nào!", INBOX_NO_CHATS_BODY: "Khi bạn đã có một hoặc nhiều cuộc trò chuyện, chúng sẽ hiển thị ở đây.", ENABLE_TRANSLATION: "Dịch cuộc hội thoại sang Tiếng Việt", DISABLE_TRANSLATION: "Hiển thị nội dung gốc", SEARCH_PLACEHOLDER_TEXT: "TÌm kiếm...", SEARCH_SEARCHING: "Đang tìm kiếm...", SEARCH_NO_RESULTS: "Không tìm thấy kết quả nào", SEARCH_NO_MORE_RESULTS: "Không có kết quả nào khác", CHAT_NOT_FOUND: "Không tìm thấy cuộc trò chuyện", DELETE_MESSAGE: "Xóa tin nhắn", DELETION_EXPLANATION: "Nếu bạn xóa tin nhắn này, tất cả mọi người sẽ không còn thấy nó.", EDIT_MESSAGE: "Chỉnh sửa tin nhắn", SAVE: "lưu", EDITED_INDICATOR: "đã chỉnh sửa", REPLY_TO_MESSAGE: "đáp lại", ADD_REACTION: "Thêm biểu tượng cảm xúc", AUTH_EXPIRED_OVERLAY_TITLE: "Phiên trò chuyện của bạn đã hết hạn", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "Hãy làm mới trang để tiếp tục", VOICE_MESSAGE: "Tin nhắn thoại", CONTACT_INFORMATION_HIDDEN: "Thông tin ẩn", LEAVE_CONVERSATION: "Thoát khỏi cuộc trò chuyện", MARK_CONVERSATION_AS_UNREAD: "Đánh dấu là chưa đọc", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Ms = { code: "zh-CN", name: "Chinese (Simplified)", translation: { YESTERDAY: "昨天", TODAY: "今天", DAYS: "天", HOURS: "小时", MINUTES: "分钟", JUST_NOW: "刚才", LOCATION: "地点", CANCEL: "取消", INBOX: "收件箱", DESKTOP_NOTIFICATIONS: "浏览器通知", DESKTOP_NOTIFICATIONS_ERROR: "因浏览器设置为阻止,所以无法激活浏览器提醒。请去设置里查看或者尝试其他的浏览器。", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} 演示提醒`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "只要保持浏览器开着,如果有人和你对话,将会自动弹出对话窗口。", SEND_BUTTON_TEXT: "发送", ENTRYBOX_TEXT_LIMIT: "不超过10,000个字符。", ENTRYBOX_PLACEHOLDER: "写点什么吧……", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "该对话已结束。", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "你只能阅读信息,不能发送信息。", MESSAGELIST_LOADING_OLDER: "载入之前的信息……", MESSAGELIST_SHOW_OLDER: "显示之前的信息", MESSAGELIST_NEW_MARKER: "新消息", MESSAGE_SENT_VIA_EMAIL: "该信息已通过邮件发送。", YOU_MARKER: "你", UPLOAD_IN_PROGRESS: "上传中……", UPLOAD_SEND_FILE: "发送文件", UPLOAD_SHARE_LOCATION: "分享地址", UPLOAD_ERROR: "上传出错。文件格式不支持或者太大。", SHARE_LOCATION_ERROR: "无法分享地址: ", LOADING: "正在载入……", HUB_EMPTY: "你的聊天记录将在此显示。", HUB_SHOW_EARLIER: "显示之前的聊天记录。", INBOX_NO_CHATS_TITLE: "暂无任何聊天记录!", INBOX_NO_CHATS_BODY: "如果你有一个或多个对话窗口进行中,将显示在这里。", ENABLE_TRANSLATION: "翻译至简体中文", DISABLE_TRANSLATION: "查看原文", SEARCH_PLACEHOLDER_TEXT: "搜索...", SEARCH_SEARCHING: "正在搜索...", SEARCH_NO_RESULTS: "未找到结果", SEARCH_NO_MORE_RESULTS: "无更多结果", CHAT_NOT_FOUND: "未找到“聊天”", DELETE_MESSAGE: "删除消息", DELETION_EXPLANATION: "如果您删除此消息,那么所有人都将无法再看到它。", EDIT_MESSAGE: "编辑消息", SAVE: "保存", EDITED_INDICATOR: "本消息有改动", REPLY_TO_MESSAGE: "回复", ADD_REACTION: "添加反应", AUTH_EXPIRED_OVERLAY_TITLE: "您的聊天会话已过期", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "刷新页面以继续", VOICE_MESSAGE: "语音消息", CONTACT_INFORMATION_HIDDEN: "隐藏信息", LEAVE_CONVERSATION: "离开对话", MARK_CONVERSATION_AS_UNREAD: "标记为未读", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, Bs = { code: "zh-TW", name: "Chinese (Traditional)", translation: { YESTERDAY: "昨天", TODAY: "昨天", DAYS: "天", HOURS: "小時", MINUTES: "分", JUST_NOW: "現在", LOCATION: "地點", CANCEL: "取消", INBOX: "收件箱", DESKTOP_NOTIFICATIONS: "瀏覽器通知", DESKTOP_NOTIFICATIONS_ERROR: "無法啟用瀏覽器通知,因為您的瀏覽器主動阻止它們。 嘗試查看設置或使用其他瀏覽器。", DESKTOP_NOTIFICATIONS_DEMO_TITLE: (e) => `${e} 演示通知`, DESKTOP_NOTIFICATIONS_DEMO_BODY: "如果您持續打開瀏覽器標籤頁,當有人與您通話時,您會看到此彈出窗口。", SEND_BUTTON_TEXT: "發送", ENTRYBOX_TEXT_LIMIT: "只允許10.000個字符。", ENTRYBOX_PLACEHOLDER: "說些什麼...", ENTRYBOX_PLACEHOLDER_CHAT_CLOSED: "此對話不再有效。", ENTRYBOX_PLACEHOLDER_CHAT_READONLY: "您可以閱讀,但不能發送消息。", MESSAGELIST_LOADING_OLDER: "加載舊訊息...", MESSAGELIST_SHOW_OLDER: "顯示較舊的訊息", MESSAGELIST_NEW_MARKER: "新的", MESSAGE_SENT_VIA_EMAIL: "此訊息是通過電郵發送的", YOU_MARKER: "您", UPLOAD_IN_PROGRESS: "上傳中...", UPLOAD_SEND_FILE: "發送文件", UPLOAD_SHARE_LOCATION: "共享位置", UPLOAD_ERROR: "不幸的是,上傳出了問題。 該文件可能不受支持或太大。", SHARE_LOCATION_ERROR: "無法分享位置:", LOADING: "載入中...", HUB_EMPTY: "您的聊天記錄將顯示在此處", HUB_SHOW_EARLIER: "顯示早先的聊天記錄", INBOX_NO_CHATS_TITLE: "還沒聊天!", INBOX_NO_CHATS_BODY: "一旦您進行了一次或多次對話,他們就會顯示在此處。", ENABLE_TRANSLATION: "翻譯此對話至繁體中文", DISABLE_TRANSLATION: "顯示原文", SEARCH_PLACEHOLDER_TEXT: "搜尋...", SEARCH_SEARCHING: "正在搜尋...", SEARCH_NO_RESULTS: "找不到任何結果", SEARCH_NO_MORE_RESULTS: "沒有其他結果", CHAT_NOT_FOUND: "查無對話", DELETE_MESSAGE: "刪除訊息", DELETION_EXPLANATION: "您如果刪除這條訊息,所有人都將看不到它。", EDIT_MESSAGE: "編輯訊息", SAVE: "儲存", EDITED_INDICATOR: "已編輯", REPLY_TO_MESSAGE: "回覆", ADD_REACTION: "加入表情回應", AUTH_EXPIRED_OVERLAY_TITLE: "您的會話過程已過期", AUTH_EXPIRED_OVERLAY_DESCRIPTION: "請刷新頁面以繼續", VOICE_MESSAGE: "語音訊息", CONTACT_INFORMATION_HIDDEN: "隱藏訊息", LEAVE_CONVERSATION: "離開對話", MARK_CONVERSATION_AS_UNREAD: "標記為未讀", REPLY_TO_ARIA_LABEL: A.translation.REPLY_TO_ARIA_LABEL, REPLY_MODE_LEAVE_ARIA_LABEL: A.translation.REPLY_MODE_LEAVE_ARIA_LABEL, STATUS_INDICATOR_ONLINE: A.translation.STATUS_INDICATOR_ONLINE, STATUS_INDICATOR_OFFLINE: A.translation.STATUS_INDICATOR_OFFLINE } }, bt = { ar: Ja, bg: Za, bs: Qa, ca: es, cs: ts, da: ns, de: as, el: ss, en: A, es: is, et: rs, fa: os, fi: Es, fr: us, he: ls, hi: cs, hr: Ds, hu: _s, id: As, is: Os, it: Ts, ja: ds, ka: Ss, ko: Is, nb: Ns, nl: Rs, pl: Ls, pt: ms, ro: Cs, ru: ps, sq: hs, sr: gs, sv: Fs, tr: vs, uk: fs, vi: ks, zh: Ms, zhTw: Bs };
|
|
151
|
+
function vn(e) {
|
|
152
|
+
const t = e.replace(/_/g, "-").toLowerCase(), n = bt[t];
|
|
148
153
|
if (n) return { ...n.translation, locale: t };
|
|
149
|
-
const a = t.slice(0, 2), s =
|
|
150
|
-
return s ? { ...s.translation, locale: a } : (
|
|
154
|
+
const a = t.slice(0, 2), s = bt[a];
|
|
155
|
+
return s ? { ...s.translation, locale: a } : (ee.warn(`User locale '${e}' not supported; falling back to English.`), { ...A.translation, locale: "en-US" });
|
|
151
156
|
}
|
|
152
|
-
class
|
|
157
|
+
class fn extends Error {
|
|
153
158
|
}
|
|
154
|
-
function
|
|
155
|
-
if (!e) throw new
|
|
159
|
+
function yt(e, t) {
|
|
160
|
+
if (!e) throw new fn(t != null ? t : "Assertion failed");
|
|
156
161
|
}
|
|
157
|
-
const k = Object.assign(
|
|
158
|
-
return
|
|
162
|
+
const k = Object.assign(yt, { is: function(e, t, n) {
|
|
163
|
+
return yt(t, n);
|
|
159
164
|
}, unreachable: function() {
|
|
160
165
|
throw new Error("Unreachable code");
|
|
161
166
|
}, never: function(e) {
|
|
162
167
|
throw new Error("Unreachable");
|
|
163
168
|
}, defined: function(e) {
|
|
164
|
-
if (e == null) throw new
|
|
165
|
-
} }),
|
|
169
|
+
if (e == null) throw new fn("Value is not defined");
|
|
170
|
+
} }), kn = () => {
|
|
166
171
|
const e = document.createElement("canvas");
|
|
167
172
|
e.width = e.height = 1;
|
|
168
173
|
const t = e.getContext("2d");
|
|
169
174
|
return t.textBaseline = "top", t.font = '100px "Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Twemoji Mozilla","Noto Color Emoji","EmojiOne Color","Android Emoji",sans-serif', t.scale(0.01, 0.01), t;
|
|
170
|
-
},
|
|
171
|
-
const n =
|
|
175
|
+
}, wt = (e, t) => {
|
|
176
|
+
const n = kn();
|
|
172
177
|
return n.fillStyle = t, n.fillText(e, 0, 0), n.getImageData(0, 0, 1, 1).data;
|
|
173
178
|
};
|
|
174
|
-
function
|
|
175
|
-
const t =
|
|
179
|
+
function Ps(e) {
|
|
180
|
+
const t = wt(e, "#000"), n = wt(e, "#fff"), a = ((s) => !s.includes("") || kn().measureText(s).width < 160)(e);
|
|
176
181
|
return t && n && a && ((s, i) => {
|
|
177
182
|
const r = [...s].join(",");
|
|
178
183
|
return r === [...i].join(",") && !r.startsWith("0,0,0,");
|
|
179
184
|
})(t, n);
|
|
180
185
|
}
|
|
181
|
-
function
|
|
186
|
+
function Mn(e) {
|
|
182
187
|
try {
|
|
183
|
-
return
|
|
188
|
+
return Ps(e);
|
|
184
189
|
} catch (t) {
|
|
185
190
|
return !0;
|
|
186
191
|
}
|
|
187
192
|
}
|
|
188
|
-
var
|
|
189
|
-
const
|
|
193
|
+
var cn;
|
|
194
|
+
const Bn = (cn = globalThis.window) != null && cn.document ? function() {
|
|
190
195
|
if (typeof window == "undefined" || window.E2E) return 16;
|
|
191
196
|
const e = { "": 16, "🚶➡️": 15.1, "🫨": 15, "🫠": 14, "😵💫": 13.1, "🥲": 13, "🧑🦰": 12.1, "🥻": 12, "🥰": 11, "🤩": 5, "👱♀️": 4, "🤣": 3, "👁️🗨️": 2, "😀": 1, "😐️": 0.7, "😃": 0.6 };
|
|
192
|
-
for (const [t, n] of Object.entries(e)) if (
|
|
197
|
+
for (const [t, n] of Object.entries(e)) if (Mn(t)) return n;
|
|
193
198
|
}() : 0;
|
|
194
|
-
class
|
|
199
|
+
class Pn {
|
|
195
200
|
constructor(t, n) {
|
|
196
|
-
this.currentUser$ =
|
|
201
|
+
this.currentUser$ = U(null), this.app$ = U(null), this.appId$ = U(null), this.extUserId$ = U(null), this.authTokenState$ = U("idle"), this.themeCustom$ = U(Bt.opaque({ value: void 0 })), this.device$ = U({ supportsEmojiPicker: !!Bn, isMobile: typeof window != "undefined" && /Mobi/i.test(window.navigator.userAgent) }), this.errors$ = U({ unknownConversation: !1, unknownUser: !1, wrongAppId: !1, serverError: !1 }), this.t$ = U(() => {
|
|
197
202
|
var r, o;
|
|
198
203
|
const a = this.extUserId$.get(), s = this.app$.appMetadata.defaultLocale.get(), i = this.currentUser$.locale.get();
|
|
199
|
-
return
|
|
200
|
-
}),
|
|
204
|
+
return vn((o = (r = a && i) != null ? r : s) != null ? o : "en-US");
|
|
205
|
+
}), Te(() => {
|
|
201
206
|
this.appId$.set(t), this.extUserId$.set(n);
|
|
202
207
|
});
|
|
203
208
|
}
|
|
204
209
|
updateThemeCustom(t) {
|
|
205
|
-
this.themeCustom$.set(
|
|
210
|
+
this.themeCustom$.set(Bt.opaque({ value: t }));
|
|
206
211
|
}
|
|
207
212
|
listenForErrors(t, n) {
|
|
208
213
|
this.errors$.assign({ unknownConversation: !1, unknownUser: !1, wrongAppId: !1, serverError: !1 });
|
|
209
214
|
const a = t.onError((r) => {
|
|
210
|
-
|
|
215
|
+
ee.error(r.message), this.errors$.serverError.set(!0);
|
|
211
216
|
}), s = t.currentUser.subscribe((r) => {
|
|
212
217
|
this.errors$.unknownUser.set(r === null);
|
|
213
218
|
}), i = n && t.conversation(n).subscribe((r) => {
|
|
@@ -244,65 +249,65 @@ class Sn {
|
|
|
244
249
|
};
|
|
245
250
|
}
|
|
246
251
|
}
|
|
247
|
-
const
|
|
248
|
-
class
|
|
252
|
+
const Hs = { canReplyToMessage: !1, canEditMessage: !1, canDeleteMessage: !1, canAddReaction: !1 };
|
|
253
|
+
class Hn extends Pn {
|
|
249
254
|
constructor(t, n) {
|
|
250
|
-
super(t, n), this.type = "ChatboxStore", this.messageSubscription = null, this.readyForNewMessagesPromise = Promise.resolve(), this.participantSubscription = null, this.onlineSubscriptions = {}, this.state$ =
|
|
255
|
+
super(t, n), this.type = "ChatboxStore", this.messageSubscription = null, this.readyForNewMessagesPromise = Promise.resolve(), this.participantSubscription = null, this.onlineSubscriptions = {}, this.state$ = U({ extCurrentConversationId: null, editor: { isEmpty: !0, isTyping: !1, atTextLimit: !1, characterCount: 0, showEmojiPicker: !1, suggestEmojiQuery: void 0, suggestMentionQuery: void 0 }, referencedMessageId: null, editingMessageId: null, currentConversation: null, visibility: { isInView: !1, tabFocused: !0 }, messages: {}, participants: {}, typing: {}, isUserConnected: {}, ephemeralMessages: {}, ephemeralMessageIdMapping: {}, localFileBlobUrls: {}, userPermissions: () => {
|
|
251
256
|
const a = this.app$.role.general.get(), s = this.app$.role.permissions.get();
|
|
252
257
|
return k.defined(a), k.defined(s), { showTypingIndicator: a.showTypingIndicators, canShareFile: a.enableFileTransfers, canShareLocation: a.enableLocation, canMention: a.enableMentions, showOnlineStatus: a.enablePresence !== !1, canSendVoiceMessage: a.enableVoiceRecording, canLeaveConversation: s.conversations.leave === "all", canMarkConversationAsUnread: s.conversations.markAsUnread === "all" };
|
|
253
258
|
}, messagePermissions: () => {
|
|
254
259
|
const a = this.app$.role.permissions.get();
|
|
255
260
|
k.defined(a);
|
|
256
|
-
const s = this.state$.userPermissions.get(), i = { ...
|
|
261
|
+
const s = this.state$.userPermissions.get(), i = { ...Hs, ...s }, r = { canReplyToMessage: ie(a.messages.reply, !0), canEditMessage: ie(a.messages.edit, !0), canDeleteMessage: ie(a.messages.delete, !0), canAddReaction: ie(a.messages.emojiReactions, !0), ...s }, o = { ...r, canEditMessage: !1 }, E = { canReplyToMessage: ie(a.messages.reply, !1), canEditMessage: ie(a.messages.edit, !1), canDeleteMessage: ie(a.messages.delete, !1), canAddReaction: ie(a.messages.emojiReactions, !1), ...s };
|
|
257
262
|
return { system: i, own: r, ownWithoutEditing: o, other: E, otherWithoutEditing: { ...E, canEditMessage: !1 } };
|
|
258
|
-
} }), this.locale$ =
|
|
263
|
+
} }), this.locale$ = U(() => {
|
|
259
264
|
var r, o;
|
|
260
265
|
const a = this.extUserId$.get(), s = this.app$.appMetadata.defaultLocale.get(), i = this.currentUser$.locale.get();
|
|
261
266
|
return (o = (r = a && i) != null ? r : s) != null ? o : "en-US";
|
|
262
|
-
}), this.t$ =
|
|
267
|
+
}), this.t$ = U(() => vn(this.locale$.get())), this.referencedMessage$ = U(() => {
|
|
263
268
|
const a = this.state$.extCurrentConversationId.get(), s = this.state$.referencedMessageId.get();
|
|
264
269
|
return a && s ? this.state$.messages.child(a).lookup.child(s).get() : null;
|
|
265
|
-
}), this.chatItems$ =
|
|
266
|
-
var d,
|
|
270
|
+
}), this.chatItems$ = U(() => {
|
|
271
|
+
var d, D;
|
|
267
272
|
const a = this.state$.extCurrentConversationId.get();
|
|
268
273
|
if (!a) return [];
|
|
269
|
-
const s = this.state$.currentConversation.readUntil.get(), i = (d = this.state$.messages.child(a).state.get()) != null ? d : [], r = Object.values((
|
|
274
|
+
const s = this.state$.currentConversation.readUntil.get(), i = (d = this.state$.messages.child(a).state.get()) != null ? d : [], r = Object.values((D = this.state$.ephemeralMessages.child(a).get()) != null ? D : {}), o = (r.length === 0 ? i : r.concat(i).sort((_, T) => T.createdAt - _.createdAt)).map((_) => {
|
|
270
275
|
const T = _.content[0], I = T == null ? void 0 : T.type;
|
|
271
276
|
if (!T || I !== "file") return _;
|
|
272
277
|
const R = T.size + "," + T.filename, N = this.state$.localFileBlobUrls.child(a).child(R).url.get();
|
|
273
278
|
return N ? { ..._, content: [{ ...T, url: N }] } : _;
|
|
274
279
|
});
|
|
275
|
-
let E = null, u = 0,
|
|
276
|
-
const
|
|
280
|
+
let E = null, u = 0, l = !1;
|
|
281
|
+
const c = [];
|
|
277
282
|
for (const _ of o) {
|
|
278
|
-
const T = new Date(_.createdAt), I = new Date(T).setHours(0, 0, 0, 0), R = u && I !== u, N = T.getTime() > s, L = !(!
|
|
279
|
-
(L || R) &&
|
|
283
|
+
const T = new Date(_.createdAt), I = new Date(T).setHours(0, 0, 0, 0), R = u && I !== u, N = T.getTime() > s, L = !(!l || N || E != null && E.id.startsWith("ephemeral"));
|
|
284
|
+
(L || R) && c.push(new Ot({ id: "border-before-" + _.id, isDayMarker: !!R, isReadMarker: !!L, timestamp: R ? u : void 0 })), c.push(_), l = N, u = I, E = _;
|
|
280
285
|
}
|
|
281
286
|
return function(_, T) {
|
|
282
287
|
const I = [];
|
|
283
288
|
let R = [];
|
|
284
289
|
const N = Symbol("NO_KEY");
|
|
285
290
|
let L = N;
|
|
286
|
-
for (const
|
|
287
|
-
const
|
|
288
|
-
L === N || L ===
|
|
291
|
+
for (const m of _) {
|
|
292
|
+
const p = T(m);
|
|
293
|
+
L === N || L === p ? R.push(m) : (I.push(R), R = [m]), L = p;
|
|
289
294
|
}
|
|
290
295
|
return R.length !== 0 && I.push(R), I;
|
|
291
|
-
}(
|
|
296
|
+
}(c, (_) => {
|
|
292
297
|
var T;
|
|
293
|
-
return _ instanceof
|
|
298
|
+
return _ instanceof Ot ? _.id : (T = _.sender) == null ? void 0 : T.id;
|
|
294
299
|
}).map((_) => (_.id = _.map((T) => T.id).join(","), _));
|
|
295
|
-
}), this.mentionableUsers$ =
|
|
300
|
+
}), this.mentionableUsers$ = U(() => {
|
|
296
301
|
const a = this.state$.extCurrentConversationId.get(), s = this.extUserId$.get();
|
|
297
302
|
if (!a || !s) return [];
|
|
298
303
|
const i = this.state$.participants.child(a).get();
|
|
299
304
|
if (!i || i.length === 0) return [];
|
|
300
305
|
const r = i.map((o) => o.user);
|
|
301
306
|
return r.sort((o, E) => o.name.localeCompare(E.name)), function(o, E) {
|
|
302
|
-
const u = E.findIndex((
|
|
307
|
+
const u = E.findIndex((l) => l.id === o);
|
|
303
308
|
if (u > -1) {
|
|
304
|
-
const
|
|
305
|
-
E.splice(u, 1), E.push(
|
|
309
|
+
const l = E[u];
|
|
310
|
+
E.splice(u, 1), E.push(l);
|
|
306
311
|
}
|
|
307
312
|
return E;
|
|
308
313
|
}(s, r);
|
|
@@ -318,142 +323,142 @@ class In extends Sn {
|
|
|
318
323
|
return t.sender ? n.id === t.sender.id ? a.type === "text" ? this.state$.messagePermissions.own : this.state$.messagePermissions.ownWithoutEditing : a.type === "text" ? this.state$.messagePermissions.other : this.state$.messagePermissions.otherWithoutEditing : this.state$.messagePermissions.system;
|
|
319
324
|
}
|
|
320
325
|
storeMessages(t, n, a) {
|
|
321
|
-
|
|
326
|
+
Te(() => {
|
|
322
327
|
var E;
|
|
323
|
-
const s = n.reduce((u,
|
|
328
|
+
const s = n.reduce((u, l) => (u[l.id] = l, u), {}), i = this.state$.extCurrentConversationId.peek(), r = this.extUserId$.peek();
|
|
324
329
|
k(r && i), this.state$.messages.child(t).set({ state: n, lookup: s, loadedAll: a });
|
|
325
330
|
const o = this.state$.ephemeralMessages.child(t);
|
|
326
331
|
for (const u of n) {
|
|
327
|
-
const
|
|
328
|
-
|
|
329
|
-
const
|
|
330
|
-
if (((E = u.sender) == null ? void 0 : E.id) !== r ||
|
|
331
|
-
const d =
|
|
332
|
-
if (
|
|
333
|
-
const _ = () =>
|
|
334
|
-
if (
|
|
335
|
-
|
|
332
|
+
const l = this.state$.ephemeralMessageIdMapping.child(t).child(u.id).peek();
|
|
333
|
+
l && o.child(l).delete();
|
|
334
|
+
const c = u.content[0];
|
|
335
|
+
if (((E = u.sender) == null ? void 0 : E.id) !== r || c.type !== "file") continue;
|
|
336
|
+
const d = c.size + "," + c.filename, D = this.state$.localFileBlobUrls.child(i).child(d);
|
|
337
|
+
if (D.fetching.peek() !== !1) continue;
|
|
338
|
+
const _ = () => D.delete();
|
|
339
|
+
if (c.subtype === "image") {
|
|
340
|
+
D.fetching.set(!0);
|
|
336
341
|
const T = document.createElement("img");
|
|
337
|
-
T.addEventListener("load", _, { once: !0 }), T.src =
|
|
338
|
-
} else if (
|
|
339
|
-
|
|
342
|
+
T.addEventListener("load", _, { once: !0 }), T.src = c.url;
|
|
343
|
+
} else if (c.subtype === "video") {
|
|
344
|
+
D.fetching.set(!0);
|
|
340
345
|
const T = document.createElement("video");
|
|
341
|
-
T.addEventListener("loaddata", _, { once: !0 }), T.src =
|
|
342
|
-
} else if (
|
|
343
|
-
|
|
346
|
+
T.addEventListener("loaddata", _, { once: !0 }), T.src = c.url;
|
|
347
|
+
} else if (c.subtype === "audio") {
|
|
348
|
+
D.fetching.set(!0);
|
|
344
349
|
const T = document.createElement("audio");
|
|
345
|
-
T.addEventListener("loaddata", _, { once: !0 }), T.src =
|
|
350
|
+
T.addEventListener("loaddata", _, { once: !0 }), T.src = c.url;
|
|
346
351
|
}
|
|
347
352
|
}
|
|
348
353
|
});
|
|
349
354
|
}
|
|
350
355
|
}
|
|
351
|
-
function
|
|
356
|
+
function ie(e, t) {
|
|
352
357
|
return e === "all" || e === "own" && t || e === "other" && !t;
|
|
353
358
|
}
|
|
354
|
-
class
|
|
359
|
+
class Ot {
|
|
355
360
|
constructor({ id: t, isDayMarker: n, isReadMarker: a, timestamp: s }) {
|
|
356
361
|
this.id = t, this.isDayMarker = n, this.isReadMarker = a, this.timestamp = n ? s : void 0;
|
|
357
362
|
}
|
|
358
363
|
}
|
|
359
|
-
function
|
|
364
|
+
function Ge(e) {
|
|
360
365
|
const t = f();
|
|
361
|
-
return O(t instanceof
|
|
366
|
+
return O(t instanceof Hn ? Us : bs, { ...e });
|
|
362
367
|
}
|
|
363
|
-
function
|
|
364
|
-
const t =
|
|
368
|
+
function Us(e) {
|
|
369
|
+
const t = W(), n = Ne();
|
|
365
370
|
return O(t.Icon, { common: n, ...e });
|
|
366
371
|
}
|
|
367
|
-
function
|
|
368
|
-
const t =
|
|
372
|
+
function bs(e) {
|
|
373
|
+
const t = W(), n = Fn();
|
|
369
374
|
return O(t.Icon, { common: n, ...e });
|
|
370
375
|
}
|
|
371
|
-
function
|
|
372
|
-
const s =
|
|
373
|
-
|
|
376
|
+
function Tt({ src: e, onError: t, filename: n, className: a = "" }) {
|
|
377
|
+
const s = P(null), i = P(), r = P(), [o, E] = b(!1), [u, l] = b(0), [c, d] = b(1), D = P(), [_, T] = b(!1);
|
|
378
|
+
h(() => {
|
|
374
379
|
i.current = new Audio();
|
|
375
380
|
const N = { normalize: !0, height: 50, container: s.current };
|
|
376
381
|
function L() {
|
|
377
|
-
const
|
|
378
|
-
|
|
382
|
+
const C = i.current;
|
|
383
|
+
C && (C.error.message === "PIPELINE_ERROR_READ: FFmpegDemuxer: demuxer seek failed" ? (C.load(), E(!1)) : (T(!0), E(!1), t == null || t()));
|
|
379
384
|
}
|
|
380
|
-
const
|
|
381
|
-
if (function(
|
|
382
|
-
return /(?:^|\/)talkjs_audio_message_[0-9]+_([0-9]+)[.](?:mp3|webm)$/.test(
|
|
383
|
-
}(n) &&
|
|
385
|
+
const m = n.slice(n.lastIndexOf(".") + 1);
|
|
386
|
+
if (function(C) {
|
|
387
|
+
return /(?:^|\/)talkjs_audio_message_[0-9]+_([0-9]+)[.](?:mp3|webm)$/.test(C);
|
|
388
|
+
}(n) && m === "webm" && !i.current.canPlayType("audio/webm;codecs=opus")) N.backend = "WebAudio", r.current = new Audio("data:audio/mp3;base64,//MkxAAHiAICWABElBeKPL/RANb2w+yiT1g/gTok//lP/W/l3h8QO/OCdCqCW2Cw//MkxAQHkAIWUAhEmAQXWUOFW2dxPu//9mr60ElY5sseQ+xxesmHKtZr7bsqqX2L//MkxAgFwAYiQAhEAC2hq22d3///9FTV6tA36JdgBJoOGgc+7qvqej5Zu7/7uI9l//MkxBQHAAYi8AhEAO193vt9KGOq+6qcT7hhfN5FTInmwk8RkqKImTM55pRQHQSq//MkxBsGkgoIAABHhTACIJLf99nVI///yuW1uBqWfEu7CgNPWGpUadBmZ////4sL//MkxCMHMAH9iABEmAsKioqKigsLCwtVTEFNRTMuOTkuNVVVVVVVVVVVVVVVVVVV//MkxCkECAUYCAAAAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV"), r.current.controls = !1;
|
|
384
389
|
else {
|
|
385
|
-
const
|
|
386
|
-
|
|
390
|
+
const C = i.current;
|
|
391
|
+
C.addEventListener("error", L), C.src = e, C.preload = "auto", C.preservesPitch = !0, N.media = C;
|
|
387
392
|
}
|
|
388
|
-
|
|
389
|
-
var
|
|
390
|
-
if (!
|
|
391
|
-
const
|
|
392
|
-
return
|
|
393
|
+
D.current = function(C) {
|
|
394
|
+
var V, X, J, G, g, x, Re, re;
|
|
395
|
+
if (!C.container) return;
|
|
396
|
+
const B = getComputedStyle(C.container), j = (V = fe.parse(B.color)) != null ? V : new fe(255, 255, 255, 1), v = j.withAlpha(j.alpha / 2);
|
|
397
|
+
return ma.create({ ...C, barGap: (X = C.barGap) != null ? X : 2, barRadius: (J = C.barRadius) != null ? J : 0, barWidth: (G = C.barWidth) != null ? G : 2, barHeight: C.barHeight, hideScrollbar: !0, cursorWidth: (g = C.cursorWidth) != null ? g : 0, cursorColor: C.cursorColor, height: (x = C.height) != null ? x : 24, progressColor: (Re = C.progressColor) != null ? Re : v.toRgbaString(), waveColor: (re = C.waveColor) != null ? re : v.toRgbaString() });
|
|
393
398
|
}(N);
|
|
394
|
-
const
|
|
395
|
-
return
|
|
399
|
+
const p = D.current;
|
|
400
|
+
return p.on("finish", () => {
|
|
396
401
|
i.current.loop = !0, E(!1);
|
|
397
|
-
}),
|
|
402
|
+
}), p.on("ready", (C) => l(Math.trunc(C))), p.on("timeupdate", (C) => l(Math.trunc(C))), N.backend === "WebAudio" && p.load(e).catch(() => {
|
|
398
403
|
T(!0), E(!1), t == null || t();
|
|
399
404
|
}), () => {
|
|
400
|
-
var
|
|
401
|
-
(
|
|
405
|
+
var C;
|
|
406
|
+
(C = i.current) == null || C.removeEventListener("error", L), i.current = void 0, p.destroy(), D.current = void 0;
|
|
402
407
|
};
|
|
403
408
|
}, [e, n, t]);
|
|
404
|
-
const I =
|
|
409
|
+
const I = H(() => {
|
|
405
410
|
var N;
|
|
406
|
-
if (
|
|
411
|
+
if (D.current.options.backend === "WebAudio") D.current.isPlaying() || r.current.play(), D.current.playPause(), E((N = D.current.isPlaying()) != null ? N : !1);
|
|
407
412
|
else {
|
|
408
413
|
const L = i.current;
|
|
409
414
|
L.paused ? L.play() : L.pause(), L.loop = !1, !L.paused && L.ended && (L.load(), L.play()), E(!L.paused);
|
|
410
415
|
}
|
|
411
|
-
}, []), R =
|
|
412
|
-
|
|
416
|
+
}, []), R = H((N) => {
|
|
417
|
+
D.current.setPlaybackRate(N), d(N);
|
|
413
418
|
}, []);
|
|
414
|
-
return _ ? O("div", {}) :
|
|
419
|
+
return _ ? O("div", {}) : K("div", { className: `t-audio-player ${a}`, children: [O("button", { onClick: I, children: O(Ge, { className: "t-play-pause-icon", type: o ? "pause" : "play", "aria-label": o ? "pause audio" : "play audio" }) }), O("div", { className: "t-waveform", ref: s }), O("div", { className: "t-duration", children: sa(u) }), K(he, { type: "menu", popoverComponent: ws, popoverProps: { playbackSpeed: c, selectPlaybackSpeed: R }, className: "t-playback-speed", "aria-label": "set playback speed", children: [c, "x", O(Ge, { type: "updown", className: "t-up-down-icon", "aria-hidden": !0 })] })] });
|
|
415
420
|
}
|
|
416
|
-
const
|
|
417
|
-
function
|
|
418
|
-
return
|
|
421
|
+
const ys = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 2];
|
|
422
|
+
function ws({ playbackSpeed: e, selectPlaybackSpeed: t }) {
|
|
423
|
+
return K("div", { className: "t-playback-speed-menu", children: [O("div", { className: "t-playback-heading", children: "Playback Speed" }), ys.map((n) => K(Ee, { className: "t-menu-item", onSelect: () => t(n), children: [O("span", { className: "t-playback-checkmark", children: e === n ? "✓ " : "" }), n, "x"] }, n))] });
|
|
419
424
|
}
|
|
420
|
-
const
|
|
421
|
-
class
|
|
425
|
+
const Ys = /^rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/, $s = /^rgba\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*([\d.]+)\s*\)$/;
|
|
426
|
+
class fe {
|
|
422
427
|
constructor(t, n, a, s) {
|
|
423
428
|
this.red = t, this.green = n, this.blue = a, this.alpha = s;
|
|
424
429
|
}
|
|
425
430
|
static parse(t) {
|
|
426
431
|
var a;
|
|
427
|
-
const n = (a = t.match(
|
|
432
|
+
const n = (a = t.match(Ys)) != null ? a : t.match($s);
|
|
428
433
|
if (n) {
|
|
429
434
|
const [s, i, r, o, E = "1"] = n;
|
|
430
|
-
return new
|
|
435
|
+
return new fe(Number(i), Number(r), Number(o), Number(E));
|
|
431
436
|
}
|
|
432
437
|
return null;
|
|
433
438
|
}
|
|
434
439
|
withAlpha(t) {
|
|
435
|
-
return new
|
|
440
|
+
return new fe(this.red, this.green, this.blue, t);
|
|
436
441
|
}
|
|
437
442
|
toRgbaString() {
|
|
438
443
|
const { red: t, green: n, blue: a, alpha: s } = this;
|
|
439
444
|
return s !== 1 ? `rgba(${t}, ${n}, ${a}, ${s})` : `rgb(${t}, ${n}, ${a})`;
|
|
440
445
|
}
|
|
441
446
|
}
|
|
442
|
-
const
|
|
443
|
-
if (
|
|
444
|
-
const t = e.doc.firstChild, n =
|
|
445
|
-
return
|
|
447
|
+
const rt = new mn("placeholder"), Yt = new Cn({ key: rt, props: { decorations(e) {
|
|
448
|
+
if (Un(e.doc)) return;
|
|
449
|
+
const t = e.doc.firstChild, n = Dn.node(0, t.nodeSize, { class: "empty-node", "data-placeholder": rt.getState(e) });
|
|
450
|
+
return _n.create(e.doc, [n]);
|
|
446
451
|
} }, state: { init: () => "", apply: (e, t) => {
|
|
447
452
|
var n;
|
|
448
|
-
return (n = e.getMeta(
|
|
453
|
+
return (n = e.getMeta(rt)) != null ? n : t;
|
|
449
454
|
} } });
|
|
450
|
-
function
|
|
455
|
+
function Un(e) {
|
|
451
456
|
return e.childCount !== 1 || e.firstChild.childCount !== 0;
|
|
452
457
|
}
|
|
453
|
-
function
|
|
458
|
+
function Rt(e, t) {
|
|
454
459
|
return e.reduce((n, a, s) => n.concat(t(a, s)), []);
|
|
455
460
|
}
|
|
456
|
-
const
|
|
461
|
+
const Fe = (e, t, n = void 0) => Rt(e, (a) => {
|
|
457
462
|
if (typeof a == "string") return t(a, n);
|
|
458
463
|
switch (a.type) {
|
|
459
464
|
case "bold":
|
|
@@ -464,14 +469,14 @@ const Re = (e, t, n = void 0) => ut(e, (a) => {
|
|
|
464
469
|
case "bulletList":
|
|
465
470
|
case "bulletpoint":
|
|
466
471
|
case "bulletPoint":
|
|
467
|
-
return [{ type: a.type, children:
|
|
472
|
+
return [{ type: a.type, children: Fe(a.children, t, a.type) }];
|
|
468
473
|
case "link":
|
|
469
|
-
return [{ type: a.type, url: a.url, children:
|
|
474
|
+
return [{ type: a.type, url: a.url, children: Fe(a.children, t, a.type) }];
|
|
470
475
|
case "actionlink":
|
|
471
476
|
case "actionLink":
|
|
472
477
|
case "actionbutton":
|
|
473
478
|
case "actionButton":
|
|
474
|
-
return [{ type: a.type, action: a.action, params: a.params, children:
|
|
479
|
+
return [{ type: a.type, action: a.action, params: a.params, children: Fe(a.children, t, a.type) }];
|
|
475
480
|
case "mention":
|
|
476
481
|
case "autolink":
|
|
477
482
|
case "autoLink":
|
|
@@ -486,12 +491,12 @@ const Re = (e, t, n = void 0) => ut(e, (a) => {
|
|
|
486
491
|
return [a];
|
|
487
492
|
}
|
|
488
493
|
});
|
|
489
|
-
function
|
|
494
|
+
function ne(e, t) {
|
|
490
495
|
return (n) => {
|
|
491
496
|
const a = n;
|
|
492
497
|
let s = 0;
|
|
493
498
|
const i = [];
|
|
494
|
-
for (const r of
|
|
499
|
+
for (const r of Qe(n, e)) {
|
|
495
500
|
r.index - s > 0 && i.push(a.substring(s, r.index));
|
|
496
501
|
const o = t(r);
|
|
497
502
|
Array.isArray(o) ? i.push(...o) : i.push(o), s = r.index + r[0].length;
|
|
@@ -499,32 +504,32 @@ function Z(e, t) {
|
|
|
499
504
|
return s < n.length && i.push(n.substring(s)), i;
|
|
500
505
|
};
|
|
501
506
|
}
|
|
502
|
-
function
|
|
507
|
+
function bn(e) {
|
|
503
508
|
return e.replace(/<!!mention:.*?\|([^>]*)>/gim, "@$1").replace(/<!!customemoji:(.*?)>/gim, "$1");
|
|
504
509
|
}
|
|
505
|
-
const
|
|
506
|
-
var
|
|
507
|
-
const
|
|
510
|
+
const $t = "’'()[]{}<>:,‒–—―…!.«»-‐?‘’“”;/⁄␠·&@*\\•^¤¢$€£¥₩₪†‡°¡¿¬#№%‰‱¶′§~¨_|¦⁂☞∴‽※".replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
|
|
511
|
+
var dt = ((e) => (e[e.italic = 1] = "italic", e[e.strikethrough = 2] = "strikethrough", e[e.bold = 4] = "bold", e))(dt || {});
|
|
512
|
+
const js = [0, 1, 2, 3, 4, 5, 6].map((e) => {
|
|
508
513
|
const t = [];
|
|
509
514
|
return 1 & e || t.push(/_([^\s_].*?[^\s_])_|_([^\s_])_/), 2 & e || t.push(/~([^\s~].*?[^\s~])~|~([^\s~])~/), 4 & e || t.push(/\*([^\s*].*?[^\s*])\*|\*([^\s*])\*/), new RegExp(t.map((n) => n.source).join("|"), "g");
|
|
510
|
-
}),
|
|
511
|
-
function
|
|
512
|
-
return
|
|
515
|
+
}), xs = { _: 1, "*": 4, "~": 2 };
|
|
516
|
+
function Vs(e) {
|
|
517
|
+
return yn(e, 0);
|
|
513
518
|
}
|
|
514
|
-
function
|
|
515
|
-
const n =
|
|
516
|
-
const i =
|
|
519
|
+
function yn(e, t = 0) {
|
|
520
|
+
const n = js[t], a = n ? function(s) {
|
|
521
|
+
const i = Xs.getOrCompute(s, () => new RegExp(`(?:^|[\\s${$t}])(?:${s.source})(?=[\\s${$t}]|$)`, "g")), r = ne(i, (o) => {
|
|
517
522
|
const E = o[0][1], u = o[1] || o[2] || o[3] || o[4] || o[5] || o[6];
|
|
518
|
-
return [" ", { type:
|
|
523
|
+
return [" ", { type: dt[xs[E]], children: [u] }];
|
|
519
524
|
});
|
|
520
525
|
return (o) => {
|
|
521
526
|
const [E, ...u] = r(" " + o);
|
|
522
527
|
return E.length > 1 && u.unshift(E.substring(1)), u;
|
|
523
528
|
};
|
|
524
529
|
}(n) : () => [e];
|
|
525
|
-
return
|
|
530
|
+
return Fe(a(e), (s, i) => i === "bold" || i === "italic" || i === "strikethrough" ? yn(s, t | dt[i]) : [s]);
|
|
526
531
|
}
|
|
527
|
-
const
|
|
532
|
+
const Xs = function() {
|
|
528
533
|
const e = function() {
|
|
529
534
|
try {
|
|
530
535
|
return /* @__PURE__ */ new WeakMap();
|
|
@@ -540,82 +545,82 @@ const Fs = function() {
|
|
|
540
545
|
return e.set(t, a), a;
|
|
541
546
|
} };
|
|
542
547
|
}();
|
|
543
|
-
function
|
|
548
|
+
function wn(e, t = e) {
|
|
544
549
|
return { type: "autolink", url: e, text: t };
|
|
545
550
|
}
|
|
546
|
-
const
|
|
551
|
+
const Gs = ne(/<!!mention:([^>\s]*?)\|(.*?)>/gm, ([e, t, n]) => /* @__PURE__ */ function(a, s) {
|
|
547
552
|
return { type: "mention", id: a, text: s };
|
|
548
|
-
}(decodeURIComponent(t), n)),
|
|
553
|
+
}(decodeURIComponent(t), n)), zs = ne(/<!!customemoji:(.*?)>/gm, ([e, t]) => /* @__PURE__ */ function(n) {
|
|
549
554
|
return { type: "customemoji", text: n };
|
|
550
|
-
}(t)),
|
|
555
|
+
}(t)), Yn = ne(/<((?:https?|mailto):.*?)\|(.*?)>/gi, ([e, t, n]) => /* @__PURE__ */ function(a, s = []) {
|
|
551
556
|
return { type: "link", url: a, children: s };
|
|
552
|
-
}(t, [n])),
|
|
553
|
-
const { action: a, params: s } =
|
|
557
|
+
}(t, [n])), Ks = ne(/<actionlink:([^|]+)[|]([^>]*)>/gi, ([e, t, n]) => {
|
|
558
|
+
const { action: a, params: s } = $n(t);
|
|
554
559
|
return /* @__PURE__ */ function(i, r, o = []) {
|
|
555
560
|
return { type: "actionlink", action: i, params: r, children: o };
|
|
556
561
|
}(a, s, [n]);
|
|
557
|
-
}),
|
|
558
|
-
const { action: a, params: s } =
|
|
562
|
+
}), Ws = ne(/<actionbutton:([^|]+)[|]([^>]*)>/gi, ([e, t, n]) => {
|
|
563
|
+
const { action: a, params: s } = $n(t);
|
|
559
564
|
return /* @__PURE__ */ function(i, r, o = []) {
|
|
560
565
|
return { type: "actionbutton", action: i, params: r, children: o };
|
|
561
566
|
}(a, s, [n]);
|
|
562
567
|
});
|
|
563
|
-
function
|
|
568
|
+
function $n(e) {
|
|
564
569
|
const t = e.indexOf("?");
|
|
565
570
|
return t === -1 ? { action: e, params: {} } : { action: e.slice(0, t), params: Object.fromEntries(new URLSearchParams(e.slice(t))) };
|
|
566
571
|
}
|
|
567
|
-
const
|
|
572
|
+
const qs = ne(/(?:^|\n)(?:\s*[-*+]\s+[^\n]+(?:\n|$))+/g, ([e]) => /* @__PURE__ */ function(t = []) {
|
|
568
573
|
return { type: "bulletlist", children: t };
|
|
569
574
|
}([e.startsWith(`
|
|
570
|
-
`) ? e.slice(1) : e])),
|
|
575
|
+
`) ? e.slice(1) : e])), Js = ne(/^\s*[-*+]\s+([^\n]+)(?:\n|$)/gm, ([e, t]) => ({ type: "bulletpoint", children: [t] })), jn = (e) => {
|
|
571
576
|
const t = /(?:^|[^-:/\w])([(+]?[0-9](?:[-_+ ().]?[0-9]){5,11}[0-9])(?:[^-:/\w]|$)/g;
|
|
572
577
|
let n = 0;
|
|
573
578
|
const a = [];
|
|
574
|
-
for (const s of
|
|
579
|
+
for (const s of Qe(e, t)) {
|
|
575
580
|
const i = s[0], r = s[1], o = i.startsWith(r) ? s.index : s.index + 1;
|
|
576
581
|
o - n > 0 && a.push(e.substring(n, o));
|
|
577
|
-
const E =
|
|
582
|
+
const E = wn("tel:" + r.replace(/[^0-9+]/g, ""), r);
|
|
578
583
|
a.push(E), n = o + r.length;
|
|
579
584
|
}
|
|
580
585
|
return n < e.length && a.push(e.substring(n)), a;
|
|
581
|
-
},
|
|
582
|
-
const t =
|
|
586
|
+
}, xn = (e) => Yn(e).flatMap((t) => typeof t == "string" ? ot(t) : ["<", ...ot(t.url), ...ot("|" + t.children[0] + ">")]), ot = (e) => {
|
|
587
|
+
const t = Pa.parse(e, { urls: !0, email: !0, phone: !1, hashtag: !1, mention: !1 }), n = [];
|
|
583
588
|
let a = 0;
|
|
584
589
|
for (const s of t) {
|
|
585
590
|
const i = s.getOffset(), r = s.getMatchedText(), o = r.length;
|
|
586
591
|
let E = r;
|
|
587
|
-
s instanceof
|
|
592
|
+
s instanceof Ha ? E = "mailto:" + s.getEmail() : s instanceof Ua && (E = s.getUrl()), i > a && n.push(e.substring(a, i)), n.push(wn(E, r)), a = i + o;
|
|
588
593
|
}
|
|
589
594
|
return a < e.length && n.push(e.substring(a)), n;
|
|
590
|
-
},
|
|
591
|
-
function
|
|
595
|
+
}, Zs = ["Codeblock", "Codespan", "FormattedLink", "Wikitext", "Autolink", "Actions", "Mention", "Mention", "BulletPoint", "CustomEmoji"];
|
|
596
|
+
function Qs(e = { except: [] }) {
|
|
592
597
|
var a;
|
|
593
|
-
const t = { multilineSteps: [], singlelineSteps: [] }, n = (a = e.except) != null ? a :
|
|
594
|
-
return n.includes("BulletPoint") || t.multilineSteps.push(
|
|
598
|
+
const t = { multilineSteps: [], singlelineSteps: [] }, n = (a = e.except) != null ? a : Zs.filter((s) => !e.only.includes(s));
|
|
599
|
+
return n.includes("BulletPoint") || t.multilineSteps.push(qs, Js), n.includes("Mention") || t.singlelineSteps.push(Gs), n.includes("CustomEmoji") || t.singlelineSteps.push(zs), n.includes("Codespan") || t.multilineSteps.push(ne(/```([^]+?)```/g, ([s, i]) => ({ type: "codespan", text: bn(i) }))), n.includes("FormattedLink") || t.singlelineSteps.push(Yn), n.includes("Actions") || (t.singlelineSteps.push(Ks), t.singlelineSteps.push(Ws)), n.includes("Wikitext") || t.singlelineSteps.push(Vs), n.includes("Autolink") || t.singlelineSteps.push(xn, jn), t;
|
|
595
600
|
}
|
|
596
|
-
const
|
|
601
|
+
const ei = function(e) {
|
|
597
602
|
const t = RegExp(`[^${e}]+${e}?|${e}`, "g");
|
|
598
603
|
return (n) => Array.from(n.match(t) || []);
|
|
599
604
|
}(`
|
|
600
605
|
`);
|
|
601
|
-
function
|
|
602
|
-
let n =
|
|
603
|
-
return n =
|
|
606
|
+
function Vn(e, t = { except: [] }) {
|
|
607
|
+
let n = Xn(e, Qs(t));
|
|
608
|
+
return n = Gn(n, !1), n;
|
|
604
609
|
}
|
|
605
|
-
function
|
|
610
|
+
function Xn(e, t) {
|
|
606
611
|
let n = [e];
|
|
607
|
-
return n =
|
|
612
|
+
return n = Et(n, t.multilineSteps), n = Et(n, [ei]), n = Et(n, t.singlelineSteps), n = Lt(n), n;
|
|
608
613
|
}
|
|
609
|
-
function
|
|
610
|
-
return t.reduce((n, a) =>
|
|
614
|
+
function Et(e, t) {
|
|
615
|
+
return t.reduce((n, a) => Fe(n, a), e);
|
|
611
616
|
}
|
|
612
|
-
function
|
|
617
|
+
function Lt(e) {
|
|
613
618
|
const t = [];
|
|
614
619
|
let n = -1;
|
|
615
|
-
for (const a of e) typeof a == "string" ? typeof t[n] == "string" ? t[n] += a : t[++n] = a : t[++n] = "children" in a ? { ...a, children:
|
|
620
|
+
for (const a of e) typeof a == "string" ? typeof t[n] == "string" ? t[n] += a : t[++n] = a : t[++n] = "children" in a ? { ...a, children: Lt(a.children) } : a;
|
|
616
621
|
return t;
|
|
617
622
|
}
|
|
618
|
-
function
|
|
623
|
+
function Gn(e, t) {
|
|
619
624
|
const n = [];
|
|
620
625
|
let a = [];
|
|
621
626
|
for (let s = 0; s < e.length; s++) {
|
|
@@ -623,13 +628,13 @@ function fn(e, t) {
|
|
|
623
628
|
if (typeof i == "string") a.push(i);
|
|
624
629
|
else if ("children" in i) {
|
|
625
630
|
a.length > 0 && (n.push(a.join("")), a = []);
|
|
626
|
-
const r =
|
|
631
|
+
const r = Gn(i.children, t || i.type === "link" || i.type === "actionbutton" || i.type === "actionlink");
|
|
627
632
|
n.push({ ...i, children: r });
|
|
628
633
|
} else i.type === "autolink" && t ? a.push(i.text) : (a.length > 0 && (n.push(a.join("")), a = []), n.push(i));
|
|
629
634
|
}
|
|
630
635
|
return a.length > 0 && (n.push(a.join("")), a = []), n;
|
|
631
636
|
}
|
|
632
|
-
function
|
|
637
|
+
function ti() {
|
|
633
638
|
let e, t = 0;
|
|
634
639
|
return (n) => {
|
|
635
640
|
const a = (i = Date.now()) => {
|
|
@@ -637,13 +642,13 @@ function ys() {
|
|
|
637
642
|
const r = function(o) {
|
|
638
643
|
o = o.removeMark(0, o.doc.content.size, y.marks.bold), o = o.removeMark(0, o.doc.content.size, y.marks.italic), o = o.removeMark(0, o.doc.content.size, y.marks.strikethrough), o.doc.firstChild;
|
|
639
644
|
const E = function(u) {
|
|
640
|
-
const
|
|
641
|
-
let
|
|
642
|
-
return u.descendants((
|
|
645
|
+
const l = [];
|
|
646
|
+
let c, d = "";
|
|
647
|
+
return u.descendants((D, _) => (D.isText ? (d += D.text, c != null || (c = _)) : d && c !== void 0 && (l.push({ text: d, pos: c }), d = "", c = void 0), D.type !== y.nodes.mention)), d && c !== void 0 && l.push({ text: d, pos: c }), l;
|
|
643
648
|
}(o.doc);
|
|
644
|
-
for (const { text: u, pos:
|
|
645
|
-
const
|
|
646
|
-
[o] =
|
|
649
|
+
for (const { text: u, pos: l } of E) {
|
|
650
|
+
const c = Vn(u, { only: ["Wikitext"] });
|
|
651
|
+
[o] = zn(o, l, c);
|
|
647
652
|
}
|
|
648
653
|
return o;
|
|
649
654
|
}(n.state.tr);
|
|
@@ -652,157 +657,157 @@ function ys() {
|
|
|
652
657
|
s - t < 300 ? e || (e = window.setTimeout(a, 300)) : a(s);
|
|
653
658
|
};
|
|
654
659
|
}
|
|
655
|
-
function
|
|
660
|
+
function zn(e, t, n, a = 0, s = []) {
|
|
656
661
|
for (const i of n) if (typeof i == "string") {
|
|
657
662
|
for (const r of s) e.addMark(t + a, t + a + i.length, r.create());
|
|
658
663
|
a += i.length;
|
|
659
664
|
} else if (i.type === "bold" || i.type === "italic" || i.type === "strikethrough") {
|
|
660
665
|
a += 1;
|
|
661
666
|
const r = y.marks[i.type], o = [...s, r];
|
|
662
|
-
[e, a] =
|
|
667
|
+
[e, a] = zn(e, t, i.children, a, o), a += 1;
|
|
663
668
|
} else k.unreachable();
|
|
664
669
|
return [e, a];
|
|
665
670
|
}
|
|
666
|
-
function
|
|
671
|
+
function jt(e) {
|
|
667
672
|
return (t, n) => {
|
|
668
673
|
if (!n) return !0;
|
|
669
674
|
let a = t.tr;
|
|
670
|
-
const s =
|
|
671
|
-
return a = a.replaceRangeWith(s.from, s.from, y.text(e, a.storedMarks)), a = a.replaceRangeWith(s.to + 1, s.to + 1, y.text(e, a.storedMarks)), a = a.setSelection(
|
|
675
|
+
const s = kt.between(t.selection.$from, t.selection.$to);
|
|
676
|
+
return a = a.replaceRangeWith(s.from, s.from, y.text(e, a.storedMarks)), a = a.replaceRangeWith(s.to + 1, s.to + 1, y.text(e, a.storedMarks)), a = a.setSelection(kt.near(a.doc.resolve(s.to + 1))), n(a), !0;
|
|
672
677
|
};
|
|
673
678
|
}
|
|
674
|
-
function
|
|
679
|
+
function ni(e, t, n) {
|
|
675
680
|
const a = t.clipboardData;
|
|
676
681
|
if (!a) return !1;
|
|
677
682
|
const s = function(i) {
|
|
678
|
-
const r = i.items || [], o = { "image/gif": "gif", "image/png": "png", "image/jpeg": "jpg", "image/svg+xml": "svg" }, E = Array.from(r).filter((
|
|
683
|
+
const r = i.items || [], o = { "image/gif": "gif", "image/png": "png", "image/jpeg": "jpg", "image/svg+xml": "svg" }, E = Array.from(r).filter((c) => c.kind === "file" && o[c.type]);
|
|
679
684
|
if (E.length === 0 || i.types.includes("text/rtf")) return;
|
|
680
685
|
const u = E[0];
|
|
681
|
-
let
|
|
682
|
-
if (!
|
|
683
|
-
const
|
|
684
|
-
|
|
686
|
+
let l = u.getAsFile();
|
|
687
|
+
if (!l.name) {
|
|
688
|
+
const c = "image." + o[u.type];
|
|
689
|
+
l = new File([l], c, { type: u.type, lastModified: Date.now() });
|
|
685
690
|
}
|
|
686
|
-
return
|
|
691
|
+
return l;
|
|
687
692
|
}(a);
|
|
688
693
|
return s ? n(s) : function(i, r) {
|
|
689
694
|
const o = i.state.tr.insertText(r).scrollIntoView().setMeta("paste", !0).setMeta("uiEvent", "paste");
|
|
690
695
|
i.dispatch(o);
|
|
691
696
|
}(e, a.getData("text/plain")), !0;
|
|
692
697
|
}
|
|
693
|
-
function
|
|
698
|
+
function ai(e, { allowSpaces: t = !1 }) {
|
|
694
699
|
return (n) => {
|
|
695
700
|
const a = new RegExp(`\\s${e}$`), s = t ? new RegExp(`${e}.*?(?=\\s${e}|$)`, "g") : new RegExp(`(?:^)?${e}[^\\s${e}]*`, "g"), i = n.before(), r = n.end(), o = n.doc.textBetween(i, r, "\0", "\0");
|
|
696
701
|
let E;
|
|
697
702
|
for (; E = s.exec(o); ) {
|
|
698
703
|
const u = E.input.slice(Math.max(0, E.index - 1), E.index);
|
|
699
704
|
if (!/^[\s\0]?$/.test(u)) continue;
|
|
700
|
-
const
|
|
701
|
-
let
|
|
702
|
-
if (t && a.test(o.slice(
|
|
705
|
+
const l = E.index + n.start();
|
|
706
|
+
let c = l + E[0].length;
|
|
707
|
+
if (t && a.test(o.slice(c - 1, c + 1)) && (E[0] += " ", c++), l < n.pos && c >= n.pos) return { range: { from: l, to: c }, text: E[0] };
|
|
703
708
|
}
|
|
704
709
|
};
|
|
705
710
|
}
|
|
706
|
-
function
|
|
707
|
-
return new
|
|
711
|
+
function xt({ matcher: e = ai("#"), suggestionClass: t = "ProseMirror-suggestion", onEnter: n = () => !1, onChange: a = () => !1, onExit: s = () => !1, onKeyDown: i = () => !1, debug: r = !1 }) {
|
|
712
|
+
return new Cn({ key: new mn("suggestions"), view() {
|
|
708
713
|
return { update: (o, E) => {
|
|
709
|
-
const u = this.key.getState(E),
|
|
710
|
-
(
|
|
714
|
+
const u = this.key.getState(E), l = this.key.getState(o.state), c = u.active && l.active && u.range.from !== l.range.from, d = !u.active && l.active, D = u.active && !l.active, _ = !d && !D && u.text !== l.text;
|
|
715
|
+
(D || c) && s({ view: o, range: u.range, text: u.text }), _ && !c && a({ view: o, range: l.range, text: l.text }), (d || c) && n({ view: o, range: l.range, text: l.text });
|
|
711
716
|
} };
|
|
712
717
|
}, state: { init: () => ({ active: !1, range: {}, text: null }), apply(o, E) {
|
|
713
|
-
const { selection: u } = o,
|
|
718
|
+
const { selection: u } = o, l = { ...E };
|
|
714
719
|
if (u.from === u.to) {
|
|
715
|
-
(u.from < E.range.from || u.from > E.range.to) && (
|
|
716
|
-
const
|
|
717
|
-
d ? (
|
|
718
|
-
} else
|
|
719
|
-
return
|
|
720
|
+
(u.from < E.range.from || u.from > E.range.to) && (l.active = !1);
|
|
721
|
+
const c = u.$from, d = e(c);
|
|
722
|
+
d ? (l.active = !0, l.range = d.range, l.text = d.text) : l.active = !1;
|
|
723
|
+
} else l.active = !1;
|
|
724
|
+
return l.active || (l.range = {}, l.text = null), l;
|
|
720
725
|
} }, props: { handleKeyDown(o, E) {
|
|
721
726
|
const { active: u } = this.getState(o.state);
|
|
722
727
|
return !!u && i({ view: o, event: E });
|
|
723
728
|
}, decorations(o) {
|
|
724
729
|
const { active: E, range: u } = this.getState(o);
|
|
725
|
-
return E ?
|
|
730
|
+
return E ? _n.create(o.doc, [Dn.inline(u.from, u.to, { nodeName: "span", class: t, style: r ? "background: rgba(0, 0, 255, 0.05); color: blue; border: 2px solid blue;" : null })]) : null;
|
|
726
731
|
} } });
|
|
727
732
|
}
|
|
728
|
-
function
|
|
729
|
-
const i =
|
|
730
|
-
return
|
|
731
|
-
const
|
|
733
|
+
function si({ placeholder: e, disabled: t, className: n = "", characterLimit: a, spellcheck: s }) {
|
|
734
|
+
const i = He(), r = P(), o = P(null);
|
|
735
|
+
return h(() => (r.current = function(E, u, l, c, d) {
|
|
736
|
+
const D = fa.create({ schema: y, plugins: [...d.filter(ii), ka(), Mt({ ...ye, "Mod-z": Ma, "Mod-y": Ba, "Mod-b": jt("*"), "Mod-i": jt("_"), "Mod-Enter": ye.Enter, "Shift-Enter": ye.Enter, Enter: l }), Mt({ Enter: ye.Enter }), Yt] }), _ = ti(), T = new Ca(E, { handlePaste: (I, R, N) => ni(I, R, c), clipboardTextSerializer(I) {
|
|
732
737
|
const R = [];
|
|
733
738
|
return I.content.forEach((N) => {
|
|
734
|
-
N && R.push(
|
|
739
|
+
N && R.push(bn(N.textContent));
|
|
735
740
|
}), R.join();
|
|
736
|
-
}, state:
|
|
741
|
+
}, state: D, dispatchTransaction(I) {
|
|
737
742
|
I = (I = I.removeStoredMark(y.marks.literal)).removeStoredMark(y.marks.emoji);
|
|
738
743
|
const R = T.state.apply(I);
|
|
739
|
-
T.state.doc.eq(R.doc) || u(new
|
|
744
|
+
T.state.doc.eq(R.doc) || u(new ze(R.doc)), T.updateState(R), I.steps.some((N) => N instanceof ba) && _(T);
|
|
740
745
|
} });
|
|
741
746
|
return T;
|
|
742
747
|
}(o.current, (E) => i.onChange(E), () => !!i.onEnter && (i.onEnter(), !0), (E) => i.onPasteImage(E), [i.emojiSuggesterPlugin(), i.mentionsPlugin()]), i.setEditorView(r.current), () => {
|
|
743
748
|
var E;
|
|
744
749
|
i.setEditorView(void 0), (E = r.current) == null || E.destroy();
|
|
745
|
-
}), [i]),
|
|
750
|
+
}), [i]), h(() => {
|
|
746
751
|
var E;
|
|
747
752
|
(E = r.current) == null || E.setProps({ editable: () => !t });
|
|
748
|
-
}, [t]),
|
|
749
|
-
var E, u,
|
|
750
|
-
return (
|
|
751
|
-
}), [i, s]),
|
|
753
|
+
}, [t]), h(() => Pt(() => {
|
|
754
|
+
var E, u, l;
|
|
755
|
+
return (l = r.current) == null ? void 0 : l.setProps({ attributes: { spellcheck: String((u = (E = i.spellcheck$.get()) != null ? E : s) != null ? u : !1), class: "t-text-input", "aria-label": "Message Field", role: "textbox" } });
|
|
756
|
+
}), [i, s]), h(() => Pt(() => {
|
|
752
757
|
var u;
|
|
753
758
|
const E = r.current;
|
|
754
|
-
E == null || E.dispatch(E.state.tr.setMeta(
|
|
755
|
-
}), [i, e]),
|
|
759
|
+
E == null || E.dispatch(E.state.tr.setMeta(Yt, (u = i.placeholder$.get()) != null ? u : e));
|
|
760
|
+
}), [i, e]), h(() => {
|
|
756
761
|
a && Number.isInteger(a) && i.setMaxLength(a);
|
|
757
762
|
}, [a, i]), O("div", { className: `t-editor ${n}`, ref: o });
|
|
758
763
|
}
|
|
759
|
-
function
|
|
764
|
+
function Vt(e) {
|
|
760
765
|
if (e.startsWith(":")) throw new Error("Not implemented");
|
|
761
766
|
{
|
|
762
767
|
const t = y.marks.emoji.create({ emoji: e });
|
|
763
768
|
return y.text(e, [t]);
|
|
764
769
|
}
|
|
765
770
|
}
|
|
766
|
-
function
|
|
771
|
+
function Xt(e, t) {
|
|
767
772
|
const n = encodeURIComponent(e);
|
|
768
773
|
return y.nodes.mention.create({ id: e, name: t }, y.text(`<!!mention:${n}|${t}>`));
|
|
769
774
|
}
|
|
770
|
-
const
|
|
775
|
+
const We = class We {
|
|
771
776
|
constructor(t) {
|
|
772
|
-
this.doc = t, this.size = this.doc.content.size, this.hasContent =
|
|
777
|
+
this.doc = t, this.size = this.doc.content.size, this.hasContent = Un(this.doc);
|
|
773
778
|
}
|
|
774
779
|
asText() {
|
|
775
780
|
return this.doc.textContent.replace(/\xa0/g, " ");
|
|
776
781
|
}
|
|
777
782
|
};
|
|
778
|
-
|
|
779
|
-
let
|
|
780
|
-
function
|
|
783
|
+
We.EMPTY = new We(y.topNodeType.create());
|
|
784
|
+
let ze = We;
|
|
785
|
+
function ii(e) {
|
|
781
786
|
return e != null;
|
|
782
787
|
}
|
|
783
|
-
const
|
|
784
|
-
function
|
|
785
|
-
return
|
|
788
|
+
const Kn = /^\/.*[^\\]\/[im]*$/;
|
|
789
|
+
function Gt(e) {
|
|
790
|
+
return Kn.test(e) ? !Ke(e).test("") : !1;
|
|
786
791
|
}
|
|
787
|
-
function
|
|
792
|
+
function Ke(e) {
|
|
788
793
|
const t = e.match(/^\/(.*[^\\])\/(.*)$/);
|
|
789
794
|
if (!t) throw new Error(`Expected ${e} to be a (non-empty) regex`);
|
|
790
795
|
let n = t[2] || "";
|
|
791
796
|
return n = n.replace(/[^im]/g, "") + "g", new RegExp(t[1], n);
|
|
792
797
|
}
|
|
793
|
-
function
|
|
798
|
+
function Wn(e) {
|
|
794
799
|
const t = e.replace(/\./g, "\\.").replace(/\*/g, ".*");
|
|
795
800
|
return new RegExp("^" + t + "$", "i");
|
|
796
801
|
}
|
|
797
|
-
function
|
|
798
|
-
const n =
|
|
802
|
+
function ri(e, t) {
|
|
803
|
+
const n = gn(t), a = Wn(e);
|
|
799
804
|
return n !== void 0 && a.test(n);
|
|
800
805
|
}
|
|
801
|
-
const
|
|
802
|
-
function
|
|
806
|
+
const oi = /^[]/g;
|
|
807
|
+
function Ei(e) {
|
|
803
808
|
return e.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");
|
|
804
809
|
}
|
|
805
|
-
function
|
|
810
|
+
function St(e, t) {
|
|
806
811
|
!e() && !t && (t = e.toString().replace(/^function\s*\(\)\s*\{\s*return\s*(.*);\s*\}\s*$/, "`$1`") + " was not true");
|
|
807
812
|
}
|
|
808
813
|
((e) => {
|
|
@@ -836,45 +841,51 @@ function rt(e, t) {
|
|
|
836
841
|
}, e.falsy = function(a) {
|
|
837
842
|
}, e.never = function(a) {
|
|
838
843
|
};
|
|
839
|
-
})(
|
|
840
|
-
const Ee = rt, Gs = new RegExp(":arslan:|" + /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE89\uDE8F-\uDEC2\uDEC6\uDECE-\uDEDC\uDEDF-\uDEE9]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g.source, "g"), zs = /\uFE0F/g, Ks = "";
|
|
841
|
-
function
|
|
844
|
+
})(St || (St = {}));
|
|
845
|
+
const Ae = St, ui = new RegExp(":arslan:|" + /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE89\uDE8F-\uDEC2\uDEC6\uDECE-\uDEDC\uDEDF-\uDEE9]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g.source, "g"), li = /\uFE0F/g, ci = "";
|
|
846
|
+
function Di(e) {
|
|
842
847
|
if (e === ":arslan:") return "https://cdn.talkjs.com/__assets/5461191341cea882b3f227c085d5772c.gif";
|
|
843
848
|
const t = function(a) {
|
|
844
849
|
const s = [];
|
|
845
850
|
let i = 0, r = 0, o = 0;
|
|
846
851
|
for (; o < a.length; ) i = a.charCodeAt(o++), r ? (s.push((65536 + (r - 55296 << 10) + (i - 56320)).toString(16)), r = 0) : 55296 <= i && i <= 56319 ? r = i : s.push(i.toString(16));
|
|
847
852
|
return s.join("-");
|
|
848
|
-
}((n = e).indexOf(
|
|
853
|
+
}((n = e).indexOf(ci) < 0 ? n.replace(li, "") : n);
|
|
849
854
|
var n;
|
|
850
855
|
return `https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/${t}.svg`;
|
|
851
856
|
}
|
|
852
|
-
class
|
|
857
|
+
class qn {
|
|
853
858
|
constructor({ mode: t, allowedHostnames: n, allowedPhoneNrs: a, allowedMatches: s, forbiddenMatches: i, suppressLinks: r, suppressEmailAddresses: o, suppressPhoneNumbers: E, replacement: u }) {
|
|
854
|
-
|
|
859
|
+
Ae.oneOf(t, ["all", "otherOnly", "off"]), this.mode = t, this.suppressLinks = r !== !1, this.suppressEmailAddresses = o !== !1, this.suppressPhoneNumbers = E !== !1, this.allowedHostnames = n || [], this.allowedPhoneNrs = (a || []).filter((l) => l).map((l) => l.replace(/[^0-9]/g, "")), this.allowedMatches = (s || []).filter(Gt).map((l) => Ke(l)), this.forbiddenMatches = (i || []).filter(Gt).map((l) => Ke(l)), Ae(() => this.allowedMatches.every((l) => l.flags.includes("g")), "All regexes in `suppressContactInfo.allowedMatches` must be global. Check `allowedMatches`!"), Ae(() => this.forbiddenMatches.every((l) => l.flags.includes("g")), "All regexes in `suppressContactInfo.forbiddenMatches` must be global. Check `forbiddenMatches`!"), u = u == null ? void 0 : u.trim(), this.replacement = u && u.length > 0 ? u : void 0;
|
|
855
860
|
}
|
|
856
861
|
shouldSuppress({ isContentBySender: t }) {
|
|
857
862
|
return this.mode === "all" || this.mode === "otherOnly" && !t;
|
|
858
863
|
}
|
|
859
864
|
}
|
|
860
|
-
function
|
|
861
|
-
var n, a, s, i, r, o, E, u,
|
|
865
|
+
function mt(e) {
|
|
866
|
+
var n, a, s, i, r, o, E, u, l, c, d, D, _;
|
|
862
867
|
let t = "";
|
|
863
|
-
return e.t && (t = `(${e.t("CONTACT_INFORMATION_HIDDEN")})`), { formattedLinks: (n = e.formattedLinks) != null ? n : "plaintext", markup: (a = e.markup) != null ? a : !1, useFallbackMentions: (s = e.useFallbackMentions) != null ? s : !1, sameTabLinkRules: (i = e.sameTabLinkRules) != null ? i : [], enableEmojiImageFallback: (r = e.enableEmojiImageFallback) != null ? r : !1, highlight: (o = e.highlight) != null ? o : [], contactInfo: (E = e.contactInfo) != null ? E : !1, suppression: (u = e.suppression) != null ? u : new
|
|
868
|
+
return e.t && (t = `(${e.t("CONTACT_INFORMATION_HIDDEN")})`), { formattedLinks: (n = e.formattedLinks) != null ? n : "plaintext", markup: (a = e.markup) != null ? a : !1, useFallbackMentions: (s = e.useFallbackMentions) != null ? s : !1, sameTabLinkRules: (i = e.sameTabLinkRules) != null ? i : [], enableEmojiImageFallback: (r = e.enableEmojiImageFallback) != null ? r : !1, highlight: (o = e.highlight) != null ? o : [], contactInfo: (E = e.contactInfo) != null ? E : !1, suppression: (u = e.suppression) != null ? u : new qn({ mode: "off" }), contactInfoHiddenText: (d = (c = e.contactInfoHiddenText) != null ? c : (l = e.suppression) == null ? void 0 : l.replacement) != null ? d : t, customEmojiUrls: (D = e.customEmojiUrls) != null ? D : {}, enableActions: (_ = e.enableActions) != null ? _ : !0 };
|
|
864
869
|
}
|
|
865
|
-
function
|
|
870
|
+
function _i({ id: e, text: t }) {
|
|
866
871
|
var i;
|
|
867
|
-
const n = f(), a =
|
|
872
|
+
const n = f(), a = F(() => {
|
|
868
873
|
var E;
|
|
869
874
|
if (n.type === "ConversationListStore") return;
|
|
870
875
|
const r = n.state$.extCurrentConversationId.get(), o = r && n.state$.participants.child(r).get();
|
|
871
876
|
return (E = o == null ? void 0 : o.find((u) => u.user.id === e)) == null ? void 0 : E.user;
|
|
872
|
-
}), s =
|
|
877
|
+
}), s = F(n.extUserId$);
|
|
873
878
|
return O("span", { className: "t-mention", "t-is-current-user": s === e ? "" : void 0, children: `@${(i = a == null ? void 0 : a.name) != null ? i : t}` });
|
|
874
879
|
}
|
|
875
|
-
function
|
|
880
|
+
function Ai({ message: e, type: t, action: n, params: a, children: s }) {
|
|
881
|
+
const i = Ue(), r = H((E) => {
|
|
882
|
+
E.preventDefault(), i.triggerMessageAction(e, n, a);
|
|
883
|
+
}, [i, e, n, a]), o = { "t-action": n, onClick: r };
|
|
884
|
+
return t === "actionButton" ? O("button", { ...o, type: "button", children: s }) : O("a", { ...o, href: "#", children: s });
|
|
885
|
+
}
|
|
886
|
+
function Se(e, t) {
|
|
876
887
|
const n = e.flatMap((a) => {
|
|
877
|
-
if (typeof a == "string") return
|
|
888
|
+
if (typeof a == "string") return ut(a, t.highlight);
|
|
878
889
|
switch (a.type) {
|
|
879
890
|
case "bold":
|
|
880
891
|
case "italic":
|
|
@@ -882,105 +893,109 @@ function le(e, t) {
|
|
|
882
893
|
case "blockquote":
|
|
883
894
|
case "bulletpoint":
|
|
884
895
|
case "bulletPoint":
|
|
885
|
-
return
|
|
896
|
+
return Oi(a, t);
|
|
886
897
|
case "bulletlist":
|
|
887
898
|
case "bulletList":
|
|
888
|
-
return [
|
|
899
|
+
return [le("ul", null, ...Se(a.children, t))];
|
|
889
900
|
case "autolink":
|
|
890
901
|
case "autoLink":
|
|
891
902
|
case "link":
|
|
892
|
-
return
|
|
903
|
+
return di(a, t);
|
|
893
904
|
case "codeblock":
|
|
894
905
|
case "codeBlock":
|
|
895
|
-
return [O("code", { "data-language": a.language, children:
|
|
906
|
+
return [O("code", { "data-language": a.language, children: ut(a.text, t.highlight) })];
|
|
896
907
|
case "codespan":
|
|
897
908
|
case "codeSpan":
|
|
898
|
-
return O("code", { children:
|
|
909
|
+
return O("code", { children: ut((s = a.text, s.replace(/^\s*\n/m, "").replace(/\n\s*$/m, "")), t.highlight) });
|
|
899
910
|
case "mention":
|
|
900
|
-
return
|
|
911
|
+
return Ae.falsy(t.useFallbackMentions), O(_i, { id: a.id, text: a.text }, a.id);
|
|
901
912
|
case "suppressed":
|
|
902
913
|
return [O("i", { children: t.contactInfoHiddenText })];
|
|
903
914
|
case "emoji":
|
|
904
|
-
return t.enableEmojiImageFallback ? [O(
|
|
915
|
+
return t.enableEmojiImageFallback ? [O(Ti, { unicode: a.text })] : [a.text];
|
|
905
916
|
case "actionlink":
|
|
906
917
|
case "actionLink":
|
|
907
918
|
case "actionbutton":
|
|
908
919
|
case "actionButton":
|
|
909
|
-
return
|
|
920
|
+
return Si(a, t);
|
|
910
921
|
case "customemoji":
|
|
911
922
|
case "customEmoji":
|
|
912
923
|
return a.text;
|
|
913
924
|
default:
|
|
914
|
-
|
|
925
|
+
Ae.never(a);
|
|
915
926
|
}
|
|
916
927
|
var s;
|
|
917
928
|
});
|
|
918
929
|
return n.every((a) => typeof a == "string") ? [n.join("")] : n;
|
|
919
930
|
}
|
|
920
|
-
function
|
|
921
|
-
return t.length === 0 ? [e] :
|
|
931
|
+
function ut(e, t) {
|
|
932
|
+
return t.length === 0 ? [e] : At(e, Qe(e, function(n) {
|
|
922
933
|
const a = n.map((i) => i.trim()).filter((i) => i);
|
|
923
|
-
if (a.length === 0) return
|
|
924
|
-
const s = a.map(
|
|
934
|
+
if (a.length === 0) return oi;
|
|
935
|
+
const s = a.map(Ei).join("|");
|
|
925
936
|
return new RegExp(s, "gi");
|
|
926
937
|
}(t)).map((n) => ({ offset: n.index, matchedText: n[0] })), ({ matchedText: n }) => [O("span", { className: "highlighted-text", children: n })]);
|
|
927
938
|
}
|
|
928
|
-
const
|
|
939
|
+
const Oi = (e, t) => {
|
|
929
940
|
const n = { bold: "strong", italic: "em", strikethrough: "del", blockquote: "blockquote", bulletpoint: "li", bulletPoint: "li" }[e.type];
|
|
930
|
-
return [
|
|
941
|
+
return [le(n, null, ...Se(e.children, t))];
|
|
931
942
|
};
|
|
932
|
-
function
|
|
933
|
-
const [t, n] =
|
|
934
|
-
if (
|
|
935
|
-
t && !
|
|
943
|
+
function Ti({ unicode: e }) {
|
|
944
|
+
const [t, n] = b(() => e !== ":arslan:");
|
|
945
|
+
if (h(() => {
|
|
946
|
+
t && !Mn(e) && n(!1);
|
|
936
947
|
}, []), t) return O("span", { className: "t-emoji", children: e });
|
|
937
|
-
const a =
|
|
948
|
+
const a = Di(e);
|
|
938
949
|
return O("img", { className: "t-emoji", src: a, alt: e });
|
|
939
950
|
}
|
|
940
|
-
const
|
|
951
|
+
const di = (e, t) => {
|
|
941
952
|
const n = "children" in e ? e.children : [e.text];
|
|
942
953
|
switch (t.formattedLinks) {
|
|
943
954
|
case "link": {
|
|
944
955
|
const a = function(s, i) {
|
|
945
|
-
for (const r of s) if (
|
|
946
|
-
if (
|
|
947
|
-
} else if (
|
|
956
|
+
for (const r of s) if (Kn.test(r)) {
|
|
957
|
+
if (Ke(r).test(i)) return "_top";
|
|
958
|
+
} else if (ri(r, i)) return "_top";
|
|
948
959
|
return "_blank";
|
|
949
960
|
}(t.sameTabLinkRules, e.url);
|
|
950
|
-
return [
|
|
961
|
+
return [le("a", { target: a, href: e.url, rel: "noreferrer" }, ...Se(n, t))];
|
|
951
962
|
}
|
|
952
963
|
case "plaintext":
|
|
953
|
-
return "children" in e && e.children.every((a) => typeof a == "string") ? [e.children.join("")] : [
|
|
964
|
+
return "children" in e && e.children.every((a) => typeof a == "string") ? [e.children.join("")] : [le(Na, null, ...Se(n, t))];
|
|
954
965
|
default:
|
|
955
|
-
|
|
966
|
+
Ae.never(t.formattedLinks);
|
|
956
967
|
}
|
|
957
|
-
},
|
|
958
|
-
|
|
959
|
-
|
|
968
|
+
}, Si = (e, t) => {
|
|
969
|
+
if (!t.enableActions) return e.children;
|
|
970
|
+
const n = e.type === "actionlink" ? "actionLink" : e.type === "actionbutton" ? "actionButton" : e.type;
|
|
971
|
+
return [le(Ai, { type: n, action: e.action, params: e.params, message: t.message }, ...Se(e.children, t))];
|
|
972
|
+
};
|
|
973
|
+
function Ii(e, t) {
|
|
974
|
+
return je(e, mt(t));
|
|
960
975
|
}
|
|
961
|
-
function
|
|
976
|
+
function je(e, t) {
|
|
962
977
|
return e.flatMap((n) => {
|
|
963
978
|
if (typeof n == "string") {
|
|
964
979
|
let a = [n];
|
|
965
|
-
return a =
|
|
966
|
-
const { suppression: { forbiddenMatches: o, allowedMatches: E } } = r, u =
|
|
967
|
-
return
|
|
968
|
-
}(s, t)), a =
|
|
969
|
-
return
|
|
980
|
+
return a = lt(a, (s) => function(i, r) {
|
|
981
|
+
const { suppression: { forbiddenMatches: o, allowedMatches: E } } = r, u = Rt(o, (l) => Qe(i, l)).filter(([l]) => !E.some((c) => l.match(c) !== null)).map((l) => ({ offset: l.index, matchedText: l[0] }));
|
|
982
|
+
return At(i, u, () => [{ type: "suppressed", text: "CONTACT_INFORMATION_HIDDEN" }]);
|
|
983
|
+
}(s, t)), a = lt(a, (s) => function(i) {
|
|
984
|
+
return At(i, function(r) {
|
|
970
985
|
const o = [];
|
|
971
986
|
let E;
|
|
972
|
-
for (; E =
|
|
973
|
-
const u = E[0],
|
|
974
|
-
o.push({ offset:
|
|
987
|
+
for (; E = ui.exec(r); ) {
|
|
988
|
+
const u = E[0], l = E.index;
|
|
989
|
+
o.push({ offset: l, matchedText: u });
|
|
975
990
|
}
|
|
976
991
|
return o;
|
|
977
992
|
}(i), (r) => [{ type: "emoji", text: r.matchedText }]);
|
|
978
|
-
}(s)), a =
|
|
993
|
+
}(s)), a = lt(a, (s) => function(i, r) {
|
|
979
994
|
if (r.contactInfo !== "suppress") return [i];
|
|
980
995
|
const o = [];
|
|
981
|
-
if ((r.suppression.suppressEmailAddresses || r.suppression.suppressLinks) && o.push(
|
|
982
|
-
const E =
|
|
983
|
-
return
|
|
996
|
+
if ((r.suppression.suppressEmailAddresses || r.suppression.suppressLinks) && o.push(xn), r.suppression.suppressPhoneNumbers && o.push(jn), o.length === 0) return [i];
|
|
997
|
+
const E = Xn(i, { multilineSteps: [], singlelineSteps: o }), u = E.map((l) => typeof l == "string" ? l : zt(l.url, r.suppression) ? l.text : { type: "suppressed", text: "CONTACT_INFORMATION_HIDDEN" });
|
|
998
|
+
return Lt(u);
|
|
984
999
|
}(s, t)), a;
|
|
985
1000
|
}
|
|
986
1001
|
switch (n.type) {
|
|
@@ -992,7 +1007,7 @@ function Be(e, t) {
|
|
|
992
1007
|
case "bulletList":
|
|
993
1008
|
case "bulletpoint":
|
|
994
1009
|
case "bulletPoint":
|
|
995
|
-
return { type: n.type, children:
|
|
1010
|
+
return { type: n.type, children: je(n.children, t) };
|
|
996
1011
|
case "codespan":
|
|
997
1012
|
case "codeSpan":
|
|
998
1013
|
case "codeblock":
|
|
@@ -1007,62 +1022,62 @@ function Be(e, t) {
|
|
|
1007
1022
|
case "autolink":
|
|
1008
1023
|
case "autoLink":
|
|
1009
1024
|
return function(a, s) {
|
|
1010
|
-
return s.contactInfo === "link" ? a : s.contactInfo === "suppress" ?
|
|
1025
|
+
return s.contactInfo === "link" ? a : s.contactInfo === "suppress" ? zt(a.url, s.suppression) ? a : { type: "suppressed", text: "CONTACT_INFORMATION_HIDDEN" } : a.text;
|
|
1011
1026
|
}(n, t);
|
|
1012
1027
|
case "link":
|
|
1013
|
-
return { type: "link", url: n.url, children:
|
|
1028
|
+
return { type: "link", url: n.url, children: je(n.children, t) };
|
|
1014
1029
|
case "actionlink":
|
|
1015
1030
|
case "actionLink":
|
|
1016
1031
|
case "actionbutton":
|
|
1017
1032
|
case "actionButton":
|
|
1018
|
-
return { type: n.type, action: n.action, params: n.params, children:
|
|
1033
|
+
return { type: n.type, action: n.action, params: n.params, children: je(n.children, t) };
|
|
1019
1034
|
}
|
|
1020
1035
|
});
|
|
1021
1036
|
}
|
|
1022
|
-
function
|
|
1023
|
-
return
|
|
1037
|
+
function lt(e, t) {
|
|
1038
|
+
return Rt(e, (n) => typeof n == "string" ? t(n) : [n]);
|
|
1024
1039
|
}
|
|
1025
|
-
function
|
|
1040
|
+
function zt(e, t) {
|
|
1026
1041
|
if (t.allowedMatches.some((n) => e.match(n) !== null)) return !0;
|
|
1027
1042
|
if (t.forbiddenMatches.some((n) => e.match(n) !== null)) return !1;
|
|
1028
1043
|
if (e.startsWith("mailto:")) {
|
|
1029
1044
|
const n = e.substring(7).replace(/^.*@/, "");
|
|
1030
|
-
return !t.suppressEmailAddresses ||
|
|
1045
|
+
return !t.suppressEmailAddresses || Kt(t.allowedHostnames, n);
|
|
1031
1046
|
}
|
|
1032
1047
|
if (e.startsWith("tel:")) {
|
|
1033
1048
|
const n = e.substring(4).replace(/[^0-9]/g, "");
|
|
1034
1049
|
return !t.suppressPhoneNumbers || t.allowedPhoneNrs.some((a) => n.endsWith(a));
|
|
1035
1050
|
}
|
|
1036
1051
|
{
|
|
1037
|
-
const n =
|
|
1038
|
-
return !t.suppressLinks || !n ||
|
|
1052
|
+
const n = gn(e);
|
|
1053
|
+
return !t.suppressLinks || !n || Kt(t.allowedHostnames, n);
|
|
1039
1054
|
}
|
|
1040
1055
|
}
|
|
1041
|
-
function
|
|
1056
|
+
function Kt(e, t) {
|
|
1042
1057
|
for (const n of e)
|
|
1043
|
-
if (
|
|
1058
|
+
if (Wn(n).test(t)) return !0;
|
|
1044
1059
|
return !1;
|
|
1045
1060
|
}
|
|
1046
|
-
function
|
|
1061
|
+
function Jn({ block: e, nonInteractive: t, message: n, className: a = "" }) {
|
|
1047
1062
|
const s = !t, { nodes: i, roleOptions: r } = function(E, u) {
|
|
1048
1063
|
var N;
|
|
1049
|
-
const
|
|
1050
|
-
k.defined(
|
|
1051
|
-
const d = u.type === "UserMessage",
|
|
1064
|
+
const l = f(), c = F(l.app$.role);
|
|
1065
|
+
k.defined(c);
|
|
1066
|
+
const d = u.type === "UserMessage", D = ((N = u.sender) == null ? void 0 : N.id) === l.extUserId$.peek(), _ = c.suppressContactInfo, T = d && _.shouldSuppress({ isContentBySender: D }), I = Ii(E.children, { contactInfo: T ? "suppress" : "link", suppression: _ }), R = { sameTabLinkRules: c.sameTabLinkRules, contactInfoHiddenText: c.suppressContactInfo.replacement || `(${l.t$.peek().CONTACT_INFORMATION_HIDDEN})` };
|
|
1052
1067
|
return { nodes: I, roleOptions: R };
|
|
1053
|
-
}(e, n), o = function(E, u = {}) {
|
|
1054
|
-
return
|
|
1055
|
-
}(i, { enableEmojiImageFallback: !0, formattedLinks: s ? "link" : "plaintext", enableActions: s, ...r });
|
|
1056
|
-
return
|
|
1068
|
+
}(e, n), o = function(E, u = {}, l) {
|
|
1069
|
+
return Se(E, { ...mt(u), message: l });
|
|
1070
|
+
}(i, { enableEmojiImageFallback: !0, formattedLinks: s ? "link" : "plaintext", enableActions: s, ...r }, n);
|
|
1071
|
+
return ue.createElement("span", { className: `t-text ${a}` }, ...o);
|
|
1057
1072
|
}
|
|
1058
|
-
function
|
|
1059
|
-
const t =
|
|
1073
|
+
function Ni(e) {
|
|
1074
|
+
const t = W(), n = f(), { className: a = "", ...s } = e, i = F(() => n.state$.messages.child(n.state$.extCurrentConversationId.get()).lookup.child(e.message.id).content.child(0).url.get());
|
|
1060
1075
|
return O("div", { className: `t-message-content ${a}`, children: e.message.content.map((r) => {
|
|
1061
1076
|
var o;
|
|
1062
|
-
return O(
|
|
1077
|
+
return O(Ri, { block: r, theme: t, downloadUrl: i, ...s }, e.message.createdAt + ((o = e.message.editedAt) != null ? o : 0));
|
|
1063
1078
|
}) });
|
|
1064
1079
|
}
|
|
1065
|
-
function
|
|
1080
|
+
function Ri({ common: e, block: t, message: n, theme: a, downloadUrl: s }) {
|
|
1066
1081
|
const i = function(r, o) {
|
|
1067
1082
|
switch (o.type) {
|
|
1068
1083
|
case "text":
|
|
@@ -1088,21 +1103,21 @@ function ai({ common: e, block: t, message: n, theme: a, downloadUrl: s }) {
|
|
|
1088
1103
|
}(a, t);
|
|
1089
1104
|
return O(i, { block: t, common: e, message: n, downloadUrl: s });
|
|
1090
1105
|
}
|
|
1091
|
-
function
|
|
1092
|
-
const a =
|
|
1106
|
+
function tt(e, t, n = !0) {
|
|
1107
|
+
const a = H((i) => {
|
|
1093
1108
|
i.keyCode === 27 && e();
|
|
1094
|
-
}, [e]), s =
|
|
1109
|
+
}, [e]), s = H((i) => {
|
|
1095
1110
|
i.target instanceof HTMLElement && i.target.closest(t) === null && e();
|
|
1096
1111
|
}, [t, e]);
|
|
1097
|
-
|
|
1112
|
+
h(() => {
|
|
1098
1113
|
if (n) return window.addEventListener("keydown", a, !0), document.addEventListener("mousedown", s, !0), () => {
|
|
1099
1114
|
window.removeEventListener("keydown", a, !0), document.removeEventListener("mousedown", s, !0);
|
|
1100
1115
|
};
|
|
1101
1116
|
}, [a, s, n]);
|
|
1102
1117
|
}
|
|
1103
|
-
function
|
|
1104
|
-
const [t, n] =
|
|
1105
|
-
return
|
|
1118
|
+
function Zn(e) {
|
|
1119
|
+
const [t, n] = b();
|
|
1120
|
+
return h(() => {
|
|
1106
1121
|
let a = !0;
|
|
1107
1122
|
return e().then((s) => {
|
|
1108
1123
|
a && n({ value: s });
|
|
@@ -1111,38 +1126,38 @@ function Un(e) {
|
|
|
1111
1126
|
};
|
|
1112
1127
|
}, [e]), t;
|
|
1113
1128
|
}
|
|
1114
|
-
function
|
|
1115
|
-
const e = f(), t =
|
|
1116
|
-
return O(
|
|
1129
|
+
function Ct() {
|
|
1130
|
+
const e = f(), t = F(e.t$);
|
|
1131
|
+
return O(Ge, { type: "spinner", "aria-label": t.LOADING, className: "t-loading-icon" });
|
|
1117
1132
|
}
|
|
1118
|
-
const
|
|
1133
|
+
const Li = "https://cdn.jsdelivr.net/npm/emoji-picker-element@1.26.3/+esm", pt = /* @__PURE__ */ function(e) {
|
|
1119
1134
|
let t;
|
|
1120
1135
|
return () => (t === void 0 && (t = { value: e() }), t.value);
|
|
1121
1136
|
}(async function() {
|
|
1122
1137
|
if (typeof window == "undefined" || window.document === void 0) return new Promise(() => {
|
|
1123
1138
|
});
|
|
1124
1139
|
try {
|
|
1125
|
-
const e = await import(/*webpackIgnore: true*/ /* @vite-ignore */
|
|
1140
|
+
const e = await import(/*webpackIgnore: true*/ /* @vite-ignore */Li);
|
|
1126
1141
|
return await new e.Database().ready(), e;
|
|
1127
1142
|
} catch (e) {
|
|
1128
|
-
return
|
|
1143
|
+
return Xe.error("Failed to load emoji picker:", e), new Promise(() => {
|
|
1129
1144
|
});
|
|
1130
1145
|
}
|
|
1131
1146
|
});
|
|
1132
|
-
function
|
|
1133
|
-
const { onClose: t, onEmojiSelected: n } =
|
|
1134
|
-
return
|
|
1147
|
+
function Qn(e) {
|
|
1148
|
+
const { onClose: t, onEmojiSelected: n } = pa(), a = P(null), s = Zn(pt);
|
|
1149
|
+
return h(() => {
|
|
1135
1150
|
if (!s) return;
|
|
1136
1151
|
k.defined(a.current);
|
|
1137
1152
|
const i = a.current, r = i.shadowRoot;
|
|
1138
|
-
(function(u,
|
|
1139
|
-
const
|
|
1140
|
-
|
|
1153
|
+
(function(u, l) {
|
|
1154
|
+
const c = document.createElement("style");
|
|
1155
|
+
c.textContent = l, u.appendChild(c);
|
|
1141
1156
|
})(r, ".search-row{margin-right:var(--emoji-padding)}.emoji-menu{grid-template-columns:repeat(auto-fill,var(--total-emoji-size));padding:var(--emoji-padding)}.emoji,button.emoji{border-radius:8px}.favorites{border-top-width:1px}input.search:focus{border-color:var(--input-focused-border-color);outline:0}.picker{container-type:size}@container (height < 300px){.favorites{display:none}}#skintone-button{margin:0 -3px 0 4px}.custom-emoji{padding:0}#emo-🏻,#emo-🏼,#emo-🏽,#emo-🏾,#emo-🏿{display:none}[data-has-mouse] .emoji:hover{background-color:var(--button-hover-background)}");
|
|
1142
1157
|
const o = (u) => {
|
|
1143
|
-
var
|
|
1144
|
-
const
|
|
1145
|
-
n(
|
|
1158
|
+
var c;
|
|
1159
|
+
const l = (c = u.detail.unicode) != null ? c : u.detail.name;
|
|
1160
|
+
n(l);
|
|
1146
1161
|
};
|
|
1147
1162
|
function E(u) {
|
|
1148
1163
|
u.pointerType === "mouse" && (r.querySelector("section").dataset.hasMouse = "true");
|
|
@@ -1150,24 +1165,24 @@ function bn(e) {
|
|
|
1150
1165
|
return i.addEventListener("emoji-click", o), i.addEventListener("pointermove", E, { once: !0 }), () => {
|
|
1151
1166
|
i.removeEventListener("emoji-click", o), i.removeEventListener("pointermove", E);
|
|
1152
1167
|
};
|
|
1153
|
-
}, [s, n]),
|
|
1168
|
+
}, [s, n]), h(() => {
|
|
1154
1169
|
var i;
|
|
1155
1170
|
s && a.current && ((i = a.current.shadowRoot.getElementById("search")) == null || i.focus());
|
|
1156
|
-
}, [s]),
|
|
1171
|
+
}, [s]), tt(() => t(), ".t-emoji-picker"), O("div", s ? { className: "t-emoji-picker", children: O("emoji-picker", { ref: a, class: e.colorScheme }) } : { className: "t-emoji-picker", "t-loading": "", children: O(Ct, {}) });
|
|
1157
1172
|
}
|
|
1158
|
-
function
|
|
1159
|
-
const { closePopover: n } =
|
|
1160
|
-
return O("div", { className: "t-reaction-picker", children: O(
|
|
1173
|
+
function mi({ messageId: e, colorScheme: t }) {
|
|
1174
|
+
const { closePopover: n } = ha(), a = Ue();
|
|
1175
|
+
return O("div", { className: "t-reaction-picker", children: O(On.Provider, { value: { onClose: n, onEmojiSelected: (s) => {
|
|
1161
1176
|
a.addReaction(e, s), n();
|
|
1162
|
-
} }, children: O(
|
|
1177
|
+
} }, children: O(Qn, { colorScheme: t }) }) });
|
|
1163
1178
|
}
|
|
1164
|
-
const
|
|
1165
|
-
function
|
|
1179
|
+
const Ci = { ltr: ["ArrowLeft", "ArrowRight"], rtl: ["ArrowRight", "ArrowLeft"], ttb: ["ArrowUp", "ArrowDown"] };
|
|
1180
|
+
function ea(e, { focused: t, setFocused: n, itemCount: a, dir: s, onConfirm: i, onSpace: r }) {
|
|
1166
1181
|
if (a === 0) return !1;
|
|
1167
|
-
const o = (
|
|
1168
|
-
var
|
|
1169
|
-
|
|
1170
|
-
}, [E, u] =
|
|
1182
|
+
const o = (l) => {
|
|
1183
|
+
var c, d, D;
|
|
1184
|
+
c = 0, d = l, D = a - 1, l = Math.max(c, Math.min(d, D)), n(l);
|
|
1185
|
+
}, [E, u] = Ci[s];
|
|
1171
1186
|
switch (e) {
|
|
1172
1187
|
case E:
|
|
1173
1188
|
return o(t - 1), !0;
|
|
@@ -1181,111 +1196,111 @@ function yn(e, { focused: t, setFocused: n, itemCount: a, dir: s, onConfirm: i,
|
|
|
1181
1196
|
}
|
|
1182
1197
|
return !1;
|
|
1183
1198
|
}
|
|
1184
|
-
function
|
|
1185
|
-
|
|
1199
|
+
function ta({ focused: e, setFocused: t, buttonId: n }) {
|
|
1200
|
+
Ie(() => {
|
|
1186
1201
|
var i;
|
|
1187
1202
|
const s = n(e);
|
|
1188
1203
|
s && ((i = document.getElementById(s)) == null || i.scrollIntoView({ block: "nearest" }));
|
|
1189
1204
|
}, [e, n]);
|
|
1190
|
-
const a =
|
|
1205
|
+
const a = H((s) => {
|
|
1191
1206
|
const i = s.currentTarget.dataset.index;
|
|
1192
1207
|
t(+i);
|
|
1193
1208
|
}, [t]);
|
|
1194
|
-
return { containerProps:
|
|
1209
|
+
return { containerProps: M(() => ({ role: "menu", "aria-activedescendant": n(e) }), [e, n]), itemProps: H((s) => ({ onMouseMove: a, id: n(s), "data-index": s }), [a, n]) };
|
|
1195
1210
|
}
|
|
1196
|
-
function
|
|
1197
|
-
const [t, n] =
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
const N = await
|
|
1211
|
+
function pi(e) {
|
|
1212
|
+
const [t, n] = b([]), [a, s] = b([]), [i, r] = b(0), [o, E] = b(0), u = Zn(pt), l = M(() => u && new u.value.Database({}), [u]), c = He(), d = F(c.state$.suggestEmojiQuery);
|
|
1213
|
+
h(() => {
|
|
1214
|
+
l && (d ? async function() {
|
|
1215
|
+
const N = await l.getPreferredSkinTone();
|
|
1201
1216
|
E(N);
|
|
1202
|
-
let L = await
|
|
1203
|
-
if (L = L.filter((
|
|
1204
|
-
return
|
|
1205
|
-
}(
|
|
1206
|
-
|
|
1207
|
-
var
|
|
1208
|
-
const
|
|
1209
|
-
return
|
|
1217
|
+
let L = await l.getEmojiBySearchQuery(d);
|
|
1218
|
+
if (L = L.filter((m) => m.url || function(p) {
|
|
1219
|
+
return p.version <= Bn && !gi.includes(p.unicode);
|
|
1220
|
+
}(m)), function(m, p) {
|
|
1221
|
+
p.sort((C, B) => {
|
|
1222
|
+
var V, X;
|
|
1223
|
+
const j = (V = C.shortcodes) == null ? void 0 : V.find((J) => J.startsWith(m)), v = (X = B.shortcodes) == null ? void 0 : X.find((J) => J.startsWith(m));
|
|
1224
|
+
return j && !v ? -1 : !j && v ? 1 : j && v ? j.length - v.length : 0;
|
|
1210
1225
|
});
|
|
1211
1226
|
}(d.substring(1), L), r(0), n(L), L.length > 0 && s(L), d.endsWith(":")) {
|
|
1212
|
-
const
|
|
1213
|
-
var
|
|
1214
|
-
return (
|
|
1227
|
+
const m = d.slice(1, -1), p = L.find((C) => {
|
|
1228
|
+
var B;
|
|
1229
|
+
return (B = C.shortcodes) == null ? void 0 : B.includes(m);
|
|
1215
1230
|
});
|
|
1216
|
-
|
|
1231
|
+
p && c.selectEmoji(pe(p, N));
|
|
1217
1232
|
}
|
|
1218
1233
|
}() : n([]));
|
|
1219
|
-
}, [d,
|
|
1220
|
-
const
|
|
1234
|
+
}, [d, c, l]);
|
|
1235
|
+
const D = H((N) => {
|
|
1221
1236
|
const L = t[N];
|
|
1222
|
-
return L && "emoji-button-" +
|
|
1223
|
-
}, [t, o]), { containerProps: _, itemProps: T } =
|
|
1224
|
-
|
|
1225
|
-
if (I) return
|
|
1237
|
+
return L && "emoji-button-" + pe(L, o);
|
|
1238
|
+
}, [t, o]), { containerProps: _, itemProps: T } = ta({ focused: i, setFocused: r, buttonId: D }), I = t.length > 0;
|
|
1239
|
+
tt(() => c.closeSuggester(), ".t-emoji-suggest-bar", I), h(() => {
|
|
1240
|
+
if (I) return c.listenKeydown("emoji", (N) => ea(N, { dir: "ltr", focused: i, setFocused: r, itemCount: t.length, onConfirm() {
|
|
1226
1241
|
const L = t[i];
|
|
1227
|
-
k.defined(L),
|
|
1242
|
+
k.defined(L), c.selectEmoji(pe(L, o));
|
|
1228
1243
|
} })), () => {
|
|
1229
|
-
|
|
1244
|
+
c.listenKeydown("emoji", void 0);
|
|
1230
1245
|
};
|
|
1231
|
-
|
|
1232
|
-
}, [
|
|
1233
|
-
const R =
|
|
1234
|
-
return O(
|
|
1246
|
+
c.listenKeydown("emoji", void 0);
|
|
1247
|
+
}, [c, t, i, I, o]);
|
|
1248
|
+
const R = P(null);
|
|
1249
|
+
return O(wa, { in: I, timeout: 100, classNames: "slide", mountOnEnter: !0, unmountOnExit: !0, nodeRef: R, children: O("div", { className: "t-emoji-suggest-bar", ref: R, ..._, children: a.map((N, L) => O(hi, { emoji: N, skinTone: o, focused: L === i, onSelect: (m) => c.selectEmoji(m), ...T(L) }, pe(N, o))) }) });
|
|
1235
1250
|
}
|
|
1236
|
-
function
|
|
1237
|
-
return
|
|
1251
|
+
function pe(e, t) {
|
|
1252
|
+
return It(e) ? na(e, t) : e.name;
|
|
1238
1253
|
}
|
|
1239
|
-
function
|
|
1254
|
+
function It(e) {
|
|
1240
1255
|
return !!e.unicode;
|
|
1241
1256
|
}
|
|
1242
|
-
function
|
|
1257
|
+
function hi(e) {
|
|
1243
1258
|
var u;
|
|
1244
|
-
const { emoji: t, focused: n, skinTone: a, onSelect: s, ...i } = e, r = ((u = t.shortcodes) != null ? u : []).join(", "), o =
|
|
1245
|
-
return O("button", { "t-focused": n ? "" : void 0, title: r, "aria-label": o, onClick: () => s(
|
|
1259
|
+
const { emoji: t, focused: n, skinTone: a, onSelect: s, ...i } = e, r = ((u = t.shortcodes) != null ? u : []).join(", "), o = It(t) ? [t.unicode, r].join(", ") : r, E = It(t) ? na(t, a) : null;
|
|
1260
|
+
return O("button", { "t-focused": n ? "" : void 0, title: r, "aria-label": o, onClick: () => s(pe(t, a)), ...i, children: E });
|
|
1246
1261
|
}
|
|
1247
|
-
function
|
|
1262
|
+
function na(e, t) {
|
|
1248
1263
|
var a, s;
|
|
1249
1264
|
const n = (a = e.skins) == null ? void 0 : a.find((i) => i.tone === t);
|
|
1250
1265
|
return (s = n == null ? void 0 : n.unicode) != null ? s : e.unicode;
|
|
1251
1266
|
}
|
|
1252
|
-
const
|
|
1253
|
-
function
|
|
1254
|
-
const { anchorSelector: t, children: n, ...a } = e, s =
|
|
1255
|
-
return
|
|
1267
|
+
const gi = ["🏻", "🏼", "🏽", "🏾", "🏿"];
|
|
1268
|
+
function Fi(e) {
|
|
1269
|
+
const { anchorSelector: t, children: n, ...a } = e, s = M(() => document.querySelector(t), [t]), { refs: i, floatingStyles: r } = Ya({ placement: "top-start" });
|
|
1270
|
+
return Ie(() => {
|
|
1256
1271
|
s && i.setReference(s);
|
|
1257
1272
|
}, [i, s]), O("div", { ref: i.setFloating, style: { ...r, zIndex: 1e3 }, ...a, children: n });
|
|
1258
1273
|
}
|
|
1259
|
-
function
|
|
1260
|
-
const t = f(), n =
|
|
1261
|
-
return [
|
|
1274
|
+
function vi(e) {
|
|
1275
|
+
const t = f(), n = F(() => t.mentionableUsers$.get()), [a, s] = b(0), i = He(), r = F(i.state$.suggestMentionQuery), o = M(() => Object.fromEntries(n.map((D) => {
|
|
1276
|
+
return [D.id, (_ = D.name, [..._.matchAll(/^|\s+/g)].map((T) => T.index + T[0].length).map((T) => _.substring(T)))];
|
|
1262
1277
|
var _;
|
|
1263
|
-
})), [n]), E =
|
|
1278
|
+
})), [n]), E = M(() => {
|
|
1264
1279
|
if (!r) return [];
|
|
1265
|
-
const
|
|
1266
|
-
return
|
|
1267
|
-
return
|
|
1268
|
-
}(T,
|
|
1269
|
-
}, [r, n, o]), u =
|
|
1270
|
-
|
|
1280
|
+
const D = Wt(r);
|
|
1281
|
+
return D === "" ? n : n.filter((_) => o[_.id].some((T) => function(I, R) {
|
|
1282
|
+
return Ht(I.substring(0, R.length), R);
|
|
1283
|
+
}(T, D)));
|
|
1284
|
+
}, [r, n, o]), u = P(void 0);
|
|
1285
|
+
h(() => {
|
|
1271
1286
|
if (u.current) {
|
|
1272
|
-
const
|
|
1273
|
-
s(
|
|
1287
|
+
const D = E.findIndex((_) => _.id === u.current);
|
|
1288
|
+
s(D === -1 ? 0 : D);
|
|
1274
1289
|
}
|
|
1275
|
-
}, [E]),
|
|
1276
|
-
var
|
|
1277
|
-
u.current = (
|
|
1290
|
+
}, [E]), h(() => {
|
|
1291
|
+
var D;
|
|
1292
|
+
u.current = (D = E[a]) == null ? void 0 : D.id;
|
|
1278
1293
|
}, [a, E]);
|
|
1279
|
-
const
|
|
1294
|
+
const l = H((D) => {
|
|
1280
1295
|
var T;
|
|
1281
|
-
const _ = (T = E[
|
|
1296
|
+
const _ = (T = E[D]) == null ? void 0 : T.id;
|
|
1282
1297
|
return _ && "mention-button-" + _;
|
|
1283
|
-
}, [E]), { containerProps:
|
|
1284
|
-
return
|
|
1285
|
-
if (E.length !== 0) return i.listenKeydown("mention", (
|
|
1298
|
+
}, [E]), { containerProps: c, itemProps: d } = ta({ focused: a, setFocused: s, buttonId: l });
|
|
1299
|
+
return h(() => {
|
|
1300
|
+
if (E.length !== 0) return i.listenKeydown("mention", (D) => ea(D, { dir: "ttb", focused: a, setFocused: s, itemCount: E.length, onSpace() {
|
|
1286
1301
|
if (r) {
|
|
1287
1302
|
const _ = E[a];
|
|
1288
|
-
if (
|
|
1303
|
+
if (Ht(_.name, Wt(r))) return i.selectMention(_), !0;
|
|
1289
1304
|
}
|
|
1290
1305
|
return !1;
|
|
1291
1306
|
}, onConfirm() {
|
|
@@ -1294,74 +1309,74 @@ function li(e) {
|
|
|
1294
1309
|
} })), () => {
|
|
1295
1310
|
i.listenKeydown("mention", void 0);
|
|
1296
1311
|
};
|
|
1297
|
-
}, [i, a, E, r]),
|
|
1312
|
+
}, [i, a, E, r]), tt(() => i.closeSuggester(), ".t-mention-suggest-list", E.length > 0), E.length === 0 ? null : O(Fi, { className: "t-mention-suggest-list", ...c, anchorSelector: ".ProseMirror-suggestion", children: E.map((D, _) => O(fi, { user: D, isFocused: _ === a, onSelect: () => i.selectMention(D), ...d(_) }, D.id)) });
|
|
1298
1313
|
}
|
|
1299
|
-
const
|
|
1314
|
+
const fi = ue.memo(function(e) {
|
|
1300
1315
|
const { user: t, isFocused: n, onSelect: a, ...s } = e;
|
|
1301
1316
|
return O("button", { className: n ? "focused" : "", onClick: () => a(t.id), ...s, children: t.name });
|
|
1302
1317
|
});
|
|
1303
|
-
function
|
|
1318
|
+
function Wt(e) {
|
|
1304
1319
|
return k(e[0] === "@"), e.substring(1);
|
|
1305
1320
|
}
|
|
1306
|
-
function
|
|
1307
|
-
const { popoverComponent: t, popoverProps: n, children: a, type: s = "popover", ...i } = e, [r, o] =
|
|
1308
|
-
let
|
|
1309
|
-
return s === "menu" ? (
|
|
1321
|
+
function he(e) {
|
|
1322
|
+
const { popoverComponent: t, popoverProps: n, children: a, type: s = "popover", ...i } = e, [r, o] = b(void 0), [E, u] = b(!1);
|
|
1323
|
+
let l, c, d;
|
|
1324
|
+
return s === "menu" ? (l = $e.Root, c = $e.Trigger, d = $e.Content) : (l = it.Root, c = it.Trigger, d = it.Content), O(ga.Provider, { value: { closePopover: () => u(!1) }, children: K(l, { modal: !1, open: E, onOpenChange: u, children: [O(c, { asChild: !0, children: O("button", { ...i, ref: (D) => ((_) => {
|
|
1310
1325
|
var I;
|
|
1311
1326
|
const T = (I = _ == null ? void 0 : _.closest("[t-menu-boundary]")) != null ? I : void 0;
|
|
1312
1327
|
o(T);
|
|
1313
|
-
})(
|
|
1328
|
+
})(D), children: a }) }), O(d, { hideWhenDetached: !0, collisionBoundary: r, style: { zIndex: 1e3 }, onWheel: (D) => D.stopPropagation(), onTouchMove: (D) => D.stopPropagation(), children: O(t, { ...n }) })] }) });
|
|
1314
1329
|
}
|
|
1315
|
-
function
|
|
1316
|
-
return O(
|
|
1330
|
+
function Ee(e) {
|
|
1331
|
+
return O($e.Item, { ...e });
|
|
1317
1332
|
}
|
|
1318
|
-
function
|
|
1319
|
-
return
|
|
1333
|
+
function ki(e) {
|
|
1334
|
+
return hn(e);
|
|
1320
1335
|
}
|
|
1321
|
-
function
|
|
1336
|
+
function De(e) {
|
|
1322
1337
|
var t;
|
|
1323
1338
|
return (t = e.photoUrl) != null ? t : function(n, a) {
|
|
1324
1339
|
const s = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
|
|
1325
|
-
<rect x="0" y="0" width="100" height="100" fill="${
|
|
1340
|
+
<rect x="0" y="0" width="100" height="100" fill="${hn(n)}"/>
|
|
1326
1341
|
<text x="50%" y="54%" dominant-baseline="middle" font-size="34" font-family="San Francisco, Segoe UI, Helvetica Neue, Arial, Helvetica, sans-serif" fill="#fff" text-anchor="middle">${a}</text>
|
|
1327
1342
|
</svg>`.replace(/\s+/g, " ");
|
|
1328
|
-
return "data:image/svg+xml;base64," +
|
|
1329
|
-
}(e.id,
|
|
1343
|
+
return "data:image/svg+xml;base64," + La.encode(s);
|
|
1344
|
+
}(e.id, Wa(e.name));
|
|
1330
1345
|
}
|
|
1331
|
-
function
|
|
1346
|
+
function Ye(e) {
|
|
1332
1347
|
return e < 1024 ? e + " B" : e < 1048576 ? Math.floor(e / 1024) + " KB" : e < 1073741824 ? Math.floor(e / 1048576) + " MB" : e < 1099511627776 ? Math.floor(e / 1073741824) + " GB" : Math.floor(e / 1099511627776) + " TB";
|
|
1333
1348
|
}
|
|
1334
|
-
function
|
|
1349
|
+
function aa({ latitude: e, longitude: t }) {
|
|
1335
1350
|
const n = e + "," + t;
|
|
1336
|
-
return { imageUrl: `https://maps.googleapis.com/maps/api/staticmap?center=${n}&zoom=15&size=300x200&scale=2&maptype=roadmap&markers=${n}&key=${
|
|
1351
|
+
return { imageUrl: `https://maps.googleapis.com/maps/api/staticmap?center=${n}&zoom=15&size=300x200&scale=2&maptype=roadmap&markers=${n}&key=${za}`, linkUrl: `https://maps.google.com/maps?q=${n}&z=15` };
|
|
1337
1352
|
}
|
|
1338
|
-
function
|
|
1339
|
-
const [n, a] =
|
|
1340
|
-
return
|
|
1353
|
+
function Mi(e, t) {
|
|
1354
|
+
const [n, a] = b({ long: "", short: "" });
|
|
1355
|
+
return Ie(() => {
|
|
1341
1356
|
let s, i = !0;
|
|
1342
1357
|
const r = () => {
|
|
1343
|
-
const E = Date.now(), u = function(
|
|
1344
|
-
const
|
|
1358
|
+
const E = Date.now(), u = function(l, c, d) {
|
|
1359
|
+
const D = l - c;
|
|
1345
1360
|
let _, T, I;
|
|
1346
|
-
const R = new Date(
|
|
1347
|
-
if (
|
|
1348
|
-
if (
|
|
1349
|
-
else if (
|
|
1361
|
+
const R = new Date(c), N = { month: "short", day: "numeric" };
|
|
1362
|
+
if (D < qt) return { changeTimeout: 5e3, short: d.JUST_NOW, long: d.JUST_NOW };
|
|
1363
|
+
if (D < Jt) _ = qt, T = "MINUTES", I = d.MINUTES;
|
|
1364
|
+
else if (D < Zt) _ = Jt, T = "HOURS", I = d.HOURS;
|
|
1350
1365
|
else {
|
|
1351
|
-
if (!(
|
|
1352
|
-
if (R.getFullYear() === new Date(
|
|
1353
|
-
const
|
|
1354
|
-
return { changeTimeout: void 0, short:
|
|
1366
|
+
if (!(D < Hi)) {
|
|
1367
|
+
if (R.getFullYear() === new Date(l).getFullYear()) {
|
|
1368
|
+
const m = R.toLocaleDateString(d.locale, N);
|
|
1369
|
+
return { changeTimeout: void 0, short: m, long: m };
|
|
1355
1370
|
}
|
|
1356
1371
|
{
|
|
1357
|
-
const
|
|
1358
|
-
return { changeTimeout: void 0, short:
|
|
1372
|
+
const m = R.toLocaleDateString(d.locale, { ...N, year: "numeric" });
|
|
1373
|
+
return { changeTimeout: void 0, short: m, long: m };
|
|
1359
1374
|
}
|
|
1360
1375
|
}
|
|
1361
|
-
_ =
|
|
1376
|
+
_ = Zt, T = "DAYS", I = d.DAYS;
|
|
1362
1377
|
}
|
|
1363
|
-
const L = Math.floor(
|
|
1364
|
-
return { changeTimeout: _, short: L + I, long:
|
|
1378
|
+
const L = Math.floor(D / _);
|
|
1379
|
+
return { changeTimeout: _, short: L + I, long: Ui(L, T.toLowerCase(), d.locale) };
|
|
1365
1380
|
}(E, e > E ? E - 2e3 : e, t);
|
|
1366
1381
|
return a(u), u;
|
|
1367
1382
|
}, o = () => {
|
|
@@ -1373,7 +1388,7 @@ function Ai(e, t) {
|
|
|
1373
1388
|
};
|
|
1374
1389
|
}, [t, e]), n;
|
|
1375
1390
|
}
|
|
1376
|
-
function
|
|
1391
|
+
function sa(e) {
|
|
1377
1392
|
e = Math.floor(e);
|
|
1378
1393
|
const t = Math.floor(e / 3600);
|
|
1379
1394
|
e %= 3600;
|
|
@@ -1383,39 +1398,39 @@ function jn(e) {
|
|
|
1383
1398
|
let s = `${a(n)}:${a(e)}`;
|
|
1384
1399
|
return t > 0 && (s = `${a(t)}:${s}`), s;
|
|
1385
1400
|
}
|
|
1386
|
-
const
|
|
1387
|
-
function
|
|
1388
|
-
const n = Date.now(), a = (s = e, i = n, Math.floor((i - s) /
|
|
1401
|
+
const Bi = 864e5;
|
|
1402
|
+
function Pi(e, t) {
|
|
1403
|
+
const n = Date.now(), a = (s = e, i = n, Math.floor((i - s) / Bi));
|
|
1389
1404
|
var s, i;
|
|
1390
1405
|
if (a < 0 || a === 0) return t.TODAY;
|
|
1391
1406
|
if (a === 1) return t.YESTERDAY;
|
|
1392
1407
|
const r = { weekday: "long" }, o = new Date(e);
|
|
1393
1408
|
if (a < 7) return o.toLocaleDateString(t.locale, r);
|
|
1394
1409
|
const E = new Date(n);
|
|
1395
|
-
return function(
|
|
1396
|
-
return Math.floor((
|
|
1410
|
+
return function(l, c) {
|
|
1411
|
+
return Math.floor((c - l) / 31536e6);
|
|
1397
1412
|
}(E.setFullYear(E.getFullYear() - 1), e) === 0 ? o.toLocaleDateString(t.locale, { ...r, month: "long", day: "numeric" }) : o.toLocaleDateString(t.locale, { ...r, year: "numeric", month: "long", day: "numeric" });
|
|
1398
1413
|
}
|
|
1399
|
-
const
|
|
1400
|
-
function
|
|
1414
|
+
const qt = 6e4, Jt = 36e5, Zt = 864e5, Hi = 6048e5;
|
|
1415
|
+
function Ui(e, t, n) {
|
|
1401
1416
|
return new Intl.RelativeTimeFormat(n).format(-e, t);
|
|
1402
1417
|
}
|
|
1403
1418
|
function S(e, ...t) {
|
|
1404
|
-
const n =
|
|
1405
|
-
return Array.isArray(n) ?
|
|
1419
|
+
const n = Ia.bind(ue.createElement)(e, ...t);
|
|
1420
|
+
return Array.isArray(n) ? ue.createElement(ue.Fragment, {}, ...n) : n;
|
|
1406
1421
|
}
|
|
1407
|
-
function
|
|
1422
|
+
function bi(e) {
|
|
1408
1423
|
const { common: t } = e;
|
|
1409
1424
|
return t.conversation.subject ? S`
|
|
1410
1425
|
<div className="t-title">${t.conversation.subject}</div>
|
|
1411
1426
|
<div className="t-subtitle">
|
|
1412
|
-
<${
|
|
1427
|
+
<${Qt} ...${e} />
|
|
1413
1428
|
</div>
|
|
1414
1429
|
` : S`<div className="t-title">
|
|
1415
|
-
<${
|
|
1430
|
+
<${Qt} ...${e} />
|
|
1416
1431
|
</div>`;
|
|
1417
1432
|
}
|
|
1418
|
-
function
|
|
1433
|
+
function Qt({ common: e, isUserConnected: t, permissions: n }) {
|
|
1419
1434
|
const { participants: a } = e, s = a.filter(({ user: r }) => r.id !== e.currentUser.id), i = s.length === 0 ? a : s;
|
|
1420
1435
|
return n.showOnlineStatus ? S`
|
|
1421
1436
|
<span className="t-participants">
|
|
@@ -1431,7 +1446,7 @@ function yt({ common: e, isUserConnected: t, permissions: n }) {
|
|
|
1431
1446
|
</span>
|
|
1432
1447
|
` : S`<span className="t-participants">${i.map(({ user: r }) => r.name).join(", ")}</span>`;
|
|
1433
1448
|
}
|
|
1434
|
-
function
|
|
1449
|
+
function yi({ messageStatus: e, common: t }) {
|
|
1435
1450
|
const { Icon: n } = t.theme;
|
|
1436
1451
|
return e === "sending" ? S`
|
|
1437
1452
|
<span className="t-status-icon">
|
|
@@ -1443,7 +1458,7 @@ function Ni({ messageStatus: e, common: t }) {
|
|
|
1443
1458
|
</span>
|
|
1444
1459
|
` : e === "sent" ? S`<span className="t-status-icon">✓</span>` : e === "everyoneRead" ? S`<span className="t-status-icon">✓✓</span>` : null;
|
|
1445
1460
|
}
|
|
1446
|
-
const
|
|
1461
|
+
const wi = { attach: function({ className: e }) {
|
|
1447
1462
|
return S`
|
|
1448
1463
|
<svg
|
|
1449
1464
|
className=${e}
|
|
@@ -1463,7 +1478,7 @@ const Ri = { attach: function({ className: e }) {
|
|
|
1463
1478
|
></path>
|
|
1464
1479
|
</svg>
|
|
1465
1480
|
`;
|
|
1466
|
-
}, chevronLeft:
|
|
1481
|
+
}, chevronLeft: en, left: en, chevronRight: tn, right: tn, chevronUp: nn, up: nn, chevronDown: an, down: an, close: function({ className: e }) {
|
|
1467
1482
|
return S`
|
|
1468
1483
|
<svg
|
|
1469
1484
|
className=${e}
|
|
@@ -2078,7 +2093,7 @@ const Ri = { attach: function({ className: e }) {
|
|
|
2078
2093
|
</svg>
|
|
2079
2094
|
`;
|
|
2080
2095
|
} };
|
|
2081
|
-
function
|
|
2096
|
+
function en({ className: e }) {
|
|
2082
2097
|
return S`
|
|
2083
2098
|
<svg
|
|
2084
2099
|
className=${e}
|
|
@@ -2095,7 +2110,7 @@ function wt({ className: e }) {
|
|
|
2095
2110
|
</svg>
|
|
2096
2111
|
`;
|
|
2097
2112
|
}
|
|
2098
|
-
function
|
|
2113
|
+
function tn({ className: e }) {
|
|
2099
2114
|
return S`
|
|
2100
2115
|
<svg
|
|
2101
2116
|
className=${e}
|
|
@@ -2112,7 +2127,7 @@ function Yt({ className: e }) {
|
|
|
2112
2127
|
</svg>
|
|
2113
2128
|
`;
|
|
2114
2129
|
}
|
|
2115
|
-
function
|
|
2130
|
+
function nn({ className: e }) {
|
|
2116
2131
|
return S`
|
|
2117
2132
|
<svg
|
|
2118
2133
|
className=${e}
|
|
@@ -2130,7 +2145,7 @@ function $t({ className: e }) {
|
|
|
2130
2145
|
</svg>
|
|
2131
2146
|
`;
|
|
2132
2147
|
}
|
|
2133
|
-
function
|
|
2148
|
+
function an({ className: e }) {
|
|
2134
2149
|
return S`
|
|
2135
2150
|
<svg
|
|
2136
2151
|
className=${e}
|
|
@@ -2148,10 +2163,10 @@ function jt({ className: e }) {
|
|
|
2148
2163
|
</svg>
|
|
2149
2164
|
`;
|
|
2150
2165
|
}
|
|
2151
|
-
function
|
|
2166
|
+
function Yi({ message: e, common: t }) {
|
|
2152
2167
|
var r;
|
|
2153
2168
|
const n = e.content[0], { theme: a, t: s } = t, { Icon: i } = a;
|
|
2154
|
-
if (n.type === "text") return S`<${
|
|
2169
|
+
if (n.type === "text") return S`<${Jn}
|
|
2155
2170
|
block=${n}
|
|
2156
2171
|
message=${e}
|
|
2157
2172
|
nonInteractive
|
|
@@ -2172,7 +2187,7 @@ function Li({ message: e, common: t }) {
|
|
|
2172
2187
|
`;
|
|
2173
2188
|
if (n.subtype === "voice") return S`
|
|
2174
2189
|
<${i} type="microphone" common=${t} />
|
|
2175
|
-
${s.VOICE_MESSAGE} (${
|
|
2190
|
+
${s.VOICE_MESSAGE} (${sa((r = n.duration) != null ? r : 0)})
|
|
2176
2191
|
`;
|
|
2177
2192
|
if (n.subtype === void 0) return S`
|
|
2178
2193
|
<${i} type="attachment" common=${t} />
|
|
@@ -2181,7 +2196,7 @@ function Li({ message: e, common: t }) {
|
|
|
2181
2196
|
}
|
|
2182
2197
|
return null;
|
|
2183
2198
|
}
|
|
2184
|
-
function
|
|
2199
|
+
function $i({ conversation: e }) {
|
|
2185
2200
|
const { isUnread: t, unreadMessageCount: n } = e;
|
|
2186
2201
|
return t ? n === 0 ? S`<div className="t-unread-generic-dot" />` : n > 999 ? S`
|
|
2187
2202
|
<div className="t-unread-dot">
|
|
@@ -2193,11 +2208,11 @@ function Ci({ conversation: e }) {
|
|
|
2193
2208
|
</div>
|
|
2194
2209
|
` : null;
|
|
2195
2210
|
}
|
|
2196
|
-
const
|
|
2211
|
+
const ht = Object.freeze(Object.defineProperty({ __proto__: null, AudioBlock: function({ block: e, downloadUrl: t, common: n }) {
|
|
2197
2212
|
const { Icon: a } = n.theme;
|
|
2198
2213
|
return S`
|
|
2199
2214
|
<div className="t-theme-audio-block">
|
|
2200
|
-
<${
|
|
2215
|
+
<${Tt} src=${e.url} filename=${e.filename} />
|
|
2201
2216
|
|
|
2202
2217
|
<a className="t-body-text" href=${t}>
|
|
2203
2218
|
<${a}
|
|
@@ -2206,7 +2221,7 @@ const At = Object.freeze(Object.defineProperty({ __proto__: null, AudioBlock: fu
|
|
|
2206
2221
|
common=${n}
|
|
2207
2222
|
/>
|
|
2208
2223
|
<span className="t-filename">${e.filename}</span>
|
|
2209
|
-
<span className="t-filesize"> (${
|
|
2224
|
+
<span className="t-filesize"> (${Ye(e.size)})</span>
|
|
2210
2225
|
</a>
|
|
2211
2226
|
</div>
|
|
2212
2227
|
`;
|
|
@@ -2232,7 +2247,7 @@ const At = Object.freeze(Object.defineProperty({ __proto__: null, AudioBlock: fu
|
|
|
2232
2247
|
</div>
|
|
2233
2248
|
|
|
2234
2249
|
<div className="t-info">
|
|
2235
|
-
<${
|
|
2250
|
+
<${bi} ...${e} />
|
|
2236
2251
|
</div>
|
|
2237
2252
|
</div>
|
|
2238
2253
|
</div>
|
|
@@ -2241,7 +2256,7 @@ const At = Object.freeze(Object.defineProperty({ __proto__: null, AudioBlock: fu
|
|
|
2241
2256
|
}, CompactMessageContent: function(e) {
|
|
2242
2257
|
return S`
|
|
2243
2258
|
<span className="t-theme-compact-message-content">
|
|
2244
|
-
<${
|
|
2259
|
+
<${Yi} ...${e} />
|
|
2245
2260
|
</span>
|
|
2246
2261
|
`;
|
|
2247
2262
|
}, ConversationImage: function({ common: e, conversation: t, participants: n }) {
|
|
@@ -2250,17 +2265,17 @@ const At = Object.freeze(Object.defineProperty({ __proto__: null, AudioBlock: fu
|
|
|
2250
2265
|
photoUrl=${t.photoUrl}
|
|
2251
2266
|
common=${e}
|
|
2252
2267
|
/>` : n.length === 0 ? null : n.length === 1 ? S`<${i}
|
|
2253
|
-
photoUrl=${
|
|
2268
|
+
photoUrl=${De(a)}
|
|
2254
2269
|
common=${e}
|
|
2255
2270
|
/>` : n.length === 2 ? S`<${i}
|
|
2256
|
-
photoUrl=${
|
|
2271
|
+
photoUrl=${De(n[0].user.id === a.id ? n[1].user : n[0].user)}
|
|
2257
2272
|
common=${e}
|
|
2258
2273
|
/>` : S`
|
|
2259
2274
|
<${r} participants=${n} common=${e} />
|
|
2260
2275
|
`;
|
|
2261
2276
|
}, ConversationListItem: function(e) {
|
|
2262
|
-
var N, L,
|
|
2263
|
-
const { common: t, conversation: n, participants: a, isSelected: s } = e, { currentUser: i, theme: r, conversationList: o } = t, { TimeAgo: E, ConversationImage: u, CompactMessageContent:
|
|
2277
|
+
var N, L, m;
|
|
2278
|
+
const { common: t, conversation: n, participants: a, isSelected: s } = e, { currentUser: i, theme: r, conversationList: o } = t, { TimeAgo: E, ConversationImage: u, CompactMessageContent: l } = r, { lastMessage: c } = n, d = a.length >= 3, D = (N = c == null ? void 0 : c.sender) == null ? void 0 : N.name, _ = (L = c == null ? void 0 : c.editedAt) != null ? L : c == null ? void 0 : c.createdAt, T = a.filter((p) => p.user.id !== i.id), I = T.length ? T : a, R = (m = n.subject) != null ? m : I.map((p) => p.user.name).join(", ");
|
|
2264
2279
|
return S`
|
|
2265
2280
|
<div
|
|
2266
2281
|
className="t-theme-conversation-list-item"
|
|
@@ -2286,18 +2301,18 @@ const At = Object.freeze(Object.defineProperty({ __proto__: null, AudioBlock: fu
|
|
|
2286
2301
|
</div>
|
|
2287
2302
|
|
|
2288
2303
|
<div className="t-body">
|
|
2289
|
-
${
|
|
2304
|
+
${c && S`
|
|
2290
2305
|
<div className="t-message">
|
|
2291
|
-
${d &&
|
|
2306
|
+
${d && D && S`<span className="t-message-sender">${D}:</span>`}
|
|
2292
2307
|
|
|
2293
|
-
<${
|
|
2294
|
-
message=${
|
|
2308
|
+
<${l}
|
|
2309
|
+
message=${c}
|
|
2295
2310
|
common=${t}
|
|
2296
2311
|
/>
|
|
2297
2312
|
</div>
|
|
2298
2313
|
`}
|
|
2299
2314
|
|
|
2300
|
-
<${
|
|
2315
|
+
<${$i} ...${e} />
|
|
2301
2316
|
</div>
|
|
2302
2317
|
</div>
|
|
2303
2318
|
</div>
|
|
@@ -2313,7 +2328,7 @@ const At = Object.freeze(Object.defineProperty({ __proto__: null, AudioBlock: fu
|
|
|
2313
2328
|
common=${n}
|
|
2314
2329
|
/>
|
|
2315
2330
|
<span className="t-filename">${e.filename}</span>
|
|
2316
|
-
<span className="t-filesize"> (${
|
|
2331
|
+
<span className="t-filesize"> (${Ye(e.size)})</span>
|
|
2317
2332
|
</a>
|
|
2318
2333
|
</div>
|
|
2319
2334
|
`;
|
|
@@ -2322,11 +2337,11 @@ const At = Object.freeze(Object.defineProperty({ __proto__: null, AudioBlock: fu
|
|
|
2322
2337
|
<div className="t-theme-group-chat-image">
|
|
2323
2338
|
<div
|
|
2324
2339
|
className="t-mini-avatar"
|
|
2325
|
-
style=${{ backgroundImage: `url("${
|
|
2340
|
+
style=${{ backgroundImage: `url("${De(e[0].user)}")` }}
|
|
2326
2341
|
></div>
|
|
2327
2342
|
<div
|
|
2328
2343
|
className="t-mini-avatar"
|
|
2329
|
-
style=${{ backgroundImage: `url("${
|
|
2344
|
+
style=${{ backgroundImage: `url("${De(e[1].user)}")` }}
|
|
2330
2345
|
></div>
|
|
2331
2346
|
${e.length > 2 && S`<svg
|
|
2332
2347
|
className="t-counter"
|
|
@@ -2368,7 +2383,7 @@ const At = Object.freeze(Object.defineProperty({ __proto__: null, AudioBlock: fu
|
|
|
2368
2383
|
</div>
|
|
2369
2384
|
`;
|
|
2370
2385
|
}, Icon: function({ className: e = "", type: t }) {
|
|
2371
|
-
return S`<${
|
|
2386
|
+
return S`<${wi[t]} className=${`t-theme-icon ${e}`} />`;
|
|
2372
2387
|
}, ImageBlock: function({ block: e, downloadUrl: t, common: n }) {
|
|
2373
2388
|
const { Icon: a } = n.theme, s = { "--img-w": e.width || 1, "--img-h": e.height || 1 };
|
|
2374
2389
|
return S`
|
|
@@ -2387,12 +2402,12 @@ const At = Object.freeze(Object.defineProperty({ __proto__: null, AudioBlock: fu
|
|
|
2387
2402
|
<a href=${t} className="t-body-text">
|
|
2388
2403
|
<${a} className="download-icon" type="download" common=${n} />
|
|
2389
2404
|
<span>${e.filename}</span>
|
|
2390
|
-
<span className="t-filesize"> (${
|
|
2405
|
+
<span className="t-filesize"> (${Ye(e.size)})</span>
|
|
2391
2406
|
</a>
|
|
2392
2407
|
</div>
|
|
2393
2408
|
`;
|
|
2394
2409
|
}, LocationBlock: function({ block: e }) {
|
|
2395
|
-
const { imageUrl: t, linkUrl: n } =
|
|
2410
|
+
const { imageUrl: t, linkUrl: n } = aa(e);
|
|
2396
2411
|
return S`
|
|
2397
2412
|
<div className="t-theme-location-block">
|
|
2398
2413
|
<a
|
|
@@ -2410,17 +2425,17 @@ const At = Object.freeze(Object.defineProperty({ __proto__: null, AudioBlock: fu
|
|
|
2410
2425
|
</div>
|
|
2411
2426
|
`;
|
|
2412
2427
|
}, Message: function(e) {
|
|
2413
|
-
const { message: t, messageStatus: n, permissions: a, common: s } = e, { currentUser: i, theme: r, participants: o, chatbox: E, t: u } = s, { Avatar:
|
|
2414
|
-
let
|
|
2415
|
-
return
|
|
2428
|
+
const { message: t, messageStatus: n, permissions: a, common: s } = e, { currentUser: i, theme: r, participants: o, chatbox: E, t: u } = s, { Avatar: l, Icon: c, ReferencedMessage: d, TimeAgo: D, MessageActionMenu: _ } = r, T = o.length >= 3, I = t.sender, R = (I == null ? void 0 : I.id) !== i.id && T, N = t.referencedMessage, L = n !== "sending" && (a.canReplyToMessage || a.canDeleteMessage);
|
|
2429
|
+
let m;
|
|
2430
|
+
return m = I ? I.id === i.id ? "currentUser" : "other" : "system", S`
|
|
2416
2431
|
<div
|
|
2417
2432
|
className="t-theme-message"
|
|
2418
|
-
t-sender=${
|
|
2433
|
+
t-sender=${m}
|
|
2419
2434
|
t-message-id=${t.id}
|
|
2420
2435
|
>
|
|
2421
2436
|
<div className="t-message-row">
|
|
2422
|
-
${I && S`<${
|
|
2423
|
-
photoUrl=${
|
|
2437
|
+
${I && S`<${l}
|
|
2438
|
+
photoUrl=${De(I)}
|
|
2424
2439
|
common=${s}
|
|
2425
2440
|
/>`}
|
|
2426
2441
|
|
|
@@ -2428,7 +2443,7 @@ const At = Object.freeze(Object.defineProperty({ __proto__: null, AudioBlock: fu
|
|
|
2428
2443
|
<!-- in group chats, show the message sender name in a random color -->
|
|
2429
2444
|
${I && R && S`<div
|
|
2430
2445
|
className="t-message-sender-name"
|
|
2431
|
-
style=${{ color:
|
|
2446
|
+
style=${{ color: ki(I.id) }}
|
|
2432
2447
|
>
|
|
2433
2448
|
${I.name}
|
|
2434
2449
|
</div>`}
|
|
@@ -2437,57 +2452,57 @@ const At = Object.freeze(Object.defineProperty({ __proto__: null, AudioBlock: fu
|
|
|
2437
2452
|
common=${s}
|
|
2438
2453
|
/>`}
|
|
2439
2454
|
|
|
2440
|
-
<${
|
|
2455
|
+
<${Ni}
|
|
2441
2456
|
common=${s}
|
|
2442
2457
|
message=${t}
|
|
2443
2458
|
messageStatus=${n}
|
|
2444
2459
|
/>
|
|
2445
2460
|
|
|
2446
2461
|
<div className="t-message-status">
|
|
2447
|
-
<${
|
|
2448
|
-
${
|
|
2462
|
+
<${D} timestamp=${t.createdAt} common=${s} />
|
|
2463
|
+
${m == "currentUser" && S`<${yi} ...${e} />`}
|
|
2449
2464
|
</div>
|
|
2450
2465
|
</div>
|
|
2451
2466
|
|
|
2452
2467
|
${L && S`
|
|
2453
|
-
<${
|
|
2468
|
+
<${he}
|
|
2454
2469
|
type="menu"
|
|
2455
2470
|
popoverComponent=${_}
|
|
2456
2471
|
popoverProps=${{ message: t, permissions: a, common: s }}
|
|
2457
2472
|
className="t-message-action-menu-button"
|
|
2458
2473
|
aria-label="Message actions"
|
|
2459
2474
|
>
|
|
2460
|
-
<${
|
|
2461
|
-
</${
|
|
2475
|
+
<${c} className="t-action-menu-icon" type="horizontalDots" />
|
|
2476
|
+
</${he}>
|
|
2462
2477
|
`}
|
|
2463
2478
|
${a.canAddReaction && S`
|
|
2464
|
-
<${
|
|
2479
|
+
<${he}
|
|
2465
2480
|
className="t-add-reaction-button"
|
|
2466
|
-
popoverComponent=${
|
|
2481
|
+
popoverComponent=${mi}
|
|
2467
2482
|
popoverProps=${{ messageId: t.id, colorScheme: "light" }}
|
|
2468
2483
|
aria-label="Add reaction"
|
|
2469
2484
|
>
|
|
2470
|
-
<${
|
|
2471
|
-
</${
|
|
2485
|
+
<${c} type="addEmoji" />
|
|
2486
|
+
</${he}>
|
|
2472
2487
|
`}
|
|
2473
2488
|
</div>
|
|
2474
2489
|
|
|
2475
2490
|
${t.reactions.length > 0 && S`
|
|
2476
2491
|
<div className="t-emoji-reactions">
|
|
2477
|
-
${t.reactions.map((
|
|
2478
|
-
const
|
|
2492
|
+
${t.reactions.map((p) => {
|
|
2493
|
+
const C = p.currentUserReacted ? "remove your reaction" : "add reaction", B = p.count === 1 ? "person" : "people";
|
|
2479
2494
|
return S`
|
|
2480
2495
|
<button
|
|
2481
2496
|
className="t-reaction-button"
|
|
2482
|
-
t-active=${
|
|
2483
|
-
onClick=${() => E.toggleReaction(t.id,
|
|
2497
|
+
t-active=${p.currentUserReacted ? "true" : void 0}
|
|
2498
|
+
onClick=${() => E.toggleReaction(t.id, p.emoji)}
|
|
2484
2499
|
disabled=${!a.canAddReaction}
|
|
2485
|
-
aria-label="${
|
|
2486
|
-
aria-pressed=${
|
|
2487
|
-
key=${
|
|
2500
|
+
aria-label="${p.count} ${B} reacted with ${p.emoji}. Press to ${C}"
|
|
2501
|
+
aria-pressed=${p.currentUserReacted}
|
|
2502
|
+
key=${p.emoji}
|
|
2488
2503
|
>
|
|
2489
|
-
<span className="t-emoji">${
|
|
2490
|
-
<span className="t-num-reactions">${
|
|
2504
|
+
<span className="t-emoji">${p.emoji}</span>
|
|
2505
|
+
<span className="t-num-reactions">${p.count}</span>
|
|
2491
2506
|
</button>
|
|
2492
2507
|
`;
|
|
2493
2508
|
})}
|
|
@@ -2499,19 +2514,19 @@ const At = Object.freeze(Object.defineProperty({ __proto__: null, AudioBlock: fu
|
|
|
2499
2514
|
const { message: t, permissions: n, common: a } = e, { chatbox: s, t: i } = a;
|
|
2500
2515
|
return S` <div className="t-theme-message-action-menu">
|
|
2501
2516
|
${n.canReplyToMessage && S`
|
|
2502
|
-
<${
|
|
2517
|
+
<${Ee} className="t-menu-item" onSelect=${() => s.setReferencedMessage(t.id)}>
|
|
2503
2518
|
${i.REPLY_TO_MESSAGE}
|
|
2504
|
-
</${
|
|
2519
|
+
</${Ee}>
|
|
2505
2520
|
`}
|
|
2506
2521
|
${n.canEditMessage && S`
|
|
2507
|
-
<${
|
|
2522
|
+
<${Ee} className="t-menu-item" onSelect=${() => s.setEditing(t.id)}>
|
|
2508
2523
|
${i.EDIT_MESSAGE}
|
|
2509
|
-
</${
|
|
2524
|
+
</${Ee}>
|
|
2510
2525
|
`}
|
|
2511
2526
|
${n.canDeleteMessage && S`
|
|
2512
|
-
<${
|
|
2527
|
+
<${Ee} className="t-menu-item t-danger" onSelect=${() => s.deleteMessage(t.id)}>
|
|
2513
2528
|
${i.DELETE_MESSAGE}
|
|
2514
|
-
</${
|
|
2529
|
+
</${Ee}>
|
|
2515
2530
|
`}
|
|
2516
2531
|
</div>`;
|
|
2517
2532
|
}, MessageDivider: function(e) {
|
|
@@ -2522,7 +2537,7 @@ const At = Object.freeze(Object.defineProperty({ __proto__: null, AudioBlock: fu
|
|
|
2522
2537
|
<div className="t-line-segment" />
|
|
2523
2538
|
</div>
|
|
2524
2539
|
${a && S`
|
|
2525
|
-
<span className="t-day-marker">${
|
|
2540
|
+
<span className="t-day-marker">${Pi(t, i)}</span>
|
|
2526
2541
|
`}
|
|
2527
2542
|
<div className="t-line" t-side="right">
|
|
2528
2543
|
<div className="t-line-segment" />
|
|
@@ -2533,18 +2548,18 @@ const At = Object.freeze(Object.defineProperty({ __proto__: null, AudioBlock: fu
|
|
|
2533
2548
|
</div>
|
|
2534
2549
|
`;
|
|
2535
2550
|
}, MessageField: function(e) {
|
|
2536
|
-
const { common: t, referencedMessage: n, editor: a, permissions: s, editMessageId: i } = e, { chatbox: r, device: o, conversation: E, t: u, theme:
|
|
2551
|
+
const { common: t, referencedMessage: n, editor: a, permissions: s, editMessageId: i } = e, { chatbox: r, device: o, conversation: E, t: u, theme: l } = t, { ReplyBar: c, Icon: d } = l, D = i ? "edit" : "send", _ = D === "edit" && !a.atTextLimit && a.characterCount > 0, T = D === "send" && a.isEmpty && s.canShareLocation, I = D === "send" && a.isEmpty && s.canShareFile, R = D === "send" && o.supportsEmojiPicker && !o.isMobile;
|
|
2537
2552
|
return S`
|
|
2538
|
-
<div className="t-theme-message-field" t-mode=${
|
|
2553
|
+
<div className="t-theme-message-field" t-mode=${D}>
|
|
2539
2554
|
${a.showEmojiPicker && S`
|
|
2540
2555
|
<div className="t-emoji-picker-wrapper">
|
|
2541
|
-
<${
|
|
2556
|
+
<${Qn} colorScheme="light" />
|
|
2542
2557
|
</div>
|
|
2543
2558
|
`}
|
|
2544
|
-
<${
|
|
2545
|
-
<${
|
|
2559
|
+
<${pi} />
|
|
2560
|
+
<${vi} />
|
|
2546
2561
|
|
|
2547
|
-
${n && S`<${
|
|
2562
|
+
${n && S`<${c}
|
|
2548
2563
|
common=${t}
|
|
2549
2564
|
referencedMessage=${n}
|
|
2550
2565
|
/>`}
|
|
@@ -2561,7 +2576,7 @@ const At = Object.freeze(Object.defineProperty({ __proto__: null, AudioBlock: fu
|
|
|
2561
2576
|
`}
|
|
2562
2577
|
${E.access === "ReadWrite" && S`
|
|
2563
2578
|
<div className="t-textbox-column">
|
|
2564
|
-
<${
|
|
2579
|
+
<${si} placeholder=${u.ENTRYBOX_PLACEHOLDER} />
|
|
2565
2580
|
|
|
2566
2581
|
<div className="t-button-overlay">
|
|
2567
2582
|
${T && S`<button
|
|
@@ -2597,7 +2612,7 @@ const At = Object.freeze(Object.defineProperty({ __proto__: null, AudioBlock: fu
|
|
|
2597
2612
|
</div>
|
|
2598
2613
|
</div>
|
|
2599
2614
|
`}
|
|
2600
|
-
${
|
|
2615
|
+
${D === "send" && S`
|
|
2601
2616
|
<div className="t-send-column">
|
|
2602
2617
|
<button
|
|
2603
2618
|
className="t-send-button"
|
|
@@ -2610,7 +2625,7 @@ const At = Object.freeze(Object.defineProperty({ __proto__: null, AudioBlock: fu
|
|
|
2610
2625
|
</button>
|
|
2611
2626
|
</div>
|
|
2612
2627
|
`}
|
|
2613
|
-
${
|
|
2628
|
+
${D === "edit" && S`
|
|
2614
2629
|
<div className="t-edit-row">
|
|
2615
2630
|
<button
|
|
2616
2631
|
t-action="cancel"
|
|
@@ -2636,7 +2651,7 @@ const At = Object.freeze(Object.defineProperty({ __proto__: null, AudioBlock: fu
|
|
|
2636
2651
|
if (!i && s.length === 0) return null;
|
|
2637
2652
|
const r = i ? S`<div className="t-theme-avatar">5+</div>` : s.slice(0, 2).map((o) => S`<${a}
|
|
2638
2653
|
key=${o.id}
|
|
2639
|
-
photoUrl=${
|
|
2654
|
+
photoUrl=${De(o)}
|
|
2640
2655
|
common=${e}
|
|
2641
2656
|
/>`);
|
|
2642
2657
|
return S`
|
|
@@ -2702,11 +2717,11 @@ const At = Object.freeze(Object.defineProperty({ __proto__: null, AudioBlock: fu
|
|
|
2702
2717
|
}, TextBlock: function({ block: e, message: t }) {
|
|
2703
2718
|
return S`
|
|
2704
2719
|
<div className="t-theme-text-block">
|
|
2705
|
-
<${
|
|
2720
|
+
<${Jn} block=${e} message=${t} />
|
|
2706
2721
|
</div>
|
|
2707
2722
|
`;
|
|
2708
2723
|
}, TimeAgo: function({ timestamp: e, common: t }) {
|
|
2709
|
-
const { t: n } = t, a = new Date(e).toLocaleString(n.locale, { weekday: "short", year: "numeric", month: "long", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }), s =
|
|
2724
|
+
const { t: n } = t, a = new Date(e).toLocaleString(n.locale, { weekday: "short", year: "numeric", month: "long", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }), s = Mi(e, n);
|
|
2710
2725
|
return S`
|
|
2711
2726
|
<span className="t-theme-time-ago">
|
|
2712
2727
|
<span
|
|
@@ -2739,30 +2754,30 @@ const At = Object.freeze(Object.defineProperty({ __proto__: null, AudioBlock: fu
|
|
|
2739
2754
|
<a href=${t} className="t-body-text">
|
|
2740
2755
|
<${a} className="download-icon" type="download" common=${n} />
|
|
2741
2756
|
<span>${e.filename}</span>
|
|
2742
|
-
<span className="t-filesize"> (${
|
|
2757
|
+
<span className="t-filesize"> (${Ye(e.size)})</span>
|
|
2743
2758
|
</a>
|
|
2744
2759
|
</div>
|
|
2745
2760
|
`;
|
|
2746
2761
|
}, VoiceBlock: function({ block: e }) {
|
|
2747
|
-
return S`<${
|
|
2762
|
+
return S`<${Tt}
|
|
2748
2763
|
className="t-theme-voice-block"
|
|
2749
2764
|
src=${e.url}
|
|
2750
2765
|
filename=${e.filename}
|
|
2751
2766
|
/>`;
|
|
2752
2767
|
} }, Symbol.toStringTag, { value: "Module" }));
|
|
2753
|
-
function
|
|
2768
|
+
function q(e, t = !1) {
|
|
2754
2769
|
return function(n, a = !1) {
|
|
2755
2770
|
return n.map((s) => {
|
|
2756
2771
|
if (typeof s == "string") return s;
|
|
2757
2772
|
switch (s.type) {
|
|
2758
2773
|
case "bold":
|
|
2759
|
-
return "*" +
|
|
2774
|
+
return "*" + q(s.children) + "*";
|
|
2760
2775
|
case "italic":
|
|
2761
|
-
return "_" +
|
|
2776
|
+
return "_" + q(s.children) + "_";
|
|
2762
2777
|
case "strikethrough":
|
|
2763
|
-
return "~" +
|
|
2778
|
+
return "~" + q(s.children) + "~";
|
|
2764
2779
|
case "blockquote":
|
|
2765
|
-
return
|
|
2780
|
+
return q(s.children).split(`
|
|
2766
2781
|
`).map((i) => "> " + i).join(`
|
|
2767
2782
|
`) + `
|
|
2768
2783
|
`;
|
|
@@ -2784,33 +2799,33 @@ function z(e, t = !1) {
|
|
|
2784
2799
|
case "customEmoji":
|
|
2785
2800
|
return a ? `<!!customemoji:${s.text}>` : s.text;
|
|
2786
2801
|
case "link":
|
|
2787
|
-
return `<${s.url}|${
|
|
2802
|
+
return `<${s.url}|${q(s.children)}>`;
|
|
2788
2803
|
case "actionlink":
|
|
2789
2804
|
case "actionLink":
|
|
2790
2805
|
case "actionbutton":
|
|
2791
2806
|
case "actionButton":
|
|
2792
2807
|
return function(i) {
|
|
2793
2808
|
const r = new URLSearchParams(i.params).toString(), o = r ? i.action + "?" + r : i.action;
|
|
2794
|
-
return `<${i.type}:${o}|${
|
|
2809
|
+
return `<${i.type}:${o}|${q(i.children)}>`;
|
|
2795
2810
|
}(s);
|
|
2796
2811
|
case "bulletlist":
|
|
2797
2812
|
case "bulletList":
|
|
2798
2813
|
return `
|
|
2799
|
-
` +
|
|
2814
|
+
` + q(s.children);
|
|
2800
2815
|
case "bulletpoint":
|
|
2801
2816
|
case "bulletPoint":
|
|
2802
|
-
return "- " +
|
|
2817
|
+
return "- " + q(s.children) + `
|
|
2803
2818
|
`;
|
|
2804
2819
|
}
|
|
2805
2820
|
}).join("");
|
|
2806
2821
|
}(e, t).trim();
|
|
2807
2822
|
}
|
|
2808
|
-
class
|
|
2823
|
+
class sn {
|
|
2809
2824
|
constructor(t, n, a, s, i) {
|
|
2810
2825
|
this.send = n, this.attachFile = a, this.shareLocation = s, this.toggleEmojiPicker = i, this.isEmpty = t.isEmpty, this.isTyping = t.isTyping, this.atTextLimit = t.atTextLimit, this.characterCount = t.characterCount, this.showEmojiPicker = t.showEmojiPicker;
|
|
2811
2826
|
}
|
|
2812
2827
|
}
|
|
2813
|
-
const
|
|
2828
|
+
const rn = (e, t) => (n) => {
|
|
2814
2829
|
var E;
|
|
2815
2830
|
const a = (E = n.nodeBefore) == null ? void 0 : E.text;
|
|
2816
2831
|
if (!a) return;
|
|
@@ -2819,10 +2834,10 @@ const Vt = (e, t) => (n) => {
|
|
|
2819
2834
|
const i = s[2], r = n.pos - i.length, o = n.pos;
|
|
2820
2835
|
if (!n.doc.rangeHasMark(r, o, t.marks.literal))
|
|
2821
2836
|
return { range: { from: r, to: o }, text: i };
|
|
2822
|
-
},
|
|
2823
|
-
class
|
|
2837
|
+
}, ji = /(^|\s)(:[^:\s]+:?)$/, xi = /(^|\s)(@[^@]*)$/;
|
|
2838
|
+
class ia {
|
|
2824
2839
|
constructor(t, n, a) {
|
|
2825
|
-
this.state$ = t, this.device$ = n, this.userPermissions$ = a, this.currentDoc =
|
|
2840
|
+
this.state$ = t, this.device$ = n, this.userPermissions$ = a, this.currentDoc = ze.EMPTY, this.maxLength = 1e4, this.markAsTyping = /* @__PURE__ */ function(s, i) {
|
|
2826
2841
|
let r = !1;
|
|
2827
2842
|
return (...o) => {
|
|
2828
2843
|
if (!r) return r = !0, setTimeout(() => {
|
|
@@ -2835,20 +2850,20 @@ class xn {
|
|
|
2835
2850
|
}, 5e3), this._suggesterKeydownHandlers = { emoji: void 0, mention: void 0 }, this.toggleEmojiPicker = (s) => {
|
|
2836
2851
|
const i = this.state$.showEmojiPicker;
|
|
2837
2852
|
s != null || (s = !i.peek()), i.set(s), s === !1 && this.focus();
|
|
2838
|
-
}, this.spellcheck$ =
|
|
2853
|
+
}, this.spellcheck$ = U(), this.placeholder$ = U();
|
|
2839
2854
|
}
|
|
2840
2855
|
setEditorView(t) {
|
|
2841
2856
|
this.editorView = t;
|
|
2842
2857
|
}
|
|
2843
2858
|
emojiSuggesterPlugin() {
|
|
2844
|
-
if (this.device$.peek().supportsEmojiPicker) return
|
|
2859
|
+
if (this.device$.peek().supportsEmojiPicker) return xt({ debug: !1, matcher: rn(ji, y), onEnter: (t) => this.suggestEmoji(t.text, t.range), onChange: (t) => this.suggestEmoji(t.text, t.range), onExit: () => this.onExitSuggester(), onKeyDown: ({ event: t }) => {
|
|
2845
2860
|
var n, a, s;
|
|
2846
2861
|
return (s = (a = (n = this._suggesterKeydownHandlers).emoji) == null ? void 0 : a.call(n, t.key)) != null ? s : !1;
|
|
2847
2862
|
} });
|
|
2848
2863
|
}
|
|
2849
2864
|
mentionsPlugin() {
|
|
2850
2865
|
const t = this.userPermissions$.peek();
|
|
2851
|
-
if (k.defined(t), t.canMention) return
|
|
2866
|
+
if (k.defined(t), t.canMention) return xt({ debug: !1, matcher: rn(xi, y), onEnter: (n) => this.suggestMention(n.text, n.range), onChange: (n) => this.suggestMention(n.text, n.range), onExit: () => this.onExitSuggester(), onKeyDown: ({ event: n }) => {
|
|
2852
2867
|
var a, s, i;
|
|
2853
2868
|
return (i = (s = (a = this._suggesterKeydownHandlers).mention) == null ? void 0 : s.call(a, n.key)) != null ? i : !1;
|
|
2854
2869
|
} });
|
|
@@ -2889,10 +2904,10 @@ class xn {
|
|
|
2889
2904
|
setText(t) {
|
|
2890
2905
|
this.editorView && function(n, a) {
|
|
2891
2906
|
const s = n.state.doc.content.size, i = a.split(/(<!!(?:mention|customemoji):.*?>)/g).filter((o) => o || o.length).map((o) => {
|
|
2892
|
-
const [E, u,
|
|
2893
|
-
if (E && u &&
|
|
2894
|
-
const [
|
|
2895
|
-
return
|
|
2907
|
+
const [E, u, l] = o.match(/<!!mention:(.*)\|(.*)>/) || [null];
|
|
2908
|
+
if (E && u && l) return Xt(u, l);
|
|
2909
|
+
const [c, d] = o.match(/<!!customemoji:(.*?)>/) || [null];
|
|
2910
|
+
return c && d ? Vt(d) : y.text(o);
|
|
2896
2911
|
}), r = n.state.tr.replaceWith(0, s, i);
|
|
2897
2912
|
n.dispatch(r);
|
|
2898
2913
|
}(this.editorView, t);
|
|
@@ -2914,7 +2929,7 @@ class xn {
|
|
|
2914
2929
|
}
|
|
2915
2930
|
selectEmoji(t) {
|
|
2916
2931
|
k.defined(this.editorView), function(n, a, s) {
|
|
2917
|
-
const i =
|
|
2932
|
+
const i = Vt(a);
|
|
2918
2933
|
let r;
|
|
2919
2934
|
if (s) {
|
|
2920
2935
|
const { from: o, to: E } = s;
|
|
@@ -2925,7 +2940,7 @@ class xn {
|
|
|
2925
2940
|
}
|
|
2926
2941
|
selectMention(t) {
|
|
2927
2942
|
k.defined(this.editorView), function(n, a, s) {
|
|
2928
|
-
const i =
|
|
2943
|
+
const i = Xt(a.id, a.name);
|
|
2929
2944
|
let r = n.state.tr;
|
|
2930
2945
|
if (s) {
|
|
2931
2946
|
const { from: o, to: E } = s;
|
|
@@ -2935,174 +2950,174 @@ class xn {
|
|
|
2935
2950
|
}(this.editorView, t, this._suggestionRange), this.focus();
|
|
2936
2951
|
}
|
|
2937
2952
|
}
|
|
2938
|
-
function
|
|
2939
|
-
const t =
|
|
2940
|
-
const
|
|
2941
|
-
return e.editMessageId === void 0 ? new
|
|
2953
|
+
function ra(e) {
|
|
2954
|
+
const t = W(), n = f(), a = Ne(), s = F(n.referencedMessage$), i = F(n.state$.userPermissions), r = He(), { sendMessage: o } = Fa(), E = te(() => {
|
|
2955
|
+
const l = r.state$.get();
|
|
2956
|
+
return e.editMessageId === void 0 ? new sn(l, o, e.attachFile, e.shareLocation, r.toggleEmojiPicker) : new sn(l, e.onEditMessage, () => {
|
|
2942
2957
|
}, () => {
|
|
2943
2958
|
}, () => {
|
|
2944
2959
|
});
|
|
2945
|
-
}, [r.state$, r.toggleEmojiPicker, e.attachFile, e.editMessageId, e.onEditMessage, e.shareLocation, o]), u =
|
|
2946
|
-
return O(
|
|
2960
|
+
}, [r.state$, r.toggleEmojiPicker, e.attachFile, e.editMessageId, e.onEditMessage, e.shareLocation, o]), u = F(E);
|
|
2961
|
+
return O(On.Provider, { value: { onClose: () => r.toggleEmojiPicker(!1), onEmojiSelected: (l) => r.selectEmoji(l) }, children: O(t.MessageField, { common: a, referencedMessage: s, permissions: i, editor: u, editMessageId: e.editMessageId }) });
|
|
2947
2962
|
}
|
|
2948
|
-
function
|
|
2949
|
-
const t = f(), n =
|
|
2963
|
+
function Vi({ message: e }) {
|
|
2964
|
+
const t = f(), n = Ue(), a = F(t.state$.editingMessageId), s = M(() => q(e.content[0].children), [e]), i = te({ isEmpty: s.length === 0, isTyping: !1, atTextLimit: !1, characterCount: s.length, showEmojiPicker: !1, suggestEmojiQuery: void 0, suggestMentionQuery: void 0 }), r = M(() => new ia(i, t.device$, t.state$.userPermissions), [i, t]), o = H(async () => {
|
|
2950
2965
|
const E = r.state$;
|
|
2951
2966
|
if (E.isEmpty.peek() || E.atTextLimit.peek()) return;
|
|
2952
2967
|
const u = r.getText();
|
|
2953
2968
|
u && await n.editMessage(e.id, { text: u }), t.state$.editingMessageId.set(null);
|
|
2954
2969
|
}, [t, n, r, e.id]);
|
|
2955
|
-
return
|
|
2970
|
+
return h(() => {
|
|
2956
2971
|
r.onEnter = o;
|
|
2957
|
-
}, [r, o]),
|
|
2958
|
-
r.focus(), r.setText(
|
|
2959
|
-
}, [r, e]), O(
|
|
2972
|
+
}, [r, o]), h(() => {
|
|
2973
|
+
r.focus(), r.setText(q(e.content[0].children, !0));
|
|
2974
|
+
}, [r, e]), O(Tn.Provider, { value: r, children: O(ra, { editMessageId: a, onEditMessage: o }) });
|
|
2960
2975
|
}
|
|
2961
|
-
function
|
|
2962
|
-
const e =
|
|
2976
|
+
function Xi() {
|
|
2977
|
+
const e = W(), t = Ne();
|
|
2963
2978
|
return O(e.MessageListFooter, { common: t });
|
|
2964
2979
|
}
|
|
2965
|
-
function
|
|
2966
|
-
const t =
|
|
2980
|
+
function Gi(e) {
|
|
2981
|
+
const t = W(), n = Ne();
|
|
2967
2982
|
return O(t.MessageDivider, { common: n, ...e });
|
|
2968
2983
|
}
|
|
2969
|
-
function
|
|
2970
|
-
const t =
|
|
2971
|
-
return
|
|
2984
|
+
function zi({ message: e }) {
|
|
2985
|
+
const t = W(), n = f(), a = Ne(), [s, i] = b("sent");
|
|
2986
|
+
return de((r) => {
|
|
2972
2987
|
if (e.id.startsWith("ephemeral-")) return i("sending");
|
|
2973
2988
|
const o = n.state$.currentConversation.everyoneReadUntil.get();
|
|
2974
2989
|
return o !== void 0 ? e.createdAt <= o ? i("everyoneRead") : i("sent") : void 0;
|
|
2975
2990
|
}), O(t.Message, { common: a, message: e, messageStatus: s, permissions: n.messagePermissions$(e).get() });
|
|
2976
2991
|
}
|
|
2977
|
-
function
|
|
2978
|
-
const t =
|
|
2979
|
-
|
|
2992
|
+
function Ki({ extConversationId: e }) {
|
|
2993
|
+
const t = Pe(), n = f(), a = Ue(), s = P(!0), i = P(null);
|
|
2994
|
+
Ie(() => {
|
|
2980
2995
|
s.current = i.current.scrollTop > -30;
|
|
2981
|
-
}),
|
|
2996
|
+
}), h(() => {
|
|
2982
2997
|
s.current && (i.current.scrollTop = 0);
|
|
2983
|
-
}),
|
|
2984
|
-
const
|
|
2985
|
-
return
|
|
2986
|
-
}, [n]),
|
|
2987
|
-
const
|
|
2988
|
-
return document.addEventListener("visibilitychange",
|
|
2998
|
+
}), h(() => {
|
|
2999
|
+
const l = new IntersectionObserver((c) => n.state$.visibility.isInView.set(c[0].isIntersecting), { threshold: 0.9 });
|
|
3000
|
+
return l.observe(i.current), () => l.disconnect();
|
|
3001
|
+
}, [n]), h(() => {
|
|
3002
|
+
const l = () => n.state$.visibility.tabFocused.set(!document.hidden);
|
|
3003
|
+
return document.addEventListener("visibilitychange", l), () => document.removeEventListener("visibilitychange", l);
|
|
2989
3004
|
}, [n]);
|
|
2990
|
-
const [r, o] =
|
|
2991
|
-
|
|
3005
|
+
const [r, o] = b(!1);
|
|
3006
|
+
h(() => {
|
|
2992
3007
|
o(!1);
|
|
2993
|
-
const
|
|
2994
|
-
(
|
|
2995
|
-
|
|
3008
|
+
const l = n.state$.currentConversation.peek();
|
|
3009
|
+
(l == null ? void 0 : l.isUnread) === !0 && t.conversation(e).markAsRead().catch((c) => {
|
|
3010
|
+
Xe.warn("Could not mark conversation as read", c);
|
|
2996
3011
|
});
|
|
2997
|
-
}, [e, t, n]),
|
|
3012
|
+
}, [e, t, n]), de((l) => {
|
|
2998
3013
|
if (!i.current) return;
|
|
2999
|
-
const
|
|
3000
|
-
if (d &&
|
|
3014
|
+
const c = n.state$.currentConversation.get(), d = !(!c || !c.isUnread), D = c == null ? void 0 : c.unreadMessageCount;
|
|
3015
|
+
if (d && D === 0) return void o(!0);
|
|
3001
3016
|
if (d && r) return;
|
|
3002
3017
|
if (!d) return void o(!1);
|
|
3003
3018
|
const _ = n.state$.visibility.tabFocused.get(), T = n.state$.visibility.isInView.get(), I = function(R) {
|
|
3004
3019
|
if (R.checkVisibility) return R.checkVisibility({ contentVisibilityAuto: !0, opacityProperty: !0, visibilityProperty: !0, checkOpacity: !0, checkVisibilityCSS: !0 });
|
|
3005
3020
|
{
|
|
3006
|
-
const N = window.getComputedStyle(R), L = N.visibility,
|
|
3007
|
-
return !(R.getClientRects().length === 0 || L === "hidden" ||
|
|
3021
|
+
const N = window.getComputedStyle(R), L = N.visibility, m = N.opacity;
|
|
3022
|
+
return !(R.getClientRects().length === 0 || L === "hidden" || m === "0");
|
|
3008
3023
|
}
|
|
3009
3024
|
}(i.current);
|
|
3010
|
-
return _ && T && I ? t.conversation(
|
|
3025
|
+
return _ && T && I ? t.conversation(c.id).markAsRead() : void 0;
|
|
3011
3026
|
});
|
|
3012
|
-
const E =
|
|
3013
|
-
const
|
|
3014
|
-
|
|
3015
|
-
}, [n.messageSubscription]), u =
|
|
3016
|
-
return
|
|
3017
|
-
}
|
|
3018
|
-
function
|
|
3019
|
-
const t = f(), n =
|
|
3020
|
-
return n instanceof
|
|
3021
|
-
}
|
|
3022
|
-
const
|
|
3023
|
-
function
|
|
3024
|
-
const n = e.charAt(0) === "t" ||
|
|
3025
|
-
return
|
|
3027
|
+
const E = H((l) => {
|
|
3028
|
+
const c = l.currentTarget;
|
|
3029
|
+
c.scrollHeight - c.clientHeight + c.scrollTop < 90 && n.messageSubscription && n.messageSubscription.loadMore(10);
|
|
3030
|
+
}, [n.messageSubscription]), u = F(n.state$.typing.child(e));
|
|
3031
|
+
return K("div", { className: "t-message-list", ref: i, "t-menu-boundary": "", onScroll: E, children: [u && O(Xi, {}), O(_t, { each: n.chatItems$, children: (l) => O("div", { className: "t-message-group", children: O(_t, { each: l, item: Wi, itemProps: { controller: a, extConversationId: e } }) }) })] });
|
|
3032
|
+
}
|
|
3033
|
+
function Wi({ item$: e }) {
|
|
3034
|
+
const t = f(), n = F(e), a = F(t.state$.editingMessageId);
|
|
3035
|
+
return n instanceof Ot ? O(Gi, { timestamp: n.timestamp, isReadMarker: n.isReadMarker, isDayMarker: n.isDayMarker }) : a === n.id ? O(Vi, { message: n }) : O(zi, { message: n });
|
|
3036
|
+
}
|
|
3037
|
+
const qi = /* @__PURE__ */ new Set(["ByV39eoc", "B1FxElnd", "aW4c49tW", "qGfuGtx", "SbERe5ee", "ilaVEa15", "FOlWOSaH", "dao5gGmT", "DLUgAhzL", "fqXFumr6", "FtiWHMYT", "66iWOyWt", "1375amYi", "mWbJgzpt", "jO7GqAvL", "SkFIKxo5", "2z4ILc3y", "aDr8oPL1", "Hku1c4Pt"]);
|
|
3038
|
+
function nt({ appId: e, chatboxState: t }) {
|
|
3039
|
+
const n = e.charAt(0) === "t" || qi.has(e);
|
|
3040
|
+
return h(() => {
|
|
3026
3041
|
switch (t.type) {
|
|
3027
3042
|
case "auth-failed":
|
|
3028
|
-
|
|
3043
|
+
ee.error("Could not authenticate user. Check if you are authenticating correctly.");
|
|
3029
3044
|
break;
|
|
3030
3045
|
case "unknown-user":
|
|
3031
|
-
|
|
3046
|
+
ee.error(`User \`${t.userId}\` not found. Please verify that you synchronized this user's data with TalkJS, either using the JS SDK or through the REST API.`);
|
|
3032
3047
|
break;
|
|
3033
3048
|
case "unexpected-error":
|
|
3034
|
-
|
|
3049
|
+
ee.error(t.error);
|
|
3035
3050
|
break;
|
|
3036
3051
|
case "wrong-app-id":
|
|
3037
|
-
|
|
3052
|
+
ee.error(`Could not find given appId: "${t.appId}". You can find your appId on https://talkjs.com/dashboard.`);
|
|
3038
3053
|
break;
|
|
3039
3054
|
case "server-error":
|
|
3040
3055
|
break;
|
|
3041
3056
|
default:
|
|
3042
3057
|
k.never(t);
|
|
3043
3058
|
}
|
|
3044
|
-
}, [t]),
|
|
3059
|
+
}, [t]), K("div", { className: "t-panel t-error-panel", children: [O("span", { className: "t-heading", children: "Something went wrong." }), O("p", { children: "Please reload the page and try again." }), n ? K("p", { style: { fontStyle: "italic" }, children: ["Developer note: check your browser's developer tools console for messages that may help solve the problem.", O("br", {}), O("small", { children: "This message only shows up in test mode." })] }) : O("p", { children: "If things keep not working, do not hesitate to get in touch with us." })] });
|
|
3045
3060
|
}
|
|
3046
|
-
function
|
|
3047
|
-
const e = f(), t =
|
|
3061
|
+
function Ji() {
|
|
3062
|
+
const e = f(), t = F(e.t$);
|
|
3048
3063
|
return O("div", { className: "t-panel t-error-panel", children: O("span", { className: "t-heading", style: { fontStyle: "italic" }, children: t.CHAT_NOT_FOUND }) });
|
|
3049
3064
|
}
|
|
3050
|
-
function
|
|
3051
|
-
return O("div", { className: "t-panel t-loading-panel", children: O(
|
|
3065
|
+
function oa() {
|
|
3066
|
+
return O("div", { className: "t-panel t-loading-panel", children: O(Ct, {}) });
|
|
3052
3067
|
}
|
|
3053
|
-
function
|
|
3054
|
-
const e = f(), t =
|
|
3055
|
-
return
|
|
3068
|
+
function Ea() {
|
|
3069
|
+
const e = f(), t = F(e.t$);
|
|
3070
|
+
return K("div", { className: "t-panel t-error-panel", children: [O("span", { className: "t-heading", style: { fontStyle: "italic" }, children: t.AUTH_EXPIRED_OVERLAY_TITLE }), O("p", { children: t.AUTH_EXPIRED_OVERLAY_DESCRIPTION })] });
|
|
3056
3071
|
}
|
|
3057
|
-
const
|
|
3058
|
-
async function
|
|
3072
|
+
const Zi = () => !0;
|
|
3073
|
+
async function gt(e, t, { initialDelay: n, maxDelay: a, log: s, shouldRetry: i = Zi }) {
|
|
3059
3074
|
return t().catch(async (r) => {
|
|
3060
3075
|
if (s && s(`[TalkJS] Retries left: ${e}. Error: ${JSON.stringify(r)}.`), e === 0 || !await i(r)) throw r;
|
|
3061
|
-
const o = 1e3 * n * 1.2, E = a ? Math.min(1e3 * a, o) : o, u = E * (1 - (
|
|
3062
|
-
var
|
|
3063
|
-
return (
|
|
3076
|
+
const o = 1e3 * n * 1.2, E = a ? Math.min(1e3 * a, o) : o, u = E * (1 - (l = 0.05) + 2 * Math.random() * l);
|
|
3077
|
+
var l, c;
|
|
3078
|
+
return (c = u, c <= 0 ? Promise.resolve() : new Promise((d) => setTimeout(d, c))).then(() => gt(e - 1, t, { initialDelay: u / 1e3, maxDelay: a, log: s, shouldRetry: i }));
|
|
3064
3079
|
});
|
|
3065
3080
|
}
|
|
3066
|
-
function
|
|
3081
|
+
function ke() {
|
|
3067
3082
|
const e = {}, t = new Promise(function(n, a) {
|
|
3068
3083
|
e.resolve = n, e.reject = a;
|
|
3069
3084
|
});
|
|
3070
3085
|
return e.promise = t, e;
|
|
3071
3086
|
}
|
|
3072
|
-
function
|
|
3073
|
-
const { beforeBrowserPermissionPrompt: a, onMissingBrowserPermissionCallback: s } =
|
|
3074
|
-
return
|
|
3075
|
-
function i(
|
|
3076
|
-
|
|
3087
|
+
function Qi(e, t, n) {
|
|
3088
|
+
const { beforeBrowserPermissionPrompt: a, onMissingBrowserPermissionCallback: s } = Ra(dn);
|
|
3089
|
+
return H(async () => {
|
|
3090
|
+
function i(l) {
|
|
3091
|
+
l === "denied" && s({ type: e });
|
|
3077
3092
|
}
|
|
3078
|
-
if (!a || !await async function(
|
|
3093
|
+
if (!a || !await async function(l) {
|
|
3079
3094
|
if (!("permissions" in navigator)) return !1;
|
|
3080
|
-
const
|
|
3095
|
+
const c = l;
|
|
3081
3096
|
try {
|
|
3082
|
-
return (await navigator.permissions.query({ name:
|
|
3097
|
+
return (await navigator.permissions.query({ name: c })).state === "prompt";
|
|
3083
3098
|
} catch (d) {
|
|
3084
3099
|
return !1;
|
|
3085
3100
|
}
|
|
3086
|
-
}(e)) return t((
|
|
3087
|
-
i(
|
|
3101
|
+
}(e)) return t((l) => {
|
|
3102
|
+
i(l);
|
|
3088
3103
|
});
|
|
3089
|
-
const r =
|
|
3104
|
+
const r = ke(), o = ke(), E = { type: e, showPrompt: async () => (o.resolve({ cancelled: !1 }), await r.promise), cancel: () => {
|
|
3090
3105
|
o.resolve({ cancelled: !0 });
|
|
3091
3106
|
} };
|
|
3092
3107
|
try {
|
|
3093
3108
|
a(E);
|
|
3094
|
-
} catch (
|
|
3095
|
-
|
|
3109
|
+
} catch (l) {
|
|
3110
|
+
ee.error("Your beforeBrowserPermissionPrompt callback threw an error: ", l), o.resolve({ cancelled: !0 });
|
|
3096
3111
|
}
|
|
3097
3112
|
const { cancelled: u } = await o.promise;
|
|
3098
|
-
return u ? void 0 : t((
|
|
3099
|
-
r.resolve(
|
|
3113
|
+
return u ? void 0 : t((l) => {
|
|
3114
|
+
r.resolve(l), i(l);
|
|
3100
3115
|
});
|
|
3101
3116
|
}, [a, s, e, t, ...n]);
|
|
3102
3117
|
}
|
|
3103
|
-
function
|
|
3104
|
-
const t = f(), n =
|
|
3105
|
-
return { attachFile:
|
|
3118
|
+
function er({ onClose: e }) {
|
|
3119
|
+
const t = f(), n = Ue(), a = Pe(), [s, i] = b(null);
|
|
3120
|
+
return { attachFile: H(async (o) => {
|
|
3106
3121
|
try {
|
|
3107
3122
|
if (o || (o = (await new Promise((_) => {
|
|
3108
3123
|
const T = document.createElement("input");
|
|
@@ -3114,11 +3129,11 @@ function Ui({ onClose: e }) {
|
|
|
3114
3129
|
}))[0]), !o) return;
|
|
3115
3130
|
const { uploadPromise: E, upload: u } = await async function(_, T) {
|
|
3116
3131
|
const I = _.name;
|
|
3117
|
-
if (function(
|
|
3118
|
-
return /\.(mp4|ts|mov|webm|ogv)$/i.test(
|
|
3132
|
+
if (function(m) {
|
|
3133
|
+
return /\.(mp4|ts|mov|webm|ogv)$/i.test(m);
|
|
3119
3134
|
}(_.name)) {
|
|
3120
|
-
const
|
|
3121
|
-
switch (
|
|
3135
|
+
const m = await ct("video", _, (B) => ({ width: B.videoWidth, height: B.videoHeight, duration: B.duration, filename: I })), p = T.uploadVideo(_, m), C = function(B) {
|
|
3136
|
+
switch (B.name.split(".").pop()) {
|
|
3122
3137
|
case "ts":
|
|
3123
3138
|
return "video/MP2T";
|
|
3124
3139
|
case "mov":
|
|
@@ -3131,65 +3146,65 @@ function Ui({ onClose: e }) {
|
|
|
3131
3146
|
return "video/mp4";
|
|
3132
3147
|
}
|
|
3133
3148
|
}(_);
|
|
3134
|
-
return { uploadPromise:
|
|
3149
|
+
return { uploadPromise: p, upload: { type: "video", file: _, metadata: m, temporaryBlobUrl: URL.createObjectURL(new Blob([_], { type: C })) } };
|
|
3135
3150
|
}
|
|
3136
|
-
if (function(
|
|
3137
|
-
return /\.(mp3|m4a|ogg|oga|opus|flac|wav)$/i.test(
|
|
3151
|
+
if (function(m) {
|
|
3152
|
+
return /\.(mp3|m4a|ogg|oga|opus|flac|wav)$/i.test(m);
|
|
3138
3153
|
}(_.name)) {
|
|
3139
|
-
const
|
|
3140
|
-
return { uploadPromise: T.uploadAudio(_,
|
|
3154
|
+
const m = await ct("audio", _, (p) => ({ duration: p.duration, filename: I }));
|
|
3155
|
+
return { uploadPromise: T.uploadAudio(_, m), upload: { type: "audio", file: _, metadata: m, temporaryBlobUrl: URL.createObjectURL(new Blob([_])) } };
|
|
3141
3156
|
}
|
|
3142
|
-
if (function(
|
|
3143
|
-
return /(gif|png|jpg|jpeg|svg|bmp|webp)$/i.test(
|
|
3157
|
+
if (function(m) {
|
|
3158
|
+
return /(gif|png|jpg|jpeg|svg|bmp|webp)$/i.test(m);
|
|
3144
3159
|
}(_.name)) {
|
|
3145
|
-
const
|
|
3146
|
-
return { uploadPromise: T.uploadImage(_,
|
|
3160
|
+
const m = await ct("img", _, (p) => ({ width: p.naturalWidth, height: p.naturalHeight, filename: I }));
|
|
3161
|
+
return { uploadPromise: T.uploadImage(_, m), upload: { type: "image", file: _, metadata: m, temporaryBlobUrl: URL.createObjectURL(new Blob([_])) } };
|
|
3147
3162
|
}
|
|
3148
3163
|
const R = { filename: I }, N = T.uploadFile(_, R), L = URL.createObjectURL(new Blob([_]));
|
|
3149
3164
|
return { uploadPromise: N, upload: { type: "file", file: _, metadata: R, temporaryBlobUrl: L } };
|
|
3150
|
-
}(o, a),
|
|
3151
|
-
t.state$.localFileBlobUrls.child(t.state$.extCurrentConversationId.peek()).child(
|
|
3152
|
-
const
|
|
3153
|
-
let
|
|
3165
|
+
}(o, a), l = u.file.size + "," + u.file.name;
|
|
3166
|
+
t.state$.localFileBlobUrls.child(t.state$.extCurrentConversationId.peek()).child(l).set({ url: u.temporaryBlobUrl, fetching: !1 }), t.latestFileUpload = u;
|
|
3167
|
+
const c = ke(), d = { upload: u, closePreview: c.resolve, uploaded: !1 };
|
|
3168
|
+
let D;
|
|
3154
3169
|
i(d);
|
|
3155
3170
|
try {
|
|
3156
|
-
|
|
3171
|
+
D = await on(E, c.promise), i({ ...d, uploaded: !0 });
|
|
3157
3172
|
} catch (_) {
|
|
3158
|
-
if (_ ===
|
|
3173
|
+
if (_ === Nt) return;
|
|
3159
3174
|
i((T) => ({ ...T, error: _.toString() }));
|
|
3160
3175
|
}
|
|
3161
|
-
if (await
|
|
3162
|
-
k.defined(
|
|
3176
|
+
if (await c.promise === "cancel") return;
|
|
3177
|
+
k.defined(D), n.sendFileMessage({ fileToken: D });
|
|
3163
3178
|
} finally {
|
|
3164
3179
|
e(), i(null);
|
|
3165
3180
|
}
|
|
3166
|
-
}, [n, a, i, t, e]), shareLocation:
|
|
3181
|
+
}, [n, a, i, t, e]), shareLocation: Qi("geolocation", async (o) => {
|
|
3167
3182
|
try {
|
|
3168
|
-
const E =
|
|
3183
|
+
const E = ke(), u = { upload: { type: "location", location: void 0 }, uploaded: !1, closePreview: E.resolve };
|
|
3169
3184
|
i(u);
|
|
3170
|
-
const { permissionResult:
|
|
3171
|
-
navigator.geolocation.getCurrentPosition((
|
|
3172
|
-
const _ = { latitude:
|
|
3185
|
+
const { permissionResult: l, location: c } = await on(new Promise((d) => {
|
|
3186
|
+
navigator.geolocation.getCurrentPosition((D) => {
|
|
3187
|
+
const _ = { latitude: D.coords.latitude, longitude: D.coords.longitude };
|
|
3173
3188
|
d({ permissionResult: "granted", location: _ });
|
|
3174
|
-
}, (
|
|
3175
|
-
|
|
3189
|
+
}, (D) => {
|
|
3190
|
+
D.code === 1 ? d({ permissionResult: "denied" }) : d({ permissionResult: "granted" });
|
|
3176
3191
|
});
|
|
3177
3192
|
}), E.promise);
|
|
3178
|
-
if (o(
|
|
3179
|
-
n.sendLocationMessage({ location:
|
|
3193
|
+
if (o(l), !c || (i({ ...u, upload: { type: "location", location: c }, uploaded: !0 }), await E.promise === "cancel")) return;
|
|
3194
|
+
n.sendLocationMessage({ location: c });
|
|
3180
3195
|
} catch (E) {
|
|
3181
|
-
if (E ===
|
|
3196
|
+
if (E === Nt) return;
|
|
3182
3197
|
throw E;
|
|
3183
3198
|
} finally {
|
|
3184
3199
|
e(), i(null);
|
|
3185
3200
|
}
|
|
3186
3201
|
}, [n, i, e]), uploadState: s };
|
|
3187
3202
|
}
|
|
3188
|
-
const
|
|
3189
|
-
function
|
|
3190
|
-
return Promise.race([e, t.then(() => Promise.reject(
|
|
3203
|
+
const Nt = Symbol("cancelled");
|
|
3204
|
+
function on(e, t) {
|
|
3205
|
+
return Promise.race([e, t.then(() => Promise.reject(Nt))]);
|
|
3191
3206
|
}
|
|
3192
|
-
async function
|
|
3207
|
+
async function ct(e, t, n) {
|
|
3193
3208
|
const a = document.createElement(e);
|
|
3194
3209
|
try {
|
|
3195
3210
|
return a.src = URL.createObjectURL(t), await new Promise((s, i) => {
|
|
@@ -3206,69 +3221,69 @@ async function Qe(e, t, n) {
|
|
|
3206
3221
|
URL.revokeObjectURL(a.src);
|
|
3207
3222
|
}
|
|
3208
3223
|
}
|
|
3209
|
-
function
|
|
3224
|
+
function ua({ children: e, className: t, ...n }) {
|
|
3210
3225
|
return O("div", { className: "t-attach-overlay " + t, ...n, children: e });
|
|
3211
3226
|
}
|
|
3212
|
-
function
|
|
3227
|
+
function tr({ uploadState: e }) {
|
|
3213
3228
|
const t = e.error, n = e.uploaded;
|
|
3214
|
-
|
|
3215
|
-
const a =
|
|
3216
|
-
|
|
3229
|
+
tt(() => e.closePreview("cancel"), ".t-upload-preview");
|
|
3230
|
+
const a = P(null);
|
|
3231
|
+
h(() => {
|
|
3217
3232
|
n && a.current.focus();
|
|
3218
3233
|
}, [n]);
|
|
3219
|
-
const s = f(), i =
|
|
3220
|
-
return O(
|
|
3234
|
+
const s = f(), i = F(s.t$);
|
|
3235
|
+
return O(ua, { className: "t-upload-preview", children: K("div", { className: "t-preview", children: [O(nr, { upload: e.upload, uploaded: n }), t !== void 0 && O("div", { className: "t-error-row", children: t }), K("div", { className: "t-send-row", children: [O("button", { className: "t-cancel", onClick: () => e.closePreview("cancel"), children: i.CANCEL }), t === void 0 && n && O("button", { className: "t-confirm-send test__confirm-upload-button", onClick: () => e.closePreview("send"), ref: a, children: i.SEND_BUTTON_TEXT })] })] }) });
|
|
3221
3236
|
}
|
|
3222
|
-
function
|
|
3223
|
-
const n = f(), a =
|
|
3224
|
-
return e.type !== "location" ?
|
|
3237
|
+
function nr({ upload: e, uploaded: t }) {
|
|
3238
|
+
const n = f(), a = F(n.t$);
|
|
3239
|
+
return e.type !== "location" ? K(ve, { children: [O(sr, { upload: e }), O(ir, { upload: e, uploaded: t, t: a })] }) : t ? O(ar, { location: e.location }) : O("div", { className: "t-loading", children: O(Ct, {}) });
|
|
3225
3240
|
}
|
|
3226
|
-
function
|
|
3227
|
-
const { imageUrl: t, linkUrl: n } =
|
|
3241
|
+
function ar({ location: e }) {
|
|
3242
|
+
const { imageUrl: t, linkUrl: n } = aa(e), a = JSON.stringify(t);
|
|
3228
3243
|
return O("a", { href: n, target: "_blank", rel: "noreferrer", className: "t-location-upload-preview", style: { background: `url(${a}) center center / cover no-repeat` } });
|
|
3229
3244
|
}
|
|
3230
|
-
const
|
|
3245
|
+
const sr = ue.memo(function({ upload: e }) {
|
|
3231
3246
|
let t = null;
|
|
3232
3247
|
const n = e.file;
|
|
3233
3248
|
if (e.type === "video") {
|
|
3234
3249
|
const a = /[.]ts/i.test(n.name) ? "mpegts" : "native";
|
|
3235
|
-
t = O("div", { className: "video-container", children: O(
|
|
3250
|
+
t = O("div", { className: "video-container", children: O(rr, { src: e.temporaryBlobUrl, videoType: a, playsInline: !0, controls: !0, preload: "auto" }) });
|
|
3236
3251
|
} else if (e.type === "image") {
|
|
3237
3252
|
const a = URL.createObjectURL(n);
|
|
3238
3253
|
t = O("div", { className: "t-img-container", children: O("img", { src: a }) });
|
|
3239
3254
|
} else if (e.type === "audio") {
|
|
3240
3255
|
const a = URL.createObjectURL(n);
|
|
3241
|
-
t = O(
|
|
3256
|
+
t = O(Tt, { src: a, filename: n.name });
|
|
3242
3257
|
}
|
|
3243
3258
|
return t;
|
|
3244
|
-
}),
|
|
3259
|
+
}), ir = ue.memo(function({ uploaded: e, upload: t, t: n }) {
|
|
3245
3260
|
let a;
|
|
3246
3261
|
a = e ? t.metadata.filename : n.UPLOAD_IN_PROGRESS;
|
|
3247
3262
|
let s = "", i = "";
|
|
3248
3263
|
return t.type === "file" && (s = "is-file", e && (i = "file-block")), O("div", { className: `t-filename-row ${s}`, children: O("div", { className: i, children: a }) });
|
|
3249
3264
|
});
|
|
3250
|
-
function
|
|
3265
|
+
function rr(e) {
|
|
3251
3266
|
const { videoType: t, ...n } = e;
|
|
3252
3267
|
return O("video", { ...n });
|
|
3253
3268
|
}
|
|
3254
|
-
function
|
|
3255
|
-
const e =
|
|
3269
|
+
function or() {
|
|
3270
|
+
const e = W(), t = f(), n = Ne(), a = F(t.state$.isUserConnected), s = F(t.state$.userPermissions);
|
|
3256
3271
|
return O(e.ChatHeader, { common: n, isUserConnected: a, permissions: s });
|
|
3257
3272
|
}
|
|
3258
|
-
function
|
|
3259
|
-
const a =
|
|
3260
|
-
const
|
|
3261
|
-
const R =
|
|
3262
|
-
return
|
|
3263
|
-
}), T =
|
|
3264
|
-
|
|
3265
|
-
const N = _.get(), L =
|
|
3266
|
-
function
|
|
3273
|
+
function Er({ appId: e, chatHeaderVisible: t, messageFieldVisible: n }) {
|
|
3274
|
+
const a = He(), s = function() {
|
|
3275
|
+
const D = f(), _ = te(() => {
|
|
3276
|
+
const R = D.extUserId$.get(), N = D.errors$.get(), L = D.authTokenState$.get(), m = R && D.currentUser$.get(), p = D.state$.currentConversation.get(), C = D.state$.extCurrentConversationId.get(), B = C && D.state$.participants.child(C).get(), j = D.app$.get();
|
|
3277
|
+
return D.device$.get(), N.serverError ? "server-error" : N.wrongAppId ? "wrong-app-id" : L === "loading" || L === "idle" ? "loading-token" : L === "invalid" ? "invalid-token" : L === "expired" ? "expired-token" : L === "valid" ? N.unknownUser ? "unknown-user" : N.unknownConversation ? "loading-conv-failed" : m && p && B && j ? "loaded" : "loading-data" : void k.unreachable();
|
|
3278
|
+
}), T = te({ type: "loading" });
|
|
3279
|
+
de((R) => {
|
|
3280
|
+
const N = _.get(), L = D.state$.extCurrentConversationId.peek(), m = D.extUserId$.peek(), p = D.appId$.peek();
|
|
3281
|
+
function C(B) {
|
|
3267
3282
|
T.set({ type: "loading" });
|
|
3268
|
-
const
|
|
3269
|
-
T.set(
|
|
3283
|
+
const j = setTimeout(() => {
|
|
3284
|
+
T.set(B);
|
|
3270
3285
|
}, 5e3);
|
|
3271
|
-
return () => clearTimeout(
|
|
3286
|
+
return () => clearTimeout(j);
|
|
3272
3287
|
}
|
|
3273
3288
|
switch (N) {
|
|
3274
3289
|
case "invalid-token":
|
|
@@ -3278,7 +3293,7 @@ function Vi({ appId: e, chatHeaderVisible: t, messageFieldVisible: n }) {
|
|
|
3278
3293
|
T.set({ type: "expired-token" });
|
|
3279
3294
|
break;
|
|
3280
3295
|
case "wrong-app-id":
|
|
3281
|
-
T.set({ type: "wrong-app-id", appId:
|
|
3296
|
+
T.set({ type: "wrong-app-id", appId: p });
|
|
3282
3297
|
break;
|
|
3283
3298
|
case "server-error":
|
|
3284
3299
|
T.set({ type: "server-error" });
|
|
@@ -3288,20 +3303,20 @@ function Vi({ appId: e, chatHeaderVisible: t, messageFieldVisible: n }) {
|
|
|
3288
3303
|
T.set({ type: "loading" });
|
|
3289
3304
|
break;
|
|
3290
3305
|
case "loaded":
|
|
3291
|
-
T.set({ type: "loaded", conversationId: L, userId:
|
|
3306
|
+
T.set({ type: "loaded", conversationId: L, userId: m });
|
|
3292
3307
|
break;
|
|
3293
3308
|
case "loading-conv-failed":
|
|
3294
|
-
R.onCleanup =
|
|
3309
|
+
R.onCleanup = C({ type: "inaccessible-conversation", userId: m, conversationId: L });
|
|
3295
3310
|
break;
|
|
3296
3311
|
case "unknown-user":
|
|
3297
|
-
R.onCleanup =
|
|
3312
|
+
R.onCleanup = C({ type: "unknown-user", userId: m });
|
|
3298
3313
|
break;
|
|
3299
3314
|
default:
|
|
3300
3315
|
k.never(N);
|
|
3301
3316
|
}
|
|
3302
3317
|
});
|
|
3303
|
-
const I =
|
|
3304
|
-
return
|
|
3318
|
+
const I = te({ type: "loading" });
|
|
3319
|
+
return de((R) => {
|
|
3305
3320
|
if (T.type.get() === "loading") {
|
|
3306
3321
|
I.set({ type: "invisible-loading" });
|
|
3307
3322
|
const N = setTimeout(() => {
|
|
@@ -3311,39 +3326,39 @@ function Vi({ appId: e, chatHeaderVisible: t, messageFieldVisible: n }) {
|
|
|
3311
3326
|
clearTimeout(N);
|
|
3312
3327
|
};
|
|
3313
3328
|
} else I.set(T.get());
|
|
3314
|
-
}),
|
|
3315
|
-
}(), { attachFile: i, shareLocation: r, uploadState: o } =
|
|
3316
|
-
|
|
3329
|
+
}), F(I);
|
|
3330
|
+
}(), { attachFile: i, shareLocation: r, uploadState: o } = er({ onClose: () => a.focus() });
|
|
3331
|
+
h(() => {
|
|
3317
3332
|
a.uploadFile = i;
|
|
3318
3333
|
}, [a, i]);
|
|
3319
|
-
const [E, u] =
|
|
3320
|
-
i(
|
|
3321
|
-
}, [i]),
|
|
3322
|
-
|
|
3323
|
-
}, []), d =
|
|
3324
|
-
|
|
3334
|
+
const [E, u] = b(!1), l = H((D) => {
|
|
3335
|
+
i(D.dataTransfer.files[0]), D.preventDefault(), u(!1);
|
|
3336
|
+
}, [i]), c = H((D) => {
|
|
3337
|
+
D.preventDefault(), u(!0);
|
|
3338
|
+
}, []), d = H((D) => {
|
|
3339
|
+
D.preventDefault(), u(!1);
|
|
3325
3340
|
}, []);
|
|
3326
|
-
return s.type === "invisible-loading" ? O(
|
|
3341
|
+
return s.type === "invisible-loading" ? O(ve, {}) : s.type === "loading" ? O(oa, {}) : s.type === "inaccessible-conversation" ? O(Ji, {}) : s.type === "unknown-user" || s.type === "auth-failed" || s.type === "wrong-app-id" || s.type === "server-error" || s.type === "unexpected-error" ? O(nt, { appId: e, chatboxState: s }) : s.type == "expired-token" ? O(Ea, {}) : s.type === "loaded" ? K("div", { className: "t-chatbox-content", onDragOver: c, onDragLeave: d, onDrop: l, children: [t && O(or, {}), O(Ki, { extConversationId: s.conversationId }), n && O(ra, { attachFile: i, shareLocation: r }), o && O(tr, { uploadState: o }), E && O(ua, { className: "t-drop-overlay", children: O(Ge, { type: "attach" }) })] }) : O(ve, {});
|
|
3327
3342
|
}
|
|
3328
|
-
function
|
|
3343
|
+
function ur(e, t) {
|
|
3329
3344
|
return e.map((a) => function(s, i) {
|
|
3330
3345
|
if (s.type === "text") return function(r, o) {
|
|
3331
|
-
const E =
|
|
3332
|
-
return
|
|
3346
|
+
const E = mt(o);
|
|
3347
|
+
return xe(r, E);
|
|
3333
3348
|
}(s.children, i);
|
|
3334
|
-
if (s.type === "file" && s.subtype === "video") return `🎥 ${
|
|
3335
|
-
if (s.type === "file" && s.subtype === "image") return `📷 ${
|
|
3336
|
-
if (s.type === "file" && s.subtype === "audio") return `🎧 ${
|
|
3349
|
+
if (s.type === "file" && s.subtype === "video") return `🎥 ${we(s.url)}`;
|
|
3350
|
+
if (s.type === "file" && s.subtype === "image") return `📷 ${we(s.url)}`;
|
|
3351
|
+
if (s.type === "file" && s.subtype === "audio") return `🎧 ${we(s.url)}`;
|
|
3337
3352
|
if (s.type === "file" && s.subtype === "voice") {
|
|
3338
3353
|
const r = s.duration;
|
|
3339
3354
|
return r === void 0 ? "🎙️" : `🎙️ (${Math.floor(r / 60)}:${Math.floor(r % 60).toString().padStart(2, "0")})`;
|
|
3340
3355
|
}
|
|
3341
|
-
return s.type === "file" ? (s.subtype, `📎 ${
|
|
3356
|
+
return s.type === "file" ? (s.subtype, `📎 ${we(s.url)}`) : s.type === "location" ? "📍" : "";
|
|
3342
3357
|
}(a, t)).join(`
|
|
3343
3358
|
|
|
3344
3359
|
`);
|
|
3345
3360
|
}
|
|
3346
|
-
function
|
|
3361
|
+
function xe(e, t) {
|
|
3347
3362
|
return e.flatMap((n) => {
|
|
3348
3363
|
if (typeof n == "string") return n;
|
|
3349
3364
|
switch (n.type) {
|
|
@@ -3356,14 +3371,14 @@ function Pe(e, t) {
|
|
|
3356
3371
|
case "actionLink":
|
|
3357
3372
|
case "actionbutton":
|
|
3358
3373
|
case "actionButton":
|
|
3359
|
-
return
|
|
3374
|
+
return xe(n.children, t);
|
|
3360
3375
|
case "bulletlist":
|
|
3361
3376
|
case "bulletList":
|
|
3362
3377
|
return `
|
|
3363
|
-
` +
|
|
3378
|
+
` + xe(n.children, t);
|
|
3364
3379
|
case "bulletpoint":
|
|
3365
3380
|
case "bulletPoint":
|
|
3366
|
-
return "- " +
|
|
3381
|
+
return "- " + xe(n.children, t) + `
|
|
3367
3382
|
`;
|
|
3368
3383
|
case "autolink":
|
|
3369
3384
|
case "autoLink":
|
|
@@ -3382,13 +3397,13 @@ function Pe(e, t) {
|
|
|
3382
3397
|
}
|
|
3383
3398
|
}).join("");
|
|
3384
3399
|
}
|
|
3385
|
-
function
|
|
3400
|
+
function la() {
|
|
3386
3401
|
const e = typeof window != "undefined" ? window.crypto : void 0, t = e ? () => e.getRandomValues(new Uint8Array(1))[0] : () => Math.floor(255 * Math.random());
|
|
3387
3402
|
return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, (n) => (n ^ t() & 15 >> n / 4).toString(16));
|
|
3388
3403
|
}
|
|
3389
|
-
class
|
|
3390
|
-
constructor(t, n, a, s, i) {
|
|
3391
|
-
this.store = t, this.talkSession = n, this.editorInternals = a, this.onSendMessage = s, this.onDeleteMessage = i;
|
|
3404
|
+
class lr {
|
|
3405
|
+
constructor(t, n, a, s, i, r) {
|
|
3406
|
+
this.store = t, this.talkSession = n, this.editorInternals = a, this.onSendMessage = s, this.onDeleteMessage = i, this.onMessageAction = r;
|
|
3392
3407
|
}
|
|
3393
3408
|
async deleteMessage(t) {
|
|
3394
3409
|
const n = this.store.state$.extCurrentConversationId.peek(), a = this.store.state$.messages.child(n).lookup.child(t).peek(), s = this.talkSession.conversation(n).message(t), [i] = await Promise.all([a != null ? a : s.get(), s.delete()]);
|
|
@@ -3410,13 +3425,13 @@ class Gi {
|
|
|
3410
3425
|
async sendMessage(t) {
|
|
3411
3426
|
const n = this.store.state$.extCurrentConversationId.peek(), a = await async function(r, o) {
|
|
3412
3427
|
var T, I, R, N, L;
|
|
3413
|
-
const E = r.state$.extCurrentConversationId.peek(), u = r.state$.messages.child(E),
|
|
3414
|
-
|
|
3415
|
-
const d = r.latestFileUpload,
|
|
3416
|
-
return { id: "ephemeral-" +
|
|
3428
|
+
const E = r.state$.extCurrentConversationId.peek(), u = r.state$.messages.child(E), l = typeof o.referencedMessage == "string" ? u.lookup.child(o.referencedMessage).peek() : await ((I = (T = o.referencedMessage) == null ? void 0 : T.get()) != null ? I : null), c = l && { ...l, type: "UserMessage", sender: l.sender, referencedMessageId: (N = (R = l.referencedMessage) == null ? void 0 : R.id) != null ? N : null };
|
|
3429
|
+
c && delete c.referencedMessage;
|
|
3430
|
+
const d = r.latestFileUpload, D = "content" in o ? [En(d, o.content[0])] : [cr(o.text)], _ = "text" in o ? o.text : ur(o.content.map((m) => En(d, m)), {});
|
|
3431
|
+
return { id: "ephemeral-" + la(), type: "UserMessage", sender: r.currentUser$.peek(), createdAt: Date.now(), editedAt: null, custom: (L = o.custom) != null ? L : {}, origin: "web", referencedMessage: c, reactions: [], content: D, plaintext: _ };
|
|
3417
3432
|
}(this.store, t);
|
|
3418
3433
|
this.store.state$.ephemeralMessages.child(n).child(a.id).set(a);
|
|
3419
|
-
const s =
|
|
3434
|
+
const s = ke();
|
|
3420
3435
|
this.store.readyForNewMessagesPromise = s.promise;
|
|
3421
3436
|
const i = await this.talkSession.conversation(n).send(t);
|
|
3422
3437
|
this.store.state$.ephemeralMessageIdMapping.child(n).child(i.id).set(a.id), s.resolve(), this.onSendMessage({ message: await i.get(), currentUser: this.store.currentUser$.peek(), conversation: this.store.state$.currentConversation.peek() });
|
|
@@ -3429,33 +3444,31 @@ class Gi {
|
|
|
3429
3444
|
const n = { type: "location", latitude: t.location.latitude, longitude: t.location.longitude };
|
|
3430
3445
|
return this.sendMessage({ content: [n], custom: t.custom });
|
|
3431
3446
|
}
|
|
3432
|
-
getMessageFieldText() {
|
|
3433
|
-
return this.editorInternals.getText();
|
|
3434
|
-
}
|
|
3435
|
-
setMessageFieldText(t) {
|
|
3436
|
-
this.editorInternals.setText(t);
|
|
3437
|
-
}
|
|
3438
3447
|
markAsTyping() {
|
|
3439
3448
|
const t = this.store.state$.extCurrentConversationId.peek();
|
|
3440
3449
|
this.talkSession.conversation(t).markAsTyping();
|
|
3441
3450
|
}
|
|
3442
3451
|
async toggleReaction(t, n) {
|
|
3443
|
-
|
|
3444
|
-
const a = this.
|
|
3445
|
-
|
|
3452
|
+
typeof n != "string" && (n = n.emoji);
|
|
3453
|
+
const a = this.store.state$.extCurrentConversationId.peek(), s = this.store.state$.messages.child(a).lookup.child(t).peek().reactions.find((r) => r.emoji === n), i = this._getReactionRef(t, n);
|
|
3454
|
+
s != null && s.currentUserReacted ? await i.remove() : await i.add();
|
|
3446
3455
|
}
|
|
3447
3456
|
async addReaction(t, n) {
|
|
3448
|
-
|
|
3457
|
+
await this._getReactionRef(t, n).add();
|
|
3458
|
+
}
|
|
3459
|
+
triggerMessageAction(t, n, a) {
|
|
3460
|
+
const s = this.store.state$.currentConversation.peek();
|
|
3461
|
+
typeof t == "string" && (t = this.store.state$.messages.child(s.id).lookup.child(t).peek()), this.onMessageAction({ action: n, params: a, message: t, conversation: s });
|
|
3449
3462
|
}
|
|
3450
|
-
|
|
3463
|
+
_getReactionRef(t, n) {
|
|
3451
3464
|
const a = this.store.state$.extCurrentConversationId.peek();
|
|
3452
3465
|
return this.talkSession.conversation(a).message(t).reaction(n);
|
|
3453
3466
|
}
|
|
3454
3467
|
}
|
|
3455
|
-
const
|
|
3456
|
-
return
|
|
3468
|
+
const cr = (e) => ({ type: "text", children: function(n) {
|
|
3469
|
+
return Vn(n, { except: ["FormattedLink", "Actions"] });
|
|
3457
3470
|
}(e) });
|
|
3458
|
-
function
|
|
3471
|
+
function En(e, t) {
|
|
3459
3472
|
switch (t.type) {
|
|
3460
3473
|
case "text":
|
|
3461
3474
|
case "location":
|
|
@@ -3466,10 +3479,10 @@ function Gt(e, t) {
|
|
|
3466
3479
|
}(e, t);
|
|
3467
3480
|
}
|
|
3468
3481
|
}
|
|
3469
|
-
function
|
|
3482
|
+
function un(e) {
|
|
3470
3483
|
return Object.keys(e);
|
|
3471
3484
|
}
|
|
3472
|
-
class
|
|
3485
|
+
class Dt extends Error {
|
|
3473
3486
|
constructor(t, n) {
|
|
3474
3487
|
const a = function(s) {
|
|
3475
3488
|
if (typeof s == "string") return s;
|
|
@@ -3484,30 +3497,30 @@ class et extends Error {
|
|
|
3484
3497
|
super(a), this.userMessage = n != null ? n : a, Object.setPrototypeOf && Object.setPrototypeOf(this, new.target.prototype);
|
|
3485
3498
|
}
|
|
3486
3499
|
}
|
|
3487
|
-
const
|
|
3488
|
-
class
|
|
3500
|
+
const Me = console;
|
|
3501
|
+
class Dr {
|
|
3489
3502
|
constructor(t, n, a, s) {
|
|
3490
3503
|
this.apiUrls = t, this.appId = n, this.sessionId = a, this.authProvider = s, this._lastPutPromise = Promise.resolve();
|
|
3491
3504
|
}
|
|
3492
3505
|
async get(t, n = {}) {
|
|
3493
|
-
const a = this.endpointUrl(t, n), s = await
|
|
3506
|
+
const a = this.endpointUrl(t, n), s = await Ce(() => this.fetchWithReauth(a), { retries: 11 });
|
|
3494
3507
|
return await this.handleResponse(s, a);
|
|
3495
3508
|
}
|
|
3496
3509
|
async queuedPut(t, n) {
|
|
3497
3510
|
await this._lastPutPromise;
|
|
3498
|
-
const a =
|
|
3511
|
+
const a = Ce(() => this._doPut(t, n));
|
|
3499
3512
|
return this._lastPutPromise = a, a;
|
|
3500
3513
|
}
|
|
3501
3514
|
put(t, n, a) {
|
|
3502
3515
|
const s = () => this._doPut(t, n);
|
|
3503
|
-
return a ?
|
|
3516
|
+
return a ? ln(s, a) : Ce(s, { retries: 5 });
|
|
3504
3517
|
}
|
|
3505
3518
|
post(t, n, a) {
|
|
3506
3519
|
const s = () => this._doPost(t, n);
|
|
3507
|
-
return a ?
|
|
3520
|
+
return a ? ln(s, a) : Ce(s, { retries: 5 });
|
|
3508
3521
|
}
|
|
3509
3522
|
delete(t, n = {}) {
|
|
3510
|
-
return
|
|
3523
|
+
return Ce(() => this._doDelete(t, n), { retries: 11 });
|
|
3511
3524
|
}
|
|
3512
3525
|
endpointUrl(t, n = {}) {
|
|
3513
3526
|
const a = new URL(this.apiUrls.internalHttpApiUrl);
|
|
@@ -3529,14 +3542,14 @@ class Ki {
|
|
|
3529
3542
|
}
|
|
3530
3543
|
async handleResponse(t, n) {
|
|
3531
3544
|
if (t.status >= 300) {
|
|
3532
|
-
if (t.status === 404) throw
|
|
3545
|
+
if (t.status === 404) throw Xe.error(`[${this.appId}][BackendRestClient] Couldn't find resource.`), new Dt("Could not find app.", `Could not find given appId: "${this.appId}". You can find your appId on https://talkjs.com/dashboard.`);
|
|
3533
3546
|
if (t.status === 401) {
|
|
3534
3547
|
const a = await this.authProvider.getToken();
|
|
3535
|
-
throw
|
|
3548
|
+
throw Xe.error(`[${this.appId}][BackendRestClient] Couldn't authenticate ${n} with token ${a}.`), new Dt("User not authenticated.", "Could not authenticate user. Check if your signature is calculated correctly.");
|
|
3536
3549
|
}
|
|
3537
3550
|
if (t.status >= 300 && t.status < 500) {
|
|
3538
3551
|
const { error: a } = await t.json();
|
|
3539
|
-
throw new
|
|
3552
|
+
throw new Dt(a);
|
|
3540
3553
|
}
|
|
3541
3554
|
{
|
|
3542
3555
|
const a = await t.text();
|
|
@@ -3551,36 +3564,37 @@ class Ki {
|
|
|
3551
3564
|
return fetch(t, { ...n, headers: o });
|
|
3552
3565
|
}
|
|
3553
3566
|
const s = await this.authProvider.getToken(), i = await a(s);
|
|
3554
|
-
return i.status !== 401 ? i : (
|
|
3567
|
+
return i.status !== 401 ? i : (Me.error(`401 error from ${n == null ? void 0 : n.method} ${t}, ${s}`), this.authProvider.refreshToken(), a(await this.authProvider.getToken()));
|
|
3555
3568
|
}
|
|
3556
3569
|
}
|
|
3557
|
-
function
|
|
3570
|
+
function ca(e) {
|
|
3558
3571
|
return !e.userMessage;
|
|
3559
3572
|
}
|
|
3560
|
-
function
|
|
3561
|
-
return
|
|
3573
|
+
function Ce(e, { retries: t = 30 } = {}) {
|
|
3574
|
+
return gt(t, e, { shouldRetry: ca, log: Me.warn.bind(Me), maxDelay: 30, initialDelay: 0.2 });
|
|
3562
3575
|
}
|
|
3563
|
-
async function
|
|
3576
|
+
async function ln(e, t) {
|
|
3564
3577
|
try {
|
|
3565
3578
|
return await e();
|
|
3566
3579
|
} catch (a) {
|
|
3567
|
-
if (!
|
|
3580
|
+
if (!ca(a)) throw a;
|
|
3568
3581
|
}
|
|
3569
3582
|
let n = !1;
|
|
3570
3583
|
return t.then(() => {
|
|
3571
3584
|
n = !0;
|
|
3572
|
-
}),
|
|
3585
|
+
}), gt(1e3, e, { initialDelay: 0.2, maxDelay: 30, shouldRetry: () => !n, log: Me.warn.bind(Me) });
|
|
3573
3586
|
}
|
|
3574
|
-
class
|
|
3587
|
+
class _r {
|
|
3575
3588
|
constructor(t, n, a, s) {
|
|
3576
|
-
this.backendRestClient = new
|
|
3589
|
+
this.backendRestClient = new Dr(t, n, a, s);
|
|
3577
3590
|
}
|
|
3578
3591
|
async getApp(t) {
|
|
3579
3592
|
return function(n) {
|
|
3580
|
-
|
|
3581
|
-
|
|
3593
|
+
var E;
|
|
3594
|
+
const a = (E = n.configuration) == null ? void 0 : E.suppressContactInfo, s = typeof a == "string" ? JSON.parse(a) : void 0, i = s && new qn(s), r = { ...n.configuration, suppressContactInfo: i }, o = function(u, l) {
|
|
3595
|
+
const c = { general: { enableFileTransfers: l.includes("file_sharing"), enableLocation: l.includes("location_sharing"), enableMentions: !1, showTypingIndicators: !0, enablePresence: !1, enableVoiceRecording: !1 }, theme: { version: "v2", name: "default" }, permissions: { messages: { delete: "own", edit: "own", reply: "all", emojiReactions: "all" }, messagesCustom: {}, conversations: { leave: "none", markAsUnread: "none" }, conversationsCustom: {} }, generalNotificationSettings: { timeout: "15" }, emailSettings: { enabled: !0, subject: "{{sender.name}} wants to chat with you on {{app.name}}", replySeparator: "--- Write ABOVE THIS LINE to post a reply via email ---", unsubscribeText: "Unsubscribe from all chat emails", senderName: "{{sender.name}} (via {{app.name}})", header: `Hi {{recipient.name}},
|
|
3582
3596
|
{{sender.name}} wants to chat with you on {{app.name}}:`, includeMessages: !0, inboxUrl: "{{app.custom.websiteUrl}}", inboxLinkText: "Join the chat", footer: `On behalf of {{sender.name}},
|
|
3583
|
-
The {{app.name}} team`, enableReplyToEmail:
|
|
3597
|
+
The {{app.name}} team`, enableReplyToEmail: l.includes("reply_via_email"), emailThemeType: l.includes("email_templates") ? "custom" : "standard", emailTheme: "default_email", emailAttachmentMode: "enabledExcludingImages", htmlTemplate: `<div>
|
|
3584
3598
|
Hi {{recipient.name}}, <br/>
|
|
3585
3599
|
<br/>
|
|
3586
3600
|
{{sender.name}} wants to chat with you on {{app.name}}:<br/>
|
|
@@ -3602,10 +3616,10 @@ class Wi {
|
|
|
3602
3616
|
{{app.custom.websiteUrl}} Join the chat
|
|
3603
3617
|
|
|
3604
3618
|
On behalf of {{sender.name}},
|
|
3605
|
-
The {{app.name}} team` }, smsSettings: { enabled:
|
|
3606
|
-
return
|
|
3607
|
-
}(
|
|
3608
|
-
return { appMetadata: { ...n.appMetadata, id: n.appMetadata.id }, features: n.features, role:
|
|
3619
|
+
The {{app.name}} team` }, smsSettings: { enabled: l.includes("sms_notifications"), smsTemplate: '({{app.name}}) {{sender.name}}: "{{messages}}". Reply here: {{app.custom.websiteUrl}}', maximumSegments: "1", enableAutoOptOutText: !1, optOutText: "To stop receiving these messages, reply STOP." }, suppressContactInfo: { mode: "off", suppressLinks: !0, suppressEmailAddresses: !0, suppressPhoneNumbers: !0 }, sameTabLinkRules: [] };
|
|
3620
|
+
return Va(c, u);
|
|
3621
|
+
}(r, n.features);
|
|
3622
|
+
return { appMetadata: { ...n.appMetadata, id: n.appMetadata.id }, features: n.features, role: o };
|
|
3609
3623
|
}(await this.backendRestClient.get("/app", { role_name: t }));
|
|
3610
3624
|
}
|
|
3611
3625
|
async checkIfAppExists() {
|
|
@@ -3615,7 +3629,7 @@ The {{app.name}} team` }, smsSettings: { enabled: E.includes("sms_notifications"
|
|
|
3615
3629
|
});
|
|
3616
3630
|
}
|
|
3617
3631
|
}
|
|
3618
|
-
class
|
|
3632
|
+
class _e {
|
|
3619
3633
|
constructor(t, n, a) {
|
|
3620
3634
|
this.realtimeWsApiUrl = t, this.internalHttpApiUrl = n, this.restApiHttpUrl = a;
|
|
3621
3635
|
}
|
|
@@ -3628,7 +3642,7 @@ class oe {
|
|
|
3628
3642
|
}
|
|
3629
3643
|
static fromHost(t) {
|
|
3630
3644
|
var a;
|
|
3631
|
-
const n = new
|
|
3645
|
+
const n = new _e("wss://realtime.talkjs.com/v1", "https://app.talkjs.com/api/v0", "https://api.talkjs.com/v1");
|
|
3632
3646
|
if (!t) return n;
|
|
3633
3647
|
if (t === "@currentHost") {
|
|
3634
3648
|
if (typeof location == "undefined") throw new Error("You can only use @currentHost in a browser.");
|
|
@@ -3638,41 +3652,41 @@ class oe {
|
|
|
3638
3652
|
const s = t.match(/^(?:\w+-)?([^.]+)\.talkjs\.com$/);
|
|
3639
3653
|
if (s) {
|
|
3640
3654
|
const i = s[1];
|
|
3641
|
-
return ["app", "cdn", "api", "realtime"].includes(i) ? n : new
|
|
3655
|
+
return ["app", "cdn", "api", "realtime"].includes(i) ? n : new _e(`wss://realtime-${i}.talkjs.com/v1`, `https://app-${i}.talkjs.com/api/v0`, `https://api-${i}.talkjs.com/v1`);
|
|
3642
3656
|
}
|
|
3643
3657
|
return n;
|
|
3644
3658
|
}
|
|
3645
|
-
return t.includes("localhost") || t.includes("localtest.me") || /^\d+\.\d+\.\d+\.\d+(:\d+)?$/.test(t) ? new
|
|
3659
|
+
return t.includes("localhost") || t.includes("localtest.me") || /^\d+\.\d+\.\d+\.\d+(:\d+)?$/.test(t) ? new _e(`ws://${t}/public_api/v1`, `http://${t}/api/v0`, `http://${t}/public_api/v1`) : new _e(`wss://${t}/public_api/v1`, `https://${t}/api/v0`, `https://${t}/public_api/v1`);
|
|
3646
3660
|
}
|
|
3647
3661
|
}
|
|
3648
|
-
function
|
|
3649
|
-
const n = t.appId, a = t.userId, s = "conversationId" in t ? t.conversationId : void 0, i =
|
|
3650
|
-
const
|
|
3662
|
+
function Da(e, t) {
|
|
3663
|
+
const n = t.appId, a = t.userId, s = "conversationId" in t ? t.conversationId : void 0, i = M(() => _e.fromHost(t.host), [t.host]), r = P(void 0), o = M(() => {
|
|
3664
|
+
const c = r.current, d = typeof c != typeof t.tokenFetcher ? t.tokenFetcher : c;
|
|
3651
3665
|
return r.current = d, d;
|
|
3652
3666
|
}, [t.tokenFetcher]);
|
|
3653
|
-
|
|
3667
|
+
Ie(() => {
|
|
3654
3668
|
e.updateThemeCustom(t.themeCustom);
|
|
3655
3669
|
}, [e, t.themeCustom]);
|
|
3656
|
-
const E =
|
|
3657
|
-
|
|
3658
|
-
const
|
|
3659
|
-
return
|
|
3660
|
-
}
|
|
3661
|
-
function
|
|
3662
|
-
const a =
|
|
3663
|
-
return
|
|
3670
|
+
const E = M(() => la(), [t.appId, t.userId, t.token, o]), u = xa({ apiUrls: i, appId: n, userId: a, token: t.token, tokenFetcher: o });
|
|
3671
|
+
h(() => e.listenForErrors(u, s), [u, e, s]);
|
|
3672
|
+
const l = M(() => new _r(i, n, E, u._authProvider), [n, E, u, i]);
|
|
3673
|
+
return h(() => e.listenForAuthChanges(u, o), [u, e, o]), h(() => e.listenForUserAndAppChanges(u, l), [e, l, u]), { session: u, restApi: l };
|
|
3674
|
+
}
|
|
3675
|
+
function ge(e, t, n) {
|
|
3676
|
+
const a = P(e), s = P(n);
|
|
3677
|
+
return Ie(() => {
|
|
3664
3678
|
a.current = e, s.current = n;
|
|
3665
|
-
}),
|
|
3679
|
+
}), H((i) => {
|
|
3666
3680
|
a.current && a.current(i), (t == null ? void 0 : t.tagName) !== "T-CHATBOX" && (t == null ? void 0 : t.tagName) !== "T-CONVERSATION-LIST" || function(r, o, E) {
|
|
3667
3681
|
for (const u of E) {
|
|
3668
|
-
const
|
|
3669
|
-
Object.assign(
|
|
3682
|
+
const l = new Event(u);
|
|
3683
|
+
Object.assign(l, o), r.dispatchEvent(l);
|
|
3670
3684
|
}
|
|
3671
3685
|
}(t, i, s.current);
|
|
3672
3686
|
}, [t]);
|
|
3673
3687
|
}
|
|
3674
|
-
function
|
|
3675
|
-
|
|
3688
|
+
function _a(e) {
|
|
3689
|
+
h(() => {
|
|
3676
3690
|
const t = window, n = e.current;
|
|
3677
3691
|
if (t.cordova && n) {
|
|
3678
3692
|
const a = (s) => {
|
|
@@ -3685,108 +3699,160 @@ function Jn(e) {
|
|
|
3685
3699
|
}
|
|
3686
3700
|
}, [e]);
|
|
3687
3701
|
}
|
|
3688
|
-
function
|
|
3689
|
-
const [e, t] =
|
|
3690
|
-
return
|
|
3702
|
+
function Aa() {
|
|
3703
|
+
const [e, t] = b(!0);
|
|
3704
|
+
return h(() => {
|
|
3691
3705
|
t(!1);
|
|
3692
3706
|
}, []), e;
|
|
3693
3707
|
}
|
|
3694
|
-
|
|
3695
|
-
|
|
3696
|
-
}
|
|
3697
|
-
|
|
3698
|
-
|
|
3699
|
-
|
|
3700
|
-
F(() => {
|
|
3701
|
-
var m;
|
|
3702
|
-
(m = e.__internalOnLoaded) == null || m.call(e);
|
|
3708
|
+
const Ar = Je(function(e, t) {
|
|
3709
|
+
var B, j;
|
|
3710
|
+
const { onSendMessage: n, onDeleteMessage: a, onMessageAction: s, beforeBrowserPermissionPrompt: i, onMissingBrowserPermission: r, messageFieldPlaceholder: o, messageFieldSpellcheck: E, __hostElement: u } = e;
|
|
3711
|
+
h(() => {
|
|
3712
|
+
var v;
|
|
3713
|
+
(v = e.__internalOnLoaded) == null || v.call(e);
|
|
3703
3714
|
}, []);
|
|
3704
|
-
const
|
|
3705
|
-
|
|
3706
|
-
const
|
|
3707
|
-
const
|
|
3708
|
-
return
|
|
3709
|
-
let
|
|
3710
|
-
const
|
|
3711
|
-
if (
|
|
3712
|
-
|
|
3713
|
-
const
|
|
3714
|
-
if (!
|
|
3715
|
-
g.app$.set(
|
|
3715
|
+
const l = Aa(), c = P(u != null ? u : null);
|
|
3716
|
+
_a(c);
|
|
3717
|
+
const d = ge(a, u, ["deleteMessage", "delete-message", "deletemessage", "DeleteMessage"]), D = ge(n, u, ["sendMessage", "send-message", "sendmessage", "SendMessage"]), _ = ge(s, u, ["messageAction", "message-action", "messageaction", "MessageAction"]), T = { beforeBrowserPermissionPrompt: i, onMissingBrowserPermissionCallback: ge(r, u, ["browserPermissionDenied", "browser-permission-denied", "browserpermissiondenied", "BrowserPermissionDenied"]) }, { store: I, controller: R, editorInternals: N, session: L } = function(v, V, X, J) {
|
|
3718
|
+
const G = v.conversationId, g = M(() => new Hn(v.appId, v.userId), []), { session: x, restApi: Re } = Da(g, v), re = M(() => new ia(g.state$.editor, g.device$, g.state$.userPermissions), [g]), Ft = M(() => new lr(g, x, re, V, X, J), [x, g, re, V, X, J]);
|
|
3719
|
+
return re.controller = Ft, h(() => {
|
|
3720
|
+
let ae, ce = !0;
|
|
3721
|
+
const be = x.currentUser.subscribe(async (se) => {
|
|
3722
|
+
if (ce && (g.errors$.unknownUser.set(!se), se && (g.currentUser$.set(se), se.role !== ae))) {
|
|
3723
|
+
ae = se.role;
|
|
3724
|
+
const at = await Re.getApp(se.role);
|
|
3725
|
+
if (!ce) return;
|
|
3726
|
+
g.app$.set(at);
|
|
3716
3727
|
}
|
|
3717
3728
|
});
|
|
3718
3729
|
return () => {
|
|
3719
|
-
|
|
3730
|
+
ce = !1, be.unsubscribe();
|
|
3720
3731
|
};
|
|
3721
|
-
}, [
|
|
3722
|
-
let
|
|
3723
|
-
|
|
3724
|
-
g.state$.extCurrentConversationId.set(
|
|
3732
|
+
}, [Re, x, g]), h(() => {
|
|
3733
|
+
let ae = !0;
|
|
3734
|
+
Te(() => {
|
|
3735
|
+
g.state$.extCurrentConversationId.set(G), g.state$.currentConversation.set(null), g.state$.referencedMessageId.set(null);
|
|
3725
3736
|
});
|
|
3726
|
-
const
|
|
3727
|
-
|
|
3737
|
+
const ce = x.conversation(G).subscribeMessages(async (w, Le) => {
|
|
3738
|
+
ae && w && (await g.readyForNewMessagesPromise, g.storeMessages(G, w, Le));
|
|
3728
3739
|
});
|
|
3729
|
-
g.messageSubscription =
|
|
3730
|
-
const
|
|
3731
|
-
|
|
3740
|
+
g.messageSubscription = ce;
|
|
3741
|
+
const be = x.conversation(G).subscribeParticipants((w) => {
|
|
3742
|
+
ae && w && g.state$.participants.child(G).set(w);
|
|
3732
3743
|
});
|
|
3733
|
-
g.participantSubscription =
|
|
3734
|
-
const
|
|
3735
|
-
|
|
3736
|
-
}),
|
|
3737
|
-
|
|
3738
|
-
}),
|
|
3739
|
-
if (
|
|
3740
|
-
const
|
|
3741
|
-
for (const
|
|
3742
|
-
|
|
3743
|
-
var
|
|
3744
|
-
for (const
|
|
3744
|
+
g.participantSubscription = be;
|
|
3745
|
+
const se = x.conversation(G).subscribe(async (w) => {
|
|
3746
|
+
ae && w && g.state$.currentConversation.set(w);
|
|
3747
|
+
}), at = x.conversation(G).subscribeTyping((w) => {
|
|
3748
|
+
ae && w && g.storeTyping(G, w);
|
|
3749
|
+
}), Sa = g.state$.participants.child(G).onChange(({ value: w }) => {
|
|
3750
|
+
if (!w) return;
|
|
3751
|
+
const Le = /* @__PURE__ */ new Set();
|
|
3752
|
+
for (const Z of w) Le.add(Z.user.id);
|
|
3753
|
+
Te(() => {
|
|
3754
|
+
var Z;
|
|
3755
|
+
for (const oe of un(g.onlineSubscriptions)) Le.has(oe) || ((Z = g.onlineSubscriptions[oe]) == null || Z.unsubscribe(), delete g.onlineSubscriptions[oe], g.state$.isUserConnected.child(oe).set(!1));
|
|
3745
3756
|
});
|
|
3746
|
-
for (const
|
|
3747
|
-
|
|
3757
|
+
for (const Z of Le) g.onlineSubscriptions[Z] || (g.onlineSubscriptions[Z] = x.user(Z).subscribeOnline((oe) => {
|
|
3758
|
+
oe && g.state$.isUserConnected.child(Z).set(oe.isConnected);
|
|
3748
3759
|
}));
|
|
3749
3760
|
}, { initial: !0 });
|
|
3750
3761
|
return () => {
|
|
3751
|
-
|
|
3752
|
-
for (const
|
|
3762
|
+
ae = !1, be.unsubscribe(), se.unsubscribe(), ce.unsubscribe(), at.unsubscribe(), g.messageSubscription = null, g.participantSubscription = null, Sa();
|
|
3763
|
+
for (const w of un(g.onlineSubscriptions)) g.onlineSubscriptions[w].unsubscribe();
|
|
3753
3764
|
g.onlineSubscriptions = {}, g.state$.isUserConnected.set({});
|
|
3754
3765
|
};
|
|
3755
|
-
}, [g,
|
|
3756
|
-
}(e, d,
|
|
3757
|
-
const
|
|
3758
|
-
if (
|
|
3759
|
-
const
|
|
3760
|
-
|
|
3761
|
-
}, [
|
|
3762
|
-
|
|
3763
|
-
var
|
|
3764
|
-
const
|
|
3765
|
-
|
|
3766
|
-
}, [
|
|
3767
|
-
|
|
3768
|
-
}, [
|
|
3769
|
-
|
|
3770
|
-
}, [
|
|
3771
|
-
const
|
|
3772
|
-
if (
|
|
3766
|
+
}, [g, G, x]), { store: g, controller: Ft, editorInternals: re, session: x };
|
|
3767
|
+
}(e, D, d, _), m = H(async () => {
|
|
3768
|
+
const v = N.state$;
|
|
3769
|
+
if (v.isEmpty.peek() || v.atTextLimit.peek()) return;
|
|
3770
|
+
const V = N.getText(), X = I.state$.referencedMessageId.peek();
|
|
3771
|
+
X && R.setReferencedMessage(null), N.clearText(), I.state$.editor.showEmojiPicker.set(!1), await R.sendMessage({ text: V, referencedMessage: X != null ? X : void 0 });
|
|
3772
|
+
}, [R, N, I]);
|
|
3773
|
+
h(() => {
|
|
3774
|
+
var V;
|
|
3775
|
+
const v = (V = e.enterSendsMessage) != null ? V : !0;
|
|
3776
|
+
N.onEnter = v ? m : void 0;
|
|
3777
|
+
}, [N, e.enterSendsMessage, m]), h(() => {
|
|
3778
|
+
N.spellcheck$.set(E);
|
|
3779
|
+
}, [N, E]), h(() => {
|
|
3780
|
+
N.placeholder$.set(o);
|
|
3781
|
+
}, [N, o]), Ze(t, () => ({ controller: R, editorInternals: N }));
|
|
3782
|
+
const p = H(({ error: v }) => O(nt, { appId: e.appId, chatboxState: { type: "unexpected-error", error: v } }), [e.appId]), C = l ? null : O(pn, { fallbackRender: p, children: O(Tn.Provider, { value: N, children: O(Sn.Provider, { value: I, children: O(In.Provider, { value: e.theme, children: O(dn.Provider, { value: T, children: O(Nn.Provider, { value: R, children: O(Rn.Provider, { value: L, children: O(va.Provider, { value: { sendMessage: m }, children: O(Er, { appId: e.appId, chatHeaderVisible: (B = e.chatHeaderVisible) != null ? B : !0, messageFieldVisible: (j = e.messageFieldVisible) != null ? j : !0 }) }) }) }) }) }) }) }) });
|
|
3783
|
+
if (u) return C;
|
|
3773
3784
|
{
|
|
3774
|
-
const
|
|
3775
|
-
return O("div", { className:
|
|
3785
|
+
const v = "t-chatbox" + (e.className ? ` ${e.className}` : "");
|
|
3786
|
+
return O("div", { className: v, style: e.style, ref: c, children: C });
|
|
3776
3787
|
}
|
|
3777
3788
|
});
|
|
3778
|
-
|
|
3779
|
-
|
|
3780
|
-
|
|
3789
|
+
ja(), pt(), $a({ observableFunctions: { child: (e, t) => (k(typeof t == "string" || typeof t == "number", "Key should be a string or a number"), ya.getProxy(e, t.toString())) } }), ee.registerHandler(({ level: e, data: t }) => {
|
|
3790
|
+
console[e]("[TalkJS]", ...t);
|
|
3791
|
+
});
|
|
3792
|
+
const Or = Je(function(e, t) {
|
|
3793
|
+
const n = P(null), a = M(() => new Tr(n), []);
|
|
3794
|
+
Ze(t, () => a, [a]);
|
|
3795
|
+
const { theme: s, ...i } = e, r = M(() => ({ ...ht, ...s != null ? s : {} }), [s]), o = `${e.userId}|${e.appId}`;
|
|
3796
|
+
return O(Ln.Provider, { value: a, children: le(Ar, { ...i, key: o, theme: r, ref: n }) });
|
|
3797
|
+
});
|
|
3798
|
+
var Oe, $, Q, Ve;
|
|
3799
|
+
class Tr {
|
|
3800
|
+
constructor(t) {
|
|
3801
|
+
me(this, $);
|
|
3802
|
+
me(this, Oe);
|
|
3803
|
+
st(this, Oe, t);
|
|
3804
|
+
}
|
|
3805
|
+
deleteMessage(t) {
|
|
3806
|
+
return Y(this, $, Q).deleteMessage(t);
|
|
3807
|
+
}
|
|
3808
|
+
setEditing(t) {
|
|
3809
|
+
Y(this, $, Q).setEditing(t);
|
|
3810
|
+
}
|
|
3811
|
+
editMessage(t, n) {
|
|
3812
|
+
return Y(this, $, Q).editMessage(t, n);
|
|
3813
|
+
}
|
|
3814
|
+
sendMessage(t) {
|
|
3815
|
+
return Y(this, $, Q).sendMessage(t);
|
|
3816
|
+
}
|
|
3817
|
+
sendFileMessage(t) {
|
|
3818
|
+
return Y(this, $, Q).sendFileMessage(t);
|
|
3819
|
+
}
|
|
3820
|
+
sendLocationMessage(t) {
|
|
3821
|
+
return Y(this, $, Q).sendLocationMessage(t);
|
|
3822
|
+
}
|
|
3823
|
+
setReferencedMessage(t) {
|
|
3824
|
+
Y(this, $, Q).setReferencedMessage(t);
|
|
3825
|
+
}
|
|
3826
|
+
toggleReaction(t, n) {
|
|
3827
|
+
return Y(this, $, Q).toggleReaction(t, n);
|
|
3828
|
+
}
|
|
3829
|
+
getMessageFieldText() {
|
|
3830
|
+
return Y(this, $, Ve).getText();
|
|
3831
|
+
}
|
|
3832
|
+
setMessageFieldText(t) {
|
|
3833
|
+
Y(this, $, Ve).setText(t);
|
|
3834
|
+
}
|
|
3835
|
+
focusMessageField() {
|
|
3836
|
+
Y(this, $, Ve).focus();
|
|
3837
|
+
}
|
|
3838
|
+
}
|
|
3839
|
+
Oe = new WeakMap(), $ = new WeakSet(), Q = function() {
|
|
3840
|
+
return Y(this, Oe).current.controller;
|
|
3841
|
+
}, Ve = function() {
|
|
3842
|
+
return Y(this, Oe).current.editorInternals;
|
|
3843
|
+
};
|
|
3844
|
+
function dr({ conversation: e }) {
|
|
3845
|
+
const t = f(), n = Pe(), a = W(), s = Fn(), i = F(t.extCurrentConversationId$), [r, o] = b([]);
|
|
3846
|
+
return h(() => {
|
|
3781
3847
|
const E = n.conversation(e.id).subscribeParticipants(async (u) => {
|
|
3782
3848
|
u && o(u);
|
|
3783
3849
|
});
|
|
3784
3850
|
return () => E.unsubscribe();
|
|
3785
3851
|
}, [n, e.id]), r ? O(a.ConversationListItem, { common: s, conversation: e, participants: r, isSelected: i === e.id }) : null;
|
|
3786
3852
|
}
|
|
3787
|
-
function
|
|
3788
|
-
const e = f(), t =
|
|
3789
|
-
|
|
3853
|
+
function Sr() {
|
|
3854
|
+
const e = f(), t = P(null);
|
|
3855
|
+
h(() => {
|
|
3790
3856
|
let a = !0;
|
|
3791
3857
|
const s = t.current;
|
|
3792
3858
|
return async function() {
|
|
@@ -3797,20 +3863,20 @@ function Zi() {
|
|
|
3797
3863
|
a = !1;
|
|
3798
3864
|
};
|
|
3799
3865
|
}, [e]);
|
|
3800
|
-
const n =
|
|
3866
|
+
const n = H((a) => {
|
|
3801
3867
|
const s = a.currentTarget;
|
|
3802
3868
|
s.scrollHeight - s.clientHeight - s.scrollTop < 15 && e.conversationListSubscription && e.conversationListSubscription.loadMore(20);
|
|
3803
3869
|
}, [e]);
|
|
3804
|
-
return O("div", { className: "t-conversation-list-scrollable", ref: t, "t-menu-boundary": "", onScroll: n, children: O(
|
|
3870
|
+
return O("div", { className: "t-conversation-list-scrollable", ref: t, "t-menu-boundary": "", onScroll: n, children: O(_t, { each: e.conversationsArray$, children: (a) => O(dr, { conversation: a.get() }) }) });
|
|
3805
3871
|
}
|
|
3806
|
-
function
|
|
3872
|
+
function Ir({ appId: e }) {
|
|
3807
3873
|
f();
|
|
3808
3874
|
const t = function() {
|
|
3809
|
-
const n = f(), a =
|
|
3875
|
+
const n = f(), a = te(() => {
|
|
3810
3876
|
const r = n.currentUser$.get(), o = n.app$.get(), E = n.errors$.get(), u = n.authTokenState$.get();
|
|
3811
3877
|
return E.serverError ? "server-error" : E.wrongAppId ? "wrong-app-id" : u === "loading" || u === "idle" ? "loading-token" : u === "invalid" ? "invalid-token" : u === "expired" ? "expired-token" : u === "valid" ? E.unknownUser ? "unknown-user" : r && o ? "loaded" : "loading-data" : void k.unreachable();
|
|
3812
|
-
}), s =
|
|
3813
|
-
|
|
3878
|
+
}), s = te({ type: "loading" });
|
|
3879
|
+
de((r) => {
|
|
3814
3880
|
const o = a.get(), E = n.extUserId$.peek(), u = n.appId$.peek();
|
|
3815
3881
|
switch (o) {
|
|
3816
3882
|
case "invalid-token":
|
|
@@ -3833,20 +3899,20 @@ function Qi({ appId: e }) {
|
|
|
3833
3899
|
s.set({ type: "loaded", currentUser: n.currentUser$.peek() });
|
|
3834
3900
|
break;
|
|
3835
3901
|
case "unknown-user":
|
|
3836
|
-
r.onCleanup = function(
|
|
3902
|
+
r.onCleanup = function(l) {
|
|
3837
3903
|
s.set({ type: "loading" });
|
|
3838
|
-
const
|
|
3839
|
-
s.set(
|
|
3904
|
+
const c = setTimeout(() => {
|
|
3905
|
+
s.set(l);
|
|
3840
3906
|
}, 5e3);
|
|
3841
|
-
return () => clearTimeout(
|
|
3907
|
+
return () => clearTimeout(c);
|
|
3842
3908
|
}({ type: "unknown-user", userId: E });
|
|
3843
3909
|
break;
|
|
3844
3910
|
default:
|
|
3845
3911
|
k.never(o);
|
|
3846
3912
|
}
|
|
3847
3913
|
});
|
|
3848
|
-
const i =
|
|
3849
|
-
return
|
|
3914
|
+
const i = te({ type: "loading" });
|
|
3915
|
+
return de((r) => {
|
|
3850
3916
|
if (s.type.get() === "loading") {
|
|
3851
3917
|
i.set({ type: "invisible-loading" });
|
|
3852
3918
|
const o = setTimeout(() => {
|
|
@@ -3856,17 +3922,17 @@ function Qi({ appId: e }) {
|
|
|
3856
3922
|
clearTimeout(o);
|
|
3857
3923
|
};
|
|
3858
3924
|
} else i.set(s.get());
|
|
3859
|
-
}),
|
|
3925
|
+
}), F(i);
|
|
3860
3926
|
}();
|
|
3861
|
-
return t.type === "invisible-loading" ? O(
|
|
3927
|
+
return t.type === "invisible-loading" ? O(ve, {}) : t.type === "loading" ? O(oa, {}) : t.type === "unknown-user" || t.type === "auth-failed" || t.type === "wrong-app-id" || t.type === "server-error" || t.type === "unexpected-error" ? O(nt, { appId: e, chatboxState: t }) : t.type == "expired-token" ? O(Ea, {}) : t.type === "loaded" ? O(Sr, {}) : O(ve, {});
|
|
3862
3928
|
}
|
|
3863
|
-
class
|
|
3929
|
+
class Nr extends Pn {
|
|
3864
3930
|
constructor() {
|
|
3865
|
-
super(...arguments), this.type = "ConversationListStore", this.conversationListSubscription = null, this.extCurrentConversationId$ =
|
|
3931
|
+
super(...arguments), this.type = "ConversationListStore", this.conversationListSubscription = null, this.extCurrentConversationId$ = U(null), this.conversationsArray$ = U([]), this.conversationsMap$ = U({});
|
|
3866
3932
|
}
|
|
3867
3933
|
listenForConversations(t) {
|
|
3868
3934
|
const n = t.subscribeConversations((a) => {
|
|
3869
|
-
|
|
3935
|
+
Te(() => {
|
|
3870
3936
|
this.conversationsArray$.set(a);
|
|
3871
3937
|
const s = {};
|
|
3872
3938
|
for (const i of a) s[i.id] = i;
|
|
@@ -3878,7 +3944,7 @@ class er extends Sn {
|
|
|
3878
3944
|
};
|
|
3879
3945
|
}
|
|
3880
3946
|
}
|
|
3881
|
-
class
|
|
3947
|
+
class Rr {
|
|
3882
3948
|
constructor(t, n) {
|
|
3883
3949
|
this.store = t, this.onSelectConversation = n;
|
|
3884
3950
|
}
|
|
@@ -3889,92 +3955,113 @@ class tr {
|
|
|
3889
3955
|
this.onSelectConversation(n);
|
|
3890
3956
|
}
|
|
3891
3957
|
}
|
|
3892
|
-
const
|
|
3958
|
+
const Lr = Je(function(e, t) {
|
|
3893
3959
|
const { __hostElement: n, onSelectConversation: a } = e;
|
|
3894
|
-
|
|
3960
|
+
h(() => {
|
|
3895
3961
|
var d;
|
|
3896
3962
|
(d = e.__internalOnLoaded) == null || d.call(e);
|
|
3897
3963
|
}, []);
|
|
3898
|
-
const s =
|
|
3899
|
-
|
|
3900
|
-
const r =
|
|
3901
|
-
|
|
3902
|
-
|
|
3964
|
+
const s = Aa(), i = P(n != null ? n : null);
|
|
3965
|
+
_a(i);
|
|
3966
|
+
const r = ge(a, n, ["selectConversation", "select-conversation", "selectconversation", "SelectConversation"]), o = M(() => new Nr(e.appId, e.userId), []);
|
|
3967
|
+
h(() => {
|
|
3968
|
+
Te(() => {
|
|
3903
3969
|
o.extUserId$.set(e.userId), o.appId$.set(e.appId);
|
|
3904
3970
|
});
|
|
3905
3971
|
}, [o, e.appId, e.userId]);
|
|
3906
|
-
const { session: E } =
|
|
3907
|
-
|
|
3972
|
+
const { session: E } = Da(o, e), u = M(() => new Rr(o, r), [o, r]);
|
|
3973
|
+
h(() => o.listenForConversations(E), [o, E]), h(() => {
|
|
3908
3974
|
e.selectedConversationId !== void 0 && o.extCurrentConversationId$.set(e.selectedConversationId);
|
|
3909
|
-
}, [o, e.selectedConversationId]),
|
|
3975
|
+
}, [o, e.selectedConversationId]), h(() => {
|
|
3910
3976
|
const d = e.__hostElement;
|
|
3911
3977
|
if (d)
|
|
3912
|
-
return o.extCurrentConversationId$.onChange(({ value:
|
|
3913
|
-
d.selectedConversationId =
|
|
3978
|
+
return o.extCurrentConversationId$.onChange(({ value: D }) => {
|
|
3979
|
+
d.selectedConversationId = D;
|
|
3914
3980
|
});
|
|
3915
|
-
}, [o, e.__hostElement]),
|
|
3916
|
-
const
|
|
3917
|
-
if (n) return
|
|
3981
|
+
}, [o, e.__hostElement]), Ze(t, () => ({ controller: u }));
|
|
3982
|
+
const l = H(({ error: d }) => O(nt, { appId: e.appId, chatboxState: { type: "unexpected-error", error: d } }), [e.appId]), c = s ? null : O(pn, { fallbackRender: l, children: O(Sn.Provider, { value: o, children: O(In.Provider, { value: e.theme, children: O(Nn.Provider, { value: u, children: O(Rn.Provider, { value: E, children: O(Ir, { appId: e.appId }) }) }) }) }) });
|
|
3983
|
+
if (n) return c;
|
|
3918
3984
|
{
|
|
3919
3985
|
const d = "t-conversation-list" + (e.className ? ` ${e.className}` : "");
|
|
3920
|
-
return O("div", { className: d, style: e.style, ref: i, children:
|
|
3986
|
+
return O("div", { className: d, style: e.style, ref: i, children: c });
|
|
3921
3987
|
}
|
|
3922
|
-
})
|
|
3988
|
+
});
|
|
3989
|
+
var Be, qe, Oa;
|
|
3990
|
+
class mr {
|
|
3991
|
+
constructor(t) {
|
|
3992
|
+
me(this, qe);
|
|
3993
|
+
me(this, Be);
|
|
3994
|
+
st(this, Be, t);
|
|
3995
|
+
}
|
|
3996
|
+
selectConversation(t) {
|
|
3997
|
+
Y(this, qe, Oa).selectConversation(t);
|
|
3998
|
+
}
|
|
3999
|
+
}
|
|
4000
|
+
Be = new WeakMap(), qe = new WeakSet(), Oa = function() {
|
|
4001
|
+
return Y(this, Be).current.controller;
|
|
4002
|
+
};
|
|
4003
|
+
const Cr = Je(function(e, t) {
|
|
4004
|
+
const n = P(null), a = M(() => new mr(n), []);
|
|
4005
|
+
Ze(t, () => a, [a]);
|
|
4006
|
+
const { theme: s, ...i } = e, r = M(() => ({ ...ht, ...s != null ? s : {} }), [s]), o = `${e.userId}|${e.appId}`;
|
|
4007
|
+
return O(Ln.Provider, { value: a, children: le(Lr, { ...i, key: o, theme: r, ref: n }) });
|
|
4008
|
+
}), pr = new Promise((e) => {
|
|
3923
4009
|
typeof document != "undefined" && document.readyState === "loading" ? document.addEventListener("DOMContentLoaded", e, { once: !0 }) : e(void 0);
|
|
3924
4010
|
});
|
|
3925
|
-
function
|
|
4011
|
+
function Ta(e, t, n, a) {
|
|
3926
4012
|
const s = /* @__PURE__ */ new Map(), i = [], r = [];
|
|
3927
|
-
for (const [d,
|
|
4013
|
+
for (const [d, D] of (E = n, Object.entries(E))) {
|
|
3928
4014
|
const _ = [d, d.toLowerCase(), (o = d, o.replace(/[A-Z]+(?![a-z])|[A-Z]/g, (T, I) => (I ? "-" : "") + T.toLowerCase()))];
|
|
3929
4015
|
for (const T of _) s.set(T, d);
|
|
3930
|
-
["string", "boolean", "number"].includes(
|
|
4016
|
+
["string", "boolean", "number"].includes(D.type) && i.push(..._), D.required !== !1 && r.push(d);
|
|
3931
4017
|
}
|
|
3932
4018
|
var o, E;
|
|
3933
|
-
const
|
|
4019
|
+
const c = class c extends HTMLElement {
|
|
3934
4020
|
constructor() {
|
|
3935
4021
|
super(), this._renderRequested = !1, this._props = {}, this._renderRoot = null, this._ref = { current: null };
|
|
3936
|
-
for (const [
|
|
3937
|
-
if (Object.hasOwnProperty.call(this,
|
|
3938
|
-
const T = this[
|
|
3939
|
-
this.updateProp(_, T), delete this[
|
|
4022
|
+
for (const [D, _] of s) {
|
|
4023
|
+
if (Object.hasOwnProperty.call(this, D)) {
|
|
4024
|
+
const T = this[D];
|
|
4025
|
+
this.updateProp(_, T), delete this[D];
|
|
3940
4026
|
}
|
|
3941
|
-
this.hasAttribute(
|
|
4027
|
+
this.hasAttribute(D) && this.syncAttributeToProp(D);
|
|
3942
4028
|
}
|
|
3943
4029
|
}
|
|
3944
|
-
updateProp(
|
|
3945
|
-
const { type: T } = n[
|
|
4030
|
+
updateProp(D, _) {
|
|
4031
|
+
const { type: T } = n[D];
|
|
3946
4032
|
if (T === "boolean" && typeof _ == "string" ? _ = _ !== "false" : T === "number" && typeof _ == "string" && (_ = Number(_)), _ == null) {
|
|
3947
|
-
const I =
|
|
3948
|
-
return delete this._props[
|
|
4033
|
+
const I = D in this._props;
|
|
4034
|
+
return delete this._props[D], I;
|
|
3949
4035
|
}
|
|
3950
4036
|
{
|
|
3951
|
-
const I = this._props[
|
|
3952
|
-
return this._props[
|
|
4037
|
+
const I = this._props[D] !== _;
|
|
4038
|
+
return this._props[D] = _, I;
|
|
3953
4039
|
}
|
|
3954
4040
|
}
|
|
3955
|
-
syncAttributeToProp(
|
|
3956
|
-
const _ = s.get(
|
|
3957
|
-
k(_, `Attribute "${
|
|
3958
|
-
const T = this.getAttribute(
|
|
4041
|
+
syncAttributeToProp(D) {
|
|
4042
|
+
const _ = s.get(D);
|
|
4043
|
+
k(_, `Attribute "${D}" should have matching prop`);
|
|
4044
|
+
const T = this.getAttribute(D);
|
|
3959
4045
|
return this.updateProp(_, T);
|
|
3960
4046
|
}
|
|
3961
4047
|
async requestRender() {
|
|
3962
4048
|
this._renderRequested || (this._renderRequested = !0, this._renderRequested = await !1, this.render());
|
|
3963
4049
|
}
|
|
3964
4050
|
render() {
|
|
3965
|
-
this._renderRoot || (this._renderRoot =
|
|
3966
|
-
const
|
|
3967
|
-
if (
|
|
4051
|
+
this._renderRoot || (this._renderRoot = Xa(this));
|
|
4052
|
+
const D = r.filter((R) => !(R in this._props));
|
|
4053
|
+
if (D.length > 0) return a(D), void this._renderRoot.render(null);
|
|
3968
4054
|
const _ = Object.assign({}, this._props), T = (R) => {
|
|
3969
|
-
|
|
4055
|
+
const N = [...Object.getOwnPropertyNames(R.current), ...Object.getOwnPropertyNames(Object.getPrototypeOf(R.current))];
|
|
4056
|
+
for (const L of N) L !== "constructor" && typeof R.current[L] == "function" && (this[L] = (...m) => R.current[L](...m));
|
|
3970
4057
|
}, I = e;
|
|
3971
4058
|
this._renderRoot.render(O(I, { ..._, ref: this._ref, __hostElement: this, __internalOnLoaded: () => {
|
|
3972
4059
|
T(this._ref);
|
|
3973
4060
|
} }));
|
|
3974
4061
|
}
|
|
3975
4062
|
async connectedCallback() {
|
|
3976
|
-
await
|
|
3977
|
-
for (const
|
|
4063
|
+
await pr;
|
|
4064
|
+
for (const D of i) this.hasAttribute(D) && this.syncAttributeToProp(D);
|
|
3978
4065
|
this.requestRender();
|
|
3979
4066
|
}
|
|
3980
4067
|
disconnectedCallback() {
|
|
@@ -3982,51 +4069,30 @@ function Qn(e, t, n, a) {
|
|
|
3982
4069
|
this._renderRoot && (this._renderRoot.unmount(), this._renderRoot = null);
|
|
3983
4070
|
});
|
|
3984
4071
|
}
|
|
3985
|
-
attributeChangedCallback(
|
|
3986
|
-
_ !== T && this.syncAttributeToProp(
|
|
4072
|
+
attributeChangedCallback(D, _, T) {
|
|
4073
|
+
_ !== T && this.syncAttributeToProp(D) && this.requestRender();
|
|
3987
4074
|
}
|
|
3988
4075
|
};
|
|
3989
|
-
|
|
3990
|
-
let u =
|
|
3991
|
-
const
|
|
3992
|
-
for (const [d,
|
|
3993
|
-
this.updateProp(
|
|
4076
|
+
c.observedAttributes = i;
|
|
4077
|
+
let u = c;
|
|
4078
|
+
const l = {};
|
|
4079
|
+
for (const [d, D] of s) l[d] = { set(_) {
|
|
4080
|
+
this.updateProp(D, _) && this.requestRender();
|
|
3994
4081
|
}, get() {
|
|
3995
4082
|
var _;
|
|
3996
|
-
return (_ = this._props[
|
|
4083
|
+
return (_ = this._props[D]) != null ? _ : null;
|
|
3997
4084
|
} };
|
|
3998
|
-
return Object.defineProperties(u.prototype,
|
|
4085
|
+
return Object.defineProperties(u.prototype, l), Object.defineProperty(u, "name", { value: t }), u;
|
|
3999
4086
|
}
|
|
4000
|
-
function
|
|
4087
|
+
function da(e, t) {
|
|
4001
4088
|
const n = JSON.stringify(t).replace(",", ", ");
|
|
4002
|
-
|
|
4089
|
+
ee.error(`Could not initialize ${e} because the following required props are missing: ${n}.`);
|
|
4003
4090
|
}
|
|
4004
|
-
const
|
|
4005
|
-
|
|
4006
|
-
return $e(function(a, s) {
|
|
4007
|
-
var o;
|
|
4008
|
-
const i = P(() => {
|
|
4009
|
-
var E;
|
|
4010
|
-
return { ...n, ...(E = a.theme) != null ? E : {} };
|
|
4011
|
-
}, [a.theme]), r = `${(o = a.key) != null ? o : ""}|${a.userId}|${a.appId}`;
|
|
4012
|
-
return ie(qi, { ...a, key: r, theme: i, ref: s });
|
|
4013
|
-
});
|
|
4014
|
-
}(e);
|
|
4015
|
-
return Qn(t, "ChatboxHTMLElement", { __internalOnLoaded: { type: "function", required: !1 }, appId: { type: "string" }, userId: { type: "string" }, conversationId: { type: "string" }, theme: { type: "object", required: !1 }, token: { type: "string", required: !1 }, tokenFetcher: { type: "function", required: !1 }, host: { type: "string", required: !1 }, enterSendsMessage: { type: "boolean", required: !1 }, chatHeaderVisible: { type: "boolean", required: !1 }, messageFieldVisible: { type: "boolean", required: !1 }, messageFieldSpellcheck: { type: "boolean", required: !1 }, messageFieldPlaceholder: { type: "string", required: !1 }, onSendMessage: { type: "function", required: !1 }, onDeleteMessage: { type: "function", required: !1 }, beforeBrowserPermissionPrompt: { type: "function", required: !1 }, onMissingBrowserPermission: { type: "function", required: !1 }, themeCustom: { type: "object", required: !1 } }, (n) => ea("<t-chatbox>", n));
|
|
4016
|
-
}(At), ir = function(e) {
|
|
4017
|
-
const t = function(n) {
|
|
4018
|
-
return $e(function(a, s) {
|
|
4019
|
-
var o;
|
|
4020
|
-
const i = `${(o = a.key) != null ? o : ""}|${a.userId}|${a.appId}`, r = P(() => a.theme ? { ...n, ...a.theme } : n, [a.theme]);
|
|
4021
|
-
return ie(nr, { ...a, key: i, theme: r, ref: s });
|
|
4022
|
-
});
|
|
4023
|
-
}(e);
|
|
4024
|
-
return Qn(t, "ConversationListHTMLElement", { __internalOnLoaded: { type: "function", required: !1 }, appId: { type: "string" }, userId: { type: "string" }, selectedConversationId: { type: "string", required: !1 }, theme: { type: "object", required: !1 }, token: { type: "string", required: !1 }, tokenFetcher: { type: "function", required: !1 }, host: { type: "string", required: !1 }, themeCustom: { type: "object", required: !1 } }, (n) => ea("<t-conversation-list>", n));
|
|
4025
|
-
}(At), Fr = At;
|
|
4026
|
-
customElements.get("t-chatbox") || customElements.define("t-chatbox", sr), customElements.get("t-conversation-list") || customElements.define("t-conversation-list", ir);
|
|
4091
|
+
const hr = Ta(Or, "ChatboxElement", { __internalOnLoaded: { type: "function", required: !1 }, appId: { type: "string" }, userId: { type: "string" }, conversationId: { type: "string" }, theme: { type: "object", required: !1 }, token: { type: "string", required: !1 }, tokenFetcher: { type: "function", required: !1 }, host: { type: "string", required: !1 }, enterSendsMessage: { type: "boolean", required: !1 }, chatHeaderVisible: { type: "boolean", required: !1 }, messageFieldVisible: { type: "boolean", required: !1 }, messageFieldSpellcheck: { type: "boolean", required: !1 }, messageFieldPlaceholder: { type: "string", required: !1 }, onSendMessage: { type: "function", required: !1 }, onDeleteMessage: { type: "function", required: !1 }, onMessageAction: { type: "function", required: !1 }, beforeBrowserPermissionPrompt: { type: "function", required: !1 }, onMissingBrowserPermission: { type: "function", required: !1 }, themeCustom: { type: "object", required: !1 } }, (e) => da("<t-chatbox>", e)), gr = Ta(Cr, "ConversationListElement", { __internalOnLoaded: { type: "function", required: !1 }, appId: { type: "string" }, userId: { type: "string" }, selectedConversationId: { type: "string", required: !1 }, theme: { type: "object", required: !1 }, token: { type: "string", required: !1 }, tokenFetcher: { type: "function", required: !1 }, host: { type: "string", required: !1 }, themeCustom: { type: "object", required: !1 } }, (e) => da("<t-conversation-list>", e)), Jr = ht;
|
|
4092
|
+
customElements.get("t-chatbox") || customElements.define("t-chatbox", hr), customElements.get("t-conversation-list") || customElements.define("t-conversation-list", gr);
|
|
4027
4093
|
export {
|
|
4028
|
-
|
|
4029
|
-
|
|
4030
|
-
|
|
4094
|
+
hr as ChatboxElement,
|
|
4095
|
+
gr as ConversationListElement,
|
|
4096
|
+
Jr as defaultTheme
|
|
4031
4097
|
};
|
|
4032
4098
|
//# sourceMappingURL=default.js.map
|