6.1 KiB
Broker Accounts Page — Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: Migrate broker-accounts page area to use @moex-vibe/design-system components.
Architecture: Replace legacy CSS classes, inline styles, and shared/components with DS equivalents. Keep business logic and data layer unchanged. The hero gradient section is intentionally left as custom CSS.
Tech Stack: React 18, MUI 6.5, @moex-vibe/design-system 0.1.0
Files
Modify
apps/frontend/src/pages/broker-accounts/ui/BrokerAccountsPage.tsxapps/frontend/src/widgets/broker-accounts-summary/ui/BrokerAccountsSummary.tsxapps/frontend/src/widgets/broker-account-card/ui/BrokerAccountCard.tsxapps/frontend/src/shared/ui/broker-allocation-bar/BrokerAllocationBar.tsxapps/frontend/src/styles.css— удалить осиротевшие классы
No changes
- Entity layer (
entities/broker-account/,entities/broker-position/) — бизнес-логика не меняется - Shared formatters (
shared/lib/formatters.ts) — используются для форматирования значений - Shared API layer (
shared/api/) — не меняется
Task 1: BrokerAllocationBar
Replace inline HTML + CSS classes with <Box> + <Text>.
- Empty:
<p className="broker-allocation-bar__empty">→<Text tone="muted"> - Track:
<div className="broker-allocation-bar__track">→<Box>withsx - Segment:
<span style={{ width, background }}>→<Box>withsx - Legend:
<ul>/<li>→<Box>withsxflex layout - Swatch:
<span>with inline style →<Box>withsx
Segment width/background и swatch colors остаются как inline styles (dynamic per item, from ALLOCATION_CONFIG).
Task 2: BrokerAccountCard
Replace legacy shared components and CSS with DS equivalents.
- Skeleton block:
<SkeletonBlock>→<Skeleton>from DS - Eyebrow:
<p className="broker-account-card__eyebrow">→<Text variant="label" tone="secondary"> - Title:
<h2 className="broker-account-card__title">→<Heading level={2}> - Stat labels/values:
<span>+<strong>→<Text variant="label" tone="secondary">+<Text> - Card wrapper:
<article className="broker-account-card broker-account-card--link">→<Surface>withcomponent={Link}or<Box>withsx - Error:
<article className="broker-account-card broker-account-card--error">→<Surface>+<Alert>+<Button> - Card header layout:
<div className="broker-account-card__header">→<Box>with flexsx - Card grid:
<div className="broker-account-card__grid">→<Box>with gridsx - Card stat:
<div className="broker-account-card__stat">→<Box>with gridsx
Task 3: BrokerAccountsSummary
Replace skeleton, stats, typography with DS equivalents.
- Skeleton:
<SkeletonBlock>→<Skeleton> - Eyebrow:
<p className="broker-accounts-summary__eyebrow">→<Text variant="label" tone="secondary"> - Title (serif): keep as
<h2>with CSS class (DS Heading не использует serif, теряется brand-стиль) - Status counts:
<span>→<Text> - Currency label:
<p className="broker-accounts-summary__currency">→<Text variant="label" tone="secondary"> - Currency totals:
<strong className="broker-accounts-summary__total">— keep as<strong>with CSS (serif) - Metrics:
<dl>/<dt>/<dd>→<Metric>for each stat - Metric layout grid:
<div className="broker-accounts-summary__metrics">→<Box>with gridsx
The hero section (broker-accounts-summary__hero) keeps its CSS classes — custom gradient, not replaceable.
Task 4: BrokerAccountsPage
Replace page-level layout, typography, empty/error states.
- Page grid:
<div className="broker-accounts-page">→<Box>with gridsx - Header:
<header className="broker-accounts-page__header">→<Box>with flexsx - Eyebrow:
<p className="broker-accounts-page__eyebrow">→<Text variant="label" tone="secondary"> - Title:
<h1 className="broker-accounts-page__title">→<Heading level={1}>(note: serif lost) - Caption:
<p className="broker-accounts-page__caption">→<Text tone="secondary"> - Cards grid:
<div className="broker-accounts-page__cards">→<Box>with gridsx - Empty:
<section className="broker-accounts-empty">→<EmptyState> - Error:
<p style={{ color: ... }}>→<Text tone="negative">
Task 5: Clean up orphaned CSS
After all migrations, remove from styles.css:
.broker-accounts-page,.broker-accounts-page__header,.broker-accounts-page__eyebrow,.broker-accounts-page__title,.broker-accounts-page__caption,.broker-accounts-page__cards.broker-accounts-empty.broker-account-card,.broker-account-card--link,.broker-account-card--loading,.broker-account-card--error,.broker-account-card__header,.broker-account-card__eyebrow,.broker-account-card__title,.broker-account-card__opened,.broker-account-card__grid,.broker-account-card__stat,.broker-account-card__stat--wide,.broker-account-card__alert,.broker-account-card__retry.broker-allocation-bar,.broker-allocation-bar__track,.broker-allocation-bar__segment,.broker-allocation-bar__legend,.broker-allocation-bar__legend-item,.broker-allocation-bar__swatch,.broker-allocation-bar__empty.broker-accounts-summary__eyebrow,.broker-accounts-summary__currency,.broker-accounts-summary__total,.broker-accounts-summary__metrics,.broker-accounts-summary__metric.broker-accounts-summary__currency-cardand its children (header, currency, total, metrics, metric).broker-accounts-summary__statusand children
Keep: .broker-accounts-summary, .broker-accounts-summary--loading, .broker-accounts-summary__hero, .broker-accounts-summary__title (serif), shared .broker-accounts-summary__eyebrow shared rule (hero-specific), .broker-accounts-summary__currency-grid