/**
 * User-facing TypeScript types for the IIIF Presentation 3.0 API.
 *
 * AUTO-GENERATED — do not edit by hand.
 * Regenerate with:  npx ts-node scripts/generate-iiif-types.ts
 *
 * These types reflect real IIIF JSON structure and are intended for
 * consumers of the maniiifest library who want type annotations in
 * their own code without needing to understand the internal ATD
 * discriminated-union representation.
 */
export declare type Specification = Manifest | Collection;
export interface Collection {
    "@context"?: Context;
    id: Id;
    type: Type;
    label: Label;
    metadata?: Metadata[];
    summary?: Summary;
    requiredStatement?: RequiredStatement;
    thumbnail?: Thumbnail[];
    rendering?: Rendering[];
    rights?: Rights;
    seeAlso?: SeeAlso[];
    homepage?: Homepage[];
    provider?: Provider[];
    navDate?: NavDate;
    behavior?: Behavior[];
    partOf?: PartOf[];
    service?: Service;
    services?: Service;
    placeholderCanvas?: PlaceholderCanvas;
    accompanyingCanvas?: AccompanyingCanvas;
    navPlace?: NavPlace;
    items?: Specification[];
}
export interface Manifest {
    "@context"?: Context;
    id: Id;
    type: Type;
    label: Label;
    metadata?: Metadata[];
    service?: Service;
    services?: Service;
    requiredStatement?: RequiredStatement;
    summary?: Summary;
    thumbnail?: Thumbnail[];
    rendering?: Rendering[];
    viewingDirection?: ViewingDirection;
    behavior?: Behavior[];
    navDate?: NavDate;
    navPlace?: NavPlace;
    rights?: Rights;
    seeAlso?: SeeAlso[];
    homepage?: Homepage[];
    provider?: Provider[];
    partOf?: PartOf[];
    start?: Start;
    items?: Canvas[];
    structures?: Range[];
    annotations?: AnnotationPage[];
}
export declare type Context = string | string[];
export interface Class {
    id: Id;
    type: Type;
    label?: Label;
}
export interface CanvasCore {
    id: Id;
    type: Type;
    label?: Label;
    height?: Height;
    width?: Width;
    duration?: Duration;
    metadata?: Metadata[];
    summary?: Summary;
    requiredStatement?: RequiredStatement;
    rendering?: Rendering[];
    rights?: Rights;
    navDate?: NavDate;
    navPlace?: NavPlace;
    provider?: Provider[];
    seeAlso?: SeeAlso[];
    service?: Service;
    thumbnail?: Thumbnail[];
    homepage?: Homepage[];
    behavior?: Behavior[];
    partOf?: PartOf[];
    items?: AnnotationPage[];
    annotations?: AnnotationPage[];
}
export interface Canvas {
    id: Id;
    type: Type;
    label?: Label;
    height?: Height;
    width?: Width;
    duration?: Duration;
    metadata?: Metadata[];
    summary?: Summary;
    requiredStatement?: RequiredStatement;
    rendering?: Rendering[];
    rights?: Rights;
    navDate?: NavDate;
    navPlace?: NavPlace;
    provider?: Provider[];
    seeAlso?: SeeAlso[];
    service?: Service;
    thumbnail?: Thumbnail[];
    homepage?: Homepage[];
    behavior?: Behavior[];
    partOf?: PartOf[];
    items?: AnnotationPage[];
    annotations?: AnnotationPage[];
    placeholderCanvas?: PlaceholderCanvas;
    accompanyingCanvas?: AccompanyingCanvas;
}
export interface PlaceholderCanvas {
    id: Id;
    type: Type;
    label?: Label;
    height?: Height;
    width?: Width;
    duration?: Duration;
    metadata?: Metadata[];
    summary?: Summary;
    requiredStatement?: RequiredStatement;
    rendering?: Rendering[];
    rights?: Rights;
    navDate?: NavDate;
    navPlace?: NavPlace;
    provider?: Provider[];
    seeAlso?: SeeAlso[];
    service?: Service;
    thumbnail?: Thumbnail[];
    homepage?: Homepage[];
    behavior?: Behavior[];
    partOf?: PartOf[];
    items?: AnnotationPage[];
    annotations?: AnnotationPage[];
}
export interface AccompanyingCanvas {
    id: Id;
    type: Type;
    label?: Label;
    height?: Height;
    width?: Width;
    duration?: Duration;
    metadata?: Metadata[];
    summary?: Summary;
    requiredStatement?: RequiredStatement;
    rendering?: Rendering[];
    rights?: Rights;
    navDate?: NavDate;
    navPlace?: NavPlace;
    provider?: Provider[];
    seeAlso?: SeeAlso[];
    service?: Service;
    thumbnail?: Thumbnail[];
    homepage?: Homepage[];
    behavior?: Behavior[];
    partOf?: PartOf[];
    items?: AnnotationPage[];
    annotations?: AnnotationPage[];
}
export interface NavPlace {
    id?: Id;
    type: Type;
    features?: Feature[];
}
export interface FeatureCollection {
    id?: Id;
    type: Type;
    features?: Feature[];
    transformation?: Transformation;
}
export interface Transformation {
    type?: Type;
    options?: Options;
}
export interface Options {
    order?: Order;
}
export declare type Order = number;
export interface Feature {
    id?: Id;
    type?: Type;
    properties?: Properties;
    geometry?: Geometry;
}
export interface Properties {
    label?: Label;
}
export declare type Geometries = GeometryPoint | GeometryMultiPoint | GeometryLineString | GeometryMultiLineString | GeometryPolygon | GeometryMultiPolygon;
export declare type Geometry = GeometryPoint | GeometryMultiPoint | GeometryLineString | GeometryMultiLineString | GeometryPolygon | GeometryMultiPolygon | GeometryCollection;
export interface GeometryPoint {
    type?: Type;
    coordinates?: PointCoordinates[];
}
export interface GeometryMultiPoint {
    type?: Type;
    coordinates?: MultiPointCoordinates[];
}
export interface GeometryLineString {
    type?: Type;
    coordinates?: LinestringCoordinates[];
}
export interface GeometryMultiLineString {
    type?: Type;
    coordinates?: MultiLinestringCoordinates[];
}
export interface GeometryPolygon {
    type?: Type;
    coordinates?: Polygon[];
}
export interface GeometryMultiPolygon {
    type?: Type;
    coordinates?: MultiPolygon[];
}
export interface GeometryCollection {
    type?: Type;
    geometries: Geometries[];
}
export declare type PointCoordinates = number;
export declare type MultiPointCoordinates = [number, number];
export declare type LinestringCoordinates = number[];
export declare type MultiLinestringCoordinates = number[][];
export declare type Polygon = [number, number][];
export declare type MultiPolygon = [number, number][][];
export interface AnnotationPage {
    "@context"?: Context;
    id?: Id;
    type: Type;
    label?: Label;
    partOf?: PartOf;
    next?: Next;
    startIndex?: StartIndex;
    rendering?: Rendering[];
    service?: Service;
    thumbnail?: Thumbnail[];
    items?: Annotation[];
}
export interface Annotation {
    "@context"?: Context;
    id: Id;
    type: Type;
    service?: Service;
    thumbnail?: Thumbnail[];
    rendering?: Rendering[];
    motivation?: Motivation;
    created?: Created;
    creator?: Creator;
    generator?: Generator;
    modified?: Modified;
    body?: Body;
    target?: Target;
}
export declare type Creator = CreatorItem | CreatorItem[];
export declare type CreatorItem = string | CreatorItemObject;
export interface CreatorItemObject {
    id?: Id;
    type?: Type;
    name?: Name;
    nickname?: Nickname;
    email?: EmailStrings;
    email_sha1?: EmailSha1Strings;
    homepage?: HomepageStrings;
}
export declare type Generator = GeneratorItem | GeneratorItem[];
export declare type GeneratorItem = string | GeneratorItemObject;
export interface GeneratorItemObject {
    id?: Id;
    type?: Type;
    name?: Name;
    nickname?: Nickname;
    email?: EmailStrings;
    email_sha1?: EmailSha1Strings;
    homepage?: HomepageStrings;
}
export interface Agent {
    id?: Id;
    type?: Type;
    name?: Name;
    nickname?: Nickname;
    email?: EmailStrings;
    email_sha1?: EmailSha1Strings;
    homepage?: HomepageStrings;
}
export declare type EmailStrings = Strings;
export declare type EmailSha1Strings = Strings;
export declare type HomepageStrings = Strings;
export declare type Body = AnnotationBody | AnnotationBody[];
export declare type AnnotationBodyItems = string | AnnotationBodyResource | AnnotationBodySpecificResource | AnnotationBodyTextualBody | AnnotationBodyFeature | AnnotationBodyFeatureCollection | AnnotationBodyUntyped;
export declare type AnnotationBody = string | AnnotationBodyResource | AnnotationBodySpecificResource | AnnotationBodyTextualBody | AnnotationBodyFeature | AnnotationBodyFeatureCollection | AnnotationBodyUntyped | AnnotationBodyChoice;
export interface AnnotationBodyUntyped {
    id?: Id;
    label?: Label;
    format?: Format;
    profile?: Profile;
    language?: Language;
    value?: Value;
}
export interface AnnotationBodyResource {
    id: Id;
    type: Type;
    label?: Label;
    format?: Format;
    profile?: Profile;
    width?: Width;
    height?: Height;
    duration?: Duration;
    language?: Language;
    rendering?: Rendering[];
    thumbnail?: Thumbnail[];
    service?: Service;
    annotations?: AnnotationPage[];
}
export interface AnnotationBodySpecificResource {
    id?: Id;
    type?: Type;
    format?: Format;
    accessibility?: Accessibility;
    source: Source;
    selector?: Selector;
    language?: Language;
}
export interface AnnotationBodyTextualBody {
    type: Type;
    language?: Language;
    format?: Format;
    value?: Value;
    creator?: Creator;
    generator?: Generator;
}
export interface AnnotationBodyFeature {
    id?: Id;
    type?: Type;
    properties?: Properties;
    geometry?: Geometry;
}
export interface AnnotationBodyFeatureCollection {
    id?: Id;
    type: Type;
    features?: Feature[];
    transformation?: Transformation;
}
export interface AnnotationBodyChoice {
    type?: Type;
    items: AnnotationBodyItems[];
}
export declare type Target = AnnotationTarget | AnnotationTarget[];
export declare type AnnotationTarget = string | AnnotationTargetSelectorTarget | SpecificResource | AnnotationTargetCanvasRef;
export interface AnnotationTargetSelectorTarget {
    source: Id;
    scope: Id;
    language?: Language;
}
export interface AnnotationTargetCanvasRef {
    id: Id;
    partOf?: PartOf;
    language?: Language;
}
export interface SpecificResource {
    id?: Id;
    type?: Type;
    format?: Format;
    accessibility?: Accessibility;
    source: Source;
    selector?: Selector;
    language?: Language;
}
export declare type Source = Id | Class;
export declare type Selector = ResourceSelector | ResourceSelector[];
export declare type ResourceSelector = string | ResourceSelectorPoint | ResourceSelectorFragment | ResourceSelectorSvg | ResourceSelectorImageApi | ResourceSelectorTextQuote | ResourceSelectorXpath;
export interface ResourceSelectorPoint {
    type: Type;
    t?: Duration;
    x?: Dimension;
    y?: Dimension;
}
export interface ResourceSelectorFragment {
    type: Type;
    conformsTo?: ConformsTo;
    value: Value;
}
export declare type ConformsTo = string;
export interface ResourceSelectorSvg {
    type: Type;
    value: Value;
}
export interface ResourceSelectorImageApi {
    type: Type;
    region?: Region;
    size?: Size;
    rotation?: Rotation;
    quality?: Quality;
    format?: Format;
}
export interface ResourceSelectorTextQuote {
    type: Type;
    prefix?: Prefix;
    exact: Exact;
    suffix?: Suffix;
}
export interface ResourceSelectorXpath {
    type: Type;
    value: Value;
}
export interface Metadata {
    label: Record<string, string[]>;
    value: Record<string, string[]>;
}
export interface RequiredStatement {
    label: Record<string, string[]>;
    value: Record<string, string[]>;
}
export declare type Thumbnail = Resource;
export declare type Logo = Resource;
export interface Resource {
    id: Id;
    type: Type;
    label?: Label;
    format?: Format;
    profile?: Profile;
    width?: Width;
    height?: Height;
    duration?: Duration;
    language?: Language;
    rendering?: Rendering[];
    thumbnail?: Thumbnail[];
    service?: Service;
    annotations?: AnnotationPage[];
}
export declare type Service = ServiceItem | ServiceItem[];
export declare type ServiceItem = ServiceItemModern | ServiceItemLegacy;
export interface ServiceItemModern {
    id: Id;
    type: Type;
    label?: Label;
    profile?: Profile;
    service?: Service;
}
export interface ServiceItemLegacy {
    "@id": Id;
    "@type": Type;
    label?: Label;
    profile?: Profile;
    service?: Service;
}
export declare type Label = string | Record<string, string[]>;
export declare type Summary = Record<string, string[]>;
export declare type LngString = Record<string, string[]>;
export declare type Language = string | string[];
export interface External {
    id: Id;
    type: Type;
    label?: Label;
    format?: Format;
    profile?: Profile;
}
export declare type SeeAlso = External;
export declare type Rendering = External;
export interface Homepage {
    id: Id;
    type: Type;
    label?: Label;
    format?: Format;
    language?: Language[];
}
export interface Provider {
    id: Id;
    type: Type;
    label?: Label;
    homepage?: Homepage[];
    logo?: Logo[];
    seeAlso?: SeeAlso[];
}
export declare type PartOf = string | PartOfObject;
export interface PartOfObject {
    id: Id;
    type?: Type;
    label?: Label;
    total?: Total;
}
export declare type Start = Class;
export declare type Motivation = string | string[];
export interface AnnotationCollection {
    "@context"?: Context;
    id: Id;
    type: Type;
    label?: Label;
    rendering?: Rendering[];
    partOf?: PartOf;
    total?: Total;
    first?: First;
    last?: Last;
    service?: Service;
    thumbnail?: Thumbnail[];
    items?: Annotation[];
}
export declare type First = string | FirstObject;
export interface FirstObject {
    id: Id;
    type: Type;
    label?: Label;
    startIndex?: StartIndex;
    thumbnail?: Thumbnail[];
    next?: Next;
    items?: Annotation[];
}
export interface Range {
    id: Id;
    type: Type;
    label?: Label;
    rendering?: Rendering[];
    supplementary?: AnnotationCollection;
    service?: Service;
    placeholderCanvas?: PlaceholderCanvas;
    accompanyingCanvas?: AccompanyingCanvas;
    annotations?: AnnotationPage[];
    thumbnail?: Thumbnail[];
    navPlace?: NavPlace;
    behavior?: Behavior[];
    items: RangeItems[];
}
export declare type RangeItems = SpecificResource | Canvas | Range;
export declare type Strings = string | string[];
export declare type Id = string;
export declare type Type = string;
export declare type Height = number;
export declare type Width = number;
export declare type Duration = number;
export declare type Created = string;
export declare type Modified = string;
export declare type Format = string;
export declare type Profile = string;
export declare type ViewingDirection = string;
export declare type Behavior = string;
export declare type NavDate = string;
export declare type Rights = string;
export declare type Value = string;
export declare type Accessibility = string;
export declare type Dimension = number;
export declare type Pattern = string;
export declare type Default = string;
export declare type Region = string;
export declare type Size = string;
export declare type Quality = string;
export declare type Rotation = string;
export declare type Total = number;
export declare type Last = string;
export declare type Next = string;
export declare type StartIndex = number;
export declare type Name = string;
export declare type Nickname = string;
export declare type Prefix = string;
export declare type Exact = string;
export declare type Suffix = string;
