diff --git a/tradein-mvp/frontend/src/components/trade-in/v2/AnalyticsView.tsx b/tradein-mvp/frontend/src/components/trade-in/v2/AnalyticsView.tsx index 6d972aa4..64861eca 100644 --- a/tradein-mvp/frontend/src/components/trade-in/v2/AnalyticsView.tsx +++ b/tradein-mvp/frontend/src/components/trade-in/v2/AnalyticsView.tsx @@ -327,204 +327,196 @@ export default function AnalyticsView({ )} - {/* история цен */} -
-
-
-
- История цен в этом доме -
-
- {historyNote} -
-
-
- {avitoPts.length > 0 ? ( - - - Avito - - ) : null} - {yandexPts.length > 0 ? ( - - - Яндекс - - ) : null} -
-
- - История цен в этом доме — медиана ₽/м² по годам - - {PH_GRID_Y.map((y) => ( - - ))} - - - {data.priceHistory.yTicks.map((t) => ( - - {t.label} - - ))} - - - {data.priceHistory.years.map((yr, i) => ( - - {yr} - - ))} - - - - {/* white dot fill on an accent ring — documented one-off, no token (design l.568) */} - - Архивные объявления Avito · нажмите, чтобы открыть - {avitoPts.map((p, i) => ( - - ))} - - - {yandexDots.map((p, i) => ( - - ))} - - setHoverHist(true)} - onMouseLeave={() => setHoverHist(false)} - onClick={() => onNavigate?.(2)} - > - {hoverPts.map((p, i) => ( - - ))} - - - {hoverHist ? ( - // Dark navy tooltip surface + white text — documented one-off literals - // matching the design (l.572); no token equivalent. + {/* история цен + цена × срок продажи — side by side so both fit the + fixed-height v2 artboard panel without scrolling (reclaims ~194px + of vertical space vs. stacking; chart heights unchanged). */} +
+ {/* история цен */} +
-
- Архивные объявления этого дома +
+
+ История цен в этом доме +
+
+ {historyNote} +
-
- Нажмите, чтобы открыть список → +
+ {avitoPts.length > 0 ? ( + + + Avito + + ) : null} + {yandexPts.length > 0 ? ( + + + Яндекс + + ) : null}
- ) : null} -
- - {/* цена × срок продажи (детально) */} -
-
-
-
- Цена × срок продажи -
-
- Зависимость цены от срока экспозиции · {data.scatterDetail.note} -
-
-
- + История цен в этом доме — медиана ₽/м² по годам + + {PH_GRID_Y.map((y) => ( + + ))} + + + {data.priceHistory.yTicks.map((t) => ( + + {t.label} + + ))} + + + {data.priceHistory.years.map((yr, i) => ( + + {yr} + + ))} + + + + {/* white dot fill on an accent ring — documented one-off, no token (design l.568) */} + + Архивные объявления Avito · нажмите, чтобы открыть + {avitoPts.map((p, i) => ( + + ))} + + + {yandexDots.map((p, i) => ( + + ))} + + setHoverHist(true)} + onMouseLeave={() => setHoverHist(false)} + onClick={() => onNavigate?.(2)} + > + {hoverPts.map((p, i) => ( + + ))} + + + {hoverHist ? ( + // Dark navy tooltip surface + white text — documented one-off literals + // matching the design (l.572); no token equivalent. +
- - аналоги - - {data.scatterDetail.deals.length > 0 ? ( +
+ Архивные объявления этого дома +
+
+ Нажмите, чтобы открыть список → +
+
+ ) : null} +
+ + {/* цена × срок продажи (детально) */} +
+
+
+
+ Цена × срок продажи +
+
+ Зависимость цены от срока экспозиции · {data.scatterDetail.note} +
+
+
- сделки + аналоги - ) : null} - + {data.scatterDetail.deals.length > 0 ? ( + + + сделки + + ) : null} - объект - + > + + объект + +
+ + Цена × срок продажи + + + + + + + + + + + + + + {data.scatterDetail.deals.map((p, i) => ( + + ))} + + + {data.scatterDetail.analogs.map((p, i) => ( + + ))} + + + {/* V4: subjectApprox marks a fallback x (est_days_on_market unknown) — + dashed ring + title flag it as an estimate, not a measurement. */} + {data.scatterDetail.subjectApprox ? ( + + Срок продажи — оценка (~90 дн.), точных данных нет + + ) : null} + + + + + {data.scatterDetail.yTicks.map((t) => ( + + {t.label} + + ))} + + + {data.scatterDetail.xTicks.map((t) => ( + + {t.label} + + ))} + + + СРОК ПРОДАЖИ, ДН + + + ЦЕНА ПРОДАЖИ, ₽ + +
- - Цена × срок продажи - - - - - - - - - - - - - - {data.scatterDetail.deals.map((p, i) => ( - - ))} - - - {data.scatterDetail.analogs.map((p, i) => ( - - ))} - - - {/* V4: subjectApprox marks a fallback x (est_days_on_market unknown) — - dashed ring + title flag it as an estimate, not a measurement. */} - {data.scatterDetail.subjectApprox ? ( - - Срок продажи — оценка (~90 дн.), точных данных нет - - ) : null} - - - - - {data.scatterDetail.yTicks.map((t) => ( - - {t.label} - - ))} - - - {data.scatterDetail.xTicks.map((t) => ( - - {t.label} - - ))} - - - СРОК ПРОДАЖИ, ДН - - - ЦЕНА ПРОДАЖИ, ₽ - -
);