feat(frontend): right panel lives in browser history and back closes it first, message panels close on chat switch, hotkeys for search, chats, in-chat search and closing

This commit is contained in:
hh committed 2026-10-19 05:25:54 +00:00
1 parent 7f7fc1296e
commit 848d2aca1a
19 files changed
+813 -46

No files matched your search

+24
View File
@@ -0,0 +1,24 @@
import type { Messages } from "#lib/i18n/types.js";
export const capture = {
"capture.botNever": {
en: "The bot has not connected yet",
ru: "Бот ещё не выходил на связь",
},
"capture.botQuiet": {
en: "The bot is silent since {when}",
ru: "Бот молчит с {when}",
},
"capture.live": {
en: "Capturing since {when}",
ru: "Захват идёт с {when}",
},
"capture.never": {
en: "The userbot has not connected yet",
ru: "Юзербот ещё не выходил на связь",
},
"capture.quiet": {
en: "The userbot is silent since {when}",
ru: "Юзербот молчит с {when}",
},
} satisfies Messages;
+116
View File
@@ -0,0 +1,116 @@
import type { Messages } from "#lib/i18n/types.js";
export const chat = {
"chat.analytics": { en: "Analytics", ru: "Аналитика" },
"chat.back": { en: "Back to chats", ru: "Назад к чатам" },
"chat.backfill": {
en: "Fetch new messages",
ru: "Догрузить новые сообщения",
},
"chat.backfillDone": {
en: "New messages are on the way",
ru: "Новые сообщения уже догружаются",
},
"chat.backfillFailed": {
en: "Could not start fetching",
ru: "Не удалось запустить догрузку",
},
"chat.calendar": { en: "Jump to date", ru: "Перейти к дате" },
"chat.calendar.count": {
en: { one: "{count} message", other: "{count} messages" },
ru: {
few: "{count} сообщения",
many: "{count} сообщений",
one: "{count} сообщение",
other: "{count} сообщения",
},
},
"chat.calendar.nextMonth": { en: "Next month", ru: "Следующий месяц" },
"chat.calendar.nextYear": { en: "Next year", ru: "Следующий год" },
"chat.calendar.prevMonth": { en: "Previous month", ru: "Предыдущий месяц" },
"chat.calendar.prevYear": { en: "Previous year", ru: "Предыдущий год" },
"chat.channel": { en: "channel", ru: "канал" },
"chat.deletedAccount": { en: "Deleted account", ru: "Удалённый аккаунт" },
"chat.deletedAt": { en: "deleted {when}", ru: "удалено {when}" },
"chat.deletedPreview": { en: "Deleted", ru: "Удалено" },
"chat.edited": { en: "edited", ru: "изменено" },
"chat.editedAt": { en: "Edited {when}", ru: "Изменено {when}" },
"chat.gap": { en: "archive was off {range}", ru: "архив не писал {range}" },
"chat.group": { en: "group", ru: "группа" },
"chat.latest": { en: "To the latest messages", ru: "К последним сообщениям" },
"chat.links": {
en: { one: "{count} link", other: "{count} links" },
ru: {
few: "{count} ссылки",
many: "{count} ссылок",
one: "{count} ссылка",
other: "{count} ссылки",
},
},
"chat.loadFailed": {
en: "Could not load messages",
ru: "Не удалось загрузить сообщения",
},
"chat.media": { en: "Media", ru: "Медиа" },
"chat.media.download": { en: "Download {kind}", ru: "Скачать: {kind}" },
"chat.media.downloadFailed": {
en: "Could not download the file",
ru: "Не удалось скачать файл",
},
"chat.media.file": { en: "File", ru: "Файл" },
"chat.media.fullscreen": {
en: "Open full screen",
ru: "Открыть на весь экран",
},
"chat.media.photo": { en: "Photo", ru: "Фото" },
"chat.media.queue": { en: "Download to archive", ru: "Скачать в архив" },
"chat.media.queued": { en: "Queued", ru: "В очереди" },
"chat.media.queueFailed": {
en: "Could not queue the download",
ru: "Не удалось поставить в очередь",
},
"chat.media.save": { en: "Download file", ru: "Скачать файл" },
"chat.media.selfDestruct": {
en: "Self-destructing media",
ru: "Самоуничтожающееся медиа",
},
"chat.media.share": { en: "Share by link", ru: "Доступ по ссылке" },
"chat.media.tapToDownload": {
en: "Tap to download",
ru: "Нажмите, чтобы скачать",
},
"chat.media.versions": { en: "Media versions", ru: "Версии медиа" },
"chat.media.video": { en: "Video", ru: "Видео" },
"chat.menu.author": { en: "Author's profile", ru: "Профиль автора" },
"chat.menu.callbacks": { en: "Callback data", ru: "Callback-данные" },
"chat.menu.copied": { en: "Copied", ru: "Скопировано" },
"chat.menu.copyId": { en: "Copy ID", ru: "Копировать ID" },
"chat.menu.copyLink": { en: "Copy link", ru: "Копировать ссылку" },
"chat.menu.copyText": { en: "Copy text", ru: "Копировать текст" },
"chat.menu.linkCopied": { en: "Link copied", ru: "Ссылка скопирована" },
"chat.menu.links": { en: "Links", ru: "Ссылки" },
"chat.menu.notes": { en: "Notes", ru: "Заметки" },
"chat.menu.open": { en: "Open", ru: "Открыть" },
"chat.menu.policy": { en: "Capture policy", ru: "Политика захвата" },
"chat.menu.profile": { en: "Profile", ru: "Профиль" },
"chat.menu.reactions": { en: "Reactions", ru: "Реакции" },
"chat.menu.reply": { en: "Go to reply", ru: "Перейти к ответу" },
"chat.menu.search": { en: "Search in chat", ru: "Поиск в чате" },
"chat.menu.stories": { en: "Stories", ru: "Сторис" },
"chat.menu.versions": { en: "Versions", ru: "Версии" },
"chat.messages": {
en: { one: "{count} message", other: "{count} messages" },
ru: {
few: "{count} сообщения",
many: "{count} сообщений",
one: "{count} сообщение",
other: "{count} сообщения",
},
},
"chat.noText": { en: "No text", ru: "Без текста" },
"chat.note": { en: "Note", ru: "Заметка" },
"chat.openProfile": { en: "Open profile", ru: "Открыть профиль" },
"chat.title": { en: "Chat {id}", ru: "Чат {id}" },
"chat.you": { en: "You", ru: "Вы" },
"chat.youPrefix": { en: "You: ", ru: "Вы: " },
} satisfies Messages;
+26 -3
View File
@@ -2,10 +2,33 @@ import type { Messages } from "#lib/i18n/types.js";
export const notes = {
"notes.add": { en: "Add note", ru: "Добавить заметку" },
"notes.all": { en: "All", ru: "Все" },
"notes.edit": { en: "Edit", ru: "Изменить" },
"notes.placeholder": {
en: "Note on the message…",
ru: "Заметка к сообщению…",
"notes.empty": {
en: "Right-click a message and pick Notes to write one",
ru: "Нажмите на сообщение правой кнопкой и выберите «Заметки»",
},
"notes.emptyTag": {
en: "No notes with #{tag}",
ru: "Нет заметок с #{tag}",
},
"notes.emptyTitle": { en: "No notes yet", ru: "Заметок пока нет" },
"notes.failed": {
en: "Could not load notes",
ru: "Не удалось загрузить заметки",
},
"notes.mediaMessage": { en: "Media", ru: "Медиа" },
"notes.messageGone": {
en: "Message is not in the archive",
ru: "Сообщения нет в архиве",
},
"notes.more": { en: "Show more", ru: "Показать ещё" },
"notes.noMessage": {
en: "No message selected",
ru: "Сообщение не выбрано",
},
"notes.placeholder": { en: "Note to the message", ru: "Заметка к сообщению" },
"notes.retry": { en: "Retry", ru: "Повторить" },
"notes.tag": { en: "Notes with #{tag}", ru: "Заметки с #{tag}" },
"notes.title": { en: "Notes", ru: "Заметки" },
} satisfies Messages;
+14
View File
@@ -0,0 +1,14 @@
import type { Messages } from "#lib/i18n/types.js";
export const panels = {
"panels.callbacks": { en: "Callback data", ru: "Callback-данные" },
"panels.links": { en: "Links", ru: "Ссылки" },
"panels.presence": { en: "Analytics", ru: "Аналитика" },
"panels.profile": { en: "Profile", ru: "Профиль" },
"panels.reactions": { en: "Reactions", ru: "Реакции" },
"panels.search": { en: "Search", ru: "Поиск" },
"panels.storageChat": { en: "Chat files", ru: "Файлы чата" },
"panels.stories": { en: "Stories", ru: "Сторис" },
"panels.storiesAll": { en: "All stories", ru: "Все сторис" },
"panels.trash": { en: "Trash", ru: "Корзина" },
} satisfies Messages;