import * as React from 'react';
export type BlockPreset = {
    b?: string;
    m?: string;
    v?: string;
    css?: Record<string, string>;
};
type NormalizePrefix<S extends string> = S extends `${infer L}__${infer R}` ? `${L}-${R}` : S;
type RemovePrefix<T, P extends string> = T extends `${NormalizePrefix<P>}-${infer U}` ? U : never;
type PropsPrefix<P extends string, T> = {
    [Property in keyof T as `${P}-${string & Property}`]?: T[Property];
};
type BaseProps<T extends React.ElementType, N extends string> = PropsPrefix<NormalizePrefix<N>, {
    as?: T;
}>;
type PolymorphicComponentProp<T extends React.ElementType, N extends string, P = {}> = React.ComponentPropsWithoutRef<T> & React.PropsWithChildren<P & BaseProps<T, N>>;
type PolymorphicComponentPropWithRef<T extends React.ElementType, N extends string, P = {}> = PolymorphicComponentProp<T, N, P> & {
    ref?: React.ComponentPropsWithRef<T>['ref'];
};
type EvokitMedia = 'small' | 'medium' | 'large' | 'wide' | 'huge';
export type EvokitMediaSufix<T extends string | number, M extends EvokitMedia> = T | `${T}` | `${T}@${M}`;
export type EvokitWithoutMediaSufix<T extends string | number> = T | `${T}`;
export type EvokitProp<T extends string | number> = T | `${T}` | T[] | `${T}`[] | Partial<Record<`${T}`, boolean>>;
export interface CreateBlock<E extends React.ElementType, N extends string, P = {}> {
    <T extends React.ElementType = E>(props: PolymorphicComponentPropWithRef<T, N, P>): React.ReactNode;
    displayName?: string | undefined;
}
export type BlockModsConstraint<P, N extends string> = Array<RemovePrefix<keyof P, N> | [RemovePrefix<keyof P, N>, Array<RemovePrefix<keyof P, N> | RemovePrefix<keyof P, N>[]>]>;
export type BlockDefaultProps<E extends React.ElementType, N extends string, P = {}> = Partial<PolymorphicComponentProp<E, N, P>>;
export {};
