import type { ReactNode } from 'react';
import type { Class } from 'type-fest';
type GeoJsonEditMode = unknown;
export interface EditableModesMapping {
    icon: ReactNode;
}
export type MeasurementSystem = 'metric' | 'imperial';
export type MeasurementUnitMetricDistance = 'm-km' | 'kilometer' | 'meter' | 'centimeter' | 'milimeter';
export type MeasurementUnitImperialDistance = 'ft-mi' | 'mile' | 'yard' | 'feet';
export type MeasurementUnit = MeasurementUnitMetricDistance | MeasurementUnitImperialDistance;
export type MeasurementMode = 'distance' | 'buffer' | 'area';
export interface MeasurementModeOption<M extends string = MeasurementMode, T = GeoJsonEditMode> {
    value: M;
    mode: Class<T>;
}
export type MeasurementModes<M extends string = MeasurementMode, T = GeoJsonEditMode> = Record<M, MeasurementModeOption<M, T>>;
export interface MeasurementUnitOption<U extends string = MeasurementUnit> {
    value: U;
    system?: MeasurementSystem;
}
export type MeasurementUnits<T extends string = keyof MeasurementModes, U extends string = MeasurementUnit> = Record<T, MeasurementUnitOption<U>[]>;
export type MeasurementOptionsMode<T extends string = MeasurementMode> = Record<T, string | undefined>;
export type MeasurementOptionsUnit<T extends string = MeasurementUnit> = Record<T, string | undefined>;
export type CustomMeasureMode<T> = InstanceType<Class<T>>;
export type MeasurementModesMapping<T extends string> = Record<T, EditableModesMapping>;
export interface MeasureUnitMapping {
    short: string;
}
export type MeasurementUnitsMapping<U extends string = MeasurementUnit> = Record<U, MeasureUnitMapping>;
export type LassoToolsMode = 'polygon' | 'rectangle' | 'circle' | 'lasso' | 'edit';
export interface LassoToolsModeOption<M extends string = LassoToolsMode, T = GeoJsonEditMode> {
    value: M;
    mode: Class<T>;
}
export type LassoToolsModes<M extends string = LassoToolsMode, T = GeoJsonEditMode> = Record<M, LassoToolsModeOption<M, T>>;
export type LassoToolOptionsMode<M extends string = LassoToolsMode> = Record<M, string | undefined>;
export type LassoToolsModesMapping<M extends string> = Record<M, EditableModesMapping & {
    disabled?: boolean;
}>;
export type CustomLassoToolsMode<T> = InstanceType<Class<T>>;
export {};
