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 |