palp-ictus
v0.1.0
Published
Pointer-event gesture recognition library for the browser
Maintainers
Readme
palp-ictus
Zero-dependency TypeScript library for browser gesture recognition built on Pointer Events.
Works with mouse, touch, and pen — any input that fires pointer events.
Gestures
| Gesture | Trigger |
|--------------|----------------------------------------|
| tap | Quick touch / click without movement |
| doubleTap | Two taps in quick succession |
| longTap | Press and hold |
| swipeLeft | Fast horizontal stroke to the left |
| swipeRight | Fast horizontal stroke to the right |
| swipeUp | Fast vertical stroke upward |
| swipeDown | Fast vertical stroke downward |
Install
npm install palp-ictusQuick start
import { attachGestures } from 'palp-ictus';
const destroy = attachGestures(document.body, {
tap: {
callback: (e) => console.log('tap at', e.clientX, e.clientY),
},
swipeLeft: {
callback: () => console.log('swipe left'),
},
});
// When you no longer need gesture tracking:
// destroy();Multiple gestures
attachGestures(element, {
tap: { callback: onTap },
doubleTap: { callback: onDouble, options: { window: 400 } },
longTap: { callback: onLongPress, options: { holdTime: 600 } },
swipeLeft: { callback: onSwipeLeft },
swipeRight: { callback: onSwipeRight, options: { minDistance: 80 } },
});Configuration
Every gesture accepts optional tuning parameters via options.
TapConfig
| Option | Type | Default | Description |
|-------------|--------|---------|-------------------------------------------------|
| tolerance | number | 10 | Max pointer travel (px) before tap is cancelled |
| grace | number | 300 | Defer window (ms) for double-tap resolution |
DoubleTapConfig
| Option | Type | Default | Description |
|-------------|--------|---------|-----------------------------------------------|
| window | number | 300 | Max interval (ms) between two taps |
| proximity | number | 30 | Max spatial distance (px) between two taps |
LongTapConfig
| Option | Type | Default | Description |
|------------|--------|---------|------------------------------------------------|
| holdTime | number | 500 | Required press duration (ms) |
| drift | number | 25 | Max allowed drift (px) before gesture cancels |
SwipeConfig
| Option | Type | Default | Description |
|---------------|--------|---------|------------------------------------------------------|
| minDistance | number | 50 | Minimum travel distance (px) to qualify as a swipe |
| maxDuration | number | 300 | Maximum stroke time (ms); slower strokes are ignored |
Advanced
The library also exports individual sensor factories for custom setups:
import {
createTapSensor,
createSwipeSensor,
createEngine,
} from 'palp-ictus';
const engine = createEngine(element, [
createTapSensor({ tolerance: 15 }),
createSwipeSensor({ minDistance: 60 }),
], {
tap: (e) => { /* ... */ },
swipeLeft: (e) => { /* ... */ },
});
// engine(); // teardownLicense
Copyright (C) 2026 Родионов Владимир
