import { Transaction } from "./transaction";
import { EditorState } from "./state";
declare type FacetConfig = {
combine?: (value: readonly Input[]) => Output;
compare?: (a: Output, b: Output) => boolean;
compareInput?: (a: Input, b: Input) => boolean;
static?: boolean;
enables?: Extension;
};
export declare class Facet {
private isStatic;
private constructor();
static define(config?: FacetConfig): Facet;
of(value: Input): Extension;
compute(deps: readonly Slot[], get: (state: EditorState) => Input): Extension;
computeN(deps: readonly Slot[], get: (state: EditorState) => readonly Input[]): Extension;
from(field: StateField): Extension;
from(field: StateField, get: (value: T) => Input): Extension;
}
declare type Slot = Facet | StateField | "doc" | "selection";
declare type StateFieldSpec = {
create: (state: EditorState) => Value;
update: (value: Value, transaction: Transaction) => Value;
compare?: (a: Value, b: Value) => boolean;
provide?: (field: StateField) => Extension;
toJSON?: (value: Value, state: EditorState) => any;
fromJSON?: (json: any, state: EditorState) => Value;
};
export declare class StateField {
private createF;
private updateF;
private compareF;
private constructor();
static define(config: StateFieldSpec): StateField;
private create;
init(create: (state: EditorState) => Value): Extension;
extension: Extension;
}
export declare type Extension = {
extension: Extension;
} | readonly Extension[];
export declare const Prec: {
fallback: (ext: Extension) => Extension;
default: (ext: Extension) => Extension;
extend: (ext: Extension) => Extension;
override: (ext: Extension) => Extension;
};
export declare function tagExtension(tag: string | symbol, extension: Extension): Extension;
export declare type ExtensionMap = {
[tag: string]: Extension | undefined;
};
declare type DynamicSlot = (state: EditorState, tr: Transaction | null) => number;
export declare class Configuration {
readonly source: Extension;
readonly replacements: ExtensionMap;
readonly dynamicSlots: DynamicSlot[];
readonly address: {
[id: number]: number;
};
readonly staticValues: readonly any[];
readonly statusTemplate: SlotStatus[];
constructor(source: Extension, replacements: ExtensionMap, dynamicSlots: DynamicSlot[], address: {
[id: number]: number;
}, staticValues: readonly any[]);
staticFacet