import { Feature, Point, Polygon, LineString } from "geojson"; type JSON = string | number | boolean | null | JSONArray | JSONObject; export interface JSONObject { [member: string]: JSON; } type JSONArray = Array; type DefinedProperties = Record; export type GeoJSONStoreGeometries = Polygon | LineString | Point; export type BBoxPolygon = Feature; export type GeoJSONStoreFeatures = Feature; export type StoreChangeEvents = "delete" | "create" | "update" | "styling"; export type StoreChangeHandler = (ids: FeatureId[], change: StoreChangeEvents) => void; export type FeatureId = string | number; export type IdStrategy = { isValidId: (id: Id) => boolean; getId: () => Id; }; export type GeoJSONStoreConfig = { idStrategy?: IdStrategy; tracked?: boolean; }; export declare const defaultIdStrategy: { getId: () => FeatureId; isValidId: (id: FeatureId) => boolean; }; export declare class GeoJSONStore { constructor(config?: GeoJSONStoreConfig); idStrategy: IdStrategy; private tracked; private spatialIndex; private store; private _onChange; private clone; getId(): FeatureId; has(id: FeatureId): boolean; load(data: GeoJSONStoreFeatures[], featureValidation?: (feature: unknown, tracked?: boolean) => boolean): void; search(bbox: BBoxPolygon, filter?: (feature: GeoJSONStoreFeatures) => boolean): GeoJSONStoreFeatures[]; registerOnChange(onChange: StoreChangeHandler): void; getGeometryCopy(id: FeatureId): T; getPropertiesCopy(id: FeatureId): DefinedProperties; updateProperty(propertiesToUpdate: { id: FeatureId; property: string; value: JSON; }[]): void; updateGeometry(geometriesToUpdate: { id: FeatureId; geometry: GeoJSONStoreGeometries; }[]): void; create(features: { geometry: GeoJSONStoreGeometries; properties?: JSONObject; }[]): Id[]; delete(ids: FeatureId[]): void; copyAll(): GeoJSONStoreFeatures[]; clear(): void; size(): number; } export {};