interface LessonLike { day: number; date: string | null; start: string; end: string | null; subject: string; teacher: string; room: string; place?: string; type: string; condition: string; variant: "all" | "upper" | "lower"; groups: string[]; subgroups: { group: string; label: string }[]; } export interface FieldChange { field: string; label: string; from: string | number; to: string | number; } export interface ScheduleDiff { added: L[]; removed: L[]; changed: { before: L; after: L; fields: FieldChange[] }[]; } export interface PersonalPrefs { subgroup?: string | null; hidden?: string[]; } export function lessonKey(lesson: LessonLike, group: string): string; export function diffSchedules( before: { lessons: L[] } | null | undefined, after: { lessons: L[] } | null | undefined, group: string, ): ScheduleDiff; export function changeCount(diff: ScheduleDiff | null | undefined): number; export function personalFilter( lesson: LessonLike, group: string, prefs: PersonalPrefs | null | undefined, ): "shown" | "hidden" | "other-subgroup"; export function subgroupsOf( schedule: { lessons: LessonLike[] } | null | undefined, group: string, ): string[];