import { BlockNoteEditor, createStore, Extension, ExtensionFactory } from "@blocknote/core";
type Store<T> = ReturnType<typeof createStore<T>>;
/**
 * Use an extension instance
 */
export declare function useExtension<const T extends ExtensionFactory | Extension | string>(plugin: T, ctx?: {
    editor?: BlockNoteEditor<any, any, any>;
}): T extends ExtensionFactory ? NonNullable<ReturnType<ReturnType<T>>> : T extends string ? Extension : T extends Extension ? T : never;
type ExtractStore<T> = T extends Store<infer U> ? U : never;
/**
 * Use the state of an extension
 */
export declare function useExtensionState<T extends ExtensionFactory | Extension, TExtension = T extends ExtensionFactory ? ReturnType<ReturnType<T>> : T, TStore = TExtension extends {
    store: Store<any>;
} ? TExtension["store"] : never, TSelected = NoInfer<ExtractStore<TStore>>>(plugin: T, ctx?: {
    editor?: BlockNoteEditor<any, any, any>;
    selector?: (state: NoInfer<ExtractStore<TStore>>) => TSelected;
}): TSelected;
export {};
