import "./timetable.css"; import type * as React from "react"; import { type ReactNode } from "react"; import { useRender } from "@base-ui/react/use-render"; import { type StyleProps } from "./style_props"; export interface TimetableLabels { time: string; /** What is scheduled — a vehicle, a person, a room. */ subject: string; status: string; } /** A fixed position on the repeating axis — a weekday, an hour band. */ export interface TimetableSlot { value: T; /** One or two characters, shown once in the header. */ label: string; name: string; } export interface TimetableRow { id: string; /** Text, never an editor; the row is edited in its `detail`. */ time: string; active: T[]; /** A node, so an identity mark rides it. */ subject: ReactNode; /** A state worth a word ("withdrawn"); the column exists only when some row has one. */ status?: ReactNode; disabled?: boolean; /** The row's `ActionMenu`, in the trailing gutter. */ trailing?: ReactNode; /** Where time and subject are edited. */ detail?: ReactNode; expanded?: boolean; onPress?: () => void; accessibilityLabel?: string; } export interface TimetableProps extends StyleProps { slots: TimetableSlot[]; /** Tinted down the grid, its header `aria-current`. */ current?: T; rows: TimetableRow[]; onToggle: (rowId: string, next: T[]) => void; /** See `ToggleStrip`. */ minOne?: boolean; labels?: Partial; testID?: string; ref?: React.Ref; render?: useRender.RenderProp; } /** Slots down the side, a fixed repeating axis across, a mark where a slot is on (a departure board, a * roster, opening hours). Not `CalendarView`: no dates, durations or paging. The axis is named once over * bare marks. Time and subject are text, since always-open editors make a form (composition.md § * Master-detail); only the pattern edits in place, a mark being its own editor. */ export declare function Timetable(props: TimetableProps): React.ReactElement>;