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/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
|
package/dist/operators.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operators.cjs","sources":["../src/operators/buffer.ts","../src/operators/debounce.ts","../src/operators/distinct.ts","../src/operators/filter.ts","../src/operators/map.ts","../src/operators/merge.ts","../src/operators/offset.ts","../src/operators/session.ts","../src/operators/share.ts","../src/operators/skip.ts","../src/operators/spy.ts","../src/operators/take.ts","../src/operators/throttle.ts"],"sourcesContent":["import type { Signal } from \"../core/signal.js\";\nimport type { Operator, Stream } from \"../core/stream.js\";\nimport { createStream } from \"../core/stream.js\";\n\nexport function buffer<T extends Signal>(count: number): Operator<T, Signal<\"buffer\", T[]>> {\n return (source) =>\n createStream((observer) => {\n let bufferArr: T[] = [];\n\n return source.subscribe({\n next(value) {\n bufferArr.push(value);\n if (bufferArr.length >= count) {\n observer.next({\n kind: \"buffer\",\n value: bufferArr,\n deviceId: \"\",\n createdAt: Date.now(),\n });\n bufferArr = [];\n }\n },\n error: observer.error?.bind(observer),\n complete() {\n if (bufferArr.length > 0) {\n observer.next({\n kind: \"buffer\",\n value: bufferArr,\n deviceId: \"\",\n createdAt: Date.now(),\n });\n }\n observer.complete?.();\n },\n });\n });\n}\n\nexport function bufferTime<T extends Signal>(ms: number): Operator<T, Signal<\"buffer\", T[]>> {\n return (source) =>\n createStream((observer) => {\n let bufferArr: T[] = [];\n\n const intervalId = setInterval(() => {\n if (bufferArr.length > 0) {\n observer.next({\n kind: \"buffer\",\n value: bufferArr,\n deviceId: \"\",\n createdAt: Date.now(),\n });\n bufferArr = [];\n }\n }, ms);\n\n const unsub = source.subscribe({\n next(value) {\n bufferArr.push(value);\n },\n error: observer.error?.bind(observer),\n complete() {\n clearInterval(intervalId);\n if (bufferArr.length > 0) {\n observer.next({\n kind: \"buffer\",\n value: bufferArr,\n deviceId: \"\",\n createdAt: Date.now(),\n });\n }\n observer.complete?.();\n },\n });\n\n return () => {\n clearInterval(intervalId);\n unsub();\n };\n });\n}\n\nexport function bufferWhen<T extends Signal>(\n notifier: Stream<Signal>,\n): Operator<T, Signal<\"buffer\", T[]>> {\n return (source) =>\n createStream((observer) => {\n let bufferArr: T[] = [];\n\n const notifierUnsub = notifier.subscribe(() => {\n if (bufferArr.length > 0) {\n observer.next({\n kind: \"buffer\",\n value: bufferArr,\n deviceId: \"\",\n createdAt: Date.now(),\n });\n bufferArr = [];\n }\n });\n\n const sourceUnsub = source.subscribe({\n next(value) {\n bufferArr.push(value);\n },\n error: observer.error?.bind(observer),\n complete() {\n notifierUnsub();\n if (bufferArr.length > 0) {\n observer.next({\n kind: \"buffer\",\n value: bufferArr,\n deviceId: \"\",\n createdAt: Date.now(),\n });\n }\n observer.complete?.();\n },\n });\n\n return () => {\n notifierUnsub();\n sourceUnsub();\n };\n });\n}\n","import type { Signal } from \"../core/signal.js\";\nimport type { Operator } from \"../core/stream.js\";\nimport { createStream } from \"../core/stream.js\";\n\nexport function debounce<T extends Signal>(ms: number): Operator<T, T> {\n return (source) =>\n createStream((observer) => {\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const unsub = source.subscribe({\n next(value) {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(() => {\n timeoutId = null;\n observer.next(value);\n }, ms);\n },\n error: observer.error?.bind(observer),\n complete() {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n }\n observer.complete?.();\n },\n });\n\n return () => {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n }\n unsub();\n };\n });\n}\n","import type { Signal } from \"../core/signal.js\";\nimport type { Operator } from \"../core/stream.js\";\nimport { createStream } from \"../core/stream.js\";\n\n/**\n * Emits values only when they differ from the previous emitted value.\n *\n * In event/gesture pipelines, this is useful when you only want to react to\n * meaningful changes (e.g. pointer coordinates changed, delta changed, a state transition happened).\n *\n * The default comparison is based on Signal's value property using `===`.\n * For objects/arrays, provide `compare` to avoid treating freshly-created but equivalent values as \"changed\".\n *\n * @example\n * ```typescript\n * import { eventSource } from \"../../source/event-source-factory.js\";\n * import { pipe } from \"../pipe.js\";\n * import { map } from \"./map.js\";\n *\n * // Only emit when the pointer position actually changes\n * pipe(\n * eventSource<PointerEvent>(element, \"pointermove\"),\n * map((e) => ({ x: e.clientX, y: e.clientY })),\n * distinctUntilChanged((a, b) => a.value.x === b.value.x && a.value.y === b.value.y),\n * ).subscribe(({ x, y }) => {\n * // Called only when (x, y) changes\n * });\n * ```\n */\nexport function distinctUntilChanged<T extends Signal>(\n compare?: (prev: T, curr: T) => boolean,\n): Operator<T, T> {\n const isEqual = compare ?? ((a: T, b: T) => a.value === b.value);\n\n return (source) =>\n createStream((observer) => {\n let hasLast = false;\n let lastValue: T;\n\n return source.subscribe({\n next(value) {\n if (!hasLast || !isEqual(lastValue, value)) {\n hasLast = true;\n lastValue = value;\n observer.next(value);\n }\n },\n error: observer.error?.bind(observer),\n complete: observer.complete?.bind(observer),\n });\n });\n}\n\n/**\n * Like `distinctUntilChanged`, but compares a derived key instead of the entire value.\n *\n * This is convenient for gesture events when reacting to state transitions,\n * such as changes in `phase`.\n *\n * @example\n * ```typescript\n * import { pipe } from \"../pipe.js\";\n *\n * // Emit only when the gesture phase changes (start/change/end/cancel)\n * pipe(\n * pan(element),\n * distinctUntilKeyChanged((e) => e.value.phase),\n * ).subscribe((e) => {\n * // Consecutive identical phases are skipped; only transitions arrive here\n * });\n * ```\n */\nexport function distinctUntilKeyChanged<T extends Signal, K>(\n keySelector: (value: T) => K,\n compare?: (prev: K, curr: K) => boolean,\n): Operator<T, T> {\n const isEqual = compare ?? ((a: K, b: K) => a === b);\n\n return (source) =>\n createStream((observer) => {\n let hasLast = false;\n let lastKey: K;\n\n return source.subscribe({\n next(value) {\n const key = keySelector(value);\n if (!hasLast || !isEqual(lastKey, key)) {\n hasLast = true;\n lastKey = key;\n observer.next(value);\n }\n },\n error: observer.error?.bind(observer),\n complete: observer.complete?.bind(observer),\n });\n });\n}\n","import type { Signal } from \"../core/signal.js\";\nimport type { Operator } from \"../core/stream.js\";\nimport { createStream } from \"../core/stream.js\";\n\nexport function filter<T extends Signal>(predicate: (value: T) => boolean): Operator<T, T> {\n return (source) =>\n createStream((observer) => {\n return source.subscribe({\n next(value) {\n try {\n if (predicate(value)) {\n observer.next(value);\n }\n } catch (err) {\n observer.error?.(err);\n }\n },\n error: observer.error?.bind(observer),\n complete: observer.complete?.bind(observer),\n });\n });\n}\n","import type { Signal } from \"../core/signal.js\";\nimport type { Operator } from \"../core/stream.js\";\nimport { createStream } from \"../core/stream.js\";\n\nexport function map<T extends Signal, R extends Signal>(\n transform: (value: T) => R,\n): Operator<T, R> {\n return (source) =>\n createStream((observer) => {\n return source.subscribe({\n next(value) {\n try {\n observer.next(transform(value));\n } catch (err) {\n observer.error?.(err);\n }\n },\n error: observer.error?.bind(observer),\n complete: observer.complete?.bind(observer),\n });\n });\n}\n","import type { Signal } from \"../core/signal.js\";\nimport type { Operator, Stream } from \"../core/stream.js\";\nimport { createStream } from \"../core/stream.js\";\n\nexport function mergeWith<T extends Signal, R extends Signal>(\n other: Stream<R>,\n): Operator<T, T | R> {\n return (source) =>\n createStream((observer) => {\n let completedCount = 0;\n\n const checkComplete = () => {\n completedCount++;\n if (completedCount === 2) {\n observer.complete?.();\n }\n };\n\n const unsub1 = source.subscribe({\n next: (value) => observer.next(value),\n error: observer.error?.bind(observer),\n complete: checkComplete,\n });\n\n const unsub2 = other.subscribe({\n next: (value) => observer.next(value),\n error: observer.error?.bind(observer),\n complete: checkComplete,\n });\n\n return () => {\n unsub1();\n unsub2();\n };\n });\n}\n\nexport function merge<T extends Signal>(...sources: Stream<T>[]): Stream<T> {\n return createStream((observer) => {\n let completedCount = 0;\n\n const unsubs = sources.map((source) =>\n source.subscribe({\n next: (value) => observer.next(value),\n error: observer.error?.bind(observer),\n complete: () => {\n completedCount++;\n if (completedCount === sources.length) {\n observer.complete?.();\n }\n },\n }),\n );\n\n return () => {\n for (const unsub of unsubs) {\n unsub();\n }\n };\n });\n}\n","import type { ExtendSignalValue, SignalWith } from \"../core/signal.js\";\nimport type { Operator } from \"../core/stream.js\";\nimport { createStream } from \"../core/stream.js\";\n\nexport interface OffsetOptions {\n target: Element;\n manual?: boolean;\n}\n\nexport interface PointerValue {\n x: number;\n y: number;\n}\n\nexport interface OffsetValue {\n offsetX: number;\n offsetY: number;\n}\n\nexport type OffsetOperatorResult<T extends SignalWith<PointerValue>> = ExtendSignalValue<\n T,\n OffsetValue\n>;\n\nexport interface OffsetOperator<T extends SignalWith<PointerValue>>\n extends Operator<T, ExtendSignalValue<T, OffsetValue>> {\n recalculate(): void;\n}\n\n/**\n * Creates an operator that adds element-relative offset coordinates to pointer signals.\n * Uses getBoundingClientRect() to calculate offsetX and offsetY relative to the target element.\n */\nexport function offset<T extends SignalWith<PointerValue>>(\n options: OffsetOptions,\n): OffsetOperator<T> {\n const { target, manual = false } = options;\n if (!target) {\n throw new Error(\"offset operator requires a valid target element\");\n }\n\n let cachedRect: DOMRect | null = null;\n\n function getRect(): DOMRect {\n if (manual && cachedRect) {\n return cachedRect;\n }\n cachedRect = target.getBoundingClientRect();\n return cachedRect;\n }\n\n function recalculate(): void {\n cachedRect = target.getBoundingClientRect();\n }\n\n type OutputSignal = ExtendSignalValue<T, OffsetValue>;\n\n const operator: OffsetOperator<T> = (source) =>\n createStream<OutputSignal>((observer) => {\n const unsub = source.subscribe({\n next(signal) {\n try {\n const rect = getRect();\n const value = signal.value as PointerValue & OffsetValue;\n\n value.offsetX = value.x - rect.left;\n value.offsetY = value.y - rect.top;\n\n observer.next(signal as unknown as OutputSignal);\n } catch (err) {\n observer.error?.(err);\n }\n },\n error: observer.error?.bind(observer),\n complete() {\n observer.complete?.();\n },\n });\n\n return () => {\n unsub();\n };\n });\n operator.recalculate = recalculate;\n\n return operator;\n}\n","import type { SinglePointerSignal } from \"../browser/single-pointer/single-pointer-signal.js\";\nimport type { Signal } from \"../core/signal.js\";\nimport type { Operator } from \"../core/stream.js\";\nimport { createStream } from \"../core/stream.js\";\n\nexport interface SessionOptions<T extends Signal> {\n start: (signal: T) => boolean;\n end: (signal: T) => boolean;\n}\n\n/**\n * Filters signals to only emit during active sessions.\n * A session begins when the start predicate returns true and ends when the end predicate returns true.\n * Both start and end signals are included in the output.\n * Sessions can repeat: after an end, the next start begins a new session.\n */\nexport function session<T extends Signal>(options: SessionOptions<T>): Operator<T, T> {\n return (source) =>\n createStream((observer) => {\n let active = false;\n\n return source.subscribe({\n next(value) {\n try {\n if (!active) {\n if (options.start(value)) {\n active = true;\n observer.next(value);\n }\n } else {\n observer.next(value);\n if (options.end(value)) {\n active = false;\n }\n }\n } catch (err) {\n observer.error?.(err);\n }\n },\n error: observer.error?.bind(observer),\n complete: observer.complete?.bind(observer),\n });\n });\n}\n\nexport function singlePointerSession(): Operator<SinglePointerSignal, SinglePointerSignal> {\n return session({\n start: (signal) => signal.value.phase === \"start\",\n end: (signal) => signal.value.phase === \"end\" || signal.value.phase === \"cancel\",\n });\n}\n","import type { Signal } from \"../core/signal.js\";\nimport type { Observer, Operator, Stream, Unsubscribe } from \"../core/stream.js\";\nimport { toObserver } from \"../core/stream.js\";\n\nexport function share<T extends Signal>(): Operator<T, T> {\n return (source): Stream<T> => {\n const observers = new Set<Observer<T>>();\n let sourceUnsub: Unsubscribe | null = null;\n let blocked = false;\n\n return {\n get isBlocked() {\n return blocked;\n },\n\n block() {\n blocked = true;\n },\n\n unblock() {\n blocked = false;\n },\n\n subscribe(observerOrNext) {\n const observer = toObserver(observerOrNext);\n observers.add(observer);\n\n if (observers.size === 1) {\n sourceUnsub = source.subscribe({\n next(value) {\n if (blocked) return;\n for (const obs of observers) {\n obs.next(value);\n }\n },\n error(err) {\n for (const obs of observers) {\n obs.error?.(err);\n }\n },\n complete() {\n for (const obs of observers) {\n obs.complete?.();\n }\n observers.clear();\n sourceUnsub = null;\n },\n });\n }\n\n return () => {\n observers.delete(observer);\n if (observers.size === 0 && sourceUnsub) {\n sourceUnsub();\n sourceUnsub = null;\n }\n };\n },\n };\n };\n}\n\nexport function shareReplay<T extends Signal>(bufferSize = 1): Operator<T, T> {\n return (source): Stream<T> => {\n const buffer: T[] = [];\n const observers = new Set<Observer<T>>();\n let sourceUnsub: Unsubscribe | null = null;\n let completed = false;\n let hasError = false;\n let errorValue: unknown;\n let blocked = false;\n\n return {\n get isBlocked() {\n return blocked;\n },\n\n block() {\n blocked = true;\n },\n\n unblock() {\n blocked = false;\n },\n\n subscribe(observerOrNext) {\n const observer = toObserver(observerOrNext);\n\n for (const value of buffer) {\n observer.next(value);\n }\n\n if (completed) {\n observer.complete?.();\n return () => {};\n }\n if (hasError) {\n observer.error?.(errorValue);\n return () => {};\n }\n\n observers.add(observer);\n\n if (observers.size === 1 && !sourceUnsub) {\n sourceUnsub = source.subscribe({\n next(value) {\n buffer.push(value);\n if (buffer.length > bufferSize) {\n buffer.shift();\n }\n if (blocked) return;\n for (const obs of observers) {\n obs.next(value);\n }\n },\n error(err) {\n hasError = true;\n errorValue = err;\n for (const obs of observers) {\n obs.error?.(err);\n }\n observers.clear();\n sourceUnsub = null;\n },\n complete() {\n completed = true;\n for (const obs of observers) {\n obs.complete?.();\n }\n observers.clear();\n sourceUnsub = null;\n },\n });\n }\n\n return () => {\n observers.delete(observer);\n if (observers.size === 0 && sourceUnsub && !completed && !hasError) {\n sourceUnsub();\n sourceUnsub = null;\n }\n };\n },\n };\n };\n}\n","import type { Signal } from \"../core/signal.js\";\nimport type { Operator, Stream } from \"../core/stream.js\";\nimport { createStream } from \"../core/stream.js\";\n\nexport function skip<T extends Signal>(count: number): Operator<T, T> {\n return (source) =>\n createStream((observer) => {\n let skipped = 0;\n\n return source.subscribe({\n next(value) {\n if (skipped < count) {\n skipped++;\n } else {\n observer.next(value);\n }\n },\n error: observer.error?.bind(observer),\n complete: observer.complete?.bind(observer),\n });\n });\n}\n\nexport function skipWhile<T extends Signal>(predicate: (value: T) => boolean): Operator<T, T> {\n return (source) =>\n createStream((observer) => {\n let skipping = true;\n\n return source.subscribe({\n next(value) {\n if (skipping && !predicate(value)) {\n skipping = false;\n }\n if (!skipping) {\n observer.next(value);\n }\n },\n error: observer.error?.bind(observer),\n complete: observer.complete?.bind(observer),\n });\n });\n}\n\nexport function skipUntil<T extends Signal>(notifier: Stream<Signal>): Operator<T, T> {\n return (source) =>\n createStream((observer) => {\n let skipping = true;\n\n const notifierUnsub = notifier.subscribe(() => {\n skipping = false;\n notifierUnsub();\n });\n\n const sourceUnsub = source.subscribe({\n next(value) {\n if (!skipping) {\n observer.next(value);\n }\n },\n error: observer.error?.bind(observer),\n complete: observer.complete?.bind(observer),\n });\n\n return () => {\n notifierUnsub();\n sourceUnsub();\n };\n });\n}\n","import type { Signal } from \"../core/signal.js\";\nimport type { Operator } from \"../core/stream.js\";\nimport { createStream } from \"../core/stream.js\";\n\n/**\n * Operator that passes values through unchanged while running a side-effect.\n *\n * In event/gesture pipelines, this is commonly used for:\n * - Debug logging (coordinates, phases, state transitions)\n * - Tracing/metrics (timing, counters)\n * - Applying flags on events (e.g. calling `event.prevent()`), then filtering later (e.g. with `excludePrevented()`)\n *\n * If `fn` throws, the error is forwarded to the downstream `error` handler.\n *\n * @example\n * ```typescript\n * import { eventSource } from \"../../source/event-source-factory.js\";\n * import { pipe } from \"../pipe.js\";\n *\n * pipe(\n * eventSource<PointerEvent>(element, \"pointermove\"),\n * spy((e) => {\n * // Observe without modifying the stream values\n * console.log(e.clientX, e.clientY);\n * }),\n * ).subscribe();\n * ```\n */\nexport function spy<T extends Signal>(fn: (value: T) => void): Operator<T, T> {\n return (source) =>\n createStream((observer) => {\n return source.subscribe({\n next(value) {\n try {\n fn(value);\n observer.next(value);\n } catch (err) {\n observer.error?.(err);\n }\n },\n error: observer.error?.bind(observer),\n complete: observer.complete?.bind(observer),\n });\n });\n}\n\n/** Alias for spy - RxJS-compatible naming */\nexport const tap = spy;\n","import type { Signal } from \"../core/signal.js\";\nimport type { Operator, Stream } from \"../core/stream.js\";\nimport { createStream } from \"../core/stream.js\";\n\n/**\n * Operators for ending a subscription based on count, a predicate, or a notifier.\n *\n * This is intentionally about **subscription lifecycle** (\"when should this pipeline stop?\"),\n * not about destroying the underlying event source (which may be shared by other subscribers).\n *\n * Common event/gesture patterns:\n * - One-shot trigger: `take(1)`\n * - While a condition holds: `takeWhile(predicate)`\n * - Until an explicit end signal: `takeUntil(end$)` (e.g. move until up/cancel)\n */\nexport function take<T extends Signal>(count: number): Operator<T, T> {\n return (source) =>\n createStream((observer) => {\n let taken = 0;\n let unsub: (() => void) | undefined;\n\n unsub = source.subscribe({\n next(value) {\n if (taken < count) {\n taken++;\n observer.next(value);\n if (taken >= count) {\n observer.complete?.();\n unsub?.();\n }\n }\n },\n error: observer.error?.bind(observer),\n complete: observer.complete?.bind(observer),\n });\n\n return () => unsub?.();\n });\n}\n\n/**\n * Emits only the first `count` values, then completes and unsubscribes.\n * `take(1)` is especially useful for one-shot triggers.\n */\nexport function takeWhile<T extends Signal>(predicate: (value: T) => boolean): Operator<T, T> {\n return (source) =>\n createStream((observer) => {\n let unsub: (() => void) | undefined;\n\n unsub = source.subscribe({\n next(value) {\n if (predicate(value)) {\n observer.next(value);\n } else {\n observer.complete?.();\n unsub?.();\n }\n },\n error: observer.error?.bind(observer),\n complete: observer.complete?.bind(observer),\n });\n\n return () => unsub?.();\n });\n}\n\n/**\n * Emits values while `predicate(value)` is true, then completes and unsubscribes.\n */\nexport function takeUntil<T extends Signal>(notifier: Stream<Signal>): Operator<T, T> {\n return (source) =>\n createStream((observer) => {\n let completed = false;\n\n const notifierUnsub = notifier.subscribe(() => {\n if (!completed) {\n completed = true;\n observer.complete?.();\n cleanup();\n }\n });\n\n const sourceUnsub = source.subscribe({\n next(value) {\n if (!completed) {\n observer.next(value);\n }\n },\n error: observer.error?.bind(observer),\n complete() {\n if (!completed) {\n completed = true;\n observer.complete?.();\n }\n },\n });\n\n const cleanup = () => {\n notifierUnsub();\n sourceUnsub();\n };\n\n return cleanup;\n });\n}\n\n/**\n * Completes the source subscription when `notifier` emits, and unsubscribes from both.\n * This is the go-to shape for \"observe from start until end\" event flows.\n */\n","import type { Signal } from \"../core/signal.js\";\nimport type { Operator } from \"../core/stream.js\";\nimport { createStream } from \"../core/stream.js\";\n\nexport function throttle<T extends Signal>(ms: number): Operator<T, T> {\n return (source) =>\n createStream((observer) => {\n let lastTime: number | null = null;\n\n return source.subscribe({\n next(value) {\n const now = performance.now();\n if (lastTime === null || now - lastTime >= ms) {\n lastTime = now;\n observer.next(value);\n }\n },\n error: observer.error?.bind(observer),\n complete: observer.complete?.bind(observer),\n });\n });\n}\n\nexport function throttleLast<T extends Signal>(ms: number): Operator<T, T> {\n return (source) =>\n createStream((observer) => {\n let lastValue: T | undefined;\n let hasValue = false;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const unsub = source.subscribe({\n next(value) {\n lastValue = value;\n hasValue = true;\n\n if (timeoutId === null) {\n timeoutId = setTimeout(() => {\n if (hasValue) {\n observer.next(lastValue!);\n hasValue = false;\n }\n timeoutId = null;\n }, ms);\n }\n },\n error: observer.error?.bind(observer),\n complete() {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n if (hasValue) {\n observer.next(lastValue!);\n }\n }\n observer.complete?.();\n },\n });\n\n return () => {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n }\n unsub();\n };\n });\n}\n"],"names":["buffer","count","source","createStream","observer","bufferArr","value","bufferTime","ms","intervalId","unsub","bufferWhen","notifier","notifierUnsub","sourceUnsub","debounce","timeoutId","distinctUntilChanged","compare","isEqual","a","b","hasLast","lastValue","distinctUntilKeyChanged","keySelector","lastKey","key","filter","predicate","err","map","transform","mergeWith","other","completedCount","checkComplete","unsub1","unsub2","merge","sources","unsubs","offset","options","target","manual","cachedRect","getRect","recalculate","operator","signal","rect","session","active","singlePointerSession","share","observers","blocked","observerOrNext","toObserver","obs","shareReplay","bufferSize","completed","hasError","errorValue","skip","skipped","skipWhile","skipping","skipUntil","spy","fn","tap","take","taken","takeWhile","takeUntil","cleanup","throttle","lastTime","now","throttleLast","hasValue"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"operators.cjs","sources":["../src/operators/buffer.ts","../src/operators/debounce.ts","../src/operators/distinct.ts","../src/operators/filter.ts","../src/operators/map.ts","../src/operators/merge.ts","../src/operators/offset.ts","../src/operators/session.ts","../src/operators/share.ts","../src/operators/skip.ts","../src/operators/spy.ts","../src/operators/take.ts","../src/operators/throttle.ts"],"sourcesContent":["import type { Signal } from \"../core/signal.js\";\nimport type { Operator, Stream } from \"../core/stream.js\";\nimport { createStream } from \"../core/stream.js\";\n\nexport function buffer<T extends Signal>(count: number): Operator<T, Signal<\"buffer\", T[]>> {\n return (source) =>\n createStream((observer) => {\n let bufferArr: T[] = [];\n\n return source.subscribe({\n next(value) {\n bufferArr.push(value);\n if (bufferArr.length >= count) {\n observer.next({\n kind: \"buffer\",\n value: bufferArr,\n deviceId: \"\",\n createdAt: Date.now(),\n });\n bufferArr = [];\n }\n },\n error: observer.error?.bind(observer),\n complete() {\n if (bufferArr.length > 0) {\n observer.next({\n kind: \"buffer\",\n value: bufferArr,\n deviceId: \"\",\n createdAt: Date.now(),\n });\n }\n observer.complete?.();\n },\n });\n });\n}\n\nexport function bufferTime<T extends Signal>(ms: number): Operator<T, Signal<\"buffer\", T[]>> {\n return (source) =>\n createStream((observer) => {\n let bufferArr: T[] = [];\n\n const intervalId = setInterval(() => {\n if (bufferArr.length > 0) {\n observer.next({\n kind: \"buffer\",\n value: bufferArr,\n deviceId: \"\",\n createdAt: Date.now(),\n });\n bufferArr = [];\n }\n }, ms);\n\n const unsub = source.subscribe({\n next(value) {\n bufferArr.push(value);\n },\n error: observer.error?.bind(observer),\n complete() {\n clearInterval(intervalId);\n if (bufferArr.length > 0) {\n observer.next({\n kind: \"buffer\",\n value: bufferArr,\n deviceId: \"\",\n createdAt: Date.now(),\n });\n }\n observer.complete?.();\n },\n });\n\n return () => {\n clearInterval(intervalId);\n unsub();\n };\n });\n}\n\nexport function bufferWhen<T extends Signal>(\n notifier: Stream<Signal>,\n): Operator<T, Signal<\"buffer\", T[]>> {\n return (source) =>\n createStream((observer) => {\n let bufferArr: T[] = [];\n\n const notifierUnsub = notifier.subscribe(() => {\n if (bufferArr.length > 0) {\n observer.next({\n kind: \"buffer\",\n value: bufferArr,\n deviceId: \"\",\n createdAt: Date.now(),\n });\n bufferArr = [];\n }\n });\n\n const sourceUnsub = source.subscribe({\n next(value) {\n bufferArr.push(value);\n },\n error: observer.error?.bind(observer),\n complete() {\n notifierUnsub();\n if (bufferArr.length > 0) {\n observer.next({\n kind: \"buffer\",\n value: bufferArr,\n deviceId: \"\",\n createdAt: Date.now(),\n });\n }\n observer.complete?.();\n },\n });\n\n return () => {\n notifierUnsub();\n sourceUnsub();\n };\n });\n}\n","import type { Signal } from \"../core/signal.js\";\nimport type { Operator } from \"../core/stream.js\";\nimport { createStream } from \"../core/stream.js\";\n\nexport function debounce<T extends Signal>(ms: number): Operator<T, T> {\n return (source) =>\n createStream((observer) => {\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const unsub = source.subscribe({\n next(value) {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(() => {\n timeoutId = null;\n observer.next(value);\n }, ms);\n },\n error: observer.error?.bind(observer),\n complete() {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n }\n observer.complete?.();\n },\n });\n\n return () => {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n }\n unsub();\n };\n });\n}\n","import type { Signal } from \"../core/signal.js\";\nimport type { Operator } from \"../core/stream.js\";\nimport { createStream } from \"../core/stream.js\";\n\n/**\n * Emits values only when they differ from the previous emitted value.\n *\n * In event/gesture pipelines, this is useful when you only want to react to\n * meaningful changes (e.g. pointer coordinates changed, delta changed, a state transition happened).\n *\n * The default comparison is based on Signal's value property using `===`.\n * For objects/arrays, provide `compare` to avoid treating freshly-created but equivalent values as \"changed\".\n *\n * @example\n * ```typescript\n * import { eventSource } from \"../../source/event-source-factory.js\";\n * import { pipe } from \"../pipe.js\";\n * import { map } from \"./map.js\";\n *\n * // Only emit when the pointer position actually changes\n * pipe(\n * eventSource<PointerEvent>(element, \"pointermove\"),\n * map((e) => ({ x: e.clientX, y: e.clientY })),\n * distinctUntilChanged((a, b) => a.value.x === b.value.x && a.value.y === b.value.y),\n * ).subscribe(({ x, y }) => {\n * // Called only when (x, y) changes\n * });\n * ```\n */\nexport function distinctUntilChanged<T extends Signal>(\n compare?: (prev: T, curr: T) => boolean,\n): Operator<T, T> {\n const isEqual = compare ?? ((a: T, b: T) => a.value === b.value);\n\n return (source) =>\n createStream((observer) => {\n let hasLast = false;\n let lastValue: T;\n\n return source.subscribe({\n next(value) {\n if (!hasLast || !isEqual(lastValue, value)) {\n hasLast = true;\n lastValue = value;\n observer.next(value);\n }\n },\n error: observer.error?.bind(observer),\n complete: observer.complete?.bind(observer),\n });\n });\n}\n\n/**\n * Like `distinctUntilChanged`, but compares a derived key instead of the entire value.\n *\n * This is convenient for gesture events when reacting to state transitions,\n * such as changes in `phase`.\n *\n * @example\n * ```typescript\n * import { pipe } from \"../pipe.js\";\n *\n * // Emit only when the gesture phase changes (start/change/end/cancel)\n * pipe(\n * pan(element),\n * distinctUntilKeyChanged((e) => e.value.phase),\n * ).subscribe((e) => {\n * // Consecutive identical phases are skipped; only transitions arrive here\n * });\n * ```\n */\nexport function distinctUntilKeyChanged<T extends Signal, K>(\n keySelector: (value: T) => K,\n compare?: (prev: K, curr: K) => boolean,\n): Operator<T, T> {\n const isEqual = compare ?? ((a: K, b: K) => a === b);\n\n return (source) =>\n createStream((observer) => {\n let hasLast = false;\n let lastKey: K;\n\n return source.subscribe({\n next(value) {\n const key = keySelector(value);\n if (!hasLast || !isEqual(lastKey, key)) {\n hasLast = true;\n lastKey = key;\n observer.next(value);\n }\n },\n error: observer.error?.bind(observer),\n complete: observer.complete?.bind(observer),\n });\n });\n}\n","import type { Signal } from \"../core/signal.js\";\nimport type { Operator } from \"../core/stream.js\";\nimport { createStream } from \"../core/stream.js\";\n\nexport function filter<T extends Signal>(predicate: (value: T) => boolean): Operator<T, T> {\n return (source) =>\n createStream((observer) => {\n return source.subscribe({\n next(value) {\n try {\n if (predicate(value)) {\n observer.next(value);\n }\n } catch (err) {\n observer.error?.(err);\n }\n },\n error: observer.error?.bind(observer),\n complete: observer.complete?.bind(observer),\n });\n });\n}\n","import type { Signal } from \"../core/signal.js\";\nimport type { Operator } from \"../core/stream.js\";\nimport { createStream } from \"../core/stream.js\";\n\nexport function map<T extends Signal, R extends Signal>(\n transform: (value: T) => R,\n): Operator<T, R> {\n return (source) =>\n createStream((observer) => {\n return source.subscribe({\n next(value) {\n try {\n observer.next(transform(value));\n } catch (err) {\n observer.error?.(err);\n }\n },\n error: observer.error?.bind(observer),\n complete: observer.complete?.bind(observer),\n });\n });\n}\n","import type { Signal } from \"../core/signal.js\";\nimport type { Operator, Stream } from \"../core/stream.js\";\nimport { createStream } from \"../core/stream.js\";\n\nexport function mergeWith<T extends Signal, R extends Signal>(\n other: Stream<R>,\n): Operator<T, T | R> {\n return (source) =>\n createStream((observer) => {\n let completedCount = 0;\n\n const checkComplete = () => {\n completedCount++;\n if (completedCount === 2) {\n observer.complete?.();\n }\n };\n\n const unsub1 = source.subscribe({\n next: (value) => observer.next(value),\n error: observer.error?.bind(observer),\n complete: checkComplete,\n });\n\n const unsub2 = other.subscribe({\n next: (value) => observer.next(value),\n error: observer.error?.bind(observer),\n complete: checkComplete,\n });\n\n return () => {\n unsub1();\n unsub2();\n };\n });\n}\n\nexport function merge<T extends Signal>(...sources: Stream<T>[]): Stream<T> {\n return createStream((observer) => {\n let completedCount = 0;\n\n const unsubs = sources.map((source) =>\n source.subscribe({\n next: (value) => observer.next(value),\n error: observer.error?.bind(observer),\n complete: () => {\n completedCount++;\n if (completedCount === sources.length) {\n observer.complete?.();\n }\n },\n }),\n );\n\n return () => {\n for (const unsub of unsubs) {\n unsub();\n }\n };\n });\n}\n","import type { ExtendSignalValue, Signal, SignalWith } from \"../core/signal.js\";\nimport type { Operator, Stream } from \"../core/stream.js\";\nimport { createStream } from \"../core/stream.js\";\n\nexport interface OffsetOptions {\n target: Element;\n /**\n * Optional stream that triggers rect recalculation.\n * When provided, the operator caches the rect and only recalculates when this stream emits.\n * When not provided, getBoundingClientRect() is called on every signal (always accurate).\n *\n * @example\n * // Cache rect, recalculate on window resize\n * const resize$ = domEvent(window, 'resize');\n * offset({ target: el, recalculate$: resize$ })\n *\n * @example\n * // Always calculate (no caching, always accurate)\n * offset({ target: el })\n */\n recalculate$?: Stream<Signal>;\n}\n\nexport interface PointerValue {\n x: number;\n y: number;\n}\n\nexport interface OffsetValue {\n offsetX: number;\n offsetY: number;\n}\n\nexport type OffsetOperatorResult<T extends SignalWith<PointerValue>> = ExtendSignalValue<\n T,\n OffsetValue\n>;\n\n/**\n * Creates an operator that adds element-relative offset coordinates to pointer signals.\n * Uses getBoundingClientRect() to calculate offsetX and offsetY relative to the target element.\n *\n * @param options.target - The element to calculate offset relative to\n * @param options.recalculate$ - Optional stream that triggers rect recalculation for caching\n */\nexport function offset<T extends SignalWith<PointerValue>>(\n options: OffsetOptions,\n): Operator<T, ExtendSignalValue<T, OffsetValue>> {\n const { target, recalculate$ } = options;\n if (!target) {\n throw new Error(\"offset operator requires a valid target element\");\n }\n\n type OutputSignal = ExtendSignalValue<T, OffsetValue>;\n\n return (source) =>\n createStream<OutputSignal>((observer) => {\n let cachedRect: DOMRect | null = null;\n\n function getRect(): DOMRect {\n // If recalculate$ is provided, use caching\n if (recalculate$) {\n if (!cachedRect) {\n cachedRect = target.getBoundingClientRect();\n }\n return cachedRect;\n }\n // No recalculate$ means always calculate fresh\n return target.getBoundingClientRect();\n }\n\n // Subscribe to recalculate$ if provided\n let recalculateUnsub: (() => void) | undefined;\n if (recalculate$) {\n recalculateUnsub = recalculate$.subscribe({\n next() {\n cachedRect = target.getBoundingClientRect();\n },\n });\n }\n\n const unsub = source.subscribe({\n next(signal) {\n try {\n const rect = getRect();\n const value = signal.value as PointerValue & OffsetValue;\n\n value.offsetX = value.x - rect.left;\n value.offsetY = value.y - rect.top;\n\n observer.next(signal as unknown as OutputSignal);\n } catch (err) {\n observer.error?.(err);\n }\n },\n error: observer.error?.bind(observer),\n complete() {\n observer.complete?.();\n },\n });\n\n return () => {\n unsub();\n recalculateUnsub?.();\n };\n });\n}\n","import type { SinglePointerSignal } from \"../browser/single-pointer/single-pointer-signal.js\";\nimport type { Signal } from \"../core/signal.js\";\nimport type { Operator } from \"../core/stream.js\";\nimport { createStream } from \"../core/stream.js\";\n\nexport interface SessionOptions<T extends Signal> {\n start: (signal: T) => boolean;\n end: (signal: T) => boolean;\n}\n\n/**\n * Filters signals to only emit during active sessions.\n * A session begins when the start predicate returns true and ends when the end predicate returns true.\n * Both start and end signals are included in the output.\n * Sessions can repeat: after an end, the next start begins a new session.\n */\nexport function session<T extends Signal>(options: SessionOptions<T>): Operator<T, T> {\n return (source) =>\n createStream((observer) => {\n let active = false;\n\n return source.subscribe({\n next(value) {\n try {\n if (!active) {\n if (options.start(value)) {\n active = true;\n observer.next(value);\n }\n } else {\n observer.next(value);\n if (options.end(value)) {\n active = false;\n }\n }\n } catch (err) {\n observer.error?.(err);\n }\n },\n error: observer.error?.bind(observer),\n complete: observer.complete?.bind(observer),\n });\n });\n}\n\nexport function singlePointerSession(): Operator<SinglePointerSignal, SinglePointerSignal> {\n return session({\n start: (signal) => signal.value.phase === \"start\",\n end: (signal) => signal.value.phase === \"end\" || signal.value.phase === \"cancel\",\n });\n}\n","import type { Signal } from \"../core/signal.js\";\nimport type { Observer, Operator, Stream, Unsubscribe } from \"../core/stream.js\";\nimport { toObserver } from \"../core/stream.js\";\n\nexport function share<T extends Signal>(): Operator<T, T> {\n return (source): Stream<T> => {\n const observers = new Set<Observer<T>>();\n let sourceUnsub: Unsubscribe | null = null;\n let blocked = false;\n\n return {\n get isBlocked() {\n return blocked;\n },\n\n block() {\n blocked = true;\n },\n\n unblock() {\n blocked = false;\n },\n\n subscribe(observerOrNext) {\n const observer = toObserver(observerOrNext);\n observers.add(observer);\n\n if (observers.size === 1) {\n sourceUnsub = source.subscribe({\n next(value) {\n if (blocked) return;\n for (const obs of observers) {\n obs.next(value);\n }\n },\n error(err) {\n for (const obs of observers) {\n obs.error?.(err);\n }\n },\n complete() {\n for (const obs of observers) {\n obs.complete?.();\n }\n observers.clear();\n sourceUnsub = null;\n },\n });\n }\n\n return () => {\n observers.delete(observer);\n if (observers.size === 0 && sourceUnsub) {\n sourceUnsub();\n sourceUnsub = null;\n }\n };\n },\n };\n };\n}\n\nexport function shareReplay<T extends Signal>(bufferSize = 1): Operator<T, T> {\n return (source): Stream<T> => {\n const buffer: T[] = [];\n const observers = new Set<Observer<T>>();\n let sourceUnsub: Unsubscribe | null = null;\n let completed = false;\n let hasError = false;\n let errorValue: unknown;\n let blocked = false;\n\n return {\n get isBlocked() {\n return blocked;\n },\n\n block() {\n blocked = true;\n },\n\n unblock() {\n blocked = false;\n },\n\n subscribe(observerOrNext) {\n const observer = toObserver(observerOrNext);\n\n for (const value of buffer) {\n observer.next(value);\n }\n\n if (completed) {\n observer.complete?.();\n return () => {};\n }\n if (hasError) {\n observer.error?.(errorValue);\n return () => {};\n }\n\n observers.add(observer);\n\n if (observers.size === 1 && !sourceUnsub) {\n sourceUnsub = source.subscribe({\n next(value) {\n buffer.push(value);\n if (buffer.length > bufferSize) {\n buffer.shift();\n }\n if (blocked) return;\n for (const obs of observers) {\n obs.next(value);\n }\n },\n error(err) {\n hasError = true;\n errorValue = err;\n for (const obs of observers) {\n obs.error?.(err);\n }\n observers.clear();\n sourceUnsub = null;\n },\n complete() {\n completed = true;\n for (const obs of observers) {\n obs.complete?.();\n }\n observers.clear();\n sourceUnsub = null;\n },\n });\n }\n\n return () => {\n observers.delete(observer);\n if (observers.size === 0 && sourceUnsub && !completed && !hasError) {\n sourceUnsub();\n sourceUnsub = null;\n }\n };\n },\n };\n };\n}\n","import type { Signal } from \"../core/signal.js\";\nimport type { Operator, Stream } from \"../core/stream.js\";\nimport { createStream } from \"../core/stream.js\";\n\nexport function skip<T extends Signal>(count: number): Operator<T, T> {\n return (source) =>\n createStream((observer) => {\n let skipped = 0;\n\n return source.subscribe({\n next(value) {\n if (skipped < count) {\n skipped++;\n } else {\n observer.next(value);\n }\n },\n error: observer.error?.bind(observer),\n complete: observer.complete?.bind(observer),\n });\n });\n}\n\nexport function skipWhile<T extends Signal>(predicate: (value: T) => boolean): Operator<T, T> {\n return (source) =>\n createStream((observer) => {\n let skipping = true;\n\n return source.subscribe({\n next(value) {\n if (skipping && !predicate(value)) {\n skipping = false;\n }\n if (!skipping) {\n observer.next(value);\n }\n },\n error: observer.error?.bind(observer),\n complete: observer.complete?.bind(observer),\n });\n });\n}\n\nexport function skipUntil<T extends Signal>(notifier: Stream<Signal>): Operator<T, T> {\n return (source) =>\n createStream((observer) => {\n let skipping = true;\n\n const notifierUnsub = notifier.subscribe(() => {\n skipping = false;\n notifierUnsub();\n });\n\n const sourceUnsub = source.subscribe({\n next(value) {\n if (!skipping) {\n observer.next(value);\n }\n },\n error: observer.error?.bind(observer),\n complete: observer.complete?.bind(observer),\n });\n\n return () => {\n notifierUnsub();\n sourceUnsub();\n };\n });\n}\n","import type { Signal } from \"../core/signal.js\";\nimport type { Operator } from \"../core/stream.js\";\nimport { createStream } from \"../core/stream.js\";\n\n/**\n * Operator that passes values through unchanged while running a side-effect.\n *\n * In event/gesture pipelines, this is commonly used for:\n * - Debug logging (coordinates, phases, state transitions)\n * - Tracing/metrics (timing, counters)\n * - Applying flags on events (e.g. calling `event.prevent()`), then filtering later (e.g. with `excludePrevented()`)\n *\n * If `fn` throws, the error is forwarded to the downstream `error` handler.\n *\n * @example\n * ```typescript\n * import { eventSource } from \"../../source/event-source-factory.js\";\n * import { pipe } from \"../pipe.js\";\n *\n * pipe(\n * eventSource<PointerEvent>(element, \"pointermove\"),\n * spy((e) => {\n * // Observe without modifying the stream values\n * console.log(e.clientX, e.clientY);\n * }),\n * ).subscribe();\n * ```\n */\nexport function spy<T extends Signal>(fn: (value: T) => void): Operator<T, T> {\n return (source) =>\n createStream((observer) => {\n return source.subscribe({\n next(value) {\n try {\n fn(value);\n observer.next(value);\n } catch (err) {\n observer.error?.(err);\n }\n },\n error: observer.error?.bind(observer),\n complete: observer.complete?.bind(observer),\n });\n });\n}\n\n/** Alias for spy - RxJS-compatible naming */\nexport const tap = spy;\n","import type { Signal } from \"../core/signal.js\";\nimport type { Operator, Stream } from \"../core/stream.js\";\nimport { createStream } from \"../core/stream.js\";\n\n/**\n * Operators for ending a subscription based on count, a predicate, or a notifier.\n *\n * This is intentionally about **subscription lifecycle** (\"when should this pipeline stop?\"),\n * not about destroying the underlying event source (which may be shared by other subscribers).\n *\n * Common event/gesture patterns:\n * - One-shot trigger: `take(1)`\n * - While a condition holds: `takeWhile(predicate)`\n * - Until an explicit end signal: `takeUntil(end$)` (e.g. move until up/cancel)\n */\nexport function take<T extends Signal>(count: number): Operator<T, T> {\n return (source) =>\n createStream((observer) => {\n let taken = 0;\n let unsub: (() => void) | undefined;\n\n unsub = source.subscribe({\n next(value) {\n if (taken < count) {\n taken++;\n observer.next(value);\n if (taken >= count) {\n observer.complete?.();\n unsub?.();\n }\n }\n },\n error: observer.error?.bind(observer),\n complete: observer.complete?.bind(observer),\n });\n\n return () => unsub?.();\n });\n}\n\n/**\n * Emits only the first `count` values, then completes and unsubscribes.\n * `take(1)` is especially useful for one-shot triggers.\n */\nexport function takeWhile<T extends Signal>(predicate: (value: T) => boolean): Operator<T, T> {\n return (source) =>\n createStream((observer) => {\n let unsub: (() => void) | undefined;\n\n unsub = source.subscribe({\n next(value) {\n if (predicate(value)) {\n observer.next(value);\n } else {\n observer.complete?.();\n unsub?.();\n }\n },\n error: observer.error?.bind(observer),\n complete: observer.complete?.bind(observer),\n });\n\n return () => unsub?.();\n });\n}\n\n/**\n * Emits values while `predicate(value)` is true, then completes and unsubscribes.\n */\nexport function takeUntil<T extends Signal>(notifier: Stream<Signal>): Operator<T, T> {\n return (source) =>\n createStream((observer) => {\n let completed = false;\n\n const notifierUnsub = notifier.subscribe(() => {\n if (!completed) {\n completed = true;\n observer.complete?.();\n cleanup();\n }\n });\n\n const sourceUnsub = source.subscribe({\n next(value) {\n if (!completed) {\n observer.next(value);\n }\n },\n error: observer.error?.bind(observer),\n complete() {\n if (!completed) {\n completed = true;\n observer.complete?.();\n }\n },\n });\n\n const cleanup = () => {\n notifierUnsub();\n sourceUnsub();\n };\n\n return cleanup;\n });\n}\n\n/**\n * Completes the source subscription when `notifier` emits, and unsubscribes from both.\n * This is the go-to shape for \"observe from start until end\" event flows.\n */\n","import type { Signal } from \"../core/signal.js\";\nimport type { Operator } from \"../core/stream.js\";\nimport { createStream } from \"../core/stream.js\";\n\nexport function throttle<T extends Signal>(ms: number): Operator<T, T> {\n return (source) =>\n createStream((observer) => {\n let lastTime: number | null = null;\n\n return source.subscribe({\n next(value) {\n const now = performance.now();\n if (lastTime === null || now - lastTime >= ms) {\n lastTime = now;\n observer.next(value);\n }\n },\n error: observer.error?.bind(observer),\n complete: observer.complete?.bind(observer),\n });\n });\n}\n\nexport function throttleLast<T extends Signal>(ms: number): Operator<T, T> {\n return (source) =>\n createStream((observer) => {\n let lastValue: T | undefined;\n let hasValue = false;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const unsub = source.subscribe({\n next(value) {\n lastValue = value;\n hasValue = true;\n\n if (timeoutId === null) {\n timeoutId = setTimeout(() => {\n if (hasValue) {\n observer.next(lastValue!);\n hasValue = false;\n }\n timeoutId = null;\n }, ms);\n }\n },\n error: observer.error?.bind(observer),\n complete() {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n if (hasValue) {\n observer.next(lastValue!);\n }\n }\n observer.complete?.();\n },\n });\n\n return () => {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n }\n unsub();\n };\n });\n}\n"],"names":["buffer","count","source","createStream","observer","bufferArr","value","bufferTime","ms","intervalId","unsub","bufferWhen","notifier","notifierUnsub","sourceUnsub","debounce","timeoutId","distinctUntilChanged","compare","isEqual","a","b","hasLast","lastValue","distinctUntilKeyChanged","keySelector","lastKey","key","filter","predicate","err","map","transform","mergeWith","other","completedCount","checkComplete","unsub1","unsub2","merge","sources","unsubs","offset","options","target","recalculate$","cachedRect","getRect","recalculateUnsub","signal","rect","session","active","singlePointerSession","share","observers","blocked","observerOrNext","toObserver","obs","shareReplay","bufferSize","completed","hasError","errorValue","skip","skipped","skipWhile","skipping","skipUntil","spy","fn","tap","take","taken","takeWhile","takeUntil","cleanup","throttle","lastTime","now","throttleLast","hasValue"],"mappings":"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"}
|
package/dist/operators.js
CHANGED
|
@@ -52,7 +52,7 @@ function g(u) {
|
|
|
52
52
|
};
|
|
53
53
|
});
|
|
54
54
|
}
|
|
55
|
-
function
|
|
55
|
+
function U(u) {
|
|
56
56
|
return (r) => i((t) => {
|
|
57
57
|
let e = [];
|
|
58
58
|
const n = u.subscribe(() => {
|
|
@@ -81,7 +81,7 @@ function w(u) {
|
|
|
81
81
|
};
|
|
82
82
|
});
|
|
83
83
|
}
|
|
84
|
-
function
|
|
84
|
+
function w(u) {
|
|
85
85
|
return (r) => i((t) => {
|
|
86
86
|
let e = null;
|
|
87
87
|
const n = r.subscribe({
|
|
@@ -100,7 +100,7 @@ function I(u) {
|
|
|
100
100
|
};
|
|
101
101
|
});
|
|
102
102
|
}
|
|
103
|
-
function
|
|
103
|
+
function I(u) {
|
|
104
104
|
const r = u ?? ((t, e) => t.value === e.value);
|
|
105
105
|
return (t) => i((e) => {
|
|
106
106
|
let n = !1, c;
|
|
@@ -119,8 +119,8 @@ function y(u, r) {
|
|
|
119
119
|
let c = !1, l;
|
|
120
120
|
return e.subscribe({
|
|
121
121
|
next(o) {
|
|
122
|
-
const
|
|
123
|
-
(!c || !t(l,
|
|
122
|
+
const a = u(o);
|
|
123
|
+
(!c || !t(l, a)) && (c = !0, l = a, n.next(o));
|
|
124
124
|
},
|
|
125
125
|
error: n.error?.bind(n),
|
|
126
126
|
complete: n.complete?.bind(n)
|
|
@@ -191,36 +191,38 @@ function D(...u) {
|
|
|
191
191
|
});
|
|
192
192
|
}
|
|
193
193
|
function R(u) {
|
|
194
|
-
const { target: r,
|
|
194
|
+
const { target: r, recalculate$: t } = u;
|
|
195
195
|
if (!r)
|
|
196
196
|
throw new Error("offset operator requires a valid target element");
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
197
|
+
return (e) => i((n) => {
|
|
198
|
+
let c = null;
|
|
199
|
+
function l() {
|
|
200
|
+
return t ? (c || (c = r.getBoundingClientRect()), c) : r.getBoundingClientRect();
|
|
201
|
+
}
|
|
202
|
+
let o;
|
|
203
|
+
t && (o = t.subscribe({
|
|
204
|
+
next() {
|
|
205
|
+
c = r.getBoundingClientRect();
|
|
206
|
+
}
|
|
207
|
+
}));
|
|
208
|
+
const a = e.subscribe({
|
|
209
|
+
next(d) {
|
|
207
210
|
try {
|
|
208
|
-
const
|
|
209
|
-
|
|
210
|
-
} catch (
|
|
211
|
-
|
|
211
|
+
const s = l(), f = d.value;
|
|
212
|
+
f.offsetX = f.x - s.left, f.offsetY = f.y - s.top, n.next(d);
|
|
213
|
+
} catch (s) {
|
|
214
|
+
n.error?.(s);
|
|
212
215
|
}
|
|
213
216
|
},
|
|
214
|
-
error:
|
|
217
|
+
error: n.error?.bind(n),
|
|
215
218
|
complete() {
|
|
216
|
-
|
|
219
|
+
n.complete?.();
|
|
217
220
|
}
|
|
218
221
|
});
|
|
219
222
|
return () => {
|
|
220
|
-
|
|
223
|
+
a(), o?.();
|
|
221
224
|
};
|
|
222
225
|
});
|
|
223
|
-
return l.recalculate = c, l;
|
|
224
226
|
}
|
|
225
227
|
function x(u) {
|
|
226
228
|
return (r) => i((t) => {
|
|
@@ -238,13 +240,13 @@ function x(u) {
|
|
|
238
240
|
});
|
|
239
241
|
});
|
|
240
242
|
}
|
|
241
|
-
function
|
|
243
|
+
function B() {
|
|
242
244
|
return x({
|
|
243
245
|
start: (u) => u.value.phase === "start",
|
|
244
246
|
end: (u) => u.value.phase === "end" || u.value.phase === "cancel"
|
|
245
247
|
});
|
|
246
248
|
}
|
|
247
|
-
function
|
|
249
|
+
function z() {
|
|
248
250
|
return (u) => {
|
|
249
251
|
const r = /* @__PURE__ */ new Set();
|
|
250
252
|
let t = null, e = !1;
|
|
@@ -285,33 +287,33 @@ function B() {
|
|
|
285
287
|
function E(u = 1) {
|
|
286
288
|
return (r) => {
|
|
287
289
|
const t = [], e = /* @__PURE__ */ new Set();
|
|
288
|
-
let n = null, c = !1, l = !1, o,
|
|
290
|
+
let n = null, c = !1, l = !1, o, a = !1;
|
|
289
291
|
return {
|
|
290
292
|
get isBlocked() {
|
|
291
|
-
return
|
|
293
|
+
return a;
|
|
292
294
|
},
|
|
293
295
|
block() {
|
|
294
|
-
|
|
296
|
+
a = !0;
|
|
295
297
|
},
|
|
296
298
|
unblock() {
|
|
297
|
-
|
|
299
|
+
a = !1;
|
|
298
300
|
},
|
|
299
|
-
subscribe(
|
|
300
|
-
const
|
|
301
|
+
subscribe(d) {
|
|
302
|
+
const s = m(d);
|
|
301
303
|
for (const f of t)
|
|
302
|
-
|
|
303
|
-
return c ? (
|
|
304
|
-
}) : l ? (
|
|
305
|
-
}) : (e.add(
|
|
304
|
+
s.next(f);
|
|
305
|
+
return c ? (s.complete?.(), () => {
|
|
306
|
+
}) : l ? (s.error?.(o), () => {
|
|
307
|
+
}) : (e.add(s), e.size === 1 && !n && (n = r.subscribe({
|
|
306
308
|
next(f) {
|
|
307
|
-
if (t.push(f), t.length > u && t.shift(), !
|
|
308
|
-
for (const
|
|
309
|
-
|
|
309
|
+
if (t.push(f), t.length > u && t.shift(), !a)
|
|
310
|
+
for (const p of e)
|
|
311
|
+
p.next(f);
|
|
310
312
|
},
|
|
311
313
|
error(f) {
|
|
312
314
|
l = !0, o = f;
|
|
313
|
-
for (const
|
|
314
|
-
|
|
315
|
+
for (const p of e)
|
|
316
|
+
p.error?.(f);
|
|
315
317
|
e.clear(), n = null;
|
|
316
318
|
},
|
|
317
319
|
complete() {
|
|
@@ -321,7 +323,7 @@ function E(u = 1) {
|
|
|
321
323
|
e.clear(), n = null;
|
|
322
324
|
}
|
|
323
325
|
})), () => {
|
|
324
|
-
e.delete(
|
|
326
|
+
e.delete(s), e.size === 0 && n && !c && !l && (n(), n = null);
|
|
325
327
|
});
|
|
326
328
|
}
|
|
327
329
|
};
|
|
@@ -460,9 +462,9 @@ function X(u) {
|
|
|
460
462
|
export {
|
|
461
463
|
k as buffer,
|
|
462
464
|
g as bufferTime,
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
465
|
+
U as bufferWhen,
|
|
466
|
+
w as debounce,
|
|
467
|
+
I as distinctUntilChanged,
|
|
466
468
|
y as distinctUntilKeyChanged,
|
|
467
469
|
A as filter,
|
|
468
470
|
T as map,
|
|
@@ -470,9 +472,9 @@ export {
|
|
|
470
472
|
C as mergeWith,
|
|
471
473
|
R as offset,
|
|
472
474
|
x as session,
|
|
473
|
-
|
|
475
|
+
z as share,
|
|
474
476
|
E as shareReplay,
|
|
475
|
-
|
|
477
|
+
B as singlePointerSession,
|
|
476
478
|
S as skip,
|
|
477
479
|
W as skipUntil,
|
|
478
480
|
V as skipWhile,
|