clarity-js
Version:
An analytics library that uses web page interactions to generate aggregated insights
188 lines (160 loc) • 3.17 kB
TypeScript
import { BooleanFlag } from "@clarity-types/data";
import { Time } from "./core";
import { Event, Target } from "./data";
/* Enum */
export const enum BrowsingContext {
Self = 0,
Blank = 1,
Parent = 2,
Top = 3
}
export const enum ClickSource {
Undefined = 0,
FirstParty = 1,
ThirdParty = 2,
Eval = 3,
Unknown = 4
}
export const enum Setting {
LookAhead = 500, // 500ms
InputLookAhead = 750, // 750ms
Distance = 20, // 20 pixels
ScrollInterval = 50, // 25 milliseconds
PointerInterval = 25, // 25 milliseconds
Throttle = 25, // 25 milliseconds
TimelineSpan = 2 * Time.Second, // 2 seconds
}
export const enum Clipboard {
Cut = 0,
Copy = 1,
Paste = 2
}
/* Helper Interfaces */
export interface PointerState {
time: number;
event: number;
data: PointerData;
}
export interface ClickState {
time: number;
event: number;
data: ClickData;
}
export interface ClipboardState {
time: number;
event: number;
data: ClipboardData;
}
export interface ScrollState {
time: number;
event: number;
data: ScrollData;
}
export interface SubmitState {
time: number;
event: number;
data: SubmitData;
}
export interface ChangeState {
time: number;
event: number;
data: ChangeData;
}
export interface InputState {
time: number;
event: number;
data: InputData;
}
export interface TimelineState {
time: number;
event: number;
data: TimelineData;
}
/* Event Data */
export interface TimelineData {
type: Event;
hash: string;
x: number;
y: number;
reaction: number;
context: number;
}
export interface ChangeData {
target: Target;
type: string;
value: string;
checksum: string;
}
export interface InputData {
target: Target;
value: string;
type?: string;
trust: BooleanFlag;
}
export interface SubmitData {
target: Target;
}
export interface PointerData {
target: Target;
x: number;
y: number;
id?: number;
isPrimary?: boolean;
}
export interface ClickData {
target: Target;
x: number;
y: number;
eX: number;
eY: number;
button: number;
reaction: number;
context: BrowsingContext;
text: string;
link: string;
hash: string;
trust: number;
isFullText: BooleanFlag;
w: number;
h: number;
tag: string;
class: string;
id: string;
source: ClickSource;
}
export interface TextInfo {
text: string;
isFullText: BooleanFlag;
}
export interface ClipboardData {
target: Target;
action: Clipboard;
}
export interface ResizeData {
width: number;
height: number;
}
export interface ScrollData {
target: Target;
x: number;
y: number;
top: Node | string;
bottom: Node | string;
trust: BooleanFlag;
}
export interface SelectionData {
start: Target;
startOffset: number;
end: Target;
endOffset: number;
}
export interface UnloadData {
name: string;
persisted: BooleanFlag;
}
export interface VisibilityData {
visible: BooleanFlag;
}
export interface FocusData {
focused: BooleanFlag;
}