import { URLSearchParamsWrapper } from './URLSearchParamsWrapper';
export type StateValue<T extends string> = T | (string & {});
export type URLSearchParamsProps = ConstructorParameters<typeof URLSearchParams>[number];
export type URLStateValues<TValue extends string> = {
    values: ReadonlyArray<TValue>;
    defaultValue: Readonly<TValue>;
};
export type URLStateHandlerProps<TValue extends string> = URLStateValues<TValue> & {
    name: string;
    get?(searchParams: URLSearchParamsWrapper): TValue;
    set?(searchParams: URLSearchParamsWrapper, value?: StateValue<TValue> | StateValue<TValue>[]): URLSearchParamsWrapper;
};
export type StaticBuildProps<TValue extends string> = Omit<URLStateHandlerProps<TValue>, "get" | "set">;
export type UseUrlStateProps<TValue extends string> = {
    type: "simple";
    params: Omit<URLStateHandlerProps<TValue>, "get" | "set">;
} | {
    type: "custom";
    params: CustomValidationProps<TValue>;
} | {
    type: "any";
    params: {
        name: string;
    };
};
export type MultiBuildProps<TKey extends string, TId extends string, TValue extends Readonly<string>> = {
    name: TKey;
    ids: {
        [Key in TId]: {
            type: "simple";
            params: URLStateValues<TValue>;
        } | {
            type: "custom";
            params: Omit<CustomValidationProps<TValue>, "name">;
        } | {
            type: "any";
        };
    };
};
export type CustomValidationProps<T extends string> = {
    name: string;
    getState?: (urlSearchParams: URLSearchParamsWrapper) => T;
    setState?(urlSearchParams: URLSearchParamsWrapper, value?: string): URLSearchParamsWrapper;
};
