Компоненты
Базовые UI-примитивы Rocketmind. Каждый компонент использует только токены дизайн-системы — никаких одноразовых значений.
Кнопки
Четыре варианта × четыре размера. Высоты совпадают с инпутами — LG (48px) / MD (40px) / SM (32px) / XS (28px).
Primary
Главное действие на экране. Hero CTA, финальный шаг формы. Один на странице.
Secondary
Второстепенное действие рядом с primary. Фильтры, переключатели.
Ghost
Тихое нейтральное действие: серый фон и border.
Destructive
Необратимые действия. Удаление, архивация. Требует диалог подтверждения.
Состояния
Hover
Disabled
Loading
Крупные icon-кнопки для hero-секций и standalone-действий.
Основные icon-кнопки: undo, redo, тема, навигация.
Toolbar-кнопки рядом с компактными текстовыми кнопками.
Inline-контролы: удалить карточку, обновить саммари. Выровнен с Checkbox/Radio 20×20.
Бейджи
Лейблы для статусов, категорий и тегов. Шрифт — Loos Latin Condensed Medium, uppercase. Три размера: SM (20px) / MD (24px) / LG (28px).
Контекстные примеры
AI-агент «Аналитик»
Финансовый анализ и прогнозирование
Счётчик-индикатор (на иконке)
Жёлтый круглый оверлей на углу иконки-кнопки. Показывает число активных элементов (выбранных фильтров). Скрыт при значении 0. См. DS MD §6.1.1.
Табы
Tabs переключают соседние панели без смены экрана. default для равноправных наборов данных, secondary для локальной навигации.
| Ключевые сценарии | Пример |
|---|---|
Default Сегментированный список с одной активной вкладкой. Для равноправных наборов данных. | Используй для переключения соседних наборов данных: «Все кейсы / Активные / Архив». |
With Icons Иконка работает как вспомогательный смысловой маркер и не заменяет текстовую метку. | Используй только известные 16px-иконки Lucide без цветных акцентов. |
Secondary Тихая навигация внутри секции с подчёркнутым активным состоянием. | Нужен для тихой навигации внутри уже выбранного объекта: кейса, агента, карточки. |
| Состояние / часть | Токены | Правило |
|---|---|---|
| TabsList default | bg --rm-gray-1 · border --border · radius --radius-sm | Контейнер для сегментированных табов с общей подложкой. |
| TabsTrigger default | text --muted-foreground | Неактивный триггер остаётся нейтральным. |
| Hover | bg --rm-gray-2 · text --foreground | Hover только на триггере, без glow и тени. |
| Active | bg --background · border --border · text --foreground | Активный таб — вложенная поверхность внутри списка. |
| Disabled | opacity 0.4 | Вкладка видна в иерархии, но не интерактивна. |
| Secondary active | underline --rm-yellow-100 | Подчёркивание заменяет filled-background. |
Чекбоксы
Паттерн для независимого yes/no-выбора. Основа: 16×16 control, общий focus-visible и один акцент для checked и indeterminate.
Default
Disabled
Indeterminate
Основа
16×16 control, общий focus-visible и один акцент для checked и indeterminate.
Основной паттерн: checkbox + label + короткое пояснение.
Indeterminate нужен только там, где один master-checkbox управляет списком элементов.
Правила
Checkbox переключает независимый yes/no-выбор. Если пользователь должен выбрать ровно один вариант, используй Radio.
Размер фиксированный: 16x16 px. Радиус берём только --radius-sm, чтобы control совпадал с flat-характером кнопок и input.
Checked и indeterminate используют один акцентный фон --rm-yellow-100. Разница между ними читается только по внутренней пиктограмме.
Disabled-состояние не прячем, если оно помогает объяснить этап процесса или состав недоступных действий.
Радио
Паттерн для выбора одного варианта из группы. Основа: 16×16 control, один активный выбор и headless-композиция внутри строки.
Default
Disabled
Required
Основа
16×16 control, один выбор в группе и required без отдельного декоративного состояния.
Required не меняет визуальный стиль control. Обязательность показываем текстом, а не дополнительным декором.
Control живёт внутри более крупной строки выбора.
Лаконичный radio без сложной карточки: полезен в таблицах, списках каналов и компактных настройках.
Правила
Radio используем только там, где пользователь обязан выбрать ровно один вариант из группы.
Required остаётся логикой формы, а не отдельным визуальным вариантом: control не получает новый цвет, бейдж или иконку.
Headless-композиция допустима, если сама строка выбора уже использует существующие токены surface: border-border, bg-card, accent-background по состоянию.
Standalone radio подходит для плотных списков. Если у варианта есть пояснение длиннее одной строки, переходи к строке-выбору с label и description.
Тумблер
Немедленный on/off. Squircle-форма (rounded-sm, 4px) — как у всех контролов DS.
Тумблер для on/off. Squircle-форма (rounded-sm). Два размера.
Default / 36×20
SM / 28×16
Default
Disabled
Сегментированный переключатель из двух пунктов. Композиция из Tabs с двумя TabsTrigger.
Default / 40px
SM / 32px
Default — формы и настройки
SM — toolbar и компактные панели
Tabs с двумя иконками. Для компактных toolbar-переключателей.
Default / 40px
SM / 32px
Default
SM
Токены и размеры
| Тип | Размер | Высота | Импорт |
|---|---|---|---|
| Boolean | default | 36×20 | |
| Boolean | sm | 28×16 | |
| Text | default | 40px (trigger 32px) | |
| Text | sm | 32px (trigger 28px) | |
| Icon | default | 40px (trigger 32px) | |
| Icon | sm | 32px (trigger 28px) |
Boolean Switch переключает on/off. Text и Icon Switch переключают режим из двух вариантов.
Text / Icon Switch реализуется через Tabs с двумя TabsTrigger. Отдельного компонента нет.
SM-размер (32px) выравнивается по высоте с Button size="icon". Подходит для toolbar.
Default-размер (40px) используется в формах, настройках и standalone-переключателях.
Ступенчатый слайдер
Настройка с несколькими заранее выбранными значениями: температура модели, лимит токенов, число витков инструментов. Пять ступеней вместо свободного числового поля.
Пять заранее выбранных значений вместо свободного числа. Точки справа от ручки — непройденные ступени, последняя показывает потолок шкалы.
Default / 28px
SM / 24px
Строки настроек
SM и disabled
Токены и правила
| Часть | Токен |
|---|---|
| Rail | border-border · bg-rm-gray-1 · rounded-full |
| Пройденная часть | --rm-yellow-100 |
| Ручка | --rm-yellow-fg · rounded-full · shadow-sm |
| Точка ступени | bg-muted-foreground/40 |
| Точка последней ступени | --rm-yellow-100 |
| Disabled | opacity-40 · cursor-not-allowed |
Канон — 5 ступеней. Меньше трёх — это Switch или Tabs, больше семи — Select или Input.
Значение вне шкалы подсвечивает ближайшую ступень и не переписывает данные молча.
Взаимодействие держит нативный input[type=range]: мышь, тач, стрелки, Home/End, фокус.
Подпись текущего значения рисуется снаружи — сам контрол текст не показывает.
Примечания / Notes
Постоянные сервисные сообщения внутри экрана: подсказки, предупреждения, подтверждения и локальные CTA. Используют только operational-состояния и существующие status/surface-токены.
Сценарий
Вариант
Правило
neutralactionsuccess / warning / errortone="filled"disabled / eyebrow / no eyebrowОсновной режим для пояснений внутри карточек, форм и системных панелей.
Нейтральное пояснение
Сначала соберите факты по кейсу
Синхронизация
Интеграция обновляется каждые 15 минут
Успешный шаг
Документы успешно прикреплены
Требует внимания
Часть полей ещё не заполнена
Блокирующая ошибка
Не удалось отправить webhook
Усиленный режим для флоу, где note должен считываться быстрее соседнего контента.
Режим агента
Агент переключён в режим интервью
Подтверждение
Оплата подтверждена
Ожидание ответа
Ответ ИИ может занять до 2 минут
Проверьте данные
Проверьте slug агента
CTA и disabled-состояние для сервисных сообщений.
Следующий шаг
Подключите оплату, чтобы завершать кейс автоматически
Временно недоступно
Расшифровка звонка временно недоступна
Вместо badge note использует короткий подзаголовок, который объясняет суть примечания.
Контекст сценария
Default label
Платёжный статус
Custom label
Без подзаголовка
Токены и правила
| Вариант | Токены | Когда использовать |
|---|---|---|
| Neutral | border --border · bg card / --rm-gray-1 | Базовое объяснение, вторичная помощь, meta-комментарий. |
| Info | blue 300 / 900 / fg-subtle · blue 100 / fg | Нейтрально-операционный контекст: синхронизация, импорт, системные подсказки. |
| Success | green 300 / 900 / fg-subtle · green 100 / fg | Подтверждение завершения, валидные шаги, успешный sync. |
| Warning | yellow 300 / 900 / fg-subtle · yellow 100 / fg | Сценарий требует внимания, но не блокирует поток. |
| Error | red 300 / 900 / fg-subtle · red 100 / fg | Блокирующая проблема, риск потери данных или неудачный запрос. |
| Disabled | opacity 0.4 | Сохраняем в лэйауте, но выключаем взаимодействие до доступности сценария. |
Note нужен для постоянного контекста внутри экрана. Если сообщение краткоживущее и не должно занимать место после действия, используй toast.
Не добавляй новые декоративные цвета. Для note зафиксированы только operational-состояния: neutral, info, success, warning, error, action.
CTA внутри note разрешён только один, размером sm и только когда действие логически завершает или исправляет конкретное сообщение.
Внутри note не используем badge-лейблы. Если нужен дополнительный смысловой слой, ставь короткий текстовый подзаголовок над заголовком.
Таблицы
Паттерн для плотных сравнимых данных: кейсы, платежи, документы, usage-отчёты. Таблица собирается на существующих surface, border, badge и control-токенах.
Паттерн
Вариант
Правило
basestripedborderedinteractive / selectableoperational tablelarge dataset / progressive reveal| Агент | Статус | Нагрузка |
|---|---|---|
| Маркетолог | Активен | 12 кейсов |
| Финансовый агент | На паузе | 3 кейса |
| Юридический агент | Черновик | 7 кейсов |
| Агент | Статус | Нагрузка |
|---|---|---|
| Маркетолог | Активен | 12 кейсов |
| Финансовый агент | На паузе | 3 кейса |
| Юридический агент | Черновик | 7 кейсов |
| Агент | Статус | Нагрузка |
|---|---|---|
| Маркетолог | Активен | 12 кейсов |
| Финансовый агент | На паузе | 3 кейса |
| Юридический агент | Черновик | 7 кейсов |
| Агент | Статус | Нагрузка |
|---|---|---|
| Маркетолог | Активен | 12 кейсов |
| Финансовый агент | На паузе | 3 кейса |
| Юридический агент | Черновик | 7 кейсов |
Таблица кейсов собирается из уже описанных badge, checkbox и button-паттернов.
| Кейс | Этап | Канал | Сумма | Обновлено | |
|---|---|---|---|---|---|
Аудит воронки продаж /a/case-1 | Нужна оплата | Telegram | 24 000 ₽ | 5 мин назад | |
Юридический due diligence /a/case-2 | В работе | Web chat | 48 000 ₽ | 22 мин назад | |
AI-агент для HR /a/case-3 | Готово | 16 000 ₽ | 1 час назад | ||
Разбор unit-экономики /a/case-4 | Ошибка webhook | Web chat | 32 000 ₽ | 2 часа назад | |
| Subtotal | 120 000 ₽ |
Сначала фиксируем визуальный паттерн, потом технику рендера.
Большой список документов
Показываем первые 8 строк, затем догружаем пачками.
brief.pdf
Строка 1
contract-v2.docx
Строка 2
payment-link.txt
Строка 3
summary.md
Строка 4
call-transcript.pdf
Строка 5
persona.csv
Строка 6
nda.pdf
Строка 7
webhook-log.json
Строка 8
Визуально large dataset не отличается от обычной таблицы: те же row height, border и hover-state.
Если строк очень много, сначала пробуем `Show more`, пагинацию или sticky-фильтры. Виртуализация скрыта внутри реализации и не добавляет новый видимый стиль.
Зебру, selection и bulk-actions можно комбинировать, но только если они реально помогают чтению, а не перегружают экран.
Токены и правила
| Слой | Токены | Описание |
|---|---|---|
| Container | bg-card + border-border + rounded-lg | Базовая flat-surface для любой таблицы. |
| Head | bg --rm-gray-1 · text-muted-foreground | Тихий header, который не спорит с содержимым. |
| Row hover | bg --rm-gray-2 | Единый hover-паттерн строк и quiet-controls. |
| Row selected | bg --rm-yellow-900 · border --rm-yellow-300 | Выбранная строка или частичный bulk-контекст. |
| Stripe | odd/even bg-card / --rm-gray-1 | Только для длинных однотипных списков. |
| Numeric | font-caption-family | Числа, суммы, id и короткие коды. |
Таблица нужна только для сравнимых, повторяющихся данных. Если каждая строка превращается в mini-card с длинным текстом, переходи к списку или карточкам.
Header всегда тихий: `--rm-gray-1`, `text-muted-foreground`, Loos Condensed uppercase. Основной контраст должен оставаться у данных, а не у шапки.
Interactive row использует только два слоя поведения: hover `--rm-gray-2` и selected `--rm-yellow-900` + `--rm-yellow-300`. Не добавляй новый hover-border, shadow или ring на всю строку.
Числа, суммы, id и короткие коды лучше ставить на `--font-caption-family`, чтобы колонки читались ровнее. Для статусов используем существующие `Badge`, а не красим текст вручную.
Инпуты
Четыре размера идентичны кнопкам по высоте и padding: LG (48px) / MD (40px, default) / SM (32px) / XS (28px).
Default
Стандартное поле. border: --border, bg: --rm-gray-1.
Error
Ошибка валидации. border: --destructive.
Disabled
Недоступно. opacity: 0.4, cursor: not-allowed.
6 символов авторизации. Моноширинный шрифт, крупный.
Textarea
Паттерн для multiline-ввода. Базовые состояния: default, disabled и error; focus меняет только border.
Default
Disabled
Error
Основа
Базовые состояния: default, disabled и error. Focus меняет только border.
Добавьте цель, аудиторию или желаемый результат.
Основной textarea для форм, briefs и длинных ответов.
Компактный composer для чата: поле сверху, action-ряд снизу.
Enter отправляет, Shift + Enter переносит строку.
Правила
Используй default для форм, брифов, описаний кейса и любых задач, где пользователь пишет больше одной строки.
Используй chat только в зоне отправки сообщения: компактная высота, без ручного resize и с ограничением по max-height.
Для focus меняется только border на --ring; не добавляй кастомные ring, shadow или glow поверх компонента.
Error оформляется через aria-invalid на поле и текст ошибки под ним цветом --destructive.
Поиск / Combobox
Компонент поиска для Rocketmind: inline-search, подсказки, история, empty-state и запуск в модальном окне.
Search / Combobox
Полноценный поиск по агентам, кейсам и системным действиям
Поиск по агентам, кейсам и системным действиям: inline, история, preset-подсказки и запуск в модальном окне.
1. Размеры
Четыре размера совпадают по высоте с кнопками и базовыми input, поэтому toolbar и поисковые сценарии собираются без ручной подгонки.
XS / 28px
SM / 32px
MD / 40px
LG / 48px
2. Состояния
Базовые состояния компонента и типовые тексты ошибок.
Default
Disabled
Error
Агент с таким slug не найден. Проверьте название или откройте каталог.
3. Подсказки и история
При пустом запросе компонент показывает историю поиска и готовые сценарии. Если истории нет, блок не исчезает, а объясняет следующий шаг и уступает приоритет preset-подсказкам.
История + preset-подсказки
Истории нет
Правило empty-state
Когда запрос уже введён, список показывает только результаты совпадения или одно текстовое сообщение без декоративных иллюстраций. Когда запрос пустой, вместо пустоты показываем полезный старт: история, популярные сценарии или оба блока сразу.
4. Поиск в модальном окне
Основной паттерн глобального поиска: на desktop центрированное modal-окно, на mobile bottom sheet.
Подходит для `Cmd/Ctrl + K`, каталога агентов и быстрого перехода по кейсам.
Карточки
1. Продукт консалтинга
Карточки для раздела «Консалтинг и стратегия». Горизонтальная обложка 3:2 (как карточка медиа), жёлтый бейдж в верхнем-левом углу и опциональные аватарки экспертов поверх обложки (снизу-справа). Заголовок — макс. 2 строки, описание — 3 строки с многоточием.
С экспертами
Без экспертов
2. Продукт с изображением
Карточки для разделов «Онлайн-школа» и «AI-продукты». Изображение cover 220px, бейдж -22px overlap. Вариант «wide» — 2 колонки с фактоидами из hero.
1 колонка
2 колонки (wide)
3. Статья
Карточка статьи для раздела «Медиа». Обложка сверху (overlap −22px), бейдж типа (sky — урок, terracotta — кейс), теги, автор и дата. Вариант «wide» — двухколоночный: обложка слева, заголовок и описание во всю ширину.
Default — обложка сверху
Бизнес-дизайн: от идеи до запуска
ИИ-агенты в консалтинге
Wide — обложка слева
Дизайн-спринт за 5 дней: что работает на практике
4. Aside-карточка продукта
Мини-карточка продукта для правой колонки статьи. Вариант default — 72×72 thumb + аватары экспертов (для consulting); вариант image — широкая cover-картинка (для academy/ai-products).
Экосистемная стратегия
Стратегия и портфель бизнес-моделей, расширяющих влияние.
Тестирование гипотез
ИИ-агент по тестированию бизнес-гипотез с автоматическим анализом данных.
5. Кейс
Карточка кейса для раздела «Кейсы». Заголовок, описание, бордерный блок с тремя метриками, итоговый результат. Для «big»-кейсов (есть страница) — жёлтый бордер при наведении и стрелка ↗ в правом верхнем углу.
Запуск онлайн-академии для корпоративных команд
Помогли крупному EdTech-игроку упаковать методологию и вывести её на b2b-рынок за 6 месяцев.
От первой стратегической сессии до продаж b2b-клиентам.
Подписали контракты в первый квартал после запуска.
Относительно базового сценария без b2b-направления.
Методология упакована в продукт, продажи — системные, команда заказчика выросла в два раза.
Аватар
Круглый аватар пользователя или агента. 5 размеров: XS (24px) / SM (32px) / MD (40px) / LG (48px) / XL (64px). Fallback — инициалы на bg-rm-gray-1, моно-шрифт.
Размеры и fallback
Контекстные примеры
AI-агент «Аналитик»
Финансовый анализ
Диалог
Модальное окно для подтверждения действий и показа информации. Оверлей — rm-gray-alpha-600, панель — max-w-480px bg-card rounded-lg.
Примеры
Адаптив: desktop ↔ mobile bottom sheet
Desktop (lg+)
- • Центр экрана, max-w-480px, max-h-85dvh
- • rounded-lg на всех углах
- • Open: 500ms easeOutExpo (slide-in-from-bottom-8 + fade)
- • Close: 200ms easeInQuad
- • Esc / клик на overlay / X
Mobile (<lg) — bottom sheet
- • Прижат снизу, на всю ширину, max-h-85dvh
- • rounded-t-lg + шторка
SheetGrabHandleсверху: полоса h-1 w-10, в потоке 20px, тач-зона 44px отдельным слоем поверх - • Open: 260ms cubic-bezier(0.32, 0.72, 0, 1)
- • Drag-down ≥ 120px → закрытие; меньше — return
- • visualViewport: при фокусе input sheet поднимается на верх с отступом 16px, внутри активируется скролл
Шторка — общий SheetGrabHandle из @rocketmind/ui: те же полоса, зона захвата 44px и порог 120px используются и в собственных bottom sheet'ах приложений (напр. чат с Алексом в Р-проекте). Остальное поведение зашито в DialogContent. Опционально: mobileSheet={false} отключает sheet (только center-modal на всех экранах), bodyClassName="p-0" — отключает дефолтный padding scroll-обёртки (для media-viewer'ов), footer — контролы слоем поверх тела у самого низа окна (без подложки, на фейде; кнопки в ряд справа, отступ 16px).
Правила
Dialog используется для подтверждения критичных действий (удаление, завершение) или показа информации, требующей фокуса. Оверлей — rm-gray-alpha-600.
Desktop: max-w-480px, rounded-lg, bg-card, border-border, padding 24px (p-6). Mobile: full-width bottom sheet, rounded-t-lg, drag-handle сверху.
Заголовок — font-heading, uppercase, text-18. Описание — text-14, text-muted-foreground. Footer выровнен вправо с gap-3.
Для деструктивных действий кнопка подтверждения использует bg-destructive. Кнопка отмены всегда Ghost-стиль.
На mobile шторка обязательна — визуальный сигнал «можно потянуть вниз чтобы закрыть». Крестик/стрелку вместо неё в bottom sheet не ставим.
Когда внутри sheet есть инпуты — sheet автоматически поднимается над клавиатурой через visualViewport, внутри включается скролл. Не задавать фикс. высоту контенту.
Dropdown Menu
Контекстное меню действий. Контейнер — bg-popover rounded-sm min-w-160px. Destructive-элемент — text-rm-red-100.
Примеры
Правила
DropdownMenu — контекстное меню для действий, которые не помещаются в одну строку. Trigger — кнопка Ghost или Icon-only.
Контейнер: bg-popover, border-border, rounded-sm, min-width 160px. Элементы — высота 32px (h-8), padding px-2.
Hover-фон элемента — rm-gray-2. Destructive-элемент — текст rm-red-100, hover-фон rm-red-900.
Label — mono, uppercase, text-12, text-muted-foreground. Separator — h-px bg-border. Используй группы для логического разделения.
Popover
Плавающая панель, привязанная к триггеру: лёгкие inline-формы и действия. Контейнер — bg-popover rounded-lg, flat (без тени). Для блокирующего подтверждения — Dialog, для списка действий — DropdownMenu.
Примеры
Правила
Popover — для лёгкой inline-формы / действия рядом с триггером. Для блокирующего подтверждения — Dialog, для списка действий — DropdownMenu.
Контейнер: bg-popover, border-border, rounded-lg (panel-радиус), flat — без тени, z-50. По умолчанию w-72, max-width до края экрана.
Триггер — любая кнопка через render-проп: <PopoverTrigger render={<Button … />} />. Закрытие по клику вне, Escape, PopoverClose.
Скроллящийся контент (история, длинные списки) — внутри ScrollArea с max-h. Не растягивай поповер на весь экран.
Разделитель
Визуальный разделитель контента. Горизонтальный — h-px w-full, вертикальный — w-px self-stretch. Цвет — bg-border.
Горизонтальный и вертикальный
Horizontal
Блок контента сверху
Блок контента снизу
Vertical
Skeleton
Placeholder-загрузка с анимацией пульса. Фон — bg-rm-gray-1 animate-pulse rounded-sm. Повторяет форму реального контента.
Паттерны загрузки
Card skeleton
Chat skeleton
Table skeleton
Profile skeleton
Scroll Area
Контейнер с кастомным скроллбаром. Thumb — bg-rm-gray-3, hover — bg-rm-gray-4, ширина — 8px, rounded-full.
Вертикальный скролл
Список агентов
Лог сообщений
Горизонтальный скролл · .rm-scrollbar-thin-x
Полоса 8px, отступ от контента 8px (pb-2). Разрешён только таблицам и коду — например, таблицы в статьях.
Invisible scrollbar · .rm-scrollbar-invisible
Скролл работает (wheel/touch/keyboard), но визуально полоски нет. Используется в GlossaryWidget на /media и других aside-панелях, где DS не хочет видимой полосы.
Overlay scrollbar · <OverlayScrollbar />
Бегунок 4px поверх контента: появляется при скролле и гаснет через 500мс после последнего события. Нативной полосы нет — она не занимает место в раскладке и не ложится на правый край контейнера.
Строка списка 01 — наполнитель для демонстрации оверлейного скролла.
Строка списка 02 — наполнитель для демонстрации оверлейного скролла.
Строка списка 03 — наполнитель для демонстрации оверлейного скролла.
Строка списка 04 — наполнитель для демонстрации оверлейного скролла.
Строка списка 05 — наполнитель для демонстрации оверлейного скролла.
Строка списка 06 — наполнитель для демонстрации оверлейного скролла.
Строка списка 07 — наполнитель для демонстрации оверлейного скролла.
Строка списка 08 — наполнитель для демонстрации оверлейного скролла.
Строка списка 09 — наполнитель для демонстрации оверлейного скролла.
Строка списка 10 — наполнитель для демонстрации оверлейного скролла.
Строка списка 11 — наполнитель для демонстрации оверлейного скролла.
Строка списка 12 — наполнитель для демонстрации оверлейного скролла.
Строка списка 13 — наполнитель для демонстрации оверлейного скролла.
Строка списка 14 — наполнитель для демонстрации оверлейного скролла.
Строка списка 15 — наполнитель для демонстрации оверлейного скролла.
Строка списка 16 — наполнитель для демонстрации оверлейного скролла.
Строка списка 17 — наполнитель для демонстрации оверлейного скролла.
Строка списка 18 — наполнитель для демонстрации оверлейного скролла.
Строка списка 19 — наполнитель для демонстрации оверлейного скролла.
Строка списка 20 — наполнитель для демонстрации оверлейного скролла.
Строка списка 21 — наполнитель для демонстрации оверлейного скролла.
Строка списка 22 — наполнитель для демонстрации оверлейного скролла.
Строка списка 23 — наполнитель для демонстрации оверлейного скролла.
Строка списка 24 — наполнитель для демонстрации оверлейного скролла.
Строка списка 25 — наполнитель для демонстрации оверлейного скролла.
Строка списка 26 — наполнитель для демонстрации оверлейного скролла.
Строка списка 27 — наполнитель для демонстрации оверлейного скролла.
Строка списка 28 — наполнитель для демонстрации оверлейного скролла.
Строка списка 29 — наполнитель для демонстрации оверлейного скролла.
Строка списка 30 — наполнитель для демонстрации оверлейного скролла.
Уведомления / Toasts
Всплывающие уведомления через sonner. Типы: default, success, error, warning, info, loading. Фон — bg-popover, бордер — border-border.
Нажмите кнопку для демонстрации
Правила
Toaster подключается один раз в layout.tsx через <Toaster /> из @rocketmind/ui. Вызов — через функцию toast() из библиотеки sonner.
Фон — bg-popover, бордер — border-border, скругление — var(--radius). Иконки: Lucide (CircleCheck, Info, TriangleAlert, OctagonX, Loader2).
Типы: default (без иконки), success, error, warning, info, loading. Loading можно обновить на success/error по id.
Action-кнопка используется для отмены (undo-паттерн). Тост автоматически наследует тему (light/dark) из ThemeProvider.
Show More
Кнопка-разделитель для скрытия избыточного контента. Пропсы: expanded, onClick, label, labelExpanded. Занимает всю ширину контейнера.
Варианты
Collapsed
Expanded
Default
Список · fade + overlap
LISTТекст · fade + overlap
TEXTНастройки · без fade (collapse to 0)
SETTINGSПравила
fadeна обоих компонентах — показывает частичный контент с градиентом; кнопка заезжает поверх черезmargin-top: -36px.- Без
fade— контент схлопывается до нуля; кнопка стоит ровно под ним. - Все скрытые элементы кладите внутрь
ShowMorePanel. Приfadeпомещайте туда весь список — градиент подскажет что есть продолжение. collapsedHeightподбирайте так, чтобы последний видимый элемент был срезан наполовину — это явный сигнал.- Если фон контейнера отличается от
--background, передайте нужное значение вfadeBg.
Слайдер
Минималистичный прогресс-слайдер 62×8 px из дизайн-системы. Трек — border, заливка и точка — foreground. Пропсы: value, min, max, width, animate, animateKey, animationDuration, onChange.
Статичный (value=0.4)
Анимированный (animate, 4 сек)
Интерактивный, ширина 200 px
NumberPagination — нумерованная пагинация
Общий компонент NumberPagination: все номера остаются на местах, анимированный ползунок появляется справа от активного номера. Стоит в блоке «Кейсы» (theme="dark") и в белой плашке блока «О продукте» (theme="light"). Gap между элементами — 16px, ползунок 62×8 px, durationMs должен совпадать с таймером автопереключения блока.
Прогресс-бар
Детерминированный прогресс-бар для операций с известным процентом (выгрузка файла, импорт). Дорожка — border, заливка — foreground, скругление rounded-full, высота 6px. Единственный проп — value (0–100). Для тонкого индикатора кейсов — Slider, для неизвестного состояния — спиннер Loader2.
Статичный (0 / 35 / 100%)
С подписью и процентом (симуляция загрузки)
Дискретный пайплайн → процент (обработка файла: uploaded 15 · extracting 45 · extracted 65 · indexing 85; indexed → чип «Готов»)
Пагинация
Навигация между разделами многостраничной статьи. Размещается в конце тела статьи перед блоком «Похожие». Пропсы: prev, next (каждый — { label, href }), опционально renderLink для интеграции с next/link.
Навигация между разделами многостраничной статьи. Ставится в конце тела статьи перед блоком «Похожие». Кнопки занимают центральные две колонки тела (cols 2-3).
Кнопка «следующий раздел» при появлении во вьюпорте (порог 0.6) заливается круговым dot-fill от правого края: круг var(--foreground) раскрывается за --duration-smooth / --ease-standard, текст и иконка инвертируются в var(--background), рамка — в var(--foreground). Ушла из вида — круг сворачивается, при повторном появлении заливается снова. Кнопка «предыдущий раздел» эффект не получает. prefers-reduced-motion — смена состояния без анимации круга. Прокрутите страницу, чтобы увидеть эффект на примерах ниже.
Средний раздел статьи: обе кнопки 50/50.
Первый раздел: оставшаяся кнопка занимает всю ширину тела.
Последний раздел: оставшаяся кнопка занимает всю ширину тела.
Названия обрезаются truncate без переноса строки.
Аккордеон
Минимальный аккордеон для продуктовых страниц. Иконки +/−, бордер #404040, заголовок — Label 16, контент — Copy 14. Одновременно открыт только один элемент.
Интерактивный пример
Rich-редактор (Tiptap)
Tiptap-редактор тела урока/статьи (@rocketmind/ui/rich-editor). Хранит контент как markdown, round-trip в ArticleBodyBlock[]. Команды по «/», bubble-меню на выделении, кастом-ноды галереи и видео, импорт .md. Адаптеры (загрузка, AI, глоссарий) инъектируются приложением — ниже мок.
Markdown на выходе (живой)
### Подзаголовок раздела Обычный абзац с **жирным**, *курсивом* и [ссылкой](https://rocketmind.ru). Нажмите «/» для команд или выделите текст для bubble-меню. > Цитата внутри редактора - Первый пункт списка - Второй пункт | Колонка | Значение | | --- | --- | | A | 1 | | B | 2 |
Курсор совместной работы
Графический курсор: стрелка-указатель + плашка с именем (человек / AI-агент / Rocketmind), залитые фирменным цветом (color — один из 8 акцентов). Плашка раскрывается к центру (side), стрелка наклоняется при движении (tilt). Поле CollaborationCursorsField анимирует блуждание (имитация совместной работы), редактор CollaborationCursorsEditor задаёт количество, имена и цвета.
Все фирменные цвета · плашка справа (курсор левее центра)
Плашка слева (курсор правее центра) — зеркальный наклон стрелки
Живое поле — имитация совместной работы (на центре стрелка плавно доворачивается, плашка переезжает)
Шаблонная обложка продукта
ProductTemplateCover — обложка hero и карточки продукта: сетка точек DotGridLens (реагирует на курсор), курсоры совместной работы и опциональная иконка с настраиваемой позицией / масштабом / поворотом. Тип обложки (шаблонная / своя фотография / без обложки) задаётся в site-admin через редактор обложек.
Иконка hero обобщена в стопку CoverParallaxLayers — PNG-слоёв с 3D-реакцией на курсор (смещение + наклон, сила parallax 0..1 у каждого слоя). Только десктоп; на touch и при prefers-reduced-motion слои статичны. Порядок массива = z-index. Настраивается списком слоёв в редакторе обложек. Подробнее — в MD-спеке (6.1 · «PNG-слои с параллаксом»).


