index.d.ts 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585
  1. declare module "*.svg";
  2. declare module "*.png";
  3. declare const Lute: ILute;
  4. interface ILuteNode {
  5. TokensStr: () => string;
  6. __internal_object__: {
  7. Parent: {
  8. Type: number,
  9. },
  10. HeadingLevel: string,
  11. };
  12. }
  13. type ILuteRenderCallback = (node: ILuteNode, entering: boolean) => [string, number];
  14. /** @link https://hacpai.com/article/1588412297062 */
  15. interface ILuteRender {
  16. renderDocument?: ILuteRenderCallback;
  17. renderParagraph?: ILuteRenderCallback;
  18. renderText?: ILuteRenderCallback;
  19. renderCodeBlock?: ILuteRenderCallback;
  20. renderCodeBlockOpenMarker?: ILuteRenderCallback;
  21. renderCodeBlockInfoMarker?: ILuteRenderCallback;
  22. renderCodeBlockCode?: ILuteRenderCallback;
  23. renderCodeBlockCloseMarker?: ILuteRenderCallback;
  24. renderMathBlock?: ILuteRenderCallback;
  25. renderMathBlockOpenMarker?: ILuteRenderCallback;
  26. renderMathBlockContent?: ILuteRenderCallback;
  27. renderMathBlockCloseMarker?: ILuteRenderCallback;
  28. renderBlockquote?: ILuteRenderCallback;
  29. renderBlockquoteMarker?: ILuteRenderCallback;
  30. renderHeading?: ILuteRenderCallback;
  31. renderHeadingC8hMarker?: ILuteRenderCallback;
  32. renderList?: ILuteRenderCallback;
  33. renderListItem?: ILuteRenderCallback;
  34. renderTaskListItemMarker?: ILuteRenderCallback;
  35. renderThematicBreak?: ILuteRenderCallback;
  36. renderHTML?: ILuteRenderCallback;
  37. renderTable?: ILuteRenderCallback;
  38. renderTableHead?: ILuteRenderCallback;
  39. renderTableRow?: ILuteRenderCallback;
  40. renderTableCell?: ILuteRenderCallback;
  41. renderFootnotesDef?: ILuteRenderCallback;
  42. renderCodeSpan?: ILuteRenderCallback;
  43. renderCodeSpanOpenMarker?: ILuteRenderCallback;
  44. renderCodeSpanContent?: ILuteRenderCallback;
  45. renderCodeSpanCloseMarker?: ILuteRenderCallback;
  46. renderInlineMath?: ILuteRenderCallback;
  47. renderInlineMathOpenMarker?: ILuteRenderCallback;
  48. renderInlineMathContent?: ILuteRenderCallback;
  49. renderInlineMathCloseMarker?: ILuteRenderCallback;
  50. renderEmphasis?: ILuteRenderCallback;
  51. renderEmAsteriskOpenMarker?: ILuteRenderCallback;
  52. renderEmAsteriskCloseMarker?: ILuteRenderCallback;
  53. renderEmUnderscoreOpenMarker?: ILuteRenderCallback;
  54. renderEmUnderscoreCloseMarker?: ILuteRenderCallback;
  55. renderStrong?: ILuteRenderCallback;
  56. renderStrongA6kOpenMarker?: ILuteRenderCallback;
  57. renderStrongA6kCloseMarker?: ILuteRenderCallback;
  58. renderStrongU8eOpenMarker?: ILuteRenderCallback;
  59. renderStrongU8eCloseMarker?: ILuteRenderCallback;
  60. renderStrikethrough?: ILuteRenderCallback;
  61. renderStrikethrough1OpenMarker?: ILuteRenderCallback;
  62. renderStrikethrough1CloseMarker?: ILuteRenderCallback;
  63. renderStrikethrough2OpenMarker?: ILuteRenderCallback;
  64. renderStrikethrough2CloseMarker?: ILuteRenderCallback;
  65. renderHardBreak?: ILuteRenderCallback;
  66. renderSoftBreak?: ILuteRenderCallback;
  67. renderInlineHTML?: ILuteRenderCallback;
  68. renderLink?: ILuteRenderCallback;
  69. renderOpenBracket?: ILuteRenderCallback;
  70. renderCloseBracket?: ILuteRenderCallback;
  71. renderOpenParen?: ILuteRenderCallback;
  72. renderCloseParen?: ILuteRenderCallback;
  73. renderLinkText?: ILuteRenderCallback;
  74. renderLinkSpace?: ILuteRenderCallback;
  75. renderLinkDest?: ILuteRenderCallback;
  76. renderLinkTitle?: ILuteRenderCallback;
  77. renderImage?: ILuteRenderCallback;
  78. renderBang?: ILuteRenderCallback;
  79. renderEmoji?: ILuteRenderCallback;
  80. renderEmojiUnicode?: ILuteRenderCallback;
  81. renderEmojiImg?: ILuteRenderCallback;
  82. renderEmojiAlias?: ILuteRenderCallback;
  83. renderToC?: ILuteRenderCallback;
  84. renderFootnotesRef?: ILuteRenderCallback;
  85. renderBackslash?: ILuteRenderCallback;
  86. renderBackslashContent?: ILuteRenderCallback;
  87. }
  88. interface ILuteOptions extends IMarkdownConfig {
  89. emojis: { [key: string]: string };
  90. emojiSite: string;
  91. headingAnchor: boolean;
  92. inlineMathDigit: boolean;
  93. lazyLoadImage?: string;
  94. }
  95. interface ILute {
  96. WalkStop: number;
  97. WalkSkipChildren: number;
  98. WalkContinue: number;
  99. Version: string;
  100. New(): ILute;
  101. GetHeadingID(node: ILuteNode): string;
  102. SetJSRenderers(options?: {
  103. renderers: {
  104. HTML2VditorDOM?: ILuteRender,
  105. HTML2VditorIRDOM?: ILuteRender,
  106. HTML2Md?: ILuteRender,
  107. Md2HTML?: ILuteRender,
  108. Md2VditorDOM?: ILuteRender,
  109. Md2VditorIRDOM?: ILuteRender,
  110. },
  111. }): void;
  112. SetChineseParagraphBeginningSpace(enable: boolean): void;
  113. SetRenderListStyle(enable: boolean): void;
  114. SetLinkBase(url: string): void;
  115. SetSanitize(enable: boolean): void;
  116. SetHeadingAnchor(enable: boolean): void;
  117. SetImageLazyLoading(imagePath: string): void;
  118. SetInlineMathAllowDigitAfterOpenMarker(enable: boolean): void;
  119. SetToC(enable: boolean): void;
  120. SetFootnotes(enable: boolean): void;
  121. SetAutoSpace(enable: boolean): void;
  122. SetChinesePunct(enable: boolean): void;
  123. SetFixTermTypo(enable: boolean): void;
  124. SetEmojiSite(emojiSite: string): void;
  125. SetSetext(enable: boolean): void;
  126. SetVditorCodeBlockPreview(enable: boolean): void;
  127. PutEmojis(emojis: { [key: string]: string }): void;
  128. GetEmojis(): { [key: string]: string };
  129. FormatMd(markdown: string): string;
  130. // debugger md
  131. RenderEChartsJSON(text: string): string;
  132. // md 转换为 html
  133. Md2HTML(markdown: string): string;
  134. // 粘贴时将 html 转换为 md
  135. HTML2Md(html: string): string;
  136. // wysiwyg 转换为 html
  137. VditorDOM2HTML(vhtml: string): string;
  138. // wysiwyg 输入渲染
  139. SpinVditorDOM(html: string): string;
  140. // 粘贴时将 html 转换为 wysiwyg
  141. HTML2VditorDOM(html: string): string;
  142. // 将 wysiwyg 转换为 md
  143. VditorDOM2Md(html: string): string;
  144. // 将 md 转换为 wysiwyg
  145. Md2VditorDOM(markdown: string): string;
  146. // ir 输入渲染
  147. SpinVditorIRDOM(markdown: string): string;
  148. // ir 获取 md
  149. VditorIRDOM2Md(html: string): string;
  150. // md 转换为 ir
  151. Md2VditorIRDOM(html: string): string;
  152. // 获取 HTML
  153. VditorIRDOM2HTML(html: string): string;
  154. HTML2VditorIRDOM(html: string): string;
  155. }
  156. declare const webkitAudioContext: {
  157. prototype: AudioContext
  158. new(contextOptions?: AudioContextOptions): AudioContext,
  159. };
  160. interface II18nLang {
  161. en_US: string;
  162. ko_KR: string;
  163. zh_CN: string;
  164. }
  165. interface II18n {
  166. en_US: { [key: string]: string };
  167. ko_KR: { [key: string]: string };
  168. zh_CN: { [key: string]: string };
  169. }
  170. interface IClasses {
  171. preview?: string;
  172. }
  173. /** @link https://hacpai.com/article/1549638745630#options-upload */
  174. interface IUpload {
  175. /** 上传 url */
  176. url?: string;
  177. /** 上传文件最大 Byte */
  178. max?: number;
  179. /** 剪切板中包含图片地址时,使用此 url 重新上传 */
  180. linkToImgUrl?: string;
  181. /** CORS 上传验证,头为 X-Upload-Token */
  182. token?: string;
  183. /** 文件上传类型,同 [input accept](https://www.w3schools.com/tags/att_input_accept.asp) */
  184. accept?: string;
  185. /** 跨站点访问控制。默认值: false */
  186. withCredentials?: boolean;
  187. /** 请求头设置 */
  188. headers?: { [key: string]: string };
  189. /** 额外请求参数 */
  190. extraData?: { [key: string]: string | Blob };
  191. /** 每次上传前都会重新设置请求头 */
  192. setHeaders?(): { [key: string]: string };
  193. /** 上传成功回调 */
  194. success?(editor: HTMLPreElement, msg: string): void;
  195. /** 上传失败回调 */
  196. error?(msg: string): void;
  197. /** 文件名安全处理。 默认值: name => name.replace(/\W/g, '') */
  198. filename?(name: string): string;
  199. /** 校验,成功时返回 true 否则返回错误信息 */
  200. validate?(files: File[]): string | boolean;
  201. /** 自定义上传,当发生错误时返回错误信息 */
  202. handler?(files: File[]): string | null;
  203. /** 对服务端返回的数据进行转换,以满足内置的数据结构 */
  204. format?(files: File[], responseText: string): string;
  205. /** 将上传的文件处理后再返回 */
  206. file?(files: File[]): File[];
  207. }
  208. /** @link https://hacpai.com/article/1549638745630#options-toolbar */
  209. interface IMenuItem {
  210. /** 唯一标示 */
  211. name: string;
  212. /** svg 图标 HTML */
  213. icon?: string;
  214. /** 元素的样式名称 */
  215. className?: string;
  216. /** 提示 */
  217. tip?: string;
  218. /** 快捷键,支持⌘/ctrl-key 或 ⌘/ctrl-⇧/shift-key 格式的配置,不支持 wysiwyg 模式 */
  219. hotkey?: string;
  220. /** 插入编辑器中的后缀 */
  221. suffix?: string;
  222. /** 插入编辑器中的前缀 */
  223. prefix?: string;
  224. /** 提示位置:ne, nw */
  225. tipPosition?: string;
  226. /** 子菜单 */
  227. toolbar?: Array<string | IMenuItem>;
  228. /** 菜单层级,最大为 3,内部使用 */
  229. level?: number;
  230. /** 自定义按钮点击时触发的事件 */
  231. click?(status?: boolean): void;
  232. }
  233. /** @link https://hacpai.com/article/1549638745630#options-preview-hljs */
  234. interface IHljs {
  235. /** 是否启用行号。默认值: false */
  236. lineNumber?: boolean;
  237. /** 代码风格,可选值参见 [Chroma](https://xyproto.github.io/splash/docs/longer/all.html)。 默认值: 'github' */
  238. style?: string;
  239. /** 是否启用代码高亮。默认值: true */
  240. enable?: boolean;
  241. }
  242. /** @link https://hacpai.com/article/1549638745630#options-preview-math */
  243. interface IMath {
  244. /** 内联数学公式起始 $ 后是否允许数字。默认值: false */
  245. inlineDigit: boolean;
  246. /** 使用 MathJax 渲染时传入的宏定义。默认值: {} */
  247. macros: object;
  248. /** 数学公式渲染引擎。默认值: 'KaTeX' */
  249. engine: "KaTeX" | "MathJax";
  250. }
  251. /** @link https://hacpai.com/article/1549638745630#options-preview-markdown */
  252. interface IMarkdownConfig {
  253. /** 自动空格。默认值: false */
  254. autoSpace?: boolean;
  255. /** 段落开头是否空两格。默认值: false */
  256. paragraphBeginningSpace?: boolean;
  257. /** 自动矫正术语。默认值: false */
  258. fixTermTypo?: boolean;
  259. /** 自动矫正标点。默认值: false */
  260. chinesePunct?: boolean;
  261. /** 插入目录。默认值: false */
  262. toc?: boolean;
  263. /** 脚注。默认值: true */
  264. footnotes?: boolean;
  265. /** wysiwyg & ir 模式代码块是否渲染。默认值: true */
  266. codeBlockPreview: boolean;
  267. /** 是否解析 setext 标题。默认值: false */
  268. setext: boolean;
  269. /** 是否启用过滤 XSS。默认值: true */
  270. sanitize: boolean;
  271. /** 内容主题。默认值:light */
  272. theme?: string;
  273. /** 链接前缀。默认值:'' */
  274. linkBase?: string;
  275. /** 为列表添加标记,以便[自定义列表样式](https://github.com/Vanessa219/vditor/issues/390) 默认值:false */
  276. listStyle?: boolean;
  277. }
  278. /** @link https://hacpai.com/article/1549638745630#options-preview */
  279. interface IPreview {
  280. /** 预览 debounce 毫秒间隔。默认值: 1000 */
  281. delay?: number;
  282. /** 预览区域最大宽度。默认值: 768 */
  283. maxWidth?: number;
  284. /** 显示模式。默认值: 'both' */
  285. mode?: "both" | "editor";
  286. /** md 解析请求 */
  287. url?: string;
  288. /** @link https://hacpai.com/article/1549638745630#options-preview-hljs */
  289. hljs?: IHljs;
  290. /** @link https://hacpai.com/article/1549638745630#options-preview-math */
  291. math?: IMath;
  292. /** @link https://hacpai.com/article/1549638745630#options-preview-markdown */
  293. markdown?: IMarkdownConfig;
  294. /** 预览回调 */
  295. parse?(element: HTMLElement): void;
  296. /** 渲染之前回调 */
  297. transform?(html: string): string;
  298. }
  299. interface IPreviewOptions {
  300. customEmoji?: { [key: string]: string };
  301. lang?: (keyof II18nLang);
  302. lazyLoadImage?: string;
  303. emojiPath?: string;
  304. hljs?: IHljs;
  305. speech?: {
  306. enable?: boolean,
  307. };
  308. anchor?: number; // 0: no render, 1: render left, 2: render right
  309. math?: IMath;
  310. cdn?: string;
  311. markdown?: IMarkdownConfig;
  312. renderers?: ILuteRender;
  313. transform?(html: string): string;
  314. after?(): void;
  315. }
  316. interface IHintData {
  317. html: string;
  318. value: string;
  319. }
  320. /** @link https://hacpai.com/article/1549638745630#options-hint */
  321. interface IHint {
  322. /** 常用表情提示 HTML */
  323. emojiTail?: string;
  324. /** 提示 debounce 毫秒间隔。默认值: 200 */
  325. delay?: number;
  326. /** 默认表情,可从 [lute/emoji_map](https://github.com/88250/lute/blob/master/parse/emoji_map.go#L32) 中选取,也可自定义 */
  327. emoji?: { [key: string]: string };
  328. /** 表情图片地址。默认值: 'https://cdn.jsdelivr.net/npm/vditor@${VDITOR_VERSION}/dist/images/emoji' */
  329. emojiPath?: string;
  330. /** `@`用户回调 */
  331. at?(value: string): IHintData[];
  332. }
  333. interface IResize {
  334. position?: string;
  335. enable?: boolean;
  336. after?(height: number): void;
  337. }
  338. /** @link https://hacpai.com/article/1549638745630#options */
  339. interface IOptions {
  340. /** 编辑器初始化值。默认值: '' */
  341. value?: string;
  342. /** 是否显示日志。默认值: false */
  343. debugger?: boolean;
  344. /** 是否启用打字机模式。默认值: false */
  345. typewriterMode?: boolean;
  346. /** @link https://hacpai.com/article/1549638745630#options-keymap */
  347. keymap?: { [key: string]: string };
  348. /** 编辑器总高度。默认值: 'auto' */
  349. height?: number | string;
  350. /** 编辑器最小高度 */
  351. minHeight?: number;
  352. /** 编辑器总宽度,支持 %。默认值: 'auto' */
  353. width?: number | string;
  354. /** 输入区域为空时的提示。默认值: '' */
  355. placeholder?: string;
  356. /** 多语言。默认值: 'zh_CN' */
  357. lang?: (keyof II18nLang);
  358. /** @link https://hacpai.com/article/1549638745630#options-toolbar */
  359. toolbar?: Array<string | IMenuItem>;
  360. /** @link https://hacpai.com/article/1549638745630#options-resize */
  361. resize?: IResize;
  362. /** @link https://hacpai.com/article/1549638745630#options-counter */
  363. counter?: {
  364. enable: boolean;
  365. max?: number;
  366. type: "markdown" | "text";
  367. };
  368. /** @link https://hacpai.com/article/1549638745630#options-cache */
  369. cache?: {
  370. id?: string;
  371. enable?: boolean;
  372. after?(markdown: string): void;
  373. };
  374. /** 编辑模式。默认值: 'wysiwyg' */
  375. mode?: "wysiwyg" | "sv" | "ir";
  376. /** @link https://hacpai.com/article/1549638745630#options-preview */
  377. preview?: IPreview;
  378. /** @link https://hacpai.com/article/1549638745630#options-hint */
  379. hint?: IHint;
  380. /** @link https://hacpai.com/article/1549638745630#options-toolbarConfig */
  381. toolbarConfig?: {
  382. hide?: boolean,
  383. pin?: boolean,
  384. };
  385. /** 主题。默认值: 'classic' */
  386. theme?: "classic" | "dark";
  387. /** @link https://hacpai.com/article/1549638745630#options-upload */
  388. upload?: IUpload;
  389. /** @link https://hacpai.com/article/1549638745630#options-classes */
  390. classes?: IClasses;
  391. /** 配置自建 CDN 地址。默认值: 'https://cdn.jsdelivr.net/npm/vditor@${VDITOR_VERSION}' */
  392. cdn?: string;
  393. /** tab 键操作字符串,支持 \t 及任意字符串 */
  394. tab?: string;
  395. /** 是否展现大纲。默认值:'false' */
  396. outline?: boolean;
  397. /** 编辑器异步渲染完成后的回调方法 */
  398. after?(): void;
  399. /** 输入后触发 */
  400. input?(value: string, previewElement?: HTMLElement): void;
  401. /** 聚焦后触发 */
  402. focus?(value: string): void;
  403. /** 失焦后触发 */
  404. blur?(value: string): void;
  405. /** `esc` 按下后触发 */
  406. esc?(value: string): void;
  407. /** `⌘/ctrl+enter` 按下后触发 */
  408. ctrlEnter?(value: string): void;
  409. /** 编辑器中选中文字后触发 */
  410. select?(value: string): void;
  411. }
  412. interface IEChart {
  413. setOption(option: any): void;
  414. resize(): void;
  415. }
  416. interface IVditor {
  417. element: HTMLElement;
  418. options: IOptions;
  419. originalInnerHTML: string;
  420. lute: ILute;
  421. currentMode: "sv" | "wysiwyg" | "ir";
  422. devtools?: {
  423. element: HTMLDivElement,
  424. renderEchart(vditor: IVditor): void,
  425. };
  426. outline: {
  427. element: HTMLElement,
  428. render(vditor: IVditor): void,
  429. toggle(vditor: IVditor, show?: boolean): void,
  430. };
  431. toolbar?: {
  432. elements?: { [key: string]: HTMLElement },
  433. element?: HTMLElement,
  434. };
  435. preview?: {
  436. element: HTMLElement
  437. render(vditor: IVditor, value?: string): void,
  438. };
  439. sv?: {
  440. element: HTMLPreElement,
  441. };
  442. counter?: {
  443. element: HTMLElement
  444. render(vditor: IVditor, mdText?: string): void,
  445. };
  446. resize?: {
  447. element: HTMLElement,
  448. };
  449. hint: {
  450. timeId: number
  451. element: HTMLDivElement
  452. recentLanguage: string
  453. fillEmoji(element: HTMLElement, vditor: IVditor): void
  454. render(vditor: IVditor): void,
  455. genHTML(data: IHintData[], key: string, vditor: IVditor): void
  456. select(event: KeyboardEvent, vditor: IVditor): boolean,
  457. };
  458. tip: {
  459. element: HTMLElement
  460. show(text: string, time?: number): void
  461. hide(): void,
  462. };
  463. upload?: {
  464. element: HTMLElement
  465. isUploading: boolean
  466. range: Range,
  467. };
  468. undo?: {
  469. redo(vditor: IVditor): void
  470. undo(vditor: IVditor): void
  471. addToUndoStack(vditor: IVditor): void
  472. recordFirstPosition(vditor: IVditor): void,
  473. resetIcon(vditor: IVditor): void,
  474. };
  475. wysiwygUndo?: {
  476. redo(vditor: IVditor): void
  477. undo(vditor: IVditor): void
  478. addToUndoStack(vditor: IVditor): void
  479. recordFirstWbr(vditor: IVditor, event: KeyboardEvent): void,
  480. resetIcon(vditor: IVditor): void,
  481. };
  482. irUndo?: {
  483. redo(vditor: IVditor): void
  484. undo(vditor: IVditor): void
  485. addToUndoStack(vditor: IVditor): void
  486. recordFirstWbr(vditor: IVditor, event: KeyboardEvent): void,
  487. resetIcon(vditor: IVditor): void,
  488. };
  489. wysiwyg?: {
  490. element: HTMLPreElement,
  491. popover: HTMLDivElement,
  492. afterRenderTimeoutId: number,
  493. hlToolbarTimeoutId: number,
  494. preventInput: boolean,
  495. composingLock: boolean,
  496. };
  497. ir?: {
  498. element: HTMLPreElement,
  499. composingLock: boolean,
  500. preventInput: boolean,
  501. processTimeoutId: number,
  502. hlToolbarTimeoutId: number,
  503. };
  504. }