import { ChangeSet, ChangedRange } from "../../state/src"; import { RangeValue, Range, RangeSet } from "../../rangeset/src/rangeset"; import { Text } from "../../doc/src/"; export interface RangeDecorationSpec { inclusiveStart?: boolean; inclusiveEnd?: boolean; attributes?: { [key: string]: string; }; class?: string; tagName?: string; collapsed?: boolean | WidgetType; } export interface WidgetDecorationSpec { widget: WidgetType; side?: number; } export interface LineDecorationSpec { attributes?: { [key: string]: string; }; widget?: WidgetType; side?: number; } export declare abstract class WidgetType { readonly value: T; constructor(value: T); abstract toDOM(): HTMLElement; eq(value: T): boolean; /** @internal */ compare(other: WidgetType): boolean; readonly estimatedHeight: number; ignoreEvent(event: Event): boolean; } export declare type DecorationSet = RangeSet; export declare type DecoratedRange = Range; export declare abstract class Decoration implements RangeValue { readonly bias: number; readonly widget: WidgetType | null; readonly spec: any; constructor(bias: number, widget: WidgetType | null, spec: any); abstract map(mapping: ChangeSet, from: number, to: number): DecoratedRange | null; static range(from: number, to: number, spec: RangeDecorationSpec): DecoratedRange; static widget(pos: number, spec: WidgetDecorationSpec): DecoratedRange; static line(pos: number, spec: LineDecorationSpec): DecoratedRange; static set(of: DecoratedRange | ReadonlyArray): DecorationSet; static none: RangeSet; abstract sameEffect(other: Decoration): boolean; } export declare class RangeDecoration extends Decoration { readonly spec: RangeDecorationSpec; readonly endBias: number; readonly collapsed: boolean; constructor(spec: RangeDecorationSpec); map(mapping: ChangeSet, from: number, to: number): DecoratedRange | null; sameEffect(other: RangeDecoration): boolean; } export declare class WidgetDecoration extends Decoration { readonly spec: WidgetDecorationSpec; widget: WidgetType; constructor(spec: WidgetDecorationSpec); map(mapping: ChangeSet, pos: number): DecoratedRange | null; sameEffect(other: Decoration): boolean; } export declare class LineDecoration extends Decoration { constructor(spec: LineDecorationSpec); map(mapping: ChangeSet, pos: number): DecoratedRange | null; sameEffect(other: Decoration): boolean; readonly side: any; } export declare function attrsEq(a: any, b: any): boolean; export declare function widgetsEq(a: WidgetType | null, b: WidgetType | null): boolean; export declare function joinRanges(a: number[], b: number[]): number[]; declare class Changes { content: number[]; height: number[]; } export declare function findChangedRanges(a: DecorationSet, b: DecorationSet, diff: ReadonlyArray, docA: Text): Changes; export declare function heightRelevantDecorations(decorations: DecorationSet[], ranges: ReadonlyArray): number[]; export {};