import { GeometryPolygonBase as Base, type GeometryPolygonSource as GeometryPolygonSourceBase, type GeometryPolygonTypes as GeometryPolygonTypesBase } from "@tai-kun/surrealdb/decodeonly-datatypes";
import { type Coord } from "../_internals/geometry";
import { type GeoJsonLineString, GeometryLine, type GeometryLineBase, type GeometryLineTypes } from "./geometry-line";
import type { GeometryPointBase, GeometryPointTypes } from "./geometry-point";
import { CBOR_TAG_GEOMETRY_POLYGON, type Encodable } from "./spec";
type PointBase = new (source: any) => GeometryPointBase<GeometryPointTypes<Coord>>;
type LineBase = new (source: any) => GeometryLineBase<GeometryLineTypes<PointBase>>;
export type GeometryPolygonTypes<TLine extends LineBase = LineBase> = GeometryPolygonTypesBase<TLine>;
export type GeometryPolygonSource<TTypes extends GeometryPolygonTypes = GeometryPolygonTypes> = GeometryPolygonSourceBase<TTypes>;
export type GeoJsonPolygon = {
    type: "Polygon";
    coordinates: [
        GeoJsonLineString["coordinates"],
        ...GeoJsonLineString["coordinates"][]
    ];
};
export declare class GeometryPolygonBase<TTypes extends GeometryPolygonTypes = GeometryPolygonTypes> extends Base<TTypes> implements Encodable {
    get coordinates(): [
        InstanceType<TTypes["Line"]>["coordinates"],
        ...InstanceType<TTypes["Line"]>["coordinates"][]
    ];
    toCBOR(): [tag: typeof CBOR_TAG_GEOMETRY_POLYGON, value: this["polygon"]];
    toJSON(): GeoJsonPolygon;
    toSurql(): string;
    toPlainObject(): {
        type: "Polygon";
        polygon: readonly [InstanceType<TTypes["Line"]>, ...InstanceType<TTypes["Line"]>[]];
    };
}
/**
 * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/api/data/geometry-polygon)
 */
export declare class GeometryPolygon extends GeometryPolygonBase<GeometryPolygonTypes<typeof GeometryLine>> {
    static readonly Line: typeof GeometryLine;
    constructor(source: GeometryPolygonSource<typeof GeometryPolygon>);
}
export {};
//# sourceMappingURL=geometry-polygon.d.ts.map