cereb 0.3.2 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -2
- package/dist/browser/single-pointer/pointer.d.ts +1 -1
- package/dist/browser/single-pointer/pointer.d.ts.map +1 -1
- package/dist/browser/single-pointer/recognizer-from-mouse.d.ts.map +1 -1
- package/dist/browser/single-pointer/recognizer-from-pointer.d.ts.map +1 -1
- package/dist/browser/single-pointer/recognizer-from-touch.d.ts.map +1 -1
- package/dist/browser/single-pointer/recognizer.d.ts +1 -1
- package/dist/browser/single-pointer/recognizer.d.ts.map +1 -1
- package/dist/browser/single-pointer/single-pointer-signal.d.ts +0 -1
- package/dist/browser/single-pointer/single-pointer-signal.d.ts.map +1 -1
- package/dist/browser/single-pointer/types.d.ts +1 -3
- package/dist/browser/single-pointer/types.d.ts.map +1 -1
- package/dist/core/signal.d.ts +5 -5
- package/dist/core/signal.d.ts.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +73 -111
- package/dist/index.js.map +1 -1
- package/dist/internal/types.d.ts +14 -0
- package/dist/internal/types.d.ts.map +1 -0
- package/dist/operators/offset.d.ts +21 -7
- package/dist/operators/offset.d.ts.map +1 -1
- package/dist/operators.cjs +1 -1
- package/dist/operators.cjs.map +1 -1
- package/dist/operators.js +49 -47
- package/dist/operators.js.map +1 -1
- package/dist/recognizer-CGZKcxpa.js +56 -0
- package/dist/recognizer-CGZKcxpa.js.map +1 -0
- package/dist/recognizer-DbiEtBOM.cjs +2 -0
- package/dist/recognizer-DbiEtBOM.cjs.map +1 -0
- package/dist/single-pointer/mouse.cjs +1 -1
- package/dist/single-pointer/mouse.cjs.map +1 -1
- package/dist/single-pointer/mouse.js +25 -24
- package/dist/single-pointer/mouse.js.map +1 -1
- package/dist/single-pointer/pointer.cjs +1 -1
- package/dist/single-pointer/pointer.cjs.map +1 -1
- package/dist/single-pointer/pointer.js +62 -1
- package/dist/single-pointer/pointer.js.map +1 -1
- package/dist/single-pointer/touch.cjs +1 -1
- package/dist/single-pointer/touch.cjs.map +1 -1
- package/dist/single-pointer/touch.js +26 -25
- package/dist/single-pointer/touch.js.map +1 -1
- package/dist/types-BGR5Mhw9.cjs.map +1 -1
- package/dist/types-Ccnqx90M.js.map +1 -1
- package/package.json +4 -11
- package/dist/browser/single-pointer/pool.d.ts +0 -4
- package/dist/browser/single-pointer/pool.d.ts.map +0 -1
- package/dist/recognizer-BrqdN-1T.cjs +0 -2
- package/dist/recognizer-BrqdN-1T.cjs.map +0 -1
- package/dist/recognizer-FFAuyJ19.js +0 -101
- package/dist/recognizer-FFAuyJ19.js.map +0 -1
package/README.md
CHANGED
|
@@ -19,7 +19,6 @@ import { singlePointer } from "cereb";
|
|
|
19
19
|
/**
|
|
20
20
|
* Provides a stream for a single pointer.
|
|
21
21
|
* - Merges DOM events from pointer start → end/cancel into one stream and normalizes them into a single, clean interface.
|
|
22
|
-
* - Optimized to reduce GC pressure from high-frequency event objects (dozens per second).
|
|
23
22
|
* - Keeps pointer handling clear and purpose-driven—no need to juggle multiple DOM event shapes.
|
|
24
23
|
* - Lets you coordinate and control priority across multiple input streams.
|
|
25
24
|
*/
|
|
@@ -39,7 +38,7 @@ singlePointer(canvas).subscribe((signal) => {
|
|
|
39
38
|
- **Unified Input Abstraction** - Handle mouse, touch, and pen with a single `SinglePointer` interface
|
|
40
39
|
- **Composable Pipelines** - Transform streams with operators like `filter`, `map`, `throttle`, and more
|
|
41
40
|
- **Stream Orchestration** - Schedule and coordinate multiple streams (coming soon)
|
|
42
|
-
- **
|
|
41
|
+
- **Lightweight** - Minimal overhead for high-frequency input handling
|
|
43
42
|
|
|
44
43
|
## Recipes
|
|
45
44
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export
|
|
1
|
+
export { createPointerRecognizer, singlePointerFromPointer as singlePointerRecognizer, } from './recognizer-from-pointer.js';
|
|
2
2
|
//# sourceMappingURL=pointer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pointer.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/pointer.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"pointer.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/pointer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,wBAAwB,IAAI,uBAAuB,GACpD,MAAM,8BAA8B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recognizer-from-mouse.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/recognizer-from-mouse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"recognizer-from-mouse.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/recognizer-from-mouse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAiC,KAAK,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC9F,OAAO,KAAK,EAAiB,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAEL,KAAK,oBAAoB,EAG1B,MAAM,YAAY,CAAC;AAEpB,wBAAgB,qBAAqB,CACnC,OAAO,GAAE,oBAAyB,GACjC,uBAAuB,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAmCrD;AAED,wBAAgB,sBAAsB,CACpC,OAAO,GAAE,oBAAyB,GACjC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC,CAuB3D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recognizer-from-pointer.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/recognizer-from-pointer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"recognizer-from-pointer.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/recognizer-from-pointer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAiC,KAAK,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC9F,OAAO,KAAK,EAAiB,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAEL,KAAK,oBAAoB,EAI1B,MAAM,YAAY,CAAC;AAEpB,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,oBAAyB,GACjC,uBAAuB,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CA4CvD;AAED,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,oBAAyB,GACjC,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,mBAAmB,CAAC,CAyB7D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recognizer-from-touch.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/recognizer-from-touch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"recognizer-from-touch.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/recognizer-from-touch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAiC,KAAK,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC9F,OAAO,KAAK,EAAiB,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,KAAK,EAAE,oBAAoB,EAAsB,MAAM,YAAY,CAAC;AAE3E,wBAAgB,qBAAqB,CACnC,OAAO,GAAE,oBAAyB,GACjC,uBAAuB,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAmCrD;AAED,wBAAgB,sBAAsB,CACpC,OAAO,GAAE,oBAAyB,GACjC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC,CAyB3D"}
|
|
@@ -7,5 +7,5 @@ export interface SinglePointerRecognizer<InputSignal extends Signal> {
|
|
|
7
7
|
reset(): void;
|
|
8
8
|
dispose(): void;
|
|
9
9
|
}
|
|
10
|
-
export declare function createSinglePointerRecognizer<InputSignal extends Signal>(processor: (inputSignal: InputSignal, pointerSignal: SinglePointerSignal) => void,
|
|
10
|
+
export declare function createSinglePointerRecognizer<InputSignal extends Signal>(processor: (inputSignal: InputSignal, pointerSignal: SinglePointerSignal) => void, _options?: SinglePointerOptions): SinglePointerRecognizer<InputSignal>;
|
|
11
11
|
//# sourceMappingURL=recognizer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recognizer.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/recognizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"recognizer.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/recognizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,WAAW,uBAAuB,CAAC,WAAW,SAAS,MAAM;IACjE,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,mBAAmB,CAAC;IACjD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,KAAK,IAAI,IAAI,CAAC;IACd,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,wBAAgB,6BAA6B,CAAC,WAAW,SAAS,MAAM,EACtE,SAAS,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,mBAAmB,KAAK,IAAI,EACjF,QAAQ,GAAE,oBAAyB,GAClC,uBAAuB,CAAC,WAAW,CAAC,CAoBtC"}
|
|
@@ -21,5 +21,4 @@ export interface SinglePointer {
|
|
|
21
21
|
}
|
|
22
22
|
export declare function createSinglePointerSignal(pointer: SinglePointer): SinglePointerSignal;
|
|
23
23
|
export declare function createDefaultSinglePointerSignal(): SinglePointerSignal;
|
|
24
|
-
export declare function resetSinglePointerSignal(p: SinglePointerSignal): void;
|
|
25
24
|
//# sourceMappingURL=single-pointer-signal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"single-pointer-signal.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/single-pointer-signal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE7F,MAAM,WAAW,mBAAoB,SAAQ,MAAM,CAAC,gBAAgB,EAAE,aAAa,CAAC;CAAG;AAEvF,eAAO,MAAM,0BAA0B,EAAG,gBAAyB,CAAC;AAEpE;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,kBAAkB,CAAC;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,iBAAiB,CAAC;IAC/B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,aAAa,GAAG,mBAAmB,CAErF;AAED,wBAAgB,gCAAgC,IAAI,mBAAmB,CAYtE
|
|
1
|
+
{"version":3,"file":"single-pointer-signal.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/single-pointer-signal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE7F,MAAM,WAAW,mBAAoB,SAAQ,MAAM,CAAC,gBAAgB,EAAE,aAAa,CAAC;CAAG;AAEvF,eAAO,MAAM,0BAA0B,EAAG,gBAAyB,CAAC;AAEpE;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,kBAAkB,CAAC;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,iBAAiB,CAAC;IAC/B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,aAAa,GAAG,mBAAmB,CAErF;AAED,wBAAgB,gCAAgC,IAAI,mBAAmB,CAYtE"}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
export
|
|
2
|
-
pooling?: boolean;
|
|
3
|
-
}
|
|
1
|
+
export type SinglePointerOptions = {};
|
|
4
2
|
export type SinglePointerType = "touch" | "mouse" | "pen" | "unknown";
|
|
5
3
|
export type SinglePointerPhase = "unknown" | "start" | "move" | "end" | "cancel";
|
|
6
4
|
export type SinglePointerButton = "none" | "primary" | "secondary" | "auxiliary" | "back" | "forward";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/types.ts"],"names":[],"mappings":"AAAA,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEtC,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;AAEtE,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEjF,MAAM,MAAM,mBAAmB,GAC3B,MAAM,GACN,SAAS,GACT,WAAW,GACX,WAAW,GACX,MAAM,GACN,SAAS,CAAC;AAEd,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAiBzE"}
|
package/dist/core/signal.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export interface Signal<K extends string = string, V = unknown> {
|
|
2
|
-
kind: K;
|
|
3
|
-
value: V;
|
|
4
|
-
deviceId: string;
|
|
5
|
-
createdAt: number;
|
|
6
|
-
updatedAt?: number;
|
|
2
|
+
readonly kind: K;
|
|
3
|
+
readonly value: V;
|
|
4
|
+
readonly deviceId: string;
|
|
5
|
+
readonly createdAt: number;
|
|
6
|
+
readonly updatedAt?: number;
|
|
7
7
|
}
|
|
8
8
|
/**
|
|
9
9
|
* Utility type to extend a Signal's value type with additional properties.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../src/core/signal.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,MAAM,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,OAAO;IAC5D,IAAI,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../src/core/signal.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,MAAM,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,OAAO;IAC5D,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAAE,UAAU,IAAI,MAAM,CAClE,CAAC,CAAC,MAAM,CAAC,EACT,CAAC,CAAC,OAAO,CAAC,GAAG,UAAU,CACxB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAE9C,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,OAAO,EACjE,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,CAAC,GACP,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAOd"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./stream-Cp6eCZs2.cjs"),m=require("./recognizer-DbiEtBOM.cjs"),h=require("./single-pointer/pointer.cjs"),f="dom-event";function v(t){return m.createSignal(f,t)}function p(t,r,o){return s.createStream(c=>{const e=n=>{c.next(v(n))};return t.addEventListener(r,e,o),()=>{t.removeEventListener(r,e,o)}})}const u=["mousedown","mousemove","mouseup"];function S(t,r){return s.createStream(o=>{const c=e=>{o.next(v(e))};for(let e=0;e<u.length;e++){const n=u[e];t.addEventListener(n,c,r)}return()=>{for(let e=0;e<u.length;e++){const n=u[e];t.removeEventListener(n,c,r)}}})}const a=["pointerdown","pointermove","pointerup","pointercancel"];function E(t,r){return s.createStream(o=>{const c=e=>{o.next(v(e))};for(let e=0;e<a.length;e++){const n=a[e];t.addEventListener(n,c,r)}return()=>{for(let e=0;e<a.length;e++){const n=a[e];t.removeEventListener(n,c,r)}}})}const l=["touchstart","touchmove","touchend","touchcancel"];function g(t,r){return s.createStream(o=>{const c=e=>{o.next(v(e))};for(let e=0;e<l.length;e++){const n=l[e];t.addEventListener(n,c,r)}return()=>{for(let e=0;e<l.length;e++){const n=l[e];t.removeEventListener(n,c,r)}}})}function N(t,r={}){const o=E(t);return h.singlePointerRecognizer(r)(o)}function L(t,r,o={}){const{initialSize:c=0,maxSize:e=100}=o,n=[];for(let i=0;i<c;i++)n.push(t());return{get size(){return n.length},acquire(){return n.length>0?n.pop():t()},release(i){n.length<e&&(r(i),n.push(i))}}}function P(...t){return r=>d(r,...t)}function d(t,...r){return r.reduce((o,c)=>c(o),t)}exports.createStream=s.createStream;exports.setCerebDeviceId=m.setCerebDeviceId;exports.compose=P;exports.createObjectPool=L;exports.domEvent=p;exports.mouseEvents=S;exports.pipe=d;exports.pointerEvents=E;exports.singlePointer=N;exports.touchEvents=g;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/browser/dom-event/dom-event-signal.ts","../src/browser/dom-event/dom-event.ts","../src/browser/dom-event/mouse-events.ts","../src/browser/dom-event/pointer-events.ts","../src/browser/dom-event/touch-events.ts","../src/browser/single-pointer/recognizer-from-pointer.ts","../src/browser/single-pointer/default-factory.ts","../src/ochestrations/compose.ts","../src/ochestrations/pipe.ts"],"sourcesContent":["import { createSignal, type Signal } from \"../../core/signal.js\";\n\nexport interface DomEventSignal<E extends Event> extends Signal<\"dom-event\", E> {}\n\nexport const DOM_EVENT_SIGNAL_KIND = \"dom-event\" as const;\n\nexport function createDomEventSignal<E extends Event>(event: E): DomEventSignal<E> {\n return createSignal(DOM_EVENT_SIGNAL_KIND, event);\n}\n","import { createStream, type Stream } from \"../../core/stream.js\";\nimport { createDomEventSignal, type DomEventSignal } from \"./dom-event-signal.js\";\n\nexport function domEvent(\n target: EventTarget,\n eventName: string,\n options?: AddEventListenerOptions,\n): Stream<DomEventSignal<Event>> {\n return createStream<DomEventSignal<Event>>((observer) => {\n const handler = (e: Event) => {\n observer.next(createDomEventSignal(e));\n };\n\n target.addEventListener(eventName, handler, options);\n\n return () => {\n target.removeEventListener(eventName, handler, options);\n };\n });\n}\n","import { createStream, type Stream } from \"../../core/stream.js\";\nimport { createDomEventSignal, type DomEventSignal } from \"./dom-event-signal.js\";\n\nconst MOUSE_EVENTS = [\"mousedown\", \"mousemove\", \"mouseup\"] as const;\n\nexport function mouseEvents(\n target: EventTarget,\n options?: AddEventListenerOptions,\n): Stream<DomEventSignal<MouseEvent>> {\n return createStream<DomEventSignal<MouseEvent>>((observer) => {\n const handler = (event: Event) => {\n observer.next(createDomEventSignal(event as MouseEvent));\n };\n\n for (let i = 0; i < MOUSE_EVENTS.length; i++) {\n const eventName = MOUSE_EVENTS[i];\n target.addEventListener(eventName, handler, options);\n }\n\n return () => {\n for (let i = 0; i < MOUSE_EVENTS.length; i++) {\n const eventName = MOUSE_EVENTS[i];\n target.removeEventListener(eventName, handler, options);\n }\n };\n });\n}\n","import { createStream, type Stream } from \"../../core/stream.js\";\nimport { createDomEventSignal, type DomEventSignal } from \"./dom-event-signal.js\";\n\nconst POINTER_EVENTS = [\"pointerdown\", \"pointermove\", \"pointerup\", \"pointercancel\"] as const;\n\nexport function pointerEvents(\n target: EventTarget,\n options?: AddEventListenerOptions,\n): Stream<DomEventSignal<PointerEvent>> {\n return createStream<DomEventSignal<PointerEvent>>((observer) => {\n const handler = (event: Event) => {\n observer.next(createDomEventSignal(event as PointerEvent));\n };\n\n for (let i = 0; i < POINTER_EVENTS.length; i++) {\n const eventName = POINTER_EVENTS[i];\n target.addEventListener(eventName, handler, options);\n }\n\n return () => {\n for (let i = 0; i < POINTER_EVENTS.length; i++) {\n const eventName = POINTER_EVENTS[i];\n target.removeEventListener(eventName, handler, options);\n }\n };\n });\n}\n","import { createStream, type Stream } from \"../../core/stream.js\";\nimport { createDomEventSignal, type DomEventSignal } from \"./dom-event-signal.js\";\n\nconst TOUCH_EVENTS = [\"touchstart\", \"touchmove\", \"touchend\", \"touchcancel\"] as const;\n\nexport function touchEvents(\n target: EventTarget,\n options?: AddEventListenerOptions,\n): Stream<DomEventSignal<TouchEvent>> {\n return createStream((observer) => {\n const handler = (event: Event) => {\n observer.next(createDomEventSignal(event as TouchEvent));\n };\n\n for (let i = 0; i < TOUCH_EVENTS.length; i++) {\n const eventName = TOUCH_EVENTS[i];\n target.addEventListener(eventName, handler, options);\n }\n\n return () => {\n for (let i = 0; i < TOUCH_EVENTS.length; i++) {\n const eventName = TOUCH_EVENTS[i];\n target.removeEventListener(eventName, handler, options);\n }\n };\n });\n}\n","import type { Operator } from \"../../core/stream.js\";\nimport { createStream } from \"../../core/stream.js\";\nimport type { DomEventSignal } from \"../dom-event/dom-event-signal.js\";\nimport { createSinglePointerRecognizer, type SinglePointerRecognizer } from \"./recognizer.js\";\nimport type { SinglePointerSignal } from \"./single-pointer-signal.js\";\nimport {\n type SinglePointerButton,\n type SinglePointerOptions,\n type SinglePointerPhase,\n type SinglePointerType,\n toSinglePointerButton,\n} from \"./types.js\";\n\nexport function createPointerRecognizer(\n options: SinglePointerOptions = {},\n): SinglePointerRecognizer<DomEventSignal<PointerEvent>> {\n function processer(\n domEventSignal: DomEventSignal<PointerEvent>,\n signal: SinglePointerSignal,\n ): void {\n const e = domEventSignal.value;\n\n if (!e.isPrimary) {\n return;\n }\n\n let phase: SinglePointerPhase;\n let button: SinglePointerButton;\n switch (e.type) {\n case \"pointerdown\":\n phase = \"start\";\n button = toSinglePointerButton(e.button);\n break;\n case \"pointerup\":\n phase = \"end\";\n button = toSinglePointerButton(e.button);\n break;\n case \"pointercancel\":\n phase = \"cancel\";\n button = \"none\";\n break;\n default:\n phase = \"move\";\n button = \"none\";\n }\n\n signal.value.id = `${e.pointerType}-${e.pointerId}`;\n signal.value.phase = phase;\n signal.value.x = e.clientX;\n signal.value.y = e.clientY;\n signal.value.pageX = e.pageX;\n signal.value.pageY = e.pageY;\n signal.value.pointerType = normalizePointerType(e.pointerType);\n signal.value.button = button;\n signal.value.pressure = e.pressure;\n }\n\n return createSinglePointerRecognizer(processer, options);\n}\n\nexport function singlePointerFromPointer(\n options: SinglePointerOptions = {},\n): Operator<DomEventSignal<PointerEvent>, SinglePointerSignal> {\n return (source) =>\n createStream((observer) => {\n const recognizer = createPointerRecognizer(options);\n\n const unsub = source.subscribe({\n next(event) {\n const pointer = recognizer.process(event);\n if (pointer) {\n observer.next(pointer);\n }\n },\n error(err) {\n observer.error?.(err);\n },\n complete() {\n observer.complete?.();\n },\n });\n\n return () => {\n unsub();\n recognizer.dispose();\n };\n });\n}\n\nfunction normalizePointerType(type: string): SinglePointerType {\n switch (type) {\n case \"mouse\":\n return \"mouse\";\n case \"touch\":\n return \"touch\";\n case \"pen\":\n return \"pen\";\n default:\n return \"unknown\";\n }\n}\n","import type { Stream } from \"../../core/stream.js\";\nimport { pointerEvents } from \"../dom-event/pointer-events.js\";\nimport { singlePointerFromPointer } from \"./recognizer-from-pointer.js\";\nimport type { SinglePointerSignal } from \"./single-pointer-signal.js\";\nimport type { SinglePointerOptions } from \"./types.js\";\n\nexport function singlePointer(\n target: EventTarget,\n options: SinglePointerOptions = {},\n): Stream<SinglePointerSignal> {\n const source = pointerEvents(target);\n return singlePointerFromPointer(options)(source);\n}\n","import type { Signal } from \"../core/signal.js\";\nimport type { Operator } from \"../core/stream.js\";\nimport { pipe } from \"../index.js\";\n\nexport function compose<T extends Signal, A extends Signal>(op1: Operator<T, A>): Operator<T, A>;\nexport function compose<T extends Signal, A extends Signal, B extends Signal>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n): Operator<T, B>;\nexport function compose<T extends Signal, A extends Signal, B extends Signal, C extends Signal>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n): Operator<T, C>;\nexport function compose<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n): Operator<T, D>;\nexport function compose<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n E extends Signal,\n>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n): Operator<T, E>;\nexport function compose(...operators: Operator<Signal, Signal>[]): Operator<Signal, Signal>;\nexport function compose(...operators: Operator<Signal, Signal>[]): Operator<Signal, Signal> {\n return (source) => pipe(source, ...operators);\n}\n","import type { Signal } from \"../core/signal.js\";\nimport type { Operator, Stream } from \"../core/stream.js\";\n\nexport function pipe<T extends Signal>(source: Stream<T>): Stream<T>;\nexport function pipe<T extends Signal, A extends Signal>(\n source: Stream<T>,\n op1: Operator<T, A>,\n): Stream<A>;\nexport function pipe<T extends Signal, A extends Signal, B extends Signal>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n): Stream<B>;\nexport function pipe<T extends Signal, A extends Signal, B extends Signal, C extends Signal>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n): Stream<C>;\nexport function pipe<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n): Stream<D>;\nexport function pipe<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n E extends Signal,\n>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n): Stream<E>;\nexport function pipe<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n E extends Signal,\n F extends Signal,\n>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n): Stream<F>;\nexport function pipe<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n E extends Signal,\n F extends Signal,\n G extends Signal,\n>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n op7: Operator<F, G>,\n): Stream<G>;\nexport function pipe<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n E extends Signal,\n F extends Signal,\n G extends Signal,\n H extends Signal,\n>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n op7: Operator<F, G>,\n op8: Operator<G, H>,\n): Stream<H>;\nexport function pipe<T extends Signal>(\n source: Stream<T>,\n ...operators: Operator<Signal, Signal>[]\n): Stream<Signal>;\nexport function pipe<T extends Signal>(\n source: Stream<T>,\n ...operators: Operator<Signal, Signal>[]\n): Stream<Signal> {\n return operators.reduce((prev, op) => op(prev), source as Stream<Signal>);\n}\n"],"names":["DOM_EVENT_SIGNAL_KIND","createDomEventSignal","event","createSignal","domEvent","target","eventName","options","createStream","observer","handler","e","MOUSE_EVENTS","mouseEvents","i","POINTER_EVENTS","pointerEvents","TOUCH_EVENTS","touchEvents","createPointerRecognizer","processer","domEventSignal","signal","phase","button","toSinglePointerButton","normalizePointerType","createSinglePointerRecognizer","singlePointerFromPointer","source","recognizer","unsub","pointer","err","type","singlePointer","compose","operators","pipe","prev","op"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/browser/dom-event/dom-event-signal.ts","../src/browser/dom-event/dom-event.ts","../src/browser/dom-event/mouse-events.ts","../src/browser/dom-event/pointer-events.ts","../src/browser/dom-event/touch-events.ts","../src/browser/single-pointer/default-factory.ts","../src/internal/object-pool.ts","../src/ochestrations/compose.ts","../src/ochestrations/pipe.ts"],"sourcesContent":["import { createSignal, type Signal } from \"../../core/signal.js\";\n\nexport interface DomEventSignal<E extends Event> extends Signal<\"dom-event\", E> {}\n\nexport const DOM_EVENT_SIGNAL_KIND = \"dom-event\" as const;\n\nexport function createDomEventSignal<E extends Event>(event: E): DomEventSignal<E> {\n return createSignal(DOM_EVENT_SIGNAL_KIND, event);\n}\n","import { createStream, type Stream } from \"../../core/stream.js\";\nimport { createDomEventSignal, type DomEventSignal } from \"./dom-event-signal.js\";\n\nexport function domEvent(\n target: EventTarget,\n eventName: string,\n options?: AddEventListenerOptions,\n): Stream<DomEventSignal<Event>> {\n return createStream<DomEventSignal<Event>>((observer) => {\n const handler = (e: Event) => {\n observer.next(createDomEventSignal(e));\n };\n\n target.addEventListener(eventName, handler, options);\n\n return () => {\n target.removeEventListener(eventName, handler, options);\n };\n });\n}\n","import { createStream, type Stream } from \"../../core/stream.js\";\nimport { createDomEventSignal, type DomEventSignal } from \"./dom-event-signal.js\";\n\nconst MOUSE_EVENTS = [\"mousedown\", \"mousemove\", \"mouseup\"] as const;\n\nexport function mouseEvents(\n target: EventTarget,\n options?: AddEventListenerOptions,\n): Stream<DomEventSignal<MouseEvent>> {\n return createStream<DomEventSignal<MouseEvent>>((observer) => {\n const handler = (event: Event) => {\n observer.next(createDomEventSignal(event as MouseEvent));\n };\n\n for (let i = 0; i < MOUSE_EVENTS.length; i++) {\n const eventName = MOUSE_EVENTS[i];\n target.addEventListener(eventName, handler, options);\n }\n\n return () => {\n for (let i = 0; i < MOUSE_EVENTS.length; i++) {\n const eventName = MOUSE_EVENTS[i];\n target.removeEventListener(eventName, handler, options);\n }\n };\n });\n}\n","import { createStream, type Stream } from \"../../core/stream.js\";\nimport { createDomEventSignal, type DomEventSignal } from \"./dom-event-signal.js\";\n\nconst POINTER_EVENTS = [\"pointerdown\", \"pointermove\", \"pointerup\", \"pointercancel\"] as const;\n\nexport function pointerEvents(\n target: EventTarget,\n options?: AddEventListenerOptions,\n): Stream<DomEventSignal<PointerEvent>> {\n return createStream<DomEventSignal<PointerEvent>>((observer) => {\n const handler = (event: Event) => {\n observer.next(createDomEventSignal(event as PointerEvent));\n };\n\n for (let i = 0; i < POINTER_EVENTS.length; i++) {\n const eventName = POINTER_EVENTS[i];\n target.addEventListener(eventName, handler, options);\n }\n\n return () => {\n for (let i = 0; i < POINTER_EVENTS.length; i++) {\n const eventName = POINTER_EVENTS[i];\n target.removeEventListener(eventName, handler, options);\n }\n };\n });\n}\n","import { createStream, type Stream } from \"../../core/stream.js\";\nimport { createDomEventSignal, type DomEventSignal } from \"./dom-event-signal.js\";\n\nconst TOUCH_EVENTS = [\"touchstart\", \"touchmove\", \"touchend\", \"touchcancel\"] as const;\n\nexport function touchEvents(\n target: EventTarget,\n options?: AddEventListenerOptions,\n): Stream<DomEventSignal<TouchEvent>> {\n return createStream((observer) => {\n const handler = (event: Event) => {\n observer.next(createDomEventSignal(event as TouchEvent));\n };\n\n for (let i = 0; i < TOUCH_EVENTS.length; i++) {\n const eventName = TOUCH_EVENTS[i];\n target.addEventListener(eventName, handler, options);\n }\n\n return () => {\n for (let i = 0; i < TOUCH_EVENTS.length; i++) {\n const eventName = TOUCH_EVENTS[i];\n target.removeEventListener(eventName, handler, options);\n }\n };\n });\n}\n","import type { Stream } from \"../../core/stream.js\";\nimport { pointerEvents } from \"../dom-event/pointer-events.js\";\nimport { singlePointerFromPointer } from \"./recognizer-from-pointer.js\";\nimport type { SinglePointerSignal } from \"./single-pointer-signal.js\";\nimport type { SinglePointerOptions } from \"./types.js\";\n\nexport function singlePointer(\n target: EventTarget,\n options: SinglePointerOptions = {},\n): Stream<SinglePointerSignal> {\n const source = pointerEvents(target);\n return singlePointerFromPointer(options)(source);\n}\n","export interface ObjectPool<T> {\n acquire(): T;\n release(item: T): void;\n readonly size: number;\n}\n\nexport interface ObjectPoolOptions {\n initialSize?: number;\n maxSize?: number;\n}\n\n/**\n * Generic object pool for reusing objects and reducing GC pressure.\n * Useful for high-frequency scenarios like pointer/touch events.\n */\nexport function createObjectPool<T>(\n create: () => T,\n reset: (item: T) => void,\n options: ObjectPoolOptions = {},\n): ObjectPool<T> {\n const { initialSize = 0, maxSize = 100 } = options;\n const pool: T[] = [];\n\n for (let i = 0; i < initialSize; i++) {\n pool.push(create());\n }\n\n return {\n get size() {\n return pool.length;\n },\n\n acquire(): T {\n if (pool.length > 0) {\n return pool.pop()!;\n }\n return create();\n },\n\n release(item: T): void {\n if (pool.length < maxSize) {\n reset(item);\n pool.push(item);\n }\n },\n };\n}\n","import type { Signal } from \"../core/signal.js\";\nimport type { Operator } from \"../core/stream.js\";\nimport { pipe } from \"../index.js\";\n\nexport function compose<T extends Signal, A extends Signal>(op1: Operator<T, A>): Operator<T, A>;\nexport function compose<T extends Signal, A extends Signal, B extends Signal>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n): Operator<T, B>;\nexport function compose<T extends Signal, A extends Signal, B extends Signal, C extends Signal>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n): Operator<T, C>;\nexport function compose<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n): Operator<T, D>;\nexport function compose<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n E extends Signal,\n>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n): Operator<T, E>;\nexport function compose(...operators: Operator<Signal, Signal>[]): Operator<Signal, Signal>;\nexport function compose(...operators: Operator<Signal, Signal>[]): Operator<Signal, Signal> {\n return (source) => pipe(source, ...operators);\n}\n","import type { Signal } from \"../core/signal.js\";\nimport type { Operator, Stream } from \"../core/stream.js\";\n\nexport function pipe<T extends Signal>(source: Stream<T>): Stream<T>;\nexport function pipe<T extends Signal, A extends Signal>(\n source: Stream<T>,\n op1: Operator<T, A>,\n): Stream<A>;\nexport function pipe<T extends Signal, A extends Signal, B extends Signal>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n): Stream<B>;\nexport function pipe<T extends Signal, A extends Signal, B extends Signal, C extends Signal>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n): Stream<C>;\nexport function pipe<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n): Stream<D>;\nexport function pipe<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n E extends Signal,\n>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n): Stream<E>;\nexport function pipe<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n E extends Signal,\n F extends Signal,\n>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n): Stream<F>;\nexport function pipe<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n E extends Signal,\n F extends Signal,\n G extends Signal,\n>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n op7: Operator<F, G>,\n): Stream<G>;\nexport function pipe<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n E extends Signal,\n F extends Signal,\n G extends Signal,\n H extends Signal,\n>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n op7: Operator<F, G>,\n op8: Operator<G, H>,\n): Stream<H>;\nexport function pipe<T extends Signal>(\n source: Stream<T>,\n ...operators: Operator<Signal, Signal>[]\n): Stream<Signal>;\nexport function pipe<T extends Signal>(\n source: Stream<T>,\n ...operators: Operator<Signal, Signal>[]\n): Stream<Signal> {\n return operators.reduce((prev, op) => op(prev), source as Stream<Signal>);\n}\n"],"names":["DOM_EVENT_SIGNAL_KIND","createDomEventSignal","event","createSignal","domEvent","target","eventName","options","createStream","observer","handler","e","MOUSE_EVENTS","mouseEvents","i","POINTER_EVENTS","pointerEvents","TOUCH_EVENTS","touchEvents","singlePointer","source","singlePointerFromPointer","createObjectPool","create","reset","initialSize","maxSize","pool","item","compose","operators","pipe","prev","op"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,149 +1,111 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { c as m } from "./stream-CDK0RZPi.js";
|
|
2
|
+
import { a as v } from "./recognizer-CGZKcxpa.js";
|
|
3
|
+
import { s as D } from "./recognizer-CGZKcxpa.js";
|
|
4
|
+
import { singlePointerRecognizer as E } from "./single-pointer/pointer.js";
|
|
5
5
|
const f = "dom-event";
|
|
6
|
-
function
|
|
7
|
-
return v(f,
|
|
6
|
+
function a(n) {
|
|
7
|
+
return v(f, n);
|
|
8
8
|
}
|
|
9
|
-
function
|
|
10
|
-
return
|
|
11
|
-
const e = (
|
|
12
|
-
|
|
9
|
+
function S(n, r, o) {
|
|
10
|
+
return m((i) => {
|
|
11
|
+
const e = (t) => {
|
|
12
|
+
i.next(a(t));
|
|
13
13
|
};
|
|
14
|
-
return
|
|
15
|
-
|
|
14
|
+
return n.addEventListener(r, e, o), () => {
|
|
15
|
+
n.removeEventListener(r, e, o);
|
|
16
16
|
};
|
|
17
17
|
});
|
|
18
18
|
}
|
|
19
19
|
const s = ["mousedown", "mousemove", "mouseup"];
|
|
20
|
-
function
|
|
21
|
-
return
|
|
22
|
-
const
|
|
23
|
-
|
|
20
|
+
function L(n, r) {
|
|
21
|
+
return m((o) => {
|
|
22
|
+
const i = (e) => {
|
|
23
|
+
o.next(a(e));
|
|
24
24
|
};
|
|
25
25
|
for (let e = 0; e < s.length; e++) {
|
|
26
|
-
const
|
|
27
|
-
|
|
26
|
+
const t = s[e];
|
|
27
|
+
n.addEventListener(t, i, r);
|
|
28
28
|
}
|
|
29
29
|
return () => {
|
|
30
30
|
for (let e = 0; e < s.length; e++) {
|
|
31
|
-
const
|
|
32
|
-
|
|
31
|
+
const t = s[e];
|
|
32
|
+
n.removeEventListener(t, i, r);
|
|
33
33
|
}
|
|
34
34
|
};
|
|
35
35
|
});
|
|
36
36
|
}
|
|
37
|
-
const
|
|
38
|
-
function
|
|
39
|
-
return
|
|
40
|
-
const
|
|
41
|
-
|
|
37
|
+
const u = ["pointerdown", "pointermove", "pointerup", "pointercancel"];
|
|
38
|
+
function h(n, r) {
|
|
39
|
+
return m((o) => {
|
|
40
|
+
const i = (e) => {
|
|
41
|
+
o.next(a(e));
|
|
42
42
|
};
|
|
43
|
-
for (let e = 0; e <
|
|
44
|
-
const
|
|
45
|
-
|
|
43
|
+
for (let e = 0; e < u.length; e++) {
|
|
44
|
+
const t = u[e];
|
|
45
|
+
n.addEventListener(t, i, r);
|
|
46
46
|
}
|
|
47
47
|
return () => {
|
|
48
|
-
for (let e = 0; e <
|
|
49
|
-
const
|
|
50
|
-
|
|
48
|
+
for (let e = 0; e < u.length; e++) {
|
|
49
|
+
const t = u[e];
|
|
50
|
+
n.removeEventListener(t, i, r);
|
|
51
51
|
}
|
|
52
52
|
};
|
|
53
53
|
});
|
|
54
54
|
}
|
|
55
|
-
const
|
|
56
|
-
function
|
|
57
|
-
return
|
|
58
|
-
const
|
|
59
|
-
|
|
55
|
+
const l = ["touchstart", "touchmove", "touchend", "touchcancel"];
|
|
56
|
+
function x(n, r) {
|
|
57
|
+
return m((o) => {
|
|
58
|
+
const i = (e) => {
|
|
59
|
+
o.next(a(e));
|
|
60
60
|
};
|
|
61
|
-
for (let e = 0; e <
|
|
62
|
-
const
|
|
63
|
-
|
|
61
|
+
for (let e = 0; e < l.length; e++) {
|
|
62
|
+
const t = l[e];
|
|
63
|
+
n.addEventListener(t, i, r);
|
|
64
64
|
}
|
|
65
65
|
return () => {
|
|
66
|
-
for (let e = 0; e <
|
|
67
|
-
const
|
|
68
|
-
|
|
66
|
+
for (let e = 0; e < l.length; e++) {
|
|
67
|
+
const t = l[e];
|
|
68
|
+
n.removeEventListener(t, i, r);
|
|
69
69
|
}
|
|
70
70
|
};
|
|
71
71
|
});
|
|
72
72
|
}
|
|
73
|
-
function
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
if (!e.isPrimary)
|
|
77
|
-
return;
|
|
78
|
-
let r, u;
|
|
79
|
-
switch (e.type) {
|
|
80
|
-
case "pointerdown":
|
|
81
|
-
r = "start", u = m(e.button);
|
|
82
|
-
break;
|
|
83
|
-
case "pointerup":
|
|
84
|
-
r = "end", u = m(e.button);
|
|
85
|
-
break;
|
|
86
|
-
case "pointercancel":
|
|
87
|
-
r = "cancel", u = "none";
|
|
88
|
-
break;
|
|
89
|
-
default:
|
|
90
|
-
r = "move", u = "none";
|
|
91
|
-
}
|
|
92
|
-
n.value.id = `${e.pointerType}-${e.pointerId}`, n.value.phase = r, n.value.x = e.clientX, n.value.y = e.clientY, n.value.pageX = e.pageX, n.value.pageY = e.pageY, n.value.pointerType = b(e.pointerType), n.value.button = u, n.value.pressure = e.pressure;
|
|
93
|
-
}
|
|
94
|
-
return d(o, t);
|
|
95
|
-
}
|
|
96
|
-
function N(t = {}) {
|
|
97
|
-
return (o) => i((c) => {
|
|
98
|
-
const n = h(t), e = o.subscribe({
|
|
99
|
-
next(r) {
|
|
100
|
-
const u = n.process(r);
|
|
101
|
-
u && c.next(u);
|
|
102
|
-
},
|
|
103
|
-
error(r) {
|
|
104
|
-
c.error?.(r);
|
|
105
|
-
},
|
|
106
|
-
complete() {
|
|
107
|
-
c.complete?.();
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
return () => {
|
|
111
|
-
e(), n.dispose();
|
|
112
|
-
};
|
|
113
|
-
});
|
|
73
|
+
function P(n, r = {}) {
|
|
74
|
+
const o = h(n);
|
|
75
|
+
return E(r)(o);
|
|
114
76
|
}
|
|
115
|
-
function
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
return
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
77
|
+
function T(n, r, o = {}) {
|
|
78
|
+
const { initialSize: i = 0, maxSize: e = 100 } = o, t = [];
|
|
79
|
+
for (let c = 0; c < i; c++)
|
|
80
|
+
t.push(n());
|
|
81
|
+
return {
|
|
82
|
+
get size() {
|
|
83
|
+
return t.length;
|
|
84
|
+
},
|
|
85
|
+
acquire() {
|
|
86
|
+
return t.length > 0 ? t.pop() : n();
|
|
87
|
+
},
|
|
88
|
+
release(c) {
|
|
89
|
+
t.length < e && (r(c), t.push(c));
|
|
90
|
+
}
|
|
91
|
+
};
|
|
130
92
|
}
|
|
131
|
-
function _(...
|
|
132
|
-
return (
|
|
93
|
+
function _(...n) {
|
|
94
|
+
return (r) => d(r, ...n);
|
|
133
95
|
}
|
|
134
|
-
function
|
|
135
|
-
return
|
|
96
|
+
function d(n, ...r) {
|
|
97
|
+
return r.reduce((o, i) => i(o), n);
|
|
136
98
|
}
|
|
137
99
|
export {
|
|
138
100
|
_ as compose,
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
101
|
+
T as createObjectPool,
|
|
102
|
+
m as createStream,
|
|
103
|
+
S as domEvent,
|
|
104
|
+
L as mouseEvents,
|
|
105
|
+
d as pipe,
|
|
106
|
+
h as pointerEvents,
|
|
107
|
+
D as setCerebDeviceId,
|
|
108
|
+
P as singlePointer,
|
|
109
|
+
x as touchEvents
|
|
148
110
|
};
|
|
149
111
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/browser/dom-event/dom-event-signal.ts","../src/browser/dom-event/dom-event.ts","../src/browser/dom-event/mouse-events.ts","../src/browser/dom-event/pointer-events.ts","../src/browser/dom-event/touch-events.ts","../src/browser/single-pointer/recognizer-from-pointer.ts","../src/browser/single-pointer/default-factory.ts","../src/ochestrations/compose.ts","../src/ochestrations/pipe.ts"],"sourcesContent":["import { createSignal, type Signal } from \"../../core/signal.js\";\n\nexport interface DomEventSignal<E extends Event> extends Signal<\"dom-event\", E> {}\n\nexport const DOM_EVENT_SIGNAL_KIND = \"dom-event\" as const;\n\nexport function createDomEventSignal<E extends Event>(event: E): DomEventSignal<E> {\n return createSignal(DOM_EVENT_SIGNAL_KIND, event);\n}\n","import { createStream, type Stream } from \"../../core/stream.js\";\nimport { createDomEventSignal, type DomEventSignal } from \"./dom-event-signal.js\";\n\nexport function domEvent(\n target: EventTarget,\n eventName: string,\n options?: AddEventListenerOptions,\n): Stream<DomEventSignal<Event>> {\n return createStream<DomEventSignal<Event>>((observer) => {\n const handler = (e: Event) => {\n observer.next(createDomEventSignal(e));\n };\n\n target.addEventListener(eventName, handler, options);\n\n return () => {\n target.removeEventListener(eventName, handler, options);\n };\n });\n}\n","import { createStream, type Stream } from \"../../core/stream.js\";\nimport { createDomEventSignal, type DomEventSignal } from \"./dom-event-signal.js\";\n\nconst MOUSE_EVENTS = [\"mousedown\", \"mousemove\", \"mouseup\"] as const;\n\nexport function mouseEvents(\n target: EventTarget,\n options?: AddEventListenerOptions,\n): Stream<DomEventSignal<MouseEvent>> {\n return createStream<DomEventSignal<MouseEvent>>((observer) => {\n const handler = (event: Event) => {\n observer.next(createDomEventSignal(event as MouseEvent));\n };\n\n for (let i = 0; i < MOUSE_EVENTS.length; i++) {\n const eventName = MOUSE_EVENTS[i];\n target.addEventListener(eventName, handler, options);\n }\n\n return () => {\n for (let i = 0; i < MOUSE_EVENTS.length; i++) {\n const eventName = MOUSE_EVENTS[i];\n target.removeEventListener(eventName, handler, options);\n }\n };\n });\n}\n","import { createStream, type Stream } from \"../../core/stream.js\";\nimport { createDomEventSignal, type DomEventSignal } from \"./dom-event-signal.js\";\n\nconst POINTER_EVENTS = [\"pointerdown\", \"pointermove\", \"pointerup\", \"pointercancel\"] as const;\n\nexport function pointerEvents(\n target: EventTarget,\n options?: AddEventListenerOptions,\n): Stream<DomEventSignal<PointerEvent>> {\n return createStream<DomEventSignal<PointerEvent>>((observer) => {\n const handler = (event: Event) => {\n observer.next(createDomEventSignal(event as PointerEvent));\n };\n\n for (let i = 0; i < POINTER_EVENTS.length; i++) {\n const eventName = POINTER_EVENTS[i];\n target.addEventListener(eventName, handler, options);\n }\n\n return () => {\n for (let i = 0; i < POINTER_EVENTS.length; i++) {\n const eventName = POINTER_EVENTS[i];\n target.removeEventListener(eventName, handler, options);\n }\n };\n });\n}\n","import { createStream, type Stream } from \"../../core/stream.js\";\nimport { createDomEventSignal, type DomEventSignal } from \"./dom-event-signal.js\";\n\nconst TOUCH_EVENTS = [\"touchstart\", \"touchmove\", \"touchend\", \"touchcancel\"] as const;\n\nexport function touchEvents(\n target: EventTarget,\n options?: AddEventListenerOptions,\n): Stream<DomEventSignal<TouchEvent>> {\n return createStream((observer) => {\n const handler = (event: Event) => {\n observer.next(createDomEventSignal(event as TouchEvent));\n };\n\n for (let i = 0; i < TOUCH_EVENTS.length; i++) {\n const eventName = TOUCH_EVENTS[i];\n target.addEventListener(eventName, handler, options);\n }\n\n return () => {\n for (let i = 0; i < TOUCH_EVENTS.length; i++) {\n const eventName = TOUCH_EVENTS[i];\n target.removeEventListener(eventName, handler, options);\n }\n };\n });\n}\n","import type { Operator } from \"../../core/stream.js\";\nimport { createStream } from \"../../core/stream.js\";\nimport type { DomEventSignal } from \"../dom-event/dom-event-signal.js\";\nimport { createSinglePointerRecognizer, type SinglePointerRecognizer } from \"./recognizer.js\";\nimport type { SinglePointerSignal } from \"./single-pointer-signal.js\";\nimport {\n type SinglePointerButton,\n type SinglePointerOptions,\n type SinglePointerPhase,\n type SinglePointerType,\n toSinglePointerButton,\n} from \"./types.js\";\n\nexport function createPointerRecognizer(\n options: SinglePointerOptions = {},\n): SinglePointerRecognizer<DomEventSignal<PointerEvent>> {\n function processer(\n domEventSignal: DomEventSignal<PointerEvent>,\n signal: SinglePointerSignal,\n ): void {\n const e = domEventSignal.value;\n\n if (!e.isPrimary) {\n return;\n }\n\n let phase: SinglePointerPhase;\n let button: SinglePointerButton;\n switch (e.type) {\n case \"pointerdown\":\n phase = \"start\";\n button = toSinglePointerButton(e.button);\n break;\n case \"pointerup\":\n phase = \"end\";\n button = toSinglePointerButton(e.button);\n break;\n case \"pointercancel\":\n phase = \"cancel\";\n button = \"none\";\n break;\n default:\n phase = \"move\";\n button = \"none\";\n }\n\n signal.value.id = `${e.pointerType}-${e.pointerId}`;\n signal.value.phase = phase;\n signal.value.x = e.clientX;\n signal.value.y = e.clientY;\n signal.value.pageX = e.pageX;\n signal.value.pageY = e.pageY;\n signal.value.pointerType = normalizePointerType(e.pointerType);\n signal.value.button = button;\n signal.value.pressure = e.pressure;\n }\n\n return createSinglePointerRecognizer(processer, options);\n}\n\nexport function singlePointerFromPointer(\n options: SinglePointerOptions = {},\n): Operator<DomEventSignal<PointerEvent>, SinglePointerSignal> {\n return (source) =>\n createStream((observer) => {\n const recognizer = createPointerRecognizer(options);\n\n const unsub = source.subscribe({\n next(event) {\n const pointer = recognizer.process(event);\n if (pointer) {\n observer.next(pointer);\n }\n },\n error(err) {\n observer.error?.(err);\n },\n complete() {\n observer.complete?.();\n },\n });\n\n return () => {\n unsub();\n recognizer.dispose();\n };\n });\n}\n\nfunction normalizePointerType(type: string): SinglePointerType {\n switch (type) {\n case \"mouse\":\n return \"mouse\";\n case \"touch\":\n return \"touch\";\n case \"pen\":\n return \"pen\";\n default:\n return \"unknown\";\n }\n}\n","import type { Stream } from \"../../core/stream.js\";\nimport { pointerEvents } from \"../dom-event/pointer-events.js\";\nimport { singlePointerFromPointer } from \"./recognizer-from-pointer.js\";\nimport type { SinglePointerSignal } from \"./single-pointer-signal.js\";\nimport type { SinglePointerOptions } from \"./types.js\";\n\nexport function singlePointer(\n target: EventTarget,\n options: SinglePointerOptions = {},\n): Stream<SinglePointerSignal> {\n const source = pointerEvents(target);\n return singlePointerFromPointer(options)(source);\n}\n","import type { Signal } from \"../core/signal.js\";\nimport type { Operator } from \"../core/stream.js\";\nimport { pipe } from \"../index.js\";\n\nexport function compose<T extends Signal, A extends Signal>(op1: Operator<T, A>): Operator<T, A>;\nexport function compose<T extends Signal, A extends Signal, B extends Signal>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n): Operator<T, B>;\nexport function compose<T extends Signal, A extends Signal, B extends Signal, C extends Signal>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n): Operator<T, C>;\nexport function compose<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n): Operator<T, D>;\nexport function compose<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n E extends Signal,\n>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n): Operator<T, E>;\nexport function compose(...operators: Operator<Signal, Signal>[]): Operator<Signal, Signal>;\nexport function compose(...operators: Operator<Signal, Signal>[]): Operator<Signal, Signal> {\n return (source) => pipe(source, ...operators);\n}\n","import type { Signal } from \"../core/signal.js\";\nimport type { Operator, Stream } from \"../core/stream.js\";\n\nexport function pipe<T extends Signal>(source: Stream<T>): Stream<T>;\nexport function pipe<T extends Signal, A extends Signal>(\n source: Stream<T>,\n op1: Operator<T, A>,\n): Stream<A>;\nexport function pipe<T extends Signal, A extends Signal, B extends Signal>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n): Stream<B>;\nexport function pipe<T extends Signal, A extends Signal, B extends Signal, C extends Signal>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n): Stream<C>;\nexport function pipe<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n): Stream<D>;\nexport function pipe<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n E extends Signal,\n>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n): Stream<E>;\nexport function pipe<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n E extends Signal,\n F extends Signal,\n>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n): Stream<F>;\nexport function pipe<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n E extends Signal,\n F extends Signal,\n G extends Signal,\n>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n op7: Operator<F, G>,\n): Stream<G>;\nexport function pipe<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n E extends Signal,\n F extends Signal,\n G extends Signal,\n H extends Signal,\n>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n op7: Operator<F, G>,\n op8: Operator<G, H>,\n): Stream<H>;\nexport function pipe<T extends Signal>(\n source: Stream<T>,\n ...operators: Operator<Signal, Signal>[]\n): Stream<Signal>;\nexport function pipe<T extends Signal>(\n source: Stream<T>,\n ...operators: Operator<Signal, Signal>[]\n): Stream<Signal> {\n return operators.reduce((prev, op) => op(prev), source as Stream<Signal>);\n}\n"],"names":["DOM_EVENT_SIGNAL_KIND","createDomEventSignal","event","createSignal","domEvent","target","eventName","options","createStream","observer","handler","e","MOUSE_EVENTS","mouseEvents","i","POINTER_EVENTS","pointerEvents","TOUCH_EVENTS","touchEvents","createPointerRecognizer","processer","domEventSignal","signal","phase","button","toSinglePointerButton","normalizePointerType","createSinglePointerRecognizer","singlePointerFromPointer","source","recognizer","unsub","pointer","err","type","singlePointer","compose","operators","pipe","prev","op"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/browser/dom-event/dom-event-signal.ts","../src/browser/dom-event/dom-event.ts","../src/browser/dom-event/mouse-events.ts","../src/browser/dom-event/pointer-events.ts","../src/browser/dom-event/touch-events.ts","../src/browser/single-pointer/default-factory.ts","../src/internal/object-pool.ts","../src/ochestrations/compose.ts","../src/ochestrations/pipe.ts"],"sourcesContent":["import { createSignal, type Signal } from \"../../core/signal.js\";\n\nexport interface DomEventSignal<E extends Event> extends Signal<\"dom-event\", E> {}\n\nexport const DOM_EVENT_SIGNAL_KIND = \"dom-event\" as const;\n\nexport function createDomEventSignal<E extends Event>(event: E): DomEventSignal<E> {\n return createSignal(DOM_EVENT_SIGNAL_KIND, event);\n}\n","import { createStream, type Stream } from \"../../core/stream.js\";\nimport { createDomEventSignal, type DomEventSignal } from \"./dom-event-signal.js\";\n\nexport function domEvent(\n target: EventTarget,\n eventName: string,\n options?: AddEventListenerOptions,\n): Stream<DomEventSignal<Event>> {\n return createStream<DomEventSignal<Event>>((observer) => {\n const handler = (e: Event) => {\n observer.next(createDomEventSignal(e));\n };\n\n target.addEventListener(eventName, handler, options);\n\n return () => {\n target.removeEventListener(eventName, handler, options);\n };\n });\n}\n","import { createStream, type Stream } from \"../../core/stream.js\";\nimport { createDomEventSignal, type DomEventSignal } from \"./dom-event-signal.js\";\n\nconst MOUSE_EVENTS = [\"mousedown\", \"mousemove\", \"mouseup\"] as const;\n\nexport function mouseEvents(\n target: EventTarget,\n options?: AddEventListenerOptions,\n): Stream<DomEventSignal<MouseEvent>> {\n return createStream<DomEventSignal<MouseEvent>>((observer) => {\n const handler = (event: Event) => {\n observer.next(createDomEventSignal(event as MouseEvent));\n };\n\n for (let i = 0; i < MOUSE_EVENTS.length; i++) {\n const eventName = MOUSE_EVENTS[i];\n target.addEventListener(eventName, handler, options);\n }\n\n return () => {\n for (let i = 0; i < MOUSE_EVENTS.length; i++) {\n const eventName = MOUSE_EVENTS[i];\n target.removeEventListener(eventName, handler, options);\n }\n };\n });\n}\n","import { createStream, type Stream } from \"../../core/stream.js\";\nimport { createDomEventSignal, type DomEventSignal } from \"./dom-event-signal.js\";\n\nconst POINTER_EVENTS = [\"pointerdown\", \"pointermove\", \"pointerup\", \"pointercancel\"] as const;\n\nexport function pointerEvents(\n target: EventTarget,\n options?: AddEventListenerOptions,\n): Stream<DomEventSignal<PointerEvent>> {\n return createStream<DomEventSignal<PointerEvent>>((observer) => {\n const handler = (event: Event) => {\n observer.next(createDomEventSignal(event as PointerEvent));\n };\n\n for (let i = 0; i < POINTER_EVENTS.length; i++) {\n const eventName = POINTER_EVENTS[i];\n target.addEventListener(eventName, handler, options);\n }\n\n return () => {\n for (let i = 0; i < POINTER_EVENTS.length; i++) {\n const eventName = POINTER_EVENTS[i];\n target.removeEventListener(eventName, handler, options);\n }\n };\n });\n}\n","import { createStream, type Stream } from \"../../core/stream.js\";\nimport { createDomEventSignal, type DomEventSignal } from \"./dom-event-signal.js\";\n\nconst TOUCH_EVENTS = [\"touchstart\", \"touchmove\", \"touchend\", \"touchcancel\"] as const;\n\nexport function touchEvents(\n target: EventTarget,\n options?: AddEventListenerOptions,\n): Stream<DomEventSignal<TouchEvent>> {\n return createStream((observer) => {\n const handler = (event: Event) => {\n observer.next(createDomEventSignal(event as TouchEvent));\n };\n\n for (let i = 0; i < TOUCH_EVENTS.length; i++) {\n const eventName = TOUCH_EVENTS[i];\n target.addEventListener(eventName, handler, options);\n }\n\n return () => {\n for (let i = 0; i < TOUCH_EVENTS.length; i++) {\n const eventName = TOUCH_EVENTS[i];\n target.removeEventListener(eventName, handler, options);\n }\n };\n });\n}\n","import type { Stream } from \"../../core/stream.js\";\nimport { pointerEvents } from \"../dom-event/pointer-events.js\";\nimport { singlePointerFromPointer } from \"./recognizer-from-pointer.js\";\nimport type { SinglePointerSignal } from \"./single-pointer-signal.js\";\nimport type { SinglePointerOptions } from \"./types.js\";\n\nexport function singlePointer(\n target: EventTarget,\n options: SinglePointerOptions = {},\n): Stream<SinglePointerSignal> {\n const source = pointerEvents(target);\n return singlePointerFromPointer(options)(source);\n}\n","export interface ObjectPool<T> {\n acquire(): T;\n release(item: T): void;\n readonly size: number;\n}\n\nexport interface ObjectPoolOptions {\n initialSize?: number;\n maxSize?: number;\n}\n\n/**\n * Generic object pool for reusing objects and reducing GC pressure.\n * Useful for high-frequency scenarios like pointer/touch events.\n */\nexport function createObjectPool<T>(\n create: () => T,\n reset: (item: T) => void,\n options: ObjectPoolOptions = {},\n): ObjectPool<T> {\n const { initialSize = 0, maxSize = 100 } = options;\n const pool: T[] = [];\n\n for (let i = 0; i < initialSize; i++) {\n pool.push(create());\n }\n\n return {\n get size() {\n return pool.length;\n },\n\n acquire(): T {\n if (pool.length > 0) {\n return pool.pop()!;\n }\n return create();\n },\n\n release(item: T): void {\n if (pool.length < maxSize) {\n reset(item);\n pool.push(item);\n }\n },\n };\n}\n","import type { Signal } from \"../core/signal.js\";\nimport type { Operator } from \"../core/stream.js\";\nimport { pipe } from \"../index.js\";\n\nexport function compose<T extends Signal, A extends Signal>(op1: Operator<T, A>): Operator<T, A>;\nexport function compose<T extends Signal, A extends Signal, B extends Signal>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n): Operator<T, B>;\nexport function compose<T extends Signal, A extends Signal, B extends Signal, C extends Signal>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n): Operator<T, C>;\nexport function compose<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n): Operator<T, D>;\nexport function compose<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n E extends Signal,\n>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n): Operator<T, E>;\nexport function compose(...operators: Operator<Signal, Signal>[]): Operator<Signal, Signal>;\nexport function compose(...operators: Operator<Signal, Signal>[]): Operator<Signal, Signal> {\n return (source) => pipe(source, ...operators);\n}\n","import type { Signal } from \"../core/signal.js\";\nimport type { Operator, Stream } from \"../core/stream.js\";\n\nexport function pipe<T extends Signal>(source: Stream<T>): Stream<T>;\nexport function pipe<T extends Signal, A extends Signal>(\n source: Stream<T>,\n op1: Operator<T, A>,\n): Stream<A>;\nexport function pipe<T extends Signal, A extends Signal, B extends Signal>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n): Stream<B>;\nexport function pipe<T extends Signal, A extends Signal, B extends Signal, C extends Signal>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n): Stream<C>;\nexport function pipe<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n): Stream<D>;\nexport function pipe<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n E extends Signal,\n>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n): Stream<E>;\nexport function pipe<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n E extends Signal,\n F extends Signal,\n>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n): Stream<F>;\nexport function pipe<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n E extends Signal,\n F extends Signal,\n G extends Signal,\n>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n op7: Operator<F, G>,\n): Stream<G>;\nexport function pipe<\n T extends Signal,\n A extends Signal,\n B extends Signal,\n C extends Signal,\n D extends Signal,\n E extends Signal,\n F extends Signal,\n G extends Signal,\n H extends Signal,\n>(\n source: Stream<T>,\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n op7: Operator<F, G>,\n op8: Operator<G, H>,\n): Stream<H>;\nexport function pipe<T extends Signal>(\n source: Stream<T>,\n ...operators: Operator<Signal, Signal>[]\n): Stream<Signal>;\nexport function pipe<T extends Signal>(\n source: Stream<T>,\n ...operators: Operator<Signal, Signal>[]\n): Stream<Signal> {\n return operators.reduce((prev, op) => op(prev), source as Stream<Signal>);\n}\n"],"names":["DOM_EVENT_SIGNAL_KIND","createDomEventSignal","event","createSignal","domEvent","target","eventName","options","createStream","observer","handler","e","MOUSE_EVENTS","mouseEvents","i","POINTER_EVENTS","pointerEvents","TOUCH_EVENTS","touchEvents","singlePointer","source","singlePointerFromPointer","createObjectPool","create","reset","initialSize","maxSize","pool","item","compose","operators","pipe","prev","op"],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility type that removes readonly modifier from all properties.
|
|
3
|
+
* Used internally to modify readonly Signal objects.
|
|
4
|
+
*/
|
|
5
|
+
export type Mutable<T> = {
|
|
6
|
+
-readonly [P in keyof T]: T[P];
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Deep version of Mutable that recursively removes readonly from nested objects.
|
|
10
|
+
*/
|
|
11
|
+
export type DeepMutable<T> = {
|
|
12
|
+
-readonly [P in keyof T]: T[P] extends object ? DeepMutable<T[P]> : T[P];
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/internal/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI;IAAE,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC;AAE5D;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACzE,CAAC"}
|
|
@@ -1,8 +1,22 @@
|
|
|
1
|
-
import { ExtendSignalValue, SignalWith } from '../core/signal.js';
|
|
2
|
-
import { Operator } from '../core/stream.js';
|
|
1
|
+
import { ExtendSignalValue, Signal, SignalWith } from '../core/signal.js';
|
|
2
|
+
import { Operator, Stream } from '../core/stream.js';
|
|
3
3
|
export interface OffsetOptions {
|
|
4
4
|
target: Element;
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Optional stream that triggers rect recalculation.
|
|
7
|
+
* When provided, the operator caches the rect and only recalculates when this stream emits.
|
|
8
|
+
* When not provided, getBoundingClientRect() is called on every signal (always accurate).
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* // Cache rect, recalculate on window resize
|
|
12
|
+
* const resize$ = domEvent(window, 'resize');
|
|
13
|
+
* offset({ target: el, recalculate$: resize$ })
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* // Always calculate (no caching, always accurate)
|
|
17
|
+
* offset({ target: el })
|
|
18
|
+
*/
|
|
19
|
+
recalculate$?: Stream<Signal>;
|
|
6
20
|
}
|
|
7
21
|
export interface PointerValue {
|
|
8
22
|
x: number;
|
|
@@ -13,12 +27,12 @@ export interface OffsetValue {
|
|
|
13
27
|
offsetY: number;
|
|
14
28
|
}
|
|
15
29
|
export type OffsetOperatorResult<T extends SignalWith<PointerValue>> = ExtendSignalValue<T, OffsetValue>;
|
|
16
|
-
export interface OffsetOperator<T extends SignalWith<PointerValue>> extends Operator<T, ExtendSignalValue<T, OffsetValue>> {
|
|
17
|
-
recalculate(): void;
|
|
18
|
-
}
|
|
19
30
|
/**
|
|
20
31
|
* Creates an operator that adds element-relative offset coordinates to pointer signals.
|
|
21
32
|
* Uses getBoundingClientRect() to calculate offsetX and offsetY relative to the target element.
|
|
33
|
+
*
|
|
34
|
+
* @param options.target - The element to calculate offset relative to
|
|
35
|
+
* @param options.recalculate$ - Optional stream that triggers rect recalculation for caching
|
|
22
36
|
*/
|
|
23
|
-
export declare function offset<T extends SignalWith<PointerValue>>(options: OffsetOptions):
|
|
37
|
+
export declare function offset<T extends SignalWith<PointerValue>>(options: OffsetOptions): Operator<T, ExtendSignalValue<T, OffsetValue>>;
|
|
24
38
|
//# sourceMappingURL=offset.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"offset.d.ts","sourceRoot":"","sources":["../../src/operators/offset.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"offset.d.ts","sourceRoot":"","sources":["../../src/operators/offset.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG1D,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB;;;;;;;;;;;;;OAaG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,UAAU,CAAC,YAAY,CAAC,IAAI,iBAAiB,CACtF,CAAC,EACD,WAAW,CACZ,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,UAAU,CAAC,YAAY,CAAC,EACvD,OAAO,EAAE,aAAa,GACrB,QAAQ,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CA2DhD"}
|