5.6 KiB
5.6 KiB
Дизайн-системный рефакторинг страниц брокерского счёта
Дата: 2026-06-21 Статус: Draft
Контекст
Epic Брокерский портфель уже покрыт функциональной фичей broker-account-sections (реализовано 2026-06-18). Текущая цель — убрать legacy-стили (CSS-классы, inline-стили, SkeletonBlock, loading-spinner) из страниц и компонентов, относящихся к одному выбранному брокерскому счёту, и перевести их на @moex-vibe/design-system.
Страницы в области изменения:
BrokerAccountLayout— навигация и заголовок счёта;BrokerAccountOverviewPage— карточки сводки, диаграмма, последние операции;BrokerSummary— текстовые показатели портфеля и денежных остатков;BrokerAssetCards— карточки акций и облигаций;BrokerOverviewSkeleton— loading-состояние overview;BrokerAllocationChart— SVG-диаграмма (диаграмма остаётся SVG, меняются обёртки);BrokerPositionTable— таблица позиций с пагинацией;BrokerOperationsTable— таблица операций с пагинацией;PositionTicker— кликабельный тикер в таблице позиций;BrokerPositionsPage— страница акций / облигаций;BrokerOperationsPage— страница истории операций с фильтром.
Связанные фичи
- Epic:
docs/epics/BrokerPortfolio.md - Функциональная базовая фича:
docs/features/broker-account-sections/spec.md - DS-пакет:
packages/design-system/
Цель
Удалить все CSS-классы (кроме героических градиентов, где нет DS-эквивалента) и SkeletonBlock из страниц и компонентов, относящихся к одному брокерскому счёту. Перевести layout, typography, skeleton, метрики, алерты, кнопки, пустые состояния на @moex-vibe/design-system. Оставить нетронутыми бизнес-логику, контракты и схему маршрутизации.
Out of scope
- Изменение бизнес-логики, контрактов API, entity-слоя;
- Изменение маршрутизации;
- Изменение SVG-диаграммы;
- Рефакторинг broker-accounts-page (список счетов) — отдельная фича;
- Изменение CSS-переменных
:rootи их использования за пределами страниц брокера; - Добавление новых тестов (существующие тесты сохраняются, если их контракт не меняется).
Принципы миграции
SkeletonBlock→ DSSkeleton(все потребители → удалениеSkeletonBlockизshared/ui);<h1>/<h2>→<Heading level={1|2}>;<p label>,<span>→<Text variant="label" tone="secondary">;<p>статические тексты →<Text variant="body">или<Box component="span">сsx(если нужен кастомный размер/цвет);<strong>значения →<Text variant="body" sx={{ fontWeight: 700 }}>;- Inline
<p role="alert">→<Text tone="negative">; - Стандартный
<section>→<Box component="section">; - Hero-gradient
broker-overview→<Box>с кастомнымsx(градиент остаётся как inline-стиль); div.broker-operations__toolbar→<Box>с flex-сеткой;<select>элемент — оставить как нативный<select>, обёрнуть в<Box>.
Acceptance Criteria
BrokerAccountLayoutне содержит CSS-классов изstyles.css; используется<Heading>,<Text>,<Box>.BrokerAccountOverviewPageи содержащиеся в нёмBrokerSummary,BrokerAssetCardsпереведены на DS-компоненты.BrokerOverviewSkeletonиспользует DS<Skeleton>.BrokerAllocationChartобёртки (<figure>,<figcaption>) переведены на<Box>; текст легенды — на<Text>.BrokerPositionTableиBrokerOperationsTableиспользуют<Box>для layout,<Heading>для заголовков,<Button>или<Box>для пагинации, пустые и loading-состояния — через DS.TableSkeletonпереведён на DS<Skeleton>.SkeletonBlockудалён после замены всех потребителей.BrokerPositionsPageиBrokerOperationsPageпереведены на<Box>,<Heading>,<Text>.PositionTicker—<Link>с<Text>(или оставляетfontWeight: 700если безsx).- ESLint allowlist не нарушен (
no-restricted-importsразрешаетBox,Stack,Gridиз@mui/materialbarrel). npm run test:frontend && npm run lint -w apps/frontend && npm run build:frontendпроходят.- CSS-классы, оставшиеся без потребителей, удалены из
styles.css(но сохраняются градиенты hero-секций).