UNPKG

8.87 kBTypeScriptView Raw
1// Type definitions for Quill 2.0
2// Project: https://github.com/quilljs/quill/, http://quilljs.com
3// Definitions by: Sumit <https://github.com/sumitkm>
4// Guillaume <https://github.com/guillaume-ro-fr>
5// James Garbutt <https://github.com/43081j>
6// Aniello Falcone <https://github.com/AnielloFalcone>
7// Mohammad Hossein Amri <https://github.com/mhamri>
8// Marco Mantovani <https://github.com/TheLand>
9// Ameer Hamoodi <https://github.com/AmeerHamoodi>
10// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
11// TypeScript Version: 2.9
12
13import { Blot } from "parchment/dist/src/blot/abstract/blot";
14import Delta = require("quill-delta");
15
16/**
17 * A stricter type definition would be:
18 *
19 * type DeltaOperation ({ insert: any } | { delete: number } | { retain: number }) & OptionalAttributes;
20 *
21 * But this would break a lot of existing code as it would require manual discrimination of the union types.
22 */
23export type DeltaOperation = { insert?: any; delete?: number | undefined; retain?: number | undefined } & OptionalAttributes;
24interface SourceMap {
25 API: "api";
26 SILENT: "silent";
27 USER: "user";
28}
29export type Sources = "api" | "user" | "silent";
30
31export interface Key {
32 key: string | number;
33 shortKey?: boolean | null | undefined;
34 shiftKey?: boolean | null | undefined;
35 altKey?: boolean | null | undefined;
36 metaKey?: boolean | null | undefined;
37 ctrlKey?: boolean | null | undefined;
38}
39
40export interface StringMap {
41 [key: string]: any;
42}
43
44export interface OptionalAttributes {
45 attributes?: StringMap | undefined;
46}
47
48export type TextChangeHandler = (delta: Delta, oldContents: Delta, source: Sources) => any;
49export type SelectionChangeHandler = (range: RangeStatic, oldRange: RangeStatic, source: Sources) => any;
50export type EditorChangeHandler =
51 | ((name: "text-change", delta: Delta, oldContents: Delta, source: Sources) => any)
52 | ((name: "selection-change", range: RangeStatic, oldRange: RangeStatic, source: Sources) => any);
53
54export interface KeyboardStatic {
55 addBinding(key: Key, callback: (range: RangeStatic, context: any) => void): void;
56 addBinding(key: Key, context: any, callback: (range: RangeStatic, context: any) => void): void;
57}
58
59export type ClipboardMatcherCallback = (node: any, delta: Delta) => Delta;
60export type ClipboardMatcherNode = string | number;
61
62export interface ClipboardStatic {
63 matchers: Array<[ClipboardMatcherNode, ClipboardMatcherCallback]>;
64 convert(content?: { html?: string | undefined; text?: string | undefined }, formats?: StringMap): Delta;
65 addMatcher(selectorOrNodeType: ClipboardMatcherNode, callback: ClipboardMatcherCallback): void;
66 dangerouslyPasteHTML(html: string, source?: Sources): void;
67 dangerouslyPasteHTML(index: number, html: string, source?: Sources): void;
68}
69
70export interface QuillOptionsStatic {
71 debug?: string | boolean | undefined;
72 modules?: StringMap | undefined;
73 placeholder?: string | undefined;
74 readOnly?: boolean | undefined;
75 theme?: string | undefined;
76 formats?: string[] | undefined;
77 bounds?: HTMLElement | string | undefined;
78 scrollingContainer?: HTMLElement | string | undefined;
79 strict?: boolean | undefined;
80}
81
82export interface BoundsStatic {
83 bottom: number;
84 left: number;
85 right: number;
86 top: number;
87 height: number;
88 width: number;
89}
90
91export interface RangeStatic {
92 index: number;
93 length: number;
94}
95
96export class RangeStatic implements RangeStatic {
97 constructor();
98 index: number;
99 length: number;
100}
101
102export interface History {
103 clear(): void;
104 cutoff(): void;
105 undo(): void;
106 redo(): void;
107}
108
109export interface EventEmitter {
110 on(eventName: "text-change", handler: TextChangeHandler): EventEmitter;
111 on(eventName: "selection-change", handler: SelectionChangeHandler): EventEmitter;
112 on(eventName: "editor-change", handler: EditorChangeHandler): EventEmitter;
113 once(eventName: "text-change", handler: TextChangeHandler): EventEmitter;
114 once(eventName: "selection-change", handler: SelectionChangeHandler): EventEmitter;
115 once(eventName: "editor-change", handler: EditorChangeHandler): EventEmitter;
116 off(eventName: "text-change", handler: TextChangeHandler): EventEmitter;
117 off(eventName: "selection-change", handler: SelectionChangeHandler): EventEmitter;
118 off(eventName: "editor-change", handler: EditorChangeHandler): EventEmitter;
119}
120
121export class Quill implements EventEmitter {
122 /**
123 * Internal API
124 */
125 root: HTMLDivElement;
126 clipboard: ClipboardStatic;
127 scroll: Blot;
128 keyboard: KeyboardStatic;
129 history: History;
130 constructor(container: string | Element, options?: QuillOptionsStatic);
131 deleteText(index: number, length: number, source?: Sources): Delta;
132 disable(): void;
133 enable(enabled?: boolean): void;
134 isEnabled(): boolean;
135 getContents(index?: number, length?: number): Delta;
136 getLength(): number;
137 getText(index?: number, length?: number): string;
138 insertEmbed(index: number, type: string, value: any, source?: Sources): Delta;
139 insertText(index: number, text: string, source?: Sources): Delta;
140 insertText(index: number, text: string, format: string, value: any, source?: Sources): Delta;
141 insertText(index: number, text: string, formats: StringMap, source?: Sources): Delta;
142 /**
143 * @deprecated Remove in 2.0. Use clipboard.dangerouslyPasteHTML(index: number, html: string, source: Sources)
144 */
145 pasteHTML(index: number, html: string, source?: Sources): string;
146 /**
147 * @deprecated Remove in 2.0. Use clipboard.dangerouslyPasteHTML(html: string, source: Sources): void;
148 */
149 pasteHTML(html: string, source?: Sources): string;
150 setContents(delta: Delta, source?: Sources): Delta;
151 setText(text: string, source?: Sources): Delta;
152 update(source?: Sources): void;
153 updateContents(delta: Delta, source?: Sources): Delta;
154
155 static readonly sources: SourceMap;
156
157 format(name: string, value: any, source?: Sources): Delta;
158 formatLine(index: number, length: number, source?: Sources): Delta;
159 formatLine(index: number, length: number, format: string, value: any, source?: Sources): Delta;
160 formatLine(index: number, length: number, formats: StringMap, source?: Sources): Delta;
161 formatText(index: number, length: number, source?: Sources): Delta;
162 formatText(index: number, length: number, format: string, value: any, source?: Sources): Delta;
163 formatText(index: number, length: number, formats: StringMap, source?: Sources): Delta;
164 formatText(range: RangeStatic, format: string, value: any, source?: Sources): Delta;
165 formatText(range: RangeStatic, formats: StringMap, source?: Sources): Delta;
166 getFormat(range?: RangeStatic): StringMap;
167 getFormat(index: number, length?: number): StringMap;
168 removeFormat(index: number, length: number, source?: Sources): Delta;
169
170 blur(): void;
171 focus(): void;
172 getBounds(index: number, length?: number): BoundsStatic;
173 getSelection(focus: true): RangeStatic;
174 getSelection(focus?: false): RangeStatic | null;
175 hasFocus(): boolean;
176 setSelection(index: number, length: number, source?: Sources): void;
177 setSelection(range: RangeStatic, source?: Sources): void;
178
179 // static methods: debug, import, register, find
180 static debug(level: string | boolean): void;
181 static import(path: string): any;
182 static register(path: string, def: any, suppressWarning?: boolean): void;
183 static register(defs: StringMap, suppressWarning?: boolean): void;
184 static find(domNode: Node, bubble?: boolean): Quill | any;
185
186 addContainer(classNameOrDomNode: string | Node, refNode?: Node): any;
187 getModule(name: string): any;
188
189 // Blot interface is not exported on Parchment
190 getIndex(blot: any): number;
191 getLeaf(index: number): any;
192 getLine(index: number): [any, number];
193 getLines(index?: number, length?: number): any[];
194 getLines(range: RangeStatic): any[];
195
196 // EventEmitter methods
197 on(eventName: "text-change", handler: TextChangeHandler): EventEmitter;
198 on(eventName: "selection-change", handler: SelectionChangeHandler): EventEmitter;
199 on(eventName: "editor-change", handler: EditorChangeHandler): EventEmitter;
200 once(eventName: "text-change", handler: TextChangeHandler): EventEmitter;
201 once(eventName: "selection-change", handler: SelectionChangeHandler): EventEmitter;
202 once(eventName: "editor-change", handler: EditorChangeHandler): EventEmitter;
203 off(eventName: "text-change", handler: TextChangeHandler): EventEmitter;
204 off(eventName: "selection-change", handler: SelectionChangeHandler): EventEmitter;
205 off(eventName: "editor-change", handler: EditorChangeHandler): EventEmitter;
206}
207
208export default Quill;