| 1 | import type { HLJSApi } from 'highlight.js'; |
| 2 | import type { RevealPlugin } from 'reveal.js'; |
| 3 | |
| 4 | // @ts-expect-error The runtime implementation remains in JS during the migration. |
| 5 | import HighlightImplementation from './plugin.js'; |
| 6 | |
| 7 | export interface HighlightLine { |
| 8 | start?: number; |
| 9 | end?: number; |
| 10 | } |
| 11 | |
| 12 | export interface HighlightLineNumbersOptions { |
| 13 | singleLine?: boolean; |
| 14 | startFrom?: number; |
| 15 | } |
| 16 | |
| 17 | export interface HighlightJsApi extends HLJSApi { |
| 18 | initLineNumbersOnLoad(options?: HighlightLineNumbersOptions): void; |
| 19 | lineNumbersBlock(element: HTMLElement, options?: HighlightLineNumbersOptions): void; |
| 20 | lineNumbersValue(code: string, options?: HighlightLineNumbersOptions): string | undefined; |
| 21 | } |
| 22 | |
| 23 | export interface HighlightScrollState { |
| 24 | currentBlock?: HTMLElement; |
| 25 | animationFrameID?: number; |
| 26 | } |
| 27 | |
| 28 | export interface HighlightLineBounds { |
| 29 | top: number; |
| 30 | bottom: number; |
| 31 | } |
| 32 | |
| 33 | export type HighlightLineStep = HighlightLine[]; |
| 34 | |
| 35 | export interface HighlightPlugin extends RevealPlugin { |
| 36 | id: 'highlight'; |
| 37 | HIGHLIGHT_STEP_DELIMITER: '|'; |
| 38 | HIGHLIGHT_LINE_DELIMITER: ','; |
| 39 | HIGHLIGHT_LINE_RANGE_DELIMITER: '-'; |
| 40 | hljs: HighlightJsApi; |
| 41 | highlightBlock(block: HTMLElement): void; |
| 42 | scrollHighlightedLineIntoView( |
| 43 | block: HTMLElement, |
| 44 | scrollState: HighlightScrollState, |
| 45 | skipAnimation?: boolean |
| 46 | ): void; |
| 47 | easeInOutQuart(t: number): number; |
| 48 | getHighlightedLineBounds(block: HTMLElement): HighlightLineBounds; |
| 49 | highlightLines(block: HTMLElement, linesToHighlight?: string): void; |
| 50 | deserializeHighlightSteps(highlightSteps: string): HighlightLineStep[]; |
| 51 | serializeHighlightSteps(highlightSteps: HighlightLineStep[]): string; |
| 52 | } |
| 53 | |
| 54 | const Highlight = HighlightImplementation as () => HighlightPlugin; |
| 55 | |
| 56 | export default Highlight; |
| 57 |