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.
Files changed (51) hide show
  1. package/README.md +1 -2
  2. package/dist/browser/single-pointer/pointer.d.ts +1 -1
  3. package/dist/browser/single-pointer/pointer.d.ts.map +1 -1
  4. package/dist/browser/single-pointer/recognizer-from-mouse.d.ts.map +1 -1
  5. package/dist/browser/single-pointer/recognizer-from-pointer.d.ts.map +1 -1
  6. package/dist/browser/single-pointer/recognizer-from-touch.d.ts.map +1 -1
  7. package/dist/browser/single-pointer/recognizer.d.ts +1 -1
  8. package/dist/browser/single-pointer/recognizer.d.ts.map +1 -1
  9. package/dist/browser/single-pointer/single-pointer-signal.d.ts +0 -1
  10. package/dist/browser/single-pointer/single-pointer-signal.d.ts.map +1 -1
  11. package/dist/browser/single-pointer/types.d.ts +1 -3
  12. package/dist/browser/single-pointer/types.d.ts.map +1 -1
  13. package/dist/core/signal.d.ts +5 -5
  14. package/dist/core/signal.d.ts.map +1 -1
  15. package/dist/index.cjs +1 -1
  16. package/dist/index.cjs.map +1 -1
  17. package/dist/index.js +73 -111
  18. package/dist/index.js.map +1 -1
  19. package/dist/internal/types.d.ts +14 -0
  20. package/dist/internal/types.d.ts.map +1 -0
  21. package/dist/operators/offset.d.ts +21 -7
  22. package/dist/operators/offset.d.ts.map +1 -1
  23. package/dist/operators.cjs +1 -1
  24. package/dist/operators.cjs.map +1 -1
  25. package/dist/operators.js +49 -47
  26. package/dist/operators.js.map +1 -1
  27. package/dist/recognizer-CGZKcxpa.js +56 -0
  28. package/dist/recognizer-CGZKcxpa.js.map +1 -0
  29. package/dist/recognizer-DbiEtBOM.cjs +2 -0
  30. package/dist/recognizer-DbiEtBOM.cjs.map +1 -0
  31. package/dist/single-pointer/mouse.cjs +1 -1
  32. package/dist/single-pointer/mouse.cjs.map +1 -1
  33. package/dist/single-pointer/mouse.js +25 -24
  34. package/dist/single-pointer/mouse.js.map +1 -1
  35. package/dist/single-pointer/pointer.cjs +1 -1
  36. package/dist/single-pointer/pointer.cjs.map +1 -1
  37. package/dist/single-pointer/pointer.js +62 -1
  38. package/dist/single-pointer/pointer.js.map +1 -1
  39. package/dist/single-pointer/touch.cjs +1 -1
  40. package/dist/single-pointer/touch.cjs.map +1 -1
  41. package/dist/single-pointer/touch.js +26 -25
  42. package/dist/single-pointer/touch.js.map +1 -1
  43. package/dist/types-BGR5Mhw9.cjs.map +1 -1
  44. package/dist/types-Ccnqx90M.js.map +1 -1
  45. package/package.json +4 -11
  46. package/dist/browser/single-pointer/pool.d.ts +0 -4
  47. package/dist/browser/single-pointer/pool.d.ts.map +0 -1
  48. package/dist/recognizer-BrqdN-1T.cjs +0 -2
  49. package/dist/recognizer-BrqdN-1T.cjs.map +0 -1
  50. package/dist/recognizer-FFAuyJ19.js +0 -101
  51. package/dist/recognizer-FFAuyJ19.js.map +0 -1
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./stream-Cp6eCZs2.cjs");function x(c){return r=>i.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=>i.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(l){t.push(l)},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=>i.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(l){t.push(l)},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=>i.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=>i.createStream(t=>{let n=!1,u;return e.subscribe({next(l){(!n||!r(u,l))&&(n=!0,u=l,t.next(l))},error:t.error?.bind(t),complete:t.complete?.bind(t)})})}function y(c,r){const e=r??((t,n)=>t===n);return t=>i.createStream(n=>{let u=!1,l;return t.subscribe({next(o){const f=c(o);(!u||!e(l,f))&&(u=!0,l=f,n.next(o))},error:n.error?.bind(n),complete:n.complete?.bind(n)})})}function U(c){return r=>i.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=>i.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=>i.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}),l=c.subscribe({next:o=>e.next(o),error:e.error?.bind(e),complete:n});return()=>{u(),l()}})}function T(...c){return i.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 A(c){const{target:r,manual:e=!1}=c;if(!r)throw new Error("offset operator requires a valid target element");let t=null;function n(){return e&&t||(t=r.getBoundingClientRect()),t}function u(){t=r.getBoundingClientRect()}const l=o=>i.createStream(f=>{const d=o.subscribe({next(s){try{const a=n(),m=s.value;m.offsetX=m.x-a.left,m.offsetY=m.y-a.top,f.next(s)}catch(a){f.error?.(a)}},error:f.error?.bind(f),complete(){f.complete?.()}});return()=>{d()}});return l.recalculate=u,l}function p(c){return r=>i.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 C(){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=i.toObserver(n);return r.add(u),r.size===1&&(e=c.subscribe({next(l){if(!t)for(const o of r)o.next(l)},error(l){for(const o of r)o.error?.(l)},complete(){for(const l of r)l.complete?.();r.clear(),e=null}})),()=>{r.delete(u),r.size===0&&e&&(e(),e=null)}}}}}function D(c=1){return r=>{const e=[],t=new Set;let n=null,u=!1,l=!1,o,f=!1;return{get isBlocked(){return f},block(){f=!0},unblock(){f=!1},subscribe(d){const s=i.toObserver(d);for(const a of e)s.next(a);return u?(s.complete?.(),()=>{}):l?(s.error?.(o),()=>{}):(t.add(s),t.size===1&&!n&&(n=r.subscribe({next(a){if(e.push(a),e.length>c&&e.shift(),!f)for(const m of t)m.next(a)},error(a){l=!0,o=a;for(const m of t)m.error?.(a);t.clear(),n=null},complete(){u=!0;for(const a of t)a.complete?.();t.clear(),n=null}})),()=>{t.delete(s),t.size===0&&n&&!u&&!l&&(n(),n=null)})}}}}function R(c){return r=>i.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 q(c){return r=>i.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 z(c){return r=>i.createStream(e=>{let t=!0;const n=c.subscribe(()=>{t=!1,n()}),u=r.subscribe({next(l){t||e.next(l)},error:e.error?.bind(e),complete:e.complete?.bind(e)});return()=>{n(),u()}})}function b(c){return r=>i.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 B=b;function E(c){return r=>i.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=>i.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=>i.createStream(e=>{let t=!1;const n=c.subscribe(()=>{t||(t=!0,e.complete?.(),l())}),u=r.subscribe({next(o){t||e.next(o)},error:e.error?.bind(e),complete(){t||(t=!0,e.complete?.())}}),l=()=>{n(),u()};return l})}function K(c){return r=>i.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=>i.createStream(e=>{let t,n=!1,u=null;const l=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),l()}})}exports.buffer=x;exports.bufferTime=h;exports.bufferWhen=k;exports.debounce=g;exports.distinctUntilChanged=S;exports.distinctUntilKeyChanged=y;exports.filter=U;exports.map=w;exports.merge=T;exports.mergeWith=I;exports.offset=A;exports.session=p;exports.share=W;exports.shareReplay=D;exports.singlePointerSession=C;exports.skip=R;exports.skipUntil=z;exports.skipWhile=q;exports.spy=b;exports.take=E;exports.takeUntil=V;exports.takeWhile=L;exports.tap=B;exports.throttle=K;exports.throttleLast=O;
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
@@ -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 w(u) {
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 I(u) {
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 U(u) {
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 s = u(o);
123
- (!c || !t(l, s)) && (c = !0, l = s, n.next(o));
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, manual: t = !1 } = u;
194
+ const { target: r, recalculate$: t } = u;
195
195
  if (!r)
196
196
  throw new Error("offset operator requires a valid target element");
197
- let e = null;
198
- function n() {
199
- return t && e || (e = r.getBoundingClientRect()), e;
200
- }
201
- function c() {
202
- e = r.getBoundingClientRect();
203
- }
204
- const l = (o) => i((s) => {
205
- const p = o.subscribe({
206
- next(a) {
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 f = n(), d = a.value;
209
- d.offsetX = d.x - f.left, d.offsetY = d.y - f.top, s.next(a);
210
- } catch (f) {
211
- s.error?.(f);
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: s.error?.bind(s),
217
+ error: n.error?.bind(n),
215
218
  complete() {
216
- s.complete?.();
219
+ n.complete?.();
217
220
  }
218
221
  });
219
222
  return () => {
220
- p();
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 z() {
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 B() {
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, s = !1;
290
+ let n = null, c = !1, l = !1, o, a = !1;
289
291
  return {
290
292
  get isBlocked() {
291
- return s;
293
+ return a;
292
294
  },
293
295
  block() {
294
- s = !0;
296
+ a = !0;
295
297
  },
296
298
  unblock() {
297
- s = !1;
299
+ a = !1;
298
300
  },
299
- subscribe(p) {
300
- const a = m(p);
301
+ subscribe(d) {
302
+ const s = m(d);
301
303
  for (const f of t)
302
- a.next(f);
303
- return c ? (a.complete?.(), () => {
304
- }) : l ? (a.error?.(o), () => {
305
- }) : (e.add(a), e.size === 1 && !n && (n = r.subscribe({
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(), !s)
308
- for (const d of e)
309
- d.next(f);
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 d of e)
314
- d.error?.(f);
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(a), e.size === 0 && n && !c && !l && (n(), n = null);
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
- w as bufferWhen,
464
- I as debounce,
465
- U as distinctUntilChanged,
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
- B as share,
475
+ z as share,
474
476
  E as shareReplay,
475
- z as singlePointerSession,
477
+ B as singlePointerSession,
476
478
  S as skip,
477
479
  W as skipUntil,
478
480
  V as skipWhile,