feat(web): виды сообщений, автокомплиты композера и ссылки на комнаты
- лента оформляет виды сообщений от сервера: action (/me) — имя акцентом и курсив, whisper — приглушённый блок с бейджем, scream — крупнее и жирнее, private (/ls) — рамка, замок и бейдж «лично», system — центрированная строка без аватара и панели действий; реакции, ответы, правка и удаление работают как раньше, группировка не сливает нестандартные виды с обычными; - автокомплиты в поле ввода с навигацией ↑/↓, Enter/Tab, Escape и мышью: @ — участники сервера (в DM собеседник), # — видимые текстовые комнаты, : — словарь на 113 эмодзи, / — команды с описанием; подсказки не появляются внутри слова и в блоках кода, вставка восстанавливает каретку и не расходится со слоем подсветки; - `<#id>` рендерится как #имя комнаты из снапшота (иначе #id); - 287 тестов Vitest (было 262), check/lint/test/build зелёные.
This commit is contained in:
@@ -57,6 +57,14 @@ describe('группировка сообщений', () => {
|
||||
);
|
||||
});
|
||||
|
||||
it('не присоединяет обычное сообщение к действию, шёпоту и личному', () => {
|
||||
const next = message({ id: 'm-2', author_id: 'user-1', created_at: at(19, 12, 1) });
|
||||
for (const type of ['action', 'whisper', 'scream', 'private', 'system']) {
|
||||
const previous = message({ id: 'm-1', author_id: 'user-1', created_at: at(19, 12, 0), type });
|
||||
expect(canGroup(previous, next)).toBe(false);
|
||||
}
|
||||
});
|
||||
|
||||
it('строит строки ленты с разделителями дат', () => {
|
||||
const rows = buildChatRows(
|
||||
[
|
||||
|
||||
Reference in New Issue
Block a user