feat(app): новый визуальный язык, верхняя навигация, портфели, создание счетов и ручные события

Тема и общие виджеты (AssetIcon, ServiceMark, HelpTip, глоссарий), верхняя панель TopNav и вкладки Аналитики вместо NavSidebar, иконки PWA. Экраны: портфели, создание брокерского счёта, ручное событие, правка инструмента, Обзор карточками по скоупам и таблица активов, пересчёт метрик с опросом /metrics/status. design-system.md обновлён.
This commit is contained in:
Dmitry
2026-09-19 22:14:21 +03:00
parent a559d6de3e
commit 62d36aa3e8
73 changed files with 6406 additions and 1192 deletions
+10 -4
View File
@@ -38,7 +38,8 @@ const dimensionLabels = {
'currency': 'Валюта',
};
String assetClassLabel(String? value) => assetClassLabels[value] ?? value ?? '';
String assetClassLabel(String? value) =>
assetClassLabels[value] ?? value ?? '';
/// A bucket key as a person reads it. `cash` and `unknown` are the two literals the
/// allocation step emits; everything else is the source's own value.
@@ -89,7 +90,8 @@ const eventKindLabels = {
'other': 'Прочее',
};
String eventKindLabel(EventKind kind) => eventKindLabels[kind.value] ?? kind.value;
String eventKindLabel(EventKind kind) =>
eventKindLabels[kind.value] ?? kind.value;
/// `'0.1234'` as `'+12,34 %'`. Null becomes an em dash: a return nobody could compute is
/// not zero percent.
@@ -111,13 +113,17 @@ Color? signColor(BuildContext context, String? value) {
if (value == null) return null;
final d = Decimal.parse(value);
if (d == Decimal.zero) return null;
return d > Decimal.zero ? ChartColors.slot3Aqua : ChartColors.slot2Orange;
return d > Decimal.zero ? ChartColors.gain : ChartColors.loss;
}
/// The price-status chip every value on screen depends on: a stale price still produces a
/// number, a missing one produces nothing at all, and both must be visible.
class PriceStatusChip extends StatelessWidget {
const PriceStatusChip({required this.status, required this.priceDate, super.key});
const PriceStatusChip({
required this.status,
required this.priceDate,
super.key,
});
final String status;
final DateTime? priceDate;