import type { Cube } from "./hex-system.js";
import type { BareQRSPoint, QRSPoint } from "./qrs.js";
/**
 * Cube points store the `s` value explicitly, instead of calculating it.
 */
export interface BareHexCubePoint extends BareQRSPoint {
    /**
     * Bottom right (negative) to top left (positive).
     */
    s: number;
}
export interface HexCubePoint extends QRSPoint<Cube>, BareHexCubePoint {
}
export declare const CUBE_FLAT_SE: Readonly<{
    readonly q: 1;
    readonly r: 0;
    readonly s: -1;
    readonly system: "cube";
}>;
export declare const CUBE_FLAT_N: Readonly<{
    readonly q: 0;
    readonly r: -1;
    readonly s: 1;
    readonly system: "cube";
}>;
export declare const CUBE_FLAT_NW: Readonly<{
    readonly q: -1;
    readonly r: 0;
    readonly s: 1;
    readonly system: "cube";
}>;
export declare const CUBE_FLAT_S: Readonly<{
    readonly q: 0;
    readonly r: 1;
    readonly s: -1;
    readonly system: "cube";
}>;
export declare const CUBE_NE: Readonly<{
    readonly q: 1;
    readonly r: -1;
    readonly s: 0;
    readonly system: "cube";
}>;
export declare const CUBE_SW: Readonly<{
    readonly q: -1;
    readonly r: 1;
    readonly s: 0;
    readonly system: "cube";
}>;
export declare const CUBE_POINTY_E: Readonly<{
    readonly q: 1;
    readonly r: 0;
    readonly s: -1;
    readonly system: "cube";
}>;
export declare const CUBE_POINTY_NW: Readonly<{
    readonly q: 0;
    readonly r: -1;
    readonly s: 1;
    readonly system: "cube";
}>;
export declare const CUBE_POINTY_W: Readonly<{
    readonly q: -1;
    readonly r: 0;
    readonly s: 1;
    readonly system: "cube";
}>;
export declare const CUBE_POINTY_SE: Readonly<{
    readonly q: 0;
    readonly r: 1;
    readonly s: -1;
    readonly system: "cube";
}>;
export type HexCubeDirection = typeof CUBE_POINTY_E | typeof CUBE_NE | typeof CUBE_POINTY_NW | typeof CUBE_POINTY_W | typeof CUBE_SW | typeof CUBE_POINTY_SE;
export declare const HEX_CUBE_DIRECTIONS: Readonly<HexCubeDirection[]>;
export declare const stringifyCube: ({ q, r, s }: BareHexCubePoint) => string;
/**
 * Build a branded Cube point from `q` and `r` coordinates.
 */
export declare const cubeFromQR: (q: number, r: number) => HexCubePoint;
export type CubeTuple = [q: number, r: number, s: number];
export declare const CUBE_DIAG_FLAT_E: Readonly<{
    readonly q: 2;
    readonly r: -1;
    readonly s: 1;
    readonly system: "cube";
}>;
export declare const CUBE_DIAG_FLAT_SW: Readonly<{
    readonly q: -1;
    readonly r: 2;
    readonly s: -1;
    readonly system: "cube";
}>;
export declare const CUBE_DIAG_FLAT_W: Readonly<{
    readonly q: -2;
    readonly r: 1;
    readonly s: 1;
    readonly system: "cube";
}>;
export declare const CUBE_DIAG_FLAT_NE: Readonly<{
    readonly q: 1;
    readonly r: -2;
    readonly s: 1;
    readonly system: "cube";
}>;
export declare const CUBE_DIAG_SE: Readonly<{
    readonly q: 1;
    readonly r: 1;
    readonly s: -2;
    readonly system: "cube";
}>;
export declare const CUBE_DIAG_NW: Readonly<{
    readonly q: -1;
    readonly r: -1;
    readonly s: 2;
    readonly system: "cube";
}>;
export declare const CUBE_DIAG_POINTY_N: Readonly<{
    readonly q: 1;
    readonly r: -2;
    readonly s: 1;
    readonly system: "cube";
}>;
export declare const CUBE_DIAG_POINTY_NE: Readonly<{
    readonly q: 2;
    readonly r: -1;
    readonly s: 1;
    readonly system: "cube";
}>;
export declare const CUBE_DIAG_POINTY_S: Readonly<{
    readonly q: -1;
    readonly r: 2;
    readonly s: -1;
    readonly system: "cube";
}>;
export declare const CUBE_DIAG_POINTY_SW: Readonly<{
    readonly q: -2;
    readonly r: 1;
    readonly s: 1;
    readonly system: "cube";
}>;
export type CubeDiagDirection = typeof CUBE_DIAG_SE | typeof CUBE_DIAG_NW | typeof CUBE_DIAG_POINTY_N | typeof CUBE_DIAG_POINTY_NE | typeof CUBE_DIAG_POINTY_S | typeof CUBE_DIAG_POINTY_SW;
export declare const CUBE_ORIGIN: Readonly<{
    readonly q: 0;
    readonly r: 0;
    readonly s: 0;
    readonly system: "cube";
}>;
export declare const CUBE_EPSILON: Readonly<{
    q: number;
    r: number;
    s: number;
    system: "cube";
}>;
//# sourceMappingURL=cube.d.ts.map