feat: Implement week grid layout for timetable display

- Added WeekGrid composable to visualize weekly timetable with lessons.
- Introduced LessonBlock for individual lesson representation.
- Created theme file for consistent color schemes across the app.
- Developed NextLessonWidget and TodayWidget for home screen integration.
- Implemented Upcoming data class to manage upcoming lessons.
- Added WidgetStyle for dynamic theming in widgets.
- Created SyncWorker for periodic timetable updates and widget refresh.
This commit is contained in:
2026-10-18 16:55:12 +03:00
parent d900e038b6
commit 3dc6cc4e9e
41 changed files with 208520 additions and 249602 deletions

View File

@@ -1,7 +1,7 @@
import test from "node:test";
import assert from "node:assert/strict";
import { readFileSync } from "node:fs";
import { parseDocx, parseWord } from "../server/parser.js";
import { groupsIn, parseDocx, parseWord } from "../server/parser.js";
import { decodeListing, fileMetadata } from "../server/source.js";
const fixture = (name) =>
readFileSync(new URL(`./fixtures/${name}.docx`, import.meta.url));
@@ -104,6 +104,26 @@ test("Дневные таблицы четырёх факультетов рас
);
}
});
test("Даты практики в заголовке группы не становятся группами", () => {
// Заголовки из каталога 2026–2027 (ГФ и ФКНЭ).
assert.deepEqual(
groupsIn("23-ДО\n(02.11-22.11-производственная практика)"),
["23-ДО"],
);
assert.deepEqual(
groupsIn("24-ПП\n(09.11 по 06.12-производственная практика)"),
["24-ПП"],
);
assert.deepEqual(
groupsIn("23-ТТиИ (16.11-29.11-учебная практика)"),
["23-ТТиИ"],
);
assert.deepEqual(groupsIn("25-ИЯ(РА) 23 ИНС-1 24ДОи"), [
"25-ИЯ(РА)",
"23-ИНС-1",
"24-ДОи",
]);
});
test("Сессии: отдельные колонки времени, аудитории и преподавателя", () => {
const s = parseDocx(fixture("fit"), { name: "26-ИТзс.docx" }),
l = s.lessons[0];