UNPKG

@portabletext/editor

Version:

Portable Text Editor made in React

106 lines (96 loc) 2.38 kB
/** * @public */ export type BaseDefinition = { name: string title?: string } /** * @public */ export type FieldDefinition = BaseDefinition & { type: 'string' | 'number' | 'boolean' | 'array' | 'object' } /** * @public */ export type DecoratorDefinition< TBaseDefinition extends BaseDefinition = BaseDefinition, > = TBaseDefinition /** * @public */ export type AnnotationDefinition< TBaseDefinition extends BaseDefinition = BaseDefinition, > = TBaseDefinition & { fields?: ReadonlyArray<FieldDefinition> } /** * @public */ export type BlockObjectDefinition< TBaseDefinition extends BaseDefinition = BaseDefinition, > = TBaseDefinition & { fields?: ReadonlyArray<FieldDefinition> } /** * @public */ export type InlineObjectDefinition< TBaseDefinition extends BaseDefinition = BaseDefinition, > = TBaseDefinition & { fields?: ReadonlyArray<FieldDefinition> } /** * @public */ export type ListDefinition< TBaseDefinition extends BaseDefinition = BaseDefinition, > = TBaseDefinition /** * @public */ export type StyleDefinition< TBaseDefinition extends BaseDefinition = BaseDefinition, > = TBaseDefinition /** * @public */ export type SchemaDefinition< TBaseDefinition extends BaseDefinition = BaseDefinition, > = { decorators?: ReadonlyArray<DecoratorDefinition<TBaseDefinition>> blockObjects?: ReadonlyArray<BlockObjectDefinition<TBaseDefinition>> inlineObjects?: ReadonlyArray<InlineObjectDefinition<TBaseDefinition>> annotations?: ReadonlyArray<AnnotationDefinition<TBaseDefinition>> lists?: ReadonlyArray<ListDefinition<TBaseDefinition>> styles?: ReadonlyArray<StyleDefinition<TBaseDefinition>> } /** * @public * A helper wrapper that adds editor support, such as autocomplete and type checking, for a schema definition. * @example * ```ts * import { defineSchema } from '@portabletext/editor' * * const schemaDefinition = defineSchema({ * decorators: [{name: 'strong'}, {name: 'em'}, {name: 'underline'}], * annotations: [{name: 'link'}], * styles: [ * {name: 'normal'}, * {name: 'h1'}, * {name: 'h2'}, * {name: 'h3'}, * {name: 'blockquote'}, * ], * lists: [], * inlineObjects: [], * blockObjects: [], * } * ``` */ export function defineSchema<const TSchemaDefinition extends SchemaDefinition>( definition: TSchemaDefinition, ): TSchemaDefinition { return definition }