import { RangeBase as Base } from "@tai-kun/surrealdb/encodable-datatypes";
import BoundExcluded from "./bound-excluded";
import BoundIncluded from "./bound-included";
import type { Standard } from "./spec";
type BoundIncludedBase = new (source: any) => BoundIncluded;
type BoundExcludedBase = new (source: any) => BoundExcluded;
type Bound<TTypes extends RangeTypes> = InstanceType<TTypes["BoundIncluded"]> | InstanceType<TTypes["BoundExcluded"]>;
export type RangeTypes<TBoundIncluded extends BoundIncludedBase = BoundIncludedBase, TBoundExcluded extends BoundExcludedBase = BoundExcludedBase> = {
    readonly BoundIncluded: TBoundIncluded;
    readonly BoundExcluded: TBoundExcluded;
};
export type RangeSource<TTypes extends RangeTypes = RangeTypes> = readonly [
    begin: Bound<TTypes> | null,
    end: Bound<TTypes> | null
];
/**
 * @experimental
 */
export declare class RangeBase<TTypes extends RangeTypes = RangeTypes> extends Base<TTypes> implements Standard {
    begin: Bound<TTypes> | null;
    end: Bound<TTypes> | null;
    clone(): this;
}
/**
 * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/api/data/range)
 * @experimental
 */
export declare class Range extends RangeBase<RangeTypes<typeof BoundIncluded, typeof BoundExcluded>> {
    static readonly BoundIncluded: typeof BoundIncluded;
    static readonly BoundExcluded: typeof BoundExcluded;
    constructor(source: RangeSource<typeof Range>);
}
export {};
//# sourceMappingURL=range.d.ts.map