quill
Version:
Your powerful, rich text editor
75 lines (74 loc) • 2.25 kB
TypeScript
import Emitter from './emitter.js';
import type { EmitterSource } from './emitter.js';
import type Cursor from '../blots/cursor.js';
import type Scroll from '../blots/scroll.js';
type NativeRange = AbstractRange;
interface NormalizedRange {
start: {
node: NativeRange['startContainer'];
offset: NativeRange['startOffset'];
};
end: {
node: NativeRange['endContainer'];
offset: NativeRange['endOffset'];
};
native: NativeRange;
}
export interface Bounds {
bottom: number;
height: number;
left: number;
right: number;
top: number;
width: number;
}
export declare class Range {
index: number;
length: number;
constructor(index: number, length?: number);
}
declare class Selection {
scroll: Scroll;
emitter: Emitter;
composing: boolean;
mouseDown: boolean;
root: HTMLElement;
cursor: Cursor;
savedRange: Range;
lastRange: Range | null;
lastNative: NormalizedRange | null;
constructor(scroll: Scroll, emitter: Emitter);
handleComposition(): void;
handleDragging(): void;
focus(): void;
format(format: string, value: unknown): void;
getBounds(index: number, length?: number): DOMRect | {
bottom: number;
height: number;
left: number;
right: number;
top: number;
width: number;
} | null;
getNativeRange(): NormalizedRange | null;
getRange(): [Range, NormalizedRange] | [null, null];
hasFocus(): boolean;
normalizedToRange(range: NormalizedRange): Range;
normalizeNative(nativeRange: NativeRange): {
start: {
node: Node;
offset: number;
};
end: {
node: Node;
offset: number;
};
native: AbstractRange;
} | null;
rangeToNative(range: Range): [Node | null, number, Node | null, number];
setNativeRange(startNode: Node | null, startOffset?: number, endNode?: Node | null, endOffset?: number | undefined, force?: boolean): void;
setRange(range: Range | null, force: boolean, source?: EmitterSource): void;
setRange(range: Range | null, source?: EmitterSource): void;
update(source?: EmitterSource): void;
}
export default Selection;