//#region src/namespaces/media/common/types.d.ts
declare namespace MediaNs {
  type Rating = {
    value: string;
    scheme?: string;
  };
  type TitleOrDescription = {
    value: string;
    type?: string;
  };
  type Thumbnail = {
    url: string;
    height?: number;
    width?: number;
    time?: string;
  };
  type Category = {
    name: string;
    scheme?: string;
    label?: string;
  };
  type Hash = {
    value: string;
    algo?: string;
  };
  type Player = {
    url: string;
    height?: number;
    width?: number;
  };
  type Credit = {
    value: string;
    role?: string;
    scheme?: string;
  };
  type Copyright = {
    value: string;
    url?: string;
  };
  type Text = {
    value: string;
    type?: string;
    lang?: string;
    start?: string;
    end?: string;
  };
  type Restriction = {
    value: string;
    relationship: string;
    type?: string;
  };
  type Community = {
    starRating?: StarRating;
    statistics?: Statistics;
    tags?: Array<Tag>;
  };
  type StarRating = {
    average?: number;
    count?: number;
    min?: number;
    max?: number;
  };
  type Statistics = {
    views?: number;
    favorites?: number;
  };
  type Tag = {
    name: string;
    weight?: number;
  };
  type Embed = {
    url: string;
    width?: number;
    height?: number;
    params?: Array<Param>;
  };
  type Param = {
    name: string;
    value: string;
  };
  type Status = {
    state: string;
    reason?: string;
  };
  type Price = {
    type?: string;
    info?: string;
    price?: number;
    currency?: string;
  };
  type License = {
    name?: string;
    type?: string;
    href?: string;
  } & ({
    name: string;
  } | {
    href: string;
  });
  type SubTitle = {
    type?: string;
    lang?: string;
    href: string;
  };
  type PeerLink = {
    type?: string;
    href: string;
  };
  type Rights = {
    status?: string;
  };
  type Scene = {
    title?: string;
    description?: string;
    startTime?: string;
    endTime?: string;
  };
  type Location = {
    description?: string;
    start?: string;
    end?: string;
    lat?: number;
    lng?: number;
  };
  /** @internal Shared elements available across Content, Group, ItemOrFeed types. */
  type CommonElements = {
    ratings?: Array<Rating>;
    title?: TitleOrDescription;
    description?: TitleOrDescription;
    keywords?: Array<string>;
    thumbnails?: Array<Thumbnail>;
    categories?: Array<Category>;
    hashes?: Array<Hash>;
    player?: Player;
    credits?: Array<Credit>;
    copyright?: Copyright;
    texts?: Array<Text>;
    restrictions?: Array<Restriction>;
    community?: Community;
    comments?: Array<string>;
    embed?: Embed;
    responses?: Array<string>;
    backLinks?: Array<string>;
    status?: Status;
    prices?: Array<Price>;
    licenses?: Array<License>;
    subTitles?: Array<SubTitle>;
    peerLinks?: Array<PeerLink>;
    locations?: Array<Location>;
    rights?: Rights;
    scenes?: Array<Scene>;
  };
  type Content = {
    url?: string;
    fileSize?: number;
    type?: string;
    medium?: string;
    isDefault?: boolean;
    expression?: string;
    bitrate?: number;
    framerate?: number;
    samplingrate?: number;
    channels?: number;
    duration?: number;
    height?: number;
    width?: number;
    lang?: string;
  } & CommonElements;
  type Group = {
    contents?: Array<Content>;
  } & CommonElements;
  type ItemOrFeed = {
    groups?: Array<Group>;
    contents?: Array<Content>;
    /** @deprecated Use `groups` (array) instead. Multiple media:group elements are allowed per specification. */
    group?: Group;
  } & CommonElements;
}
//#endregion
export { MediaNs };