Vize

Pointer Grace

Headless Pointer Grace; covers safe triangle, hover intent polygon.

Package @vizejs/ui/pointer-grace
Maturity stable
Own the source vize lib pull pointer-grace
Requires —
Aliases safe triangle, hover bridge, pointer grace
Covers safe triangle, hover intent polygon

API

extremeCorners

Two target corners with the extreme angles from origin.

function extremeCorners(origin: Point, target: Rect): readonly [Point, Point]

gracePolygon

Vertices of the origin→target safe triangle plus the target box.

function gracePolygon(origin: Point, target: Rect): readonly Point[]

pointInGraceArea

Whether point is inside the target or the safe triangle to it.

function pointInGraceArea(point: Point, origin: Point, target: Rect): boolean

createPointerGrace

Create an SSR-safe pointer grace tracker.

function createPointerGrace(options: PointerGraceOptions = {}): PointerGraceController

usePointerGrace

Create a pointer-grace tracker disposed with the current Vue effect scope.

function usePointerGrace(options: PointerGraceOptions = {}): PointerGraceController

Behavior

Normative state × input → outcome table for @vizejs/ui/pointer-grace. Every row is exercised by src/families/interaction/pointer-grace/pointer-grace*.test.ts; compile-only assertions live in src/families/interaction/pointer-grace/pointer-grace.types.test-d.ts.

# State Input Outcome Proven by
G1 idle origin and target set polygon is the origin plus extreme target corners polygon test
G2 armed pointer inside the target pending timer is cleared move inside test
G3 armed pointer inside the safe triangle pending timer is cleared move inside triangle test
G4 tracked pointer outside polygon onGraceEnd fires after delay leave delay test
G5 pending dispose timer is released and further moves throw dispose test
G6 any usePointerGrace outside a scope setup diagnostic is thrown setup test
G7 concurrent SSR identical trees byte-identical markup contains no timers SSR test
G8 public types invalid delay or mutating readonly refs compilation rejects misuse src/families/interaction/pointer-grace/pointer-grace.types.test-d.ts