export interface IBuilderOptions {
    format?: IBuilderFormat[];
    instruments?: IBuilderInstrument[];
    meta?: IBuilderMeta;
    properties: IBuilderProperties;
    verses: IBuilderVerse[];
}
export interface IBuilderMeta {
    chordNotation?: string;
    createdIn?: string;
    modifiedIn?: string;
    lang?: string;
}
export interface IBuilderProperties {
    [key: string]: any;
    authors?: string | IBuilderAuthor[];
    ccliNo?: string | number;
    comments?: string[];
    copyright?: string | number;
    key?: string;
    keywords?: string;
    publisher?: string;
    released?: string | number;
    songBooks?: IBuilderSongBook[];
    tempo?: string | number;
    themes?: IBuilderTheme[];
    timeSignature?: string;
    titles: IBuilderTitle[] | string;
    transposition?: string | number;
    variant?: string;
    verseOrder?: string;
    version?: string | number;
}
export interface IBuilderAuthor {
    lang?: string;
    type?: string;
    value: string;
}
export interface IBuilderTitle {
    lang?: string;
    original?: boolean;
    transliteration?: string;
    value: string;
}
export interface IBuilderTheme {
    lang?: string;
    value: string;
}
export interface IBuilderSongBook {
    entry?: string | number;
    name: string;
}
export interface IBuilderFormat {
    application: string;
    tags: IBuilderFormatTag[];
}
export interface IBuilderFormatTag {
    close: string;
    name: string;
    open: string;
}
interface IBuilderChordBase {
    bass?: string;
    root?: string;
    structure?: string;
    type: 'chord';
    upbeat?: boolean;
}
export interface IBuilderVerse {
    optionalBreak?: boolean;
    lang?: string;
    lines: string[] | IBuilderVerseLine[];
    name: string;
    transliteration?: string;
}
export interface IBuilderVerseLine {
    content: IBuilderVerseLineContent[];
    part?: string;
    optionalBreak?: boolean;
    repeat?: number;
}
export interface IBuilderVerseChord extends IBuilderChordBase {
    value?: string;
}
export type IBuilderVerseLineContent = IBuilderVerseLineContentStandard | IBuilderVerseLineContentTag | IBuilderVerseChord;
export interface IBuilderVerseLineContentStandard {
    type: 'text' | 'comment';
    value: string;
}
export interface IBuilderVerseLineContentTag {
    name: string;
    type: 'tag';
    value: string;
}
export interface IBuilderInstrument {
    lines: IBuilderInstrumentLine[];
    name: string;
}
export interface IBuilderInstrumentLine {
    content: IBuilderInstrumentLineContent[];
    part?: string;
    repeat?: number;
}
export type IBuilderInstrumentChord = IBuilderChordBase;
export interface IBuilderInstrumentLineContentBeat {
    chords: IBuilderInstrumentChord[];
    type: 'beat';
}
export type IBuilderInstrumentLineContent = IBuilderInstrumentLineContentBeat | IBuilderInstrumentChord;
export {};
