feat(app): график цены — периоды, режимы, бенчмарки и мои сделки

Переключатель периода (7д…все и свой диапазон), режимы «Цена ₽ / ₽ + НКД / %», наложение бенчмарков в процентах (у ценового индекса пометка «без дивидендов»), изменение за период, заливка, подписи min/max, курсор с подсказкой и точки покупок и продаж. Ось X по датам, подписи осей без наложений.
This commit is contained in:
Dmitry
2026-09-20 10:46:33 +03:00
parent 6a15371960
commit 617682351b
3 changed files with 988 additions and 66 deletions
+22
View File
@@ -42,6 +42,28 @@ String ruMonthYear(DateTime d) {
/// `'сен 2026'`, for compact chart/table labels.
String ruMonthYearShort(DateTime d) => '${_monthsShort[d.month - 1]} ${d.year}';
const _monthsAbbr = [
'янв.',
'февр.',
'мар.',
'апр.',
'мая',
'июн.',
'июл.',
'авг.',
'сент.',
'окт.',
'нояб.',
'дек.',
];
/// `'20 сент. 25'`, the range line above a chart.
String ruDayMonthYearShort(DateTime d) =>
'${d.day} ${_monthsAbbr[d.month - 1]} ${(d.year % 100).toString().padLeft(2, '0')}';
/// `'16 сен'`, for chart labels over a span of weeks where the month alone repeats.
String ruDayMonthShort(DateTime d) => '${d.day} ${_monthsShort[d.month - 1]}';
/// `'2026-09'`, the `month` query parameter format the API expects.
String monthKey(DateTime d) =>
'${d.year.toString().padLeft(4, '0')}-${d.month.toString().padLeft(2, '0')}';