Chat Compaction

Разделитель и time-based индикатор сжатия истории беседы в ленте сообщений.

Установка

Использование

Один файл экспортирует два независимых под-компонента: ChatCompactionDivider (косметический разделитель) и ChatCompactionProgress (живой индикатор сжатия).

Разделитель

ChatCompactionDivider ставится сразу после сообщений, попавших под сжатие. Корень рендерит две тонкие линии (<Separator>) по краям приглушённой подписи — мини-разделитель в ленте. Никаких иконок и кнопок.

label по умолчанию "Earlier messages summarized"; aria-label берётся из строкового label, иначе fallback на дефолтную строку.

Прогресс

ChatCompactionProgress имитирует индикатор сжатия в claude.ai: точка-маркер слева, подпись и тонкая полоса прогресса с реальным процентом справа.

Индикатор time-based: процент равномерно растёт от 0 до 95 за estimatedDurationMs (по умолчанию 15000), затем мгновенно достигает 100 %, когда isCompacting становится false. Через 600 мс показа финальных 100 % компонент демонтируется. Пока isCompacting ещё не запускался и компонент не виден — рендерится null.

Состояния

Переопределение индикатора

Полоса прогресса собрана на DS-примитиве <Progress> / <ProgressTrack> / <ProgressIndicator>. Заливка индикатора по умолчанию — bg-foreground (намеренное отклонение от DS-дефолта bg-primary, сохранённое 1:1 с источником). Переопределяется через indicatorClassName:

Сценарий внутри ленты

Разделитель сверху, индикатор снизу — типичный сценарий внутри ленты с заданными label / estimatedDurationMs.

Oracul DS

Built for the future of AI-driven interfaces.