{"_id":"@aumiqx/gesture","_rev":"2-6626fa01cdee037b21afffacc7edfbc4","name":"@aumiqx/gesture","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@aumiqx/gesture","version":"0.1.0","keywords":["gesture recognition","gesture detection","touch gestures","swipe detection","tap detection","flick detection","pointer events","pure javascript","no dom","zero dependencies","typescript"],"author":{"name":"Aumiqx Technologies","email":"axit@aumiqx.com"},"license":"MIT","_id":"@aumiqx/gesture@0.1.0","maintainers":[{"name":"aumiqx","email":"axit@aumiqx.com"}],"homepage":"https://aumiqx.com/labs/gesture/","bugs":{"url":"https://github.com/aumiqx/gesture/issues"},"dist":{"shasum":"45c5ba276099f3f136def288365a83120889ee3f","tarball":"https://registry.npmjs.org/@aumiqx/gesture/-/gesture-0.1.0.tgz","fileCount":7,"integrity":"sha512-Ut3iJ1UTvJN9vg+7DXjW7ktJYEOn5yCnG9BGaTAM313Q3uQkFZJfk7P/nK8HtLY3eDVHEIybX9uRgqLk7tAW+A==","signatures":[{"sig":"MEQCIE9rg0Kdnux8j9BkJg5A6C2vWEgihK4sNm/tLVm6IFbaAiBfqJ61HzThybZq9hP1/ImBgmuTnvEsThBz60RaWx88zw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35070},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"57bc78555193c7afe4b78e5e7e1955f63d030134","scripts":{"build":"tsup src/index.ts --format cjs,esm --dts --clean","prepublishOnly":"npm run build"},"_npmUser":{"name":"aumiqx","email":"axit@aumiqx.com"},"repository":{"url":"git+https://github.com/aumiqx/gesture.git","type":"git"},"_npmVersion":"11.9.0","description":"Pure-math gesture recognition. No DOM, no events, no framework. ~6KB, zero dependencies.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/gesture_0.1.0_1775214067455_0.4452576195161124","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@aumiqx/gesture","version":"0.1.1","description":"Pure-math gesture recognition. No DOM, no events, no framework. ~6KB, zero dependencies.","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"build":"tsup src/index.ts --format cjs,esm --dts --clean","prepublishOnly":"npm run build"},"keywords":["gesture recognition","gesture detection","touch gestures","swipe detection","tap detection","flick detection","pointer events","pure javascript","no dom","zero dependencies","typescript"],"author":{"name":"Aumiqx Technologies","email":"axit@aumiqx.com"},"license":"MIT","homepage":"https://aumiqx.com/labs/gesture/","repository":{"type":"git","url":"git+https://github.com/aumiqx/gesture.git"},"devDependencies":{"tsup":"^8.0.0","typescript":"^5.0.0"},"gitHead":"57bc78555193c7afe4b78e5e7e1955f63d030134","_id":"@aumiqx/gesture@0.1.1","bugs":{"url":"https://github.com/aumiqx/gesture/issues"},"_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-dOaXxetNguuR5HN29oYJTwxTK0NNwMp2whj6wGOilm0rB7dUoVuQNWm7vkfXuxgOoBBruIJxHhTcon7Cy0TNAA==","shasum":"e4aba30b244500934062c77df213378093ece01d","tarball":"https://registry.npmjs.org/@aumiqx/gesture/-/gesture-0.1.1.tgz","fileCount":7,"unpackedSize":35070,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDfJxBMsPeXqJnmLU9r8A9ywIuaYa0FON/f/rQQL4fdXgIgJTjF0/eDT9c6y/FzkWVTCqWd+oKHBJmCrnri3TTXEtY="}]},"_npmUser":{"name":"aumiqx","email":"axit@aumiqx.com"},"directories":{},"maintainers":[{"name":"aumiqx","email":"axit@aumiqx.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/gesture_0.1.1_1775214245813_0.4247204271583902"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-03T11:01:07.321Z","modified":"2026-04-03T11:04:06.080Z","0.1.0":"2026-04-03T11:01:07.603Z","0.1.1":"2026-04-03T11:04:05.977Z"},"bugs":{"url":"https://github.com/aumiqx/gesture/issues"},"author":{"name":"Aumiqx Technologies","email":"axit@aumiqx.com"},"license":"MIT","homepage":"https://aumiqx.com/labs/gesture/","keywords":["gesture recognition","gesture detection","touch gestures","swipe detection","tap detection","flick detection","pointer events","pure javascript","no dom","zero dependencies","typescript"],"repository":{"type":"git","url":"git+https://github.com/aumiqx/gesture.git"},"description":"Pure-math gesture recognition. No DOM, no events, no framework. ~6KB, zero dependencies.","maintainers":[{"name":"aumiqx","email":"axit@aumiqx.com"}],"readme":"# @aumiqx/gesture\n\nPure-math gesture recognition for JavaScript. No DOM, no events, no framework, zero dependencies.\n\n**~6KB** | **TypeScript** | **Works everywhere**: Browser, Node.js, Deno, Bun, React Native, Canvas, WebGL\n\n[Live Demo](https://aumiqx.com/labs/gesture/) | [GitHub](https://github.com/aumiqx/gesture)\n\n## Install\n\n```bash\nnpm install @aumiqx/gesture\n```\n\n## Quick Start\n\n```typescript\nimport { recognize } from \"@aumiqx/gesture\";\n\n// Feed it raw coordinates from any source\nconst gesture = recognize([\n  { x: 100, y: 200, t: 0 },\n  { x: 250, y: 195, t: 32 },\n  { x: 400, y: 201, t: 64 },\n]);\n\nconsole.log(gesture);\n// {\n//   type: \"swipe\",\n//   direction: \"right\",\n//   velocity: 4.69,\n//   confidence: 0.92,\n//   distance: 300,\n//   duration: 64,\n//   curvature: 0.01,\n//   points: 3,\n//   startPoint: { x: 100, y: 200 },\n//   endPoint: { x: 400, y: 201 },\n//   predictedEnd: { x: 520, y: 203 }\n// }\n```\n\n## Why?\n\nEvery gesture library is event-driven and DOM-dependent. They hook into browser events, maintain internal state, and only work inside a browser.\n\nA gesture is just a **mathematical pattern** in a sequence of (x, y, t) coordinates. This library does the math. That's it.\n\n| Feature | Hammer.js | use-gesture | @aumiqx/gesture |\n|---------|-----------|-------------|-----------------|\n| DOM required | Yes | Yes | **No** |\n| Framework | None | React | **Any / none** |\n| Server-side | No | No | **Yes** |\n| Canvas/WebGL | No | No | **Yes** |\n| Mid-gesture prediction | No | No | **Yes** |\n| Maintained | No (deprecated) | Yes | **Yes** |\n\n## API\n\n### `recognize(points, options?)`\n\nClassify a completed gesture from a sequence of points.\n\n```typescript\nimport { recognize } from \"@aumiqx/gesture\";\n\nconst result = recognize(points);\n// result.type: \"tap\" | \"long-press\" | \"swipe\" | \"flick\" | \"pan\" | \"unknown\"\n// result.confidence: 0-1\n// result.duration: ms\n// result.distance: px\n```\n\n### `predict(points, options?)`\n\nClassify a gesture **while it's still happening**. Call mid-gesture for snappy UI.\n\n```typescript\nimport { predict } from \"@aumiqx/gesture\";\n\nconst { likely, alternatives } = predict(partialPoints);\n// likely: most probable gesture so far\n// alternatives: sorted by confidence\n```\n\n### `recognizeDoubleTap(first, second, options?)`\n\nDetect double-tap from two separate gesture sequences.\n\n```typescript\nimport { recognizeDoubleTap } from \"@aumiqx/gesture\";\n\nconst result = recognizeDoubleTap(firstTapPoints, secondTapPoints);\n// result: DoubleTapResult | null\n```\n\n## Gesture Types\n\n| Type | Description | Detection |\n|------|-------------|-----------|\n| `tap` | Quick touch, minimal movement | duration < 300ms, drift < 10px |\n| `long-press` | Touch and hold | duration > 500ms, drift < 15px |\n| `swipe` | Directional drag | distance > 30px, velocity > 0.3 px/ms |\n| `flick` | Ultra-fast short gesture | velocity > 1.5 px/ms, duration < 200ms |\n| `pan` | Slow drag | movement > 5px, doesn't qualify as swipe |\n| `unknown` | Ambiguous input | doesn't match any pattern |\n\n## Configuration\n\nAll thresholds are configurable:\n\n```typescript\nconst result = recognize(points, {\n  tapMaxDistance: 10,       // max drift for tap (px)\n  tapMaxDuration: 300,     // max duration for tap (ms)\n  longPressMinDuration: 500, // min hold time (ms)\n  longPressMaxDrift: 15,   // max drift during hold (px)\n  swipeMinDistance: 30,    // min distance for swipe (px)\n  swipeMinVelocity: 0.3,  // min velocity for swipe (px/ms)\n  flickMinVelocity: 1.5,  // min velocity for flick (px/ms)\n});\n```\n\n## Math Utilities\n\nAll internal math functions are exported for custom use:\n\n```typescript\nimport {\n  distance,           // Euclidean distance between two points\n  straightLineDistance, // Distance from first to last point\n  totalPathLength,    // Sum of all segment distances\n  velocity,           // distance / time\n  curvature,          // path length / straight distance - 1\n  maxDrift,           // max distance from centroid\n  centroid,           // average position\n  angle,              // direction in radians\n  predictEnd,         // extrapolate endpoint from velocity\n  swipeDirection,     // \"up\" | \"down\" | \"left\" | \"right\"\n} from \"@aumiqx/gesture\";\n```\n\n## Use Cases\n\n- **Canvas/WebGL games** - gesture controls without DOM elements\n- **Session replay analytics** - classify gestures from logged pointer data on a server\n- **Gesture prediction** - start UI responses before the gesture completes\n- **Accessibility tools** - classify imprecise input from users with motor impairments\n- **Cross-platform** - same recognition on web, mobile, desktop\n\n## License\n\nMIT\n","readmeFilename":"README.md"}