/**
 * Event-domain adapter over @riverbankcms/calendar.
 *
 * Wraps the generic timetable model with PublicEvent-shaped accessors and
 * domain-side cell content (timeLabel, teacherLine, capacityLabel, isFull,
 * categoryColor with theme fallback). Renderers (WeekTimetableView,
 * EventCalendar.server) consume this shape.
 */
import { type WeekStart } from '../../../../../../../calendar/src/index';
import type { PublicEvent } from '../../../../blocks/events/shared/types';
export type TimetableEventCell = {
    event: PublicEvent;
    startsAtMinutes: number;
    endsAtMinutes: number;
    topPercent: number;
    heightPercent: number;
    laneIndex: number;
    laneCount: number;
    /** Border colour for the cell. Defaults to a theme CSS-var when no category colour. */
    categoryColor: string;
    timeLabel: string;
    teacherLine: string | null;
    capacityLabel: string | null;
    isFull: boolean;
};
export type TimetableDay = {
    date: Date;
    dateKey: string;
    label: string;
    shortLabel: string;
    isToday: boolean;
    events: TimetableEventCell[];
};
export type TimetableModel = {
    days: TimetableDay[];
    hourTicks: number[];
    startHour: number;
    endHour: number;
    rangeMinutes: number;
    hasEvents: boolean;
};
type BuildTimetableModelInput = {
    events: readonly PublicEvent[];
    viewDate: Date;
    startOfWeek: WeekStart;
};
export declare function buildTimetableModel(input: BuildTimetableModelInput): TimetableModel;
export {};
