web-highlighter
Version:
✨A no-runtime dependency lib for text highlighting & persistence on any website ✨🖍️
103 lines (102 loc) • 2.96 kB
TypeScript
import type Hook from '../util/hook';
export declare type RootElement = Document | HTMLElement;
export interface HighlighterOptions {
$root?: RootElement;
exceptSelectors?: string[];
wrapTag?: string;
verbose?: boolean;
style?: {
className?: string[] | string;
};
}
export interface PainterOptions {
$root: RootElement;
wrapTag: string;
className: string[] | string;
exceptSelectors: string[];
}
export declare enum SplitType {
none = "none",
head = "head",
tail = "tail",
both = "both"
}
export declare enum ERROR {
DOM_TYPE_ERROR = "[DOM] Receive wrong node type.",
DOM_SELECTION_EMPTY = "[DOM] The selection contains no dom node, may be you except them.",
RANGE_INVALID = "[RANGE] Got invalid dom range, can't convert to a valid highlight range.",
RANGE_NODE_INVALID = "[RANGE] Start or end node isn't a text node, it may occur an error.",
DB_ID_DUPLICATE_ERROR = "[STORE] Unique id conflict.",
CACHE_SET_ERROR = "[CACHE] Cache.data can't be set manually, please use .save().",
SOURCE_TYPE_ERROR = "[SOURCE] Object isn't a highlight source instance.",
HIGHLIGHT_RANGE_FROZEN = "[HIGHLIGHT_RANGE] A highlight range must be frozen before render.",
HIGHLIGHT_SOURCE_RECREATE = "[HIGHLIGHT_SOURCE] Recreate highlights from sources error.",
HIGHLIGHT_SOURCE_NONE_RENDER = "[HIGHLIGHT_SOURCE] This highlight source isn't rendered. May be the exception skips it or the dom structure has changed."
}
export declare enum EventType {
CREATE = "selection:create",
REMOVE = "selection:remove",
MODIFY = "selection:modify",
HOVER = "selection:hover",
HOVER_OUT = "selection:hover-out",
CLICK = "selection:click"
}
export declare enum CreateFrom {
STORE = "from-store",
INPUT = "from-input"
}
export declare enum SelectedNodeType {
text = "text",
span = "span"
}
export interface SelectedNode {
$node: Node | Text;
type: SelectedNodeType;
splitType: SplitType;
}
export interface DomMeta {
parentTagName: string;
parentIndex: number;
textOffset: number;
extra?: unknown;
}
export interface DomNode {
$node: Node;
offset: number;
}
export interface HighlightPosition {
start: {
top: number;
left: number;
};
end: {
top: number;
left: number;
};
}
export interface HookMap {
Render: {
UUID: Hook<string>;
SelectedNodes: Hook<SelectedNode[]>;
WrapNode: Hook<HTMLElement>;
};
Serialize: {
Restore: Hook<DomNode[]>;
RecordInfo: Hook<string>;
};
Remove: {
UpdateNodes: Hook;
};
}
export declare enum UserInputEvent {
touchend = "touchend",
mouseup = "mouseup",
touchstart = "touchstart",
click = "click",
mouseover = "mouseover"
}
export interface IInteraction {
PointerEnd: UserInputEvent;
PointerTap: UserInputEvent;
PointerOver: UserInputEvent;
}