57 lines
1.7 KiB
TypeScript
57 lines
1.7 KiB
TypeScript
import type { HLJSApi } from 'highlight.js';
|
|
import type { RevealPlugin } from 'reveal.js';
|
|
|
|
// @ts-expect-error The runtime implementation remains in JS during the migration.
|
|
import HighlightImplementation from './plugin.js';
|
|
|
|
export interface HighlightLine {
|
|
start?: number;
|
|
end?: number;
|
|
}
|
|
|
|
export interface HighlightLineNumbersOptions {
|
|
singleLine?: boolean;
|
|
startFrom?: number;
|
|
}
|
|
|
|
export interface HighlightJsApi extends HLJSApi {
|
|
initLineNumbersOnLoad(options?: HighlightLineNumbersOptions): void;
|
|
lineNumbersBlock(element: HTMLElement, options?: HighlightLineNumbersOptions): void;
|
|
lineNumbersValue(code: string, options?: HighlightLineNumbersOptions): string | undefined;
|
|
}
|
|
|
|
export interface HighlightScrollState {
|
|
currentBlock?: HTMLElement;
|
|
animationFrameID?: number;
|
|
}
|
|
|
|
export interface HighlightLineBounds {
|
|
top: number;
|
|
bottom: number;
|
|
}
|
|
|
|
export type HighlightLineStep = HighlightLine[];
|
|
|
|
export interface HighlightPlugin extends RevealPlugin {
|
|
id: 'highlight';
|
|
HIGHLIGHT_STEP_DELIMITER: '|';
|
|
HIGHLIGHT_LINE_DELIMITER: ',';
|
|
HIGHLIGHT_LINE_RANGE_DELIMITER: '-';
|
|
hljs: HighlightJsApi;
|
|
highlightBlock(block: HTMLElement): void;
|
|
scrollHighlightedLineIntoView(
|
|
block: HTMLElement,
|
|
scrollState: HighlightScrollState,
|
|
skipAnimation?: boolean
|
|
): void;
|
|
easeInOutQuart(t: number): number;
|
|
getHighlightedLineBounds(block: HTMLElement): HighlightLineBounds;
|
|
highlightLines(block: HTMLElement, linesToHighlight?: string): void;
|
|
deserializeHighlightSteps(highlightSteps: string): HighlightLineStep[];
|
|
serializeHighlightSteps(highlightSteps: HighlightLineStep[]): string;
|
|
}
|
|
|
|
const Highlight = HighlightImplementation as () => HighlightPlugin;
|
|
|
|
export default Highlight;
|