UNPKG

typewriter-editor

Version:

A rich text editor using the Delta format with decorations and rendered with a tiny virtual dom

84 lines (83 loc) 3.05 kB
import { AttributeMap, Line } from '@typewriter/document'; import { Editor, type Shortcuts } from '../Editor'; import type { VChild, VNode } from '../rendering/vdom'; export declare class Typeset { lines: Types<LineType>; formats: Types<FormatType>; embeds: Types<EmbedType>; static line: typeof line; static format: typeof format; static embed: typeof embed; constructor(types: TypesetTypes); } export declare function line(type: LineType): LineType; export declare function format(type: FormatType): FormatType; export declare function embed(type: EmbedType): EmbedType; export type FromDom = (node: HTMLElement) => any; export type LineData = [attributes: AttributeMap, children: VChild[], id: string]; export type Renderer = (attributes: AttributeMap, children: VChild[], line: Line, editor: Editor, forHTML?: boolean) => VNode; export type MultiLineRenderer = (lines: LineData[], editor: Editor, forHTML?: boolean) => VNode; export type ShouldCombine = (prev: AttributeMap, next: AttributeMap) => boolean; export interface Commands { [name: string]: (...args: any[]) => any; } export interface BasicType { name: string; selector: string; styleSelector?: string; fromDom?: FromDom | false; commands?: (editor: Editor) => Commands | Function; shortcuts?: Shortcuts | string; render?: Renderer; } export interface FormatType extends BasicType { greedy?: boolean; } export interface EmbedType extends BasicType { noFill?: boolean; } export interface LineType extends BasicType { indentable?: boolean; child?: boolean; defaultFollows?: boolean; frozen?: boolean; contained?: boolean; onEnter?: (editor: Editor) => void; onTab?: (editor: Editor, shiftKey: boolean) => void; nextLineAttributes?: (attributes: AttributeMap) => AttributeMap; onEmptyEnter?: (editor: Editor, line: Line) => boolean; render?: Renderer; renderMultiple?: MultiLineRenderer; shouldCombine?: ShouldCombine; } export interface TypesetTypes { lines?: Array<string | LineType>; formats?: Array<string | FormatType>; embeds?: Array<string | EmbedType>; } export interface TypeMap<T extends BasicType = BasicType> { [name: string]: T; } /** * A type store to hold types and make it easy to manage them. */ export declare class Types<T extends BasicType = BasicType> { list: T[]; selector: string; types: TypeMap<T>; priorities: { [name: string]: number; }; constructor(types: T[]); get default(): T; init(): void; add(type: T): void; remove(type: T | string): void; get(name: string): T; priority(name: string): number; matches(node: Node | null): boolean | undefined; findByNode(node: Node, fallbackToDefault: true): T; findByNode(node: Node, fallbackToDefault?: boolean): T | undefined; findByAttributes(attributes: AttributeMap | undefined, fallbackToDefault: true): T; findByAttributes(attributes: AttributeMap | undefined, fallbackToDefault?: boolean): T | undefined; }