✨ feat: удаление диалога, дерево знаний и перетаскиваемый онбординг

«Удалить диалог» удаляет: переписку, вложения, звонки и уведомления о нём. Право только у владельца и администратора, писать в удалённый диалог некуда, лента виджета у клиента обнуляется по признаку reset в поллинге.

База знаний: категории слева сворачиваются и разворачиваются (свёрнутое помнит браузер), в подвале появился выбор «На странице» 20/50/100 — общий для всех списков компонент.

Окно «Знания» карточки агента разложено по категориям и порталам со счётчиками и «Выбрать все»; набор материалов грузится целиком, а не первой страницей.

Пилюля онбординга перетаскивается и помнит место. Голосовое в веб-чате нарисовано плеером оператора без расшифровки, рисунок волны вынесен в общий пакет. Убрана горизонтальная полоса прокрутки в меню меток.

Проверено: typecheck internal-ui и web-chat, backend-тесты диалогов, виджета и i18n.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
AndreyandClaude Opus 5 committed 2026-09-14 23:59:28 +03:00
1 parent 5dbc062b1e
commit 733b44f186
44 files changed
+1263 -207

No files matched your search

+1
View File
@@ -5,3 +5,4 @@ export { type AudioBarKind, type AudioCallMode, type AudioCallStatus, buildAudio
export { useCallRtcSession, type CallMediaIssue } from "./call/useCallRtcSession";
export { useAudioCue, useLoopingAudio } from "./audio/useAudio";
export { Loader } from "./loader/Loader";
export { VOICE_WAVE_BARS, voiceWaveHeights } from "./voice/voiceWave";
+18
View File
@@ -0,0 +1,18 @@
// Волна голосового сообщения.
//
// Реальная амплитуда записи не хранится, поэтому рисунок считается из
// идентификатора сообщения: он стабилен между рендерами и одинаков в чате
// оператора и в виджете клиента — одно и то же сообщение выглядит одинаково с
// обеих сторон разговора.
export const VOICE_WAVE_BARS = 32;
export function voiceWaveHeights(seed: number, bars = VOICE_WAVE_BARS): number[] {
const heights: number[] = [];
let value = seed || 1;
for (let index = 0; index < bars; index += 1) {
value = (value * 1103515245 + 12345) % 2147483648;
heights.push(4 + (value % 17));
}
return heights;
}