cereb 0.4.0 → 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/recognizer.d.ts.map +1 -1
- package/dist/browser/single-pointer/single-pointer-signal.d.ts +0 -2
- package/dist/browser/single-pointer/single-pointer-signal.d.ts.map +1 -1
- package/dist/core/index.d.ts +0 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +51 -61
- package/dist/index.js.map +1 -1
- 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.js +1 -1
- package/dist/single-pointer/pointer.cjs +1 -1
- package/dist/single-pointer/pointer.js +1 -1
- package/dist/single-pointer/touch.cjs +1 -1
- package/dist/single-pointer/touch.js +1 -1
- package/package.json +4 -4
- package/dist/browser/single-pointer/pool.d.ts +0 -4
- package/dist/browser/single-pointer/pool.d.ts.map +0 -1
- package/dist/core/signal-pool.d.ts +0 -33
- package/dist/core/signal-pool.d.ts.map +0 -1
- package/dist/recognizer-6XjwLbo4.js +0 -118
- package/dist/recognizer-6XjwLbo4.js.map +0 -1
- package/dist/recognizer-BnYeedMd.cjs +0 -2
- package/dist/recognizer-BnYeedMd.cjs.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 +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,6 +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 resetSinglePointerValue(value: SinglePointer): void;
|
|
25
|
-
export declare function createDefaultSinglePointerValue(): SinglePointer;
|
|
26
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;
|
|
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"}
|
package/dist/core/index.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export { setCerebDeviceId } from './meta.js';
|
|
2
2
|
export type { ExtendSignalValue, Signal } from './signal.js';
|
|
3
|
-
export { createSignalPool, type SignalKindConfig, type SignalPool, type SignalPoolOptions, signalPool, } from './signal-pool.js';
|
|
4
3
|
export { createStream, type Observer, type Operator, type Stream, type Unsubscribe, } from './stream.js';
|
|
5
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/core/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,YAAY,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,YAAY,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EACL,YAAY,EACZ,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,MAAM,EACX,KAAK,WAAW,GACjB,MAAM,aAAa,CAAC"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./stream-Cp6eCZs2.cjs"),
|
|
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/core/signal.ts","../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 { getCerebDeviceId } from \"./meta.js\";\n\nexport interface Signal<K extends string = string, V = unknown> {\n readonly kind: K;\n readonly value: V;\n readonly deviceId: string;\n readonly createdAt: number;\n readonly updatedAt?: number;\n}\n\n/**\n * Utility type to extend a Signal's value type with additional properties.\n * Used by operators that add computed properties to signals.\n */\nexport type ExtendSignalValue<T extends Signal, Additional> = Signal<\n T[\"kind\"],\n T[\"value\"] & Additional\n>;\n\n/**\n * Utility type to constrain a Signal to have specific value properties.\n * Used by operators that require certain properties in the input signal.\n */\nexport type SignalWith<V> = Signal<string, V>;\n\nexport function createSignal<K extends string = string, V = unknown>(\n kind: K,\n value: V,\n): Signal<K, V> {\n return {\n kind,\n value,\n deviceId: getCerebDeviceId(),\n createdAt: performance.now(),\n };\n}\n","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":["createSignal","kind","value","getCerebDeviceId","DOM_EVENT_SIGNAL_KIND","createDomEventSignal","event","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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"}
|
|
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,121 +1,111 @@
|
|
|
1
|
-
import { c as
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { singlePointerRecognizer as
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
value: t,
|
|
9
|
-
deviceId: v(),
|
|
10
|
-
createdAt: performance.now()
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
const E = "dom-event";
|
|
14
|
-
function m(n) {
|
|
15
|
-
return d(E, n);
|
|
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
|
+
const f = "dom-event";
|
|
6
|
+
function a(n) {
|
|
7
|
+
return v(f, n);
|
|
16
8
|
}
|
|
17
|
-
function
|
|
18
|
-
return
|
|
19
|
-
const e = (
|
|
20
|
-
i.next(
|
|
9
|
+
function S(n, r, o) {
|
|
10
|
+
return m((i) => {
|
|
11
|
+
const e = (t) => {
|
|
12
|
+
i.next(a(t));
|
|
21
13
|
};
|
|
22
|
-
return n.addEventListener(
|
|
23
|
-
n.removeEventListener(
|
|
14
|
+
return n.addEventListener(r, e, o), () => {
|
|
15
|
+
n.removeEventListener(r, e, o);
|
|
24
16
|
};
|
|
25
17
|
});
|
|
26
18
|
}
|
|
27
19
|
const s = ["mousedown", "mousemove", "mouseup"];
|
|
28
|
-
function
|
|
29
|
-
return
|
|
20
|
+
function L(n, r) {
|
|
21
|
+
return m((o) => {
|
|
30
22
|
const i = (e) => {
|
|
31
|
-
o.next(
|
|
23
|
+
o.next(a(e));
|
|
32
24
|
};
|
|
33
25
|
for (let e = 0; e < s.length; e++) {
|
|
34
|
-
const
|
|
35
|
-
n.addEventListener(
|
|
26
|
+
const t = s[e];
|
|
27
|
+
n.addEventListener(t, i, r);
|
|
36
28
|
}
|
|
37
29
|
return () => {
|
|
38
30
|
for (let e = 0; e < s.length; e++) {
|
|
39
|
-
const
|
|
40
|
-
n.removeEventListener(
|
|
31
|
+
const t = s[e];
|
|
32
|
+
n.removeEventListener(t, i, r);
|
|
41
33
|
}
|
|
42
34
|
};
|
|
43
35
|
});
|
|
44
36
|
}
|
|
45
37
|
const u = ["pointerdown", "pointermove", "pointerup", "pointercancel"];
|
|
46
|
-
function h(n,
|
|
47
|
-
return
|
|
38
|
+
function h(n, r) {
|
|
39
|
+
return m((o) => {
|
|
48
40
|
const i = (e) => {
|
|
49
|
-
o.next(
|
|
41
|
+
o.next(a(e));
|
|
50
42
|
};
|
|
51
43
|
for (let e = 0; e < u.length; e++) {
|
|
52
|
-
const
|
|
53
|
-
n.addEventListener(
|
|
44
|
+
const t = u[e];
|
|
45
|
+
n.addEventListener(t, i, r);
|
|
54
46
|
}
|
|
55
47
|
return () => {
|
|
56
48
|
for (let e = 0; e < u.length; e++) {
|
|
57
|
-
const
|
|
58
|
-
n.removeEventListener(
|
|
49
|
+
const t = u[e];
|
|
50
|
+
n.removeEventListener(t, i, r);
|
|
59
51
|
}
|
|
60
52
|
};
|
|
61
53
|
});
|
|
62
54
|
}
|
|
63
55
|
const l = ["touchstart", "touchmove", "touchend", "touchcancel"];
|
|
64
|
-
function x(n,
|
|
65
|
-
return
|
|
56
|
+
function x(n, r) {
|
|
57
|
+
return m((o) => {
|
|
66
58
|
const i = (e) => {
|
|
67
|
-
o.next(
|
|
59
|
+
o.next(a(e));
|
|
68
60
|
};
|
|
69
61
|
for (let e = 0; e < l.length; e++) {
|
|
70
|
-
const
|
|
71
|
-
n.addEventListener(
|
|
62
|
+
const t = l[e];
|
|
63
|
+
n.addEventListener(t, i, r);
|
|
72
64
|
}
|
|
73
65
|
return () => {
|
|
74
66
|
for (let e = 0; e < l.length; e++) {
|
|
75
|
-
const
|
|
76
|
-
n.removeEventListener(
|
|
67
|
+
const t = l[e];
|
|
68
|
+
n.removeEventListener(t, i, r);
|
|
77
69
|
}
|
|
78
70
|
};
|
|
79
71
|
});
|
|
80
72
|
}
|
|
81
|
-
function
|
|
73
|
+
function P(n, r = {}) {
|
|
82
74
|
const o = h(n);
|
|
83
|
-
return
|
|
75
|
+
return E(r)(o);
|
|
84
76
|
}
|
|
85
|
-
function T(n,
|
|
86
|
-
const { initialSize: i = 0, maxSize: e = 100 } = o,
|
|
77
|
+
function T(n, r, o = {}) {
|
|
78
|
+
const { initialSize: i = 0, maxSize: e = 100 } = o, t = [];
|
|
87
79
|
for (let c = 0; c < i; c++)
|
|
88
|
-
|
|
80
|
+
t.push(n());
|
|
89
81
|
return {
|
|
90
82
|
get size() {
|
|
91
|
-
return
|
|
83
|
+
return t.length;
|
|
92
84
|
},
|
|
93
85
|
acquire() {
|
|
94
|
-
return
|
|
86
|
+
return t.length > 0 ? t.pop() : n();
|
|
95
87
|
},
|
|
96
88
|
release(c) {
|
|
97
|
-
|
|
89
|
+
t.length < e && (r(c), t.push(c));
|
|
98
90
|
}
|
|
99
91
|
};
|
|
100
92
|
}
|
|
101
93
|
function _(...n) {
|
|
102
|
-
return (
|
|
94
|
+
return (r) => d(r, ...n);
|
|
103
95
|
}
|
|
104
|
-
function
|
|
105
|
-
return
|
|
96
|
+
function d(n, ...r) {
|
|
97
|
+
return r.reduce((o, i) => i(o), n);
|
|
106
98
|
}
|
|
107
99
|
export {
|
|
108
100
|
_ as compose,
|
|
109
101
|
T as createObjectPool,
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
L as
|
|
113
|
-
|
|
114
|
-
p as pipe,
|
|
102
|
+
m as createStream,
|
|
103
|
+
S as domEvent,
|
|
104
|
+
L as mouseEvents,
|
|
105
|
+
d as pipe,
|
|
115
106
|
h as pointerEvents,
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
I as singlePointer,
|
|
107
|
+
D as setCerebDeviceId,
|
|
108
|
+
P as singlePointer,
|
|
119
109
|
x as touchEvents
|
|
120
110
|
};
|
|
121
111
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/core/signal.ts","../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 { getCerebDeviceId } from \"./meta.js\";\n\nexport interface Signal<K extends string = string, V = unknown> {\n readonly kind: K;\n readonly value: V;\n readonly deviceId: string;\n readonly createdAt: number;\n readonly updatedAt?: number;\n}\n\n/**\n * Utility type to extend a Signal's value type with additional properties.\n * Used by operators that add computed properties to signals.\n */\nexport type ExtendSignalValue<T extends Signal, Additional> = Signal<\n T[\"kind\"],\n T[\"value\"] & Additional\n>;\n\n/**\n * Utility type to constrain a Signal to have specific value properties.\n * Used by operators that require certain properties in the input signal.\n */\nexport type SignalWith<V> = Signal<string, V>;\n\nexport function createSignal<K extends string = string, V = unknown>(\n kind: K,\n value: V,\n): Signal<K, V> {\n return {\n kind,\n value,\n deviceId: getCerebDeviceId(),\n createdAt: performance.now(),\n };\n}\n","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":["createSignal","kind","value","getCerebDeviceId","DOM_EVENT_SIGNAL_KIND","createDomEventSignal","event","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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"}
|
|
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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"}
|
|
@@ -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"}
|
package/dist/operators.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 l=require("./stream-Cp6eCZs2.cjs");function x(c){return r=>l.createStream(e=>{let t=[];return r.subscribe({next(n){t.push(n),t.length>=c&&(e.next({kind:"buffer",value:t,deviceId:"",createdAt:Date.now()}),t=[])},error:e.error?.bind(e),complete(){t.length>0&&e.next({kind:"buffer",value:t,deviceId:"",createdAt:Date.now()}),e.complete?.()}})})}function h(c){return r=>l.createStream(e=>{let t=[];const n=setInterval(()=>{t.length>0&&(e.next({kind:"buffer",value:t,deviceId:"",createdAt:Date.now()}),t=[])},c),u=r.subscribe({next(i){t.push(i)},error:e.error?.bind(e),complete(){clearInterval(n),t.length>0&&e.next({kind:"buffer",value:t,deviceId:"",createdAt:Date.now()}),e.complete?.()}});return()=>{clearInterval(n),u()}})}function k(c){return r=>l.createStream(e=>{let t=[];const n=c.subscribe(()=>{t.length>0&&(e.next({kind:"buffer",value:t,deviceId:"",createdAt:Date.now()}),t=[])}),u=r.subscribe({next(i){t.push(i)},error:e.error?.bind(e),complete(){n(),t.length>0&&e.next({kind:"buffer",value:t,deviceId:"",createdAt:Date.now()}),e.complete?.()}});return()=>{n(),u()}})}function g(c){return r=>l.createStream(e=>{let t=null;const n=r.subscribe({next(u){t!==null&&clearTimeout(t),t=setTimeout(()=>{t=null,e.next(u)},c)},error:e.error?.bind(e),complete(){t!==null&&clearTimeout(t),e.complete?.()}});return()=>{t!==null&&clearTimeout(t),n()}})}function S(c){const r=c??((e,t)=>e.value===t.value);return e=>l.createStream(t=>{let n=!1,u;return e.subscribe({next(i){(!n||!r(u,i))&&(n=!0,u=i,t.next(i))},error:t.error?.bind(t),complete:t.complete?.bind(t)})})}function U(c,r){const e=r??((t,n)=>t===n);return t=>l.createStream(n=>{let u=!1,i;return t.subscribe({next(o){const s=c(o);(!u||!e(i,s))&&(u=!0,i=s,n.next(o))},error:n.error?.bind(n),complete:n.complete?.bind(n)})})}function y(c){return r=>l.createStream(e=>r.subscribe({next(t){try{c(t)&&e.next(t)}catch(n){e.error?.(n)}},error:e.error?.bind(e),complete:e.complete?.bind(e)}))}function w(c){return r=>l.createStream(e=>r.subscribe({next(t){try{e.next(c(t))}catch(n){e.error?.(n)}},error:e.error?.bind(e),complete:e.complete?.bind(e)}))}function I(c){return r=>l.createStream(e=>{let t=0;const n=()=>{t++,t===2&&e.complete?.()},u=r.subscribe({next:o=>e.next(o),error:e.error?.bind(e),complete:n}),i=c.subscribe({next:o=>e.next(o),error:e.error?.bind(e),complete:n});return()=>{u(),i()}})}function T(...c){return l.createStream(r=>{let e=0;const t=c.map(n=>n.subscribe({next:u=>r.next(u),error:r.error?.bind(r),complete:()=>{e++,e===c.length&&r.complete?.()}}));return()=>{for(const n of t)n()}})}function C(c){const{target:r,recalculate$:e}=c;if(!r)throw new Error("offset operator requires a valid target element");return t=>l.createStream(n=>{let u=null;function i(){return e?(u||(u=r.getBoundingClientRect()),u):r.getBoundingClientRect()}let o;e&&(o=e.subscribe({next(){u=r.getBoundingClientRect()}}));const s=t.subscribe({next(m){try{const f=i(),a=m.value;a.offsetX=a.x-f.left,a.offsetY=a.y-f.top,n.next(m)}catch(f){n.error?.(f)}},error:n.error?.bind(n),complete(){n.complete?.()}});return()=>{s(),o?.()}})}function p(c){return r=>l.createStream(e=>{let t=!1;return r.subscribe({next(n){try{t?(e.next(n),c.end(n)&&(t=!1)):c.start(n)&&(t=!0,e.next(n))}catch(u){e.error?.(u)}},error:e.error?.bind(e),complete:e.complete?.bind(e)})})}function A(){return p({start:c=>c.value.phase==="start",end:c=>c.value.phase==="end"||c.value.phase==="cancel"})}function W(){return c=>{const r=new Set;let e=null,t=!1;return{get isBlocked(){return t},block(){t=!0},unblock(){t=!1},subscribe(n){const u=l.toObserver(n);return r.add(u),r.size===1&&(e=c.subscribe({next(i){if(!t)for(const o of r)o.next(i)},error(i){for(const o of r)o.error?.(i)},complete(){for(const i of r)i.complete?.();r.clear(),e=null}})),()=>{r.delete(u),r.size===0&&e&&(e(),e=null)}}}}}function R(c=1){return r=>{const e=[],t=new Set;let n=null,u=!1,i=!1,o,s=!1;return{get isBlocked(){return s},block(){s=!0},unblock(){s=!1},subscribe(m){const f=l.toObserver(m);for(const a of e)f.next(a);return u?(f.complete?.(),()=>{}):i?(f.error?.(o),()=>{}):(t.add(f),t.size===1&&!n&&(n=r.subscribe({next(a){if(e.push(a),e.length>c&&e.shift(),!s)for(const d of t)d.next(a)},error(a){i=!0,o=a;for(const d of t)d.error?.(a);t.clear(),n=null},complete(){u=!0;for(const a of t)a.complete?.();t.clear(),n=null}})),()=>{t.delete(f),t.size===0&&n&&!u&&!i&&(n(),n=null)})}}}}function D(c){return r=>l.createStream(e=>{let t=0;return r.subscribe({next(n){t<c?t++:e.next(n)},error:e.error?.bind(e),complete:e.complete?.bind(e)})})}function B(c){return r=>l.createStream(e=>{let t=!0;return r.subscribe({next(n){t&&!c(n)&&(t=!1),t||e.next(n)},error:e.error?.bind(e),complete:e.complete?.bind(e)})})}function q(c){return r=>l.createStream(e=>{let t=!0;const n=c.subscribe(()=>{t=!1,n()}),u=r.subscribe({next(i){t||e.next(i)},error:e.error?.bind(e),complete:e.complete?.bind(e)});return()=>{n(),u()}})}function b(c){return r=>l.createStream(e=>r.subscribe({next(t){try{c(t),e.next(t)}catch(n){e.error?.(n)}},error:e.error?.bind(e),complete:e.complete?.bind(e)}))}const z=b;function E(c){return r=>l.createStream(e=>{let t=0,n;return n=r.subscribe({next(u){t<c&&(t++,e.next(u),t>=c&&(e.complete?.(),n?.()))},error:e.error?.bind(e),complete:e.complete?.bind(e)}),()=>n?.()})}function L(c){return r=>l.createStream(e=>{let t;return t=r.subscribe({next(n){c(n)?e.next(n):(e.complete?.(),t?.())},error:e.error?.bind(e),complete:e.complete?.bind(e)}),()=>t?.()})}function V(c){return r=>l.createStream(e=>{let t=!1;const n=c.subscribe(()=>{t||(t=!0,e.complete?.(),i())}),u=r.subscribe({next(o){t||e.next(o)},error:e.error?.bind(e),complete(){t||(t=!0,e.complete?.())}}),i=()=>{n(),u()};return i})}function K(c){return r=>l.createStream(e=>{let t=null;return r.subscribe({next(n){const u=performance.now();(t===null||u-t>=c)&&(t=u,e.next(n))},error:e.error?.bind(e),complete:e.complete?.bind(e)})})}function O(c){return r=>l.createStream(e=>{let t,n=!1,u=null;const i=r.subscribe({next(o){t=o,n=!0,u===null&&(u=setTimeout(()=>{n&&(e.next(t),n=!1),u=null},c))},error:e.error?.bind(e),complete(){u!==null&&(clearTimeout(u),n&&e.next(t)),e.complete?.()}});return()=>{u!==null&&clearTimeout(u),i()}})}exports.buffer=x;exports.bufferTime=h;exports.bufferWhen=k;exports.debounce=g;exports.distinctUntilChanged=S;exports.distinctUntilKeyChanged=U;exports.filter=y;exports.map=w;exports.merge=T;exports.mergeWith=I;exports.offset=C;exports.session=p;exports.share=W;exports.shareReplay=R;exports.singlePointerSession=A;exports.skip=D;exports.skipUntil=q;exports.skipWhile=B;exports.spy=b;exports.take=E;exports.takeUntil=V;exports.takeWhile=L;exports.tap=z;exports.throttle=K;exports.throttleLast=O;
|
|
2
2
|
//# sourceMappingURL=operators.cjs.map
|