export interface Position {
    readonly x: number;
    readonly y: number;
}
export interface Edge {
    readonly x1: number;
    readonly y1: number;
    readonly x2: number;
    readonly y2: number;
}
/**
 * Major rules are frequently referenced in grids to provide additional UI.
 */
export declare enum MajorRule {
    MusicGrid = "music",
    CompletePattern = "complete_pattern",
    Underclued = "underclued",
    WrapAround = "wrap_around"
}
/**
 * General puzzle types for categorization. One puzzle can have multiple types.
 */
export declare enum PuzzleType {
    Logic = "logic",
    Underclued = "underclued",
    Pattern = "pattern",
    Music = "music"
}
export declare enum State {
    /**
     * Describes the violation of a rule.
     */
    Error = "error",
    /**
     * Describes that a rule is satisfied and complete in the current grid.
     */
    Satisfied = "satisfied",
    /**
     * Describes that a rule is not violated, but is not yet complete in the current grid.
     */
    Incomplete = "incomplete",
    /**
     * Describes that a rule is violated but ignored due to the effect of another rule.
     */
    Ignored = "ignored"
}
export declare namespace State {
    function isSatisfied(state: State): boolean;
}
export type RuleState = {
    readonly state: State.Error;
    readonly positions: readonly Position[];
} | {
    readonly state: State.Satisfied;
} | {
    readonly state: State.Incomplete;
} | {
    readonly state: State.Ignored;
};
export interface GridState {
    final: State;
    rules: readonly RuleState[];
    symbols: ReadonlyMap<string, State[]>;
}
export declare enum Color {
    Dark = "dark",
    Light = "light",
    Gray = "gray"
}
export declare enum Comparison {
    Equal = "eq",
    AtLeast = "ge",
    AtMost = "le"
}
export declare const COMPARISONS: readonly Comparison[];
export declare enum Wrapping {
    None = "none",
    Wrap = "wrap",
    WrapReverse = "wrap-reverse",
    ReflectReverse = "reflect-reverse"
}
export declare const WRAPPINGS: readonly Wrapping[];
export declare enum Direction {
    Up = "up",
    Down = "down",
    Left = "left",
    Right = "right"
}
export declare const DIRECTIONS: readonly Direction[];
export type DirectionMap<T> = Record<Direction, T>;
export type DirectionToggle = Readonly<DirectionMap<boolean>>;
export declare function directionToggle(...directions: readonly Direction[]): {
    up: boolean;
    down: boolean;
    left: boolean;
    right: boolean;
};
export declare enum Orientation {
    Up = "up",
    UpRight = "up-right",
    Right = "right",
    DownRight = "down-right",
    Down = "down",
    DownLeft = "down-left",
    Left = "left",
    UpLeft = "up-left"
}
export declare const ORIENTATIONS: readonly Orientation[];
export type OrientationMap<T> = Record<Orientation, T>;
export type OrientationToggle = Readonly<OrientationMap<boolean>>;
export declare function orientationToggle(...orientations: readonly Orientation[]): {
    up: boolean;
    'up-right': boolean;
    right: boolean;
    'down-right': boolean;
    down: boolean;
    'down-left': boolean;
    left: boolean;
    'up-left': boolean;
};
export declare enum Mode {
    Create = "create",
    Solve = "solve",
    Perfection = "perfection"
}
export declare enum Instrument {
    Piano = "piano",
    Drum = "drum",
    Violin = "violin",
    Xylophone = "xylophone",
    GuitarAcoustic = "guitar-acoustic",
    GuitarElectric = "guitar-electric",
    Flute = "flute",
    Trumpet = "trumpet"
}
export declare const INSTRUMENTS: readonly Instrument[];
export declare const DRUM_SAMPLES: readonly ["snare", "kick", "hihat", "hihat-open", "crash", "tom", "rim"];
export declare function isDrumSample(note: string): boolean;
