import type { Area, Shape } from "../fields.types.ts"; import { ISU_FIGURE_RINK, ISU_LONG_TRACK, ISU_SHORT_TRACK, type SkatingFigures, type SkatingLeague } from "../leagues/skating.ts"; import type { SurfaceOptions } from "../types.ts"; import { LONG_TRACK_RACES, SHORT_TRACK_RACES } from "./events.ts"; import { type FigureRink } from "./figure.ts"; import { type RaceMarks } from "./long.ts"; import { type MBox, type MMark, type MRange } from "./parts.ts"; import { type ShortOval } from "./short.ts"; import { type LongOval } from "./track.ts"; import type { ShortTrackRace, SkatingDiscipline, SkatingFurniture, SkatingRace, SkatingStyle } from "./types.ts"; export type { MBox, MMark, MRange }; /** What a skating drawing is. */ export interface SkatingPlan { sport: "skating"; league: string; discipline: SkatingDiscipline; figures: SkatingFigures; /** The oval of the long track, or `undefined`. */ oval: LongOval | undefined; /** The short track's oval and rink, or `undefined`. */ short: ShortOval | undefined; /** The figure skating rink, or `undefined`. */ rink: FigureRink | undefined; /** The playing surface: the ice out to the padding (the long track), the rink (the others). The data frame's own box. */ box: MBox; /** Everything drawn: the box and what lies beyond it (the furniture of a figure skating rink). */ extent: MBox; areas: Area[]; shapes: Shape[]; /** The long track's races marked, with where each starts. */ races: RaceMarks[]; /** The short track's races marked. */ shortRaces: ShortTrackRace[]; /** The number of tracks of the short track. */ tracks: 5 | 7; furniture: SkatingFurniture[]; /** The width the ordinary line is painted at by the rules, and the width it is drawn at unless `exactLines` says otherwise. */ lineWidth: number; drawnLine: number; ranges: Readonly>; marks: MMark[]; /** The race a close-up of a start (`range: "start"`) shows. */ start: SkatingRace; } /** The league a set of options asks for: the long track (the sport's own), the short track or the figure skating rink. */ export declare function skatingLeague(o: Pick): SkatingLeague; /** The discipline of a set of options. */ export declare const disciplineOf: (o: Pick) => SkatingDiscipline; /** The races the options ask to be marked, for a discipline. @throws Error for a name that is not a race, RangeError for one the discipline does not have. */ export declare function racesOf(style: SkatingStyle | undefined, discipline: SkatingDiscipline): SkatingRace[]; /** The furniture the options ask for. @throws Error for a name that is not furniture. */ export declare function furnitureOf(style: SkatingStyle | undefined): SkatingFurniture[]; /** The skating plan the options ask for. */ export declare function skatingPlan(o: Pick): SkatingPlan; export { LONG_TRACK_RACES, SHORT_TRACK_RACES, ISU_FIGURE_RINK, ISU_LONG_TRACK, ISU_SHORT_TRACK };