@blocknote/react
Version:
A "Notion-style" block-based extensible text editor built on top of Prosemirror and Tiptap.
42 lines (37 loc) • 1.4 kB
text/typescript
import {
BlockNoteEditor,
BlockNoteSchema,
BlockSchema,
DefaultBlockSchema,
DefaultInlineContentSchema,
DefaultStyleSchema,
InlineContentSchema,
StyleSchema,
} from "@blocknote/core";
import { createContext, useContext, useState } from "react";
export type BlockNoteContextValue<
BSchema extends BlockSchema = DefaultBlockSchema,
ISchema extends InlineContentSchema = DefaultInlineContentSchema,
SSchema extends StyleSchema = DefaultStyleSchema,
> = {
setContentEditableProps?: ReturnType<typeof useState<Record<string, any>>>[1]; // copy type of setXXX from useState
editor?: BlockNoteEditor<BSchema, ISchema, SSchema>;
colorSchemePreference?: "light" | "dark";
};
export const BlockNoteContext = createContext<
BlockNoteContextValue | undefined
>(undefined);
/**
* Get the BlockNoteContext instance from the nearest BlockNoteContext provider
* @param _schema: optional, pass in the schema to return type-safe Context if you're using a custom schema
*/
export function useBlockNoteContext<
BSchema extends BlockSchema = DefaultBlockSchema,
ISchema extends InlineContentSchema = DefaultInlineContentSchema,
SSchema extends StyleSchema = DefaultStyleSchema,
>(
_schema?: BlockNoteSchema<BSchema, ISchema, SSchema>,
): BlockNoteContextValue<BSchema, ISchema, SSchema> | undefined {
const context = useContext(BlockNoteContext) as any;
return context;
}