cereb 0.3.2 → 0.4.0

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 (48) hide show
  1. package/dist/browser/single-pointer/pointer.d.ts +1 -1
  2. package/dist/browser/single-pointer/pointer.d.ts.map +1 -1
  3. package/dist/browser/single-pointer/pool.d.ts +2 -2
  4. package/dist/browser/single-pointer/pool.d.ts.map +1 -1
  5. package/dist/browser/single-pointer/recognizer-from-mouse.d.ts.map +1 -1
  6. package/dist/browser/single-pointer/recognizer-from-pointer.d.ts.map +1 -1
  7. package/dist/browser/single-pointer/recognizer-from-touch.d.ts.map +1 -1
  8. package/dist/browser/single-pointer/recognizer.d.ts +1 -1
  9. package/dist/browser/single-pointer/recognizer.d.ts.map +1 -1
  10. package/dist/browser/single-pointer/single-pointer-signal.d.ts +2 -1
  11. package/dist/browser/single-pointer/single-pointer-signal.d.ts.map +1 -1
  12. package/dist/browser/single-pointer/types.d.ts +1 -3
  13. package/dist/browser/single-pointer/types.d.ts.map +1 -1
  14. package/dist/core/index.d.ts +1 -0
  15. package/dist/core/index.d.ts.map +1 -1
  16. package/dist/core/signal-pool.d.ts +33 -0
  17. package/dist/core/signal-pool.d.ts.map +1 -0
  18. package/dist/core/signal.d.ts +5 -5
  19. package/dist/core/signal.d.ts.map +1 -1
  20. package/dist/index.cjs +1 -1
  21. package/dist/index.cjs.map +1 -1
  22. package/dist/index.js +79 -107
  23. package/dist/index.js.map +1 -1
  24. package/dist/internal/types.d.ts +14 -0
  25. package/dist/internal/types.d.ts.map +1 -0
  26. package/dist/recognizer-6XjwLbo4.js +118 -0
  27. package/dist/recognizer-6XjwLbo4.js.map +1 -0
  28. package/dist/recognizer-BnYeedMd.cjs +2 -0
  29. package/dist/recognizer-BnYeedMd.cjs.map +1 -0
  30. package/dist/single-pointer/mouse.cjs +1 -1
  31. package/dist/single-pointer/mouse.cjs.map +1 -1
  32. package/dist/single-pointer/mouse.js +25 -24
  33. package/dist/single-pointer/mouse.js.map +1 -1
  34. package/dist/single-pointer/pointer.cjs +1 -1
  35. package/dist/single-pointer/pointer.cjs.map +1 -1
  36. package/dist/single-pointer/pointer.js +62 -1
  37. package/dist/single-pointer/pointer.js.map +1 -1
  38. package/dist/single-pointer/touch.cjs +1 -1
  39. package/dist/single-pointer/touch.cjs.map +1 -1
  40. package/dist/single-pointer/touch.js +26 -25
  41. package/dist/single-pointer/touch.js.map +1 -1
  42. package/dist/types-BGR5Mhw9.cjs.map +1 -1
  43. package/dist/types-Ccnqx90M.js.map +1 -1
  44. package/package.json +1 -8
  45. package/dist/recognizer-BrqdN-1T.cjs +0 -2
  46. package/dist/recognizer-BrqdN-1T.cjs.map +0 -1
  47. package/dist/recognizer-FFAuyJ19.js +0 -101
  48. package/dist/recognizer-FFAuyJ19.js.map +0 -1
@@ -0,0 +1,118 @@
1
+ let c = "";
2
+ function u() {
3
+ return c;
4
+ }
5
+ function A(t) {
6
+ c = t;
7
+ }
8
+ const d = 0, S = 100;
9
+ function I() {
10
+ const t = /* @__PURE__ */ new Map();
11
+ function r(e) {
12
+ e.deviceId = u(), e.createdAt = performance.now(), e.updatedAt = void 0;
13
+ }
14
+ function o(e, n) {
15
+ return {
16
+ kind: e,
17
+ value: n.config.createValue(),
18
+ deviceId: u(),
19
+ createdAt: performance.now()
20
+ };
21
+ }
22
+ return {
23
+ registerKind(e, n, i = {}) {
24
+ const { initialSize: p = d, maxSize: f = S } = i, s = {
25
+ config: n,
26
+ pool: [],
27
+ maxSize: f
28
+ };
29
+ for (let l = 0; l < p; l++)
30
+ s.pool.push(o(e, s));
31
+ t.set(e, s);
32
+ },
33
+ acquire(e) {
34
+ const n = t.get(e);
35
+ if (!n)
36
+ throw new Error(`Signal kind "${e}" is not registered. Call registerKind first.`);
37
+ return n.pool.length > 0 ? n.pool.pop() : o(e, n);
38
+ },
39
+ release(e) {
40
+ const n = t.get(e.kind);
41
+ if (n && n.pool.length < n.maxSize) {
42
+ const i = e;
43
+ r(i), n.config.resetValue(i.value), n.pool.push(e);
44
+ }
45
+ },
46
+ getPoolSize(e) {
47
+ const n = t.get(e);
48
+ return n ? n.pool.length : 0;
49
+ },
50
+ get registeredKinds() {
51
+ return Array.from(t.keys());
52
+ }
53
+ };
54
+ }
55
+ const a = I(), g = "single-pointer";
56
+ function v(t) {
57
+ const r = t;
58
+ r.phase = "move", r.x = 0, r.y = 0, r.pageX = 0, r.pageY = 0, r.pointerType = "unknown", r.button = "none", r.pressure = 0.5;
59
+ }
60
+ function m() {
61
+ return {
62
+ id: "",
63
+ phase: "move",
64
+ x: 0,
65
+ y: 0,
66
+ pageX: 0,
67
+ pageY: 0,
68
+ pointerType: "unknown",
69
+ button: "none",
70
+ pressure: 0.5
71
+ };
72
+ }
73
+ a.registerKind(
74
+ g,
75
+ {
76
+ createValue: m,
77
+ resetValue: v
78
+ },
79
+ {
80
+ initialSize: 20,
81
+ maxSize: 100
82
+ }
83
+ );
84
+ function P() {
85
+ return a.acquire(g);
86
+ }
87
+ function y(t) {
88
+ a.release(t);
89
+ }
90
+ function h(t, r = {}) {
91
+ let o = null;
92
+ function e() {
93
+ o && y(o), o = null;
94
+ }
95
+ return {
96
+ process: (n) => {
97
+ const i = P();
98
+ return t(n, i), e(), o = i, i;
99
+ },
100
+ get isActive() {
101
+ return o !== null;
102
+ },
103
+ reset() {
104
+ e();
105
+ },
106
+ dispose() {
107
+ this.reset();
108
+ }
109
+ };
110
+ }
111
+ export {
112
+ I as a,
113
+ a as b,
114
+ h as c,
115
+ u as g,
116
+ A as s
117
+ };
118
+ //# sourceMappingURL=recognizer-6XjwLbo4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recognizer-6XjwLbo4.js","sources":["../src/core/meta.ts","../src/core/signal-pool.ts","../src/browser/single-pointer/single-pointer-signal.ts","../src/browser/single-pointer/pool.ts","../src/browser/single-pointer/recognizer.ts"],"sourcesContent":["let deviceId: string = \"\";\n\nexport function getCerebDeviceId(): string {\n return deviceId;\n}\n\nexport function setCerebDeviceId(id: string): void {\n deviceId = id;\n}\n","import type { DeepMutable, Mutable } from \"../internal/types.js\";\nimport { getCerebDeviceId } from \"./meta.js\";\nimport type { Signal } from \"./signal.js\";\n\n/**\n * Configuration for a specific Signal kind.\n * Each kind must provide functions to create and reset its value type.\n */\nexport interface SignalKindConfig<V> {\n createValue: () => V;\n resetValue: (value: V) => void;\n}\n\nexport interface SignalPoolOptions {\n initialSize?: number;\n maxSize?: number;\n}\n\n/**\n * Unified pool for managing Signal objects across all kinds.\n * Handles object reuse to minimize GC pressure in high-frequency scenarios.\n */\nexport interface SignalPool {\n registerKind<K extends string, V>(\n kind: K,\n config: SignalKindConfig<V>,\n options?: SignalPoolOptions,\n ): void;\n\n acquire<K extends string, V>(kind: K): Signal<K, V>;\n release(signal: Signal): void;\n\n getPoolSize(kind: string): number;\n readonly registeredKinds: readonly string[];\n}\n\ninterface KindPoolEntry<V = unknown> {\n config: SignalKindConfig<V>;\n pool: Signal[];\n maxSize: number;\n}\n\nconst DEFAULT_INITIAL_SIZE = 0;\nconst DEFAULT_MAX_SIZE = 100;\n\n/**\n * Creates a unified SignalPool that manages pools for multiple Signal kinds.\n */\nexport function createSignalPool(): SignalPool {\n const kindPools = new Map<string, KindPoolEntry>();\n\n function resetSignalCommon(signal: Mutable<Signal>): void {\n signal.deviceId = getCerebDeviceId();\n signal.createdAt = performance.now();\n signal.updatedAt = undefined;\n }\n\n function createSignalForKind<K extends string, V>(\n kind: K,\n entry: KindPoolEntry<V>,\n ): Signal<K, V> {\n return {\n kind,\n value: entry.config.createValue(),\n deviceId: getCerebDeviceId(),\n createdAt: performance.now(),\n };\n }\n\n return {\n registerKind<K extends string, V>(\n kind: K,\n config: SignalKindConfig<V>,\n options: SignalPoolOptions = {},\n ): void {\n const { initialSize = DEFAULT_INITIAL_SIZE, maxSize = DEFAULT_MAX_SIZE } = options;\n\n const entry: KindPoolEntry<V> = {\n config,\n pool: [],\n maxSize,\n };\n\n for (let i = 0; i < initialSize; i++) {\n entry.pool.push(createSignalForKind(kind, entry));\n }\n\n kindPools.set(kind, entry as KindPoolEntry);\n },\n\n acquire<K extends string, V>(kind: K): Signal<K, V> {\n const entry = kindPools.get(kind) as KindPoolEntry<V> | undefined;\n\n if (!entry) {\n throw new Error(`Signal kind \"${kind}\" is not registered. Call registerKind first.`);\n }\n\n if (entry.pool.length > 0) {\n return entry.pool.pop() as Signal<K, V>;\n }\n\n return createSignalForKind(kind, entry);\n },\n\n release(signal: Signal): void {\n const entry = kindPools.get(signal.kind);\n\n if (!entry) {\n return;\n }\n\n if (entry.pool.length < entry.maxSize) {\n const mutableSignal = signal as DeepMutable<Signal>;\n resetSignalCommon(mutableSignal);\n entry.config.resetValue(mutableSignal.value);\n entry.pool.push(signal);\n }\n },\n\n getPoolSize(kind: string): number {\n const entry = kindPools.get(kind);\n return entry ? entry.pool.length : 0;\n },\n\n get registeredKinds(): readonly string[] {\n return Array.from(kindPools.keys());\n },\n };\n}\n\n/**\n * Global signal pool instance for shared use across the application.\n */\nexport const signalPool = createSignalPool();\n","import { createSignal, type Signal } from \"../../core/signal.js\";\nimport type { DeepMutable } from \"../../internal/types.js\";\nimport type { SinglePointerButton, SinglePointerPhase, SinglePointerType } from \"./types.js\";\n\nexport interface SinglePointerSignal extends Signal<\"single-pointer\", SinglePointer> {}\n\nexport const SINGLE_POINTER_SIGNAL_KIND = \"single-pointer\" as const;\n\n/**\n * Normalized pointer data representing a single point of contact.\n * Abstracts away differences between mouse, touch, and pointer events.\n */\nexport interface SinglePointer {\n phase: SinglePointerPhase;\n x: number;\n y: number;\n pageX: number;\n pageY: number;\n pointerType: SinglePointerType;\n button: SinglePointerButton;\n /** 0.0 ~ 1.0, default 0.5 if unsupported */\n pressure: number;\n id: string;\n}\n\nexport function createSinglePointerSignal(pointer: SinglePointer): SinglePointerSignal {\n return createSignal(SINGLE_POINTER_SIGNAL_KIND, pointer);\n}\n\nexport function createDefaultSinglePointerSignal(): SinglePointerSignal {\n return createSinglePointerSignal({\n id: \"\",\n phase: \"move\",\n x: 0,\n y: 0,\n pageX: 0,\n pageY: 0,\n pointerType: \"unknown\",\n button: \"none\",\n pressure: 0.5,\n });\n}\n\nexport function resetSinglePointerValue(value: SinglePointer): void {\n const v = value as DeepMutable<SinglePointer>;\n v.phase = \"move\";\n v.x = 0;\n v.y = 0;\n v.pageX = 0;\n v.pageY = 0;\n v.pointerType = \"unknown\";\n v.button = \"none\";\n v.pressure = 0.5;\n}\n\nexport function createDefaultSinglePointerValue(): SinglePointer {\n return {\n id: \"\",\n phase: \"move\",\n x: 0,\n y: 0,\n pageX: 0,\n pageY: 0,\n pointerType: \"unknown\",\n button: \"none\",\n pressure: 0.5,\n };\n}\n","import { signalPool } from \"../../core/signal-pool.js\";\nimport {\n createDefaultSinglePointerValue,\n resetSinglePointerValue,\n SINGLE_POINTER_SIGNAL_KIND,\n type SinglePointerSignal,\n} from \"./single-pointer-signal.js\";\n\nsignalPool.registerKind(\n SINGLE_POINTER_SIGNAL_KIND,\n {\n createValue: createDefaultSinglePointerValue,\n resetValue: resetSinglePointerValue,\n },\n {\n initialSize: 20,\n maxSize: 100,\n },\n);\n\nexport function acquireSinglePointerSignal(): SinglePointerSignal {\n return signalPool.acquire(SINGLE_POINTER_SIGNAL_KIND);\n}\n\nexport function releaseSinglePointerSignal(signal: SinglePointerSignal): void {\n signalPool.release(signal);\n}\n","import type { Signal } from \"../../core/signal.js\";\nimport { acquireSinglePointerSignal, releaseSinglePointerSignal } from \"./pool.js\";\nimport type { SinglePointerSignal } from \"./single-pointer-signal.js\";\nimport type { SinglePointerOptions } from \"./types.js\";\n\nexport interface SinglePointerRecognizer<InputSignal extends Signal> {\n process(event: InputSignal): SinglePointerSignal;\n readonly isActive: boolean;\n reset(): void;\n dispose(): void;\n}\n\nexport function createSinglePointerRecognizer<InputSignal extends Signal>(\n processor: (inputSignal: InputSignal, pointerSignal: SinglePointerSignal) => void,\n _options: SinglePointerOptions = {},\n): SinglePointerRecognizer<InputSignal> {\n let current: SinglePointerSignal | null = null;\n\n function releaseCurrentPointer(): void {\n if (current) {\n releaseSinglePointerSignal(current);\n }\n current = null;\n }\n\n return {\n process: (inputSignal) => {\n const signal = acquireSinglePointerSignal();\n processor(inputSignal, signal);\n releaseCurrentPointer();\n current = signal;\n return signal;\n },\n get isActive(): boolean {\n return current !== null;\n },\n reset(): void {\n releaseCurrentPointer();\n },\n dispose(): void {\n this.reset();\n },\n };\n}\n"],"names":["deviceId","getCerebDeviceId","setCerebDeviceId","id","DEFAULT_INITIAL_SIZE","DEFAULT_MAX_SIZE","createSignalPool","kindPools","resetSignalCommon","signal","createSignalForKind","kind","entry","config","options","initialSize","maxSize","i","mutableSignal","signalPool","SINGLE_POINTER_SIGNAL_KIND","resetSinglePointerValue","value","v","createDefaultSinglePointerValue","acquireSinglePointerSignal","releaseSinglePointerSignal","createSinglePointerRecognizer","processor","_options","current","releaseCurrentPointer","inputSignal"],"mappings":"AAAA,IAAIA,IAAmB;AAEhB,SAASC,IAA2B;AACzC,SAAOD;AACT;AAEO,SAASE,EAAiBC,GAAkB;AACjD,EAAAH,IAAWG;AACb;ACkCA,MAAMC,IAAuB,GACvBC,IAAmB;AAKlB,SAASC,IAA+B;AAC7C,QAAMC,wBAAgB,IAAA;AAEtB,WAASC,EAAkBC,GAA+B;AACxD,IAAAA,EAAO,WAAWR,EAAA,GAClBQ,EAAO,YAAY,YAAY,IAAA,GAC/BA,EAAO,YAAY;AAAA,EACrB;AAEA,WAASC,EACPC,GACAC,GACc;AACd,WAAO;AAAA,MACL,MAAAD;AAAA,MACA,OAAOC,EAAM,OAAO,YAAA;AAAA,MACpB,UAAUX,EAAA;AAAA,MACV,WAAW,YAAY,IAAA;AAAA,IAAI;AAAA,EAE/B;AAEA,SAAO;AAAA,IACL,aACEU,GACAE,GACAC,IAA6B,CAAA,GACvB;AACN,YAAM,EAAE,aAAAC,IAAcX,GAAsB,SAAAY,IAAUX,MAAqBS,GAErEF,IAA0B;AAAA,QAC9B,QAAAC;AAAA,QACA,MAAM,CAAA;AAAA,QACN,SAAAG;AAAA,MAAA;AAGF,eAASC,IAAI,GAAGA,IAAIF,GAAaE;AAC/B,QAAAL,EAAM,KAAK,KAAKF,EAAoBC,GAAMC,CAAK,CAAC;AAGlD,MAAAL,EAAU,IAAII,GAAMC,CAAsB;AAAA,IAC5C;AAAA,IAEA,QAA6BD,GAAuB;AAClD,YAAMC,IAAQL,EAAU,IAAII,CAAI;AAEhC,UAAI,CAACC;AACH,cAAM,IAAI,MAAM,gBAAgBD,CAAI,+CAA+C;AAGrF,aAAIC,EAAM,KAAK,SAAS,IACfA,EAAM,KAAK,IAAA,IAGbF,EAAoBC,GAAMC,CAAK;AAAA,IACxC;AAAA,IAEA,QAAQH,GAAsB;AAC5B,YAAMG,IAAQL,EAAU,IAAIE,EAAO,IAAI;AAEvC,UAAKG,KAIDA,EAAM,KAAK,SAASA,EAAM,SAAS;AACrC,cAAMM,IAAgBT;AACtB,QAAAD,EAAkBU,CAAa,GAC/BN,EAAM,OAAO,WAAWM,EAAc,KAAK,GAC3CN,EAAM,KAAK,KAAKH,CAAM;AAAA,MACxB;AAAA,IACF;AAAA,IAEA,YAAYE,GAAsB;AAChC,YAAMC,IAAQL,EAAU,IAAII,CAAI;AAChC,aAAOC,IAAQA,EAAM,KAAK,SAAS;AAAA,IACrC;AAAA,IAEA,IAAI,kBAAqC;AACvC,aAAO,MAAM,KAAKL,EAAU,KAAA,CAAM;AAAA,IACpC;AAAA,EAAA;AAEJ;AAKO,MAAMY,IAAab,EAAA,GC/Hbc,IAA6B;AAqCnC,SAASC,EAAwBC,GAA4B;AAClE,QAAMC,IAAID;AACV,EAAAC,EAAE,QAAQ,QACVA,EAAE,IAAI,GACNA,EAAE,IAAI,GACNA,EAAE,QAAQ,GACVA,EAAE,QAAQ,GACVA,EAAE,cAAc,WAChBA,EAAE,SAAS,QACXA,EAAE,WAAW;AACf;AAEO,SAASC,IAAiD;AAC/D,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,GAAG;AAAA,IACH,GAAG;AAAA,IACH,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,UAAU;AAAA,EAAA;AAEd;AC3DAL,EAAW;AAAA,EACTC;AAAA,EACA;AAAA,IACE,aAAaI;AAAA,IACb,YAAYH;AAAA,EAAA;AAAA,EAEd;AAAA,IACE,aAAa;AAAA,IACb,SAAS;AAAA,EAAA;AAEb;AAEO,SAASI,IAAkD;AAChE,SAAON,EAAW,QAAQC,CAA0B;AACtD;AAEO,SAASM,EAA2BjB,GAAmC;AAC5E,EAAAU,EAAW,QAAQV,CAAM;AAC3B;ACdO,SAASkB,EACdC,GACAC,IAAiC,IACK;AACtC,MAAIC,IAAsC;AAE1C,WAASC,IAA8B;AACrC,IAAID,KACFJ,EAA2BI,CAAO,GAEpCA,IAAU;AAAA,EACZ;AAEA,SAAO;AAAA,IACL,SAAS,CAACE,MAAgB;AACxB,YAAMvB,IAASgB,EAAA;AACf,aAAAG,EAAUI,GAAavB,CAAM,GAC7BsB,EAAA,GACAD,IAAUrB,GACHA;AAAA,IACT;AAAA,IACA,IAAI,WAAoB;AACtB,aAAOqB,MAAY;AAAA,IACrB;AAAA,IACA,QAAc;AACZ,MAAAC,EAAA;AAAA,IACF;AAAA,IACA,UAAgB;AACd,WAAK,MAAA;AAAA,IACP;AAAA,EAAA;AAEJ;"}
@@ -0,0 +1,2 @@
1
+ "use strict";let a="";function s(){return a}function S(t){a=t}const I=0,v=100;function g(){const t=new Map;function r(e){e.deviceId=s(),e.createdAt=performance.now(),e.updatedAt=void 0}function o(e,n){return{kind:e,value:n.config.createValue(),deviceId:s(),createdAt:performance.now()}}return{registerKind(e,n,i={}){const{initialSize:d=I,maxSize:f=v}=i,c={config:n,pool:[],maxSize:f};for(let u=0;u<d;u++)c.pool.push(o(e,c));t.set(e,c)},acquire(e){const n=t.get(e);if(!n)throw new Error(`Signal kind "${e}" is not registered. Call registerKind first.`);return n.pool.length>0?n.pool.pop():o(e,n)},release(e){const n=t.get(e.kind);if(n&&n.pool.length<n.maxSize){const i=e;r(i),n.config.resetValue(i.value),n.pool.push(e)}},getPoolSize(e){const n=t.get(e);return n?n.pool.length:0},get registeredKinds(){return Array.from(t.keys())}}}const l=g(),p="single-pointer";function P(t){const r=t;r.phase="move",r.x=0,r.y=0,r.pageX=0,r.pageY=0,r.pointerType="unknown",r.button="none",r.pressure=.5}function m(){return{id:"",phase:"move",x:0,y:0,pageX:0,pageY:0,pointerType:"unknown",button:"none",pressure:.5}}l.registerKind(p,{createValue:m,resetValue:P},{initialSize:20,maxSize:100});function y(){return l.acquire(p)}function A(t){l.release(t)}function h(t,r={}){let o=null;function e(){o&&A(o),o=null}return{process:n=>{const i=y();return t(n,i),e(),o=i,i},get isActive(){return o!==null},reset(){e()},dispose(){this.reset()}}}exports.createSignalPool=g;exports.createSinglePointerRecognizer=h;exports.getCerebDeviceId=s;exports.setCerebDeviceId=S;exports.signalPool=l;
2
+ //# sourceMappingURL=recognizer-BnYeedMd.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recognizer-BnYeedMd.cjs","sources":["../src/core/meta.ts","../src/core/signal-pool.ts","../src/browser/single-pointer/single-pointer-signal.ts","../src/browser/single-pointer/pool.ts","../src/browser/single-pointer/recognizer.ts"],"sourcesContent":["let deviceId: string = \"\";\n\nexport function getCerebDeviceId(): string {\n return deviceId;\n}\n\nexport function setCerebDeviceId(id: string): void {\n deviceId = id;\n}\n","import type { DeepMutable, Mutable } from \"../internal/types.js\";\nimport { getCerebDeviceId } from \"./meta.js\";\nimport type { Signal } from \"./signal.js\";\n\n/**\n * Configuration for a specific Signal kind.\n * Each kind must provide functions to create and reset its value type.\n */\nexport interface SignalKindConfig<V> {\n createValue: () => V;\n resetValue: (value: V) => void;\n}\n\nexport interface SignalPoolOptions {\n initialSize?: number;\n maxSize?: number;\n}\n\n/**\n * Unified pool for managing Signal objects across all kinds.\n * Handles object reuse to minimize GC pressure in high-frequency scenarios.\n */\nexport interface SignalPool {\n registerKind<K extends string, V>(\n kind: K,\n config: SignalKindConfig<V>,\n options?: SignalPoolOptions,\n ): void;\n\n acquire<K extends string, V>(kind: K): Signal<K, V>;\n release(signal: Signal): void;\n\n getPoolSize(kind: string): number;\n readonly registeredKinds: readonly string[];\n}\n\ninterface KindPoolEntry<V = unknown> {\n config: SignalKindConfig<V>;\n pool: Signal[];\n maxSize: number;\n}\n\nconst DEFAULT_INITIAL_SIZE = 0;\nconst DEFAULT_MAX_SIZE = 100;\n\n/**\n * Creates a unified SignalPool that manages pools for multiple Signal kinds.\n */\nexport function createSignalPool(): SignalPool {\n const kindPools = new Map<string, KindPoolEntry>();\n\n function resetSignalCommon(signal: Mutable<Signal>): void {\n signal.deviceId = getCerebDeviceId();\n signal.createdAt = performance.now();\n signal.updatedAt = undefined;\n }\n\n function createSignalForKind<K extends string, V>(\n kind: K,\n entry: KindPoolEntry<V>,\n ): Signal<K, V> {\n return {\n kind,\n value: entry.config.createValue(),\n deviceId: getCerebDeviceId(),\n createdAt: performance.now(),\n };\n }\n\n return {\n registerKind<K extends string, V>(\n kind: K,\n config: SignalKindConfig<V>,\n options: SignalPoolOptions = {},\n ): void {\n const { initialSize = DEFAULT_INITIAL_SIZE, maxSize = DEFAULT_MAX_SIZE } = options;\n\n const entry: KindPoolEntry<V> = {\n config,\n pool: [],\n maxSize,\n };\n\n for (let i = 0; i < initialSize; i++) {\n entry.pool.push(createSignalForKind(kind, entry));\n }\n\n kindPools.set(kind, entry as KindPoolEntry);\n },\n\n acquire<K extends string, V>(kind: K): Signal<K, V> {\n const entry = kindPools.get(kind) as KindPoolEntry<V> | undefined;\n\n if (!entry) {\n throw new Error(`Signal kind \"${kind}\" is not registered. Call registerKind first.`);\n }\n\n if (entry.pool.length > 0) {\n return entry.pool.pop() as Signal<K, V>;\n }\n\n return createSignalForKind(kind, entry);\n },\n\n release(signal: Signal): void {\n const entry = kindPools.get(signal.kind);\n\n if (!entry) {\n return;\n }\n\n if (entry.pool.length < entry.maxSize) {\n const mutableSignal = signal as DeepMutable<Signal>;\n resetSignalCommon(mutableSignal);\n entry.config.resetValue(mutableSignal.value);\n entry.pool.push(signal);\n }\n },\n\n getPoolSize(kind: string): number {\n const entry = kindPools.get(kind);\n return entry ? entry.pool.length : 0;\n },\n\n get registeredKinds(): readonly string[] {\n return Array.from(kindPools.keys());\n },\n };\n}\n\n/**\n * Global signal pool instance for shared use across the application.\n */\nexport const signalPool = createSignalPool();\n","import { createSignal, type Signal } from \"../../core/signal.js\";\nimport type { DeepMutable } from \"../../internal/types.js\";\nimport type { SinglePointerButton, SinglePointerPhase, SinglePointerType } from \"./types.js\";\n\nexport interface SinglePointerSignal extends Signal<\"single-pointer\", SinglePointer> {}\n\nexport const SINGLE_POINTER_SIGNAL_KIND = \"single-pointer\" as const;\n\n/**\n * Normalized pointer data representing a single point of contact.\n * Abstracts away differences between mouse, touch, and pointer events.\n */\nexport interface SinglePointer {\n phase: SinglePointerPhase;\n x: number;\n y: number;\n pageX: number;\n pageY: number;\n pointerType: SinglePointerType;\n button: SinglePointerButton;\n /** 0.0 ~ 1.0, default 0.5 if unsupported */\n pressure: number;\n id: string;\n}\n\nexport function createSinglePointerSignal(pointer: SinglePointer): SinglePointerSignal {\n return createSignal(SINGLE_POINTER_SIGNAL_KIND, pointer);\n}\n\nexport function createDefaultSinglePointerSignal(): SinglePointerSignal {\n return createSinglePointerSignal({\n id: \"\",\n phase: \"move\",\n x: 0,\n y: 0,\n pageX: 0,\n pageY: 0,\n pointerType: \"unknown\",\n button: \"none\",\n pressure: 0.5,\n });\n}\n\nexport function resetSinglePointerValue(value: SinglePointer): void {\n const v = value as DeepMutable<SinglePointer>;\n v.phase = \"move\";\n v.x = 0;\n v.y = 0;\n v.pageX = 0;\n v.pageY = 0;\n v.pointerType = \"unknown\";\n v.button = \"none\";\n v.pressure = 0.5;\n}\n\nexport function createDefaultSinglePointerValue(): SinglePointer {\n return {\n id: \"\",\n phase: \"move\",\n x: 0,\n y: 0,\n pageX: 0,\n pageY: 0,\n pointerType: \"unknown\",\n button: \"none\",\n pressure: 0.5,\n };\n}\n","import { signalPool } from \"../../core/signal-pool.js\";\nimport {\n createDefaultSinglePointerValue,\n resetSinglePointerValue,\n SINGLE_POINTER_SIGNAL_KIND,\n type SinglePointerSignal,\n} from \"./single-pointer-signal.js\";\n\nsignalPool.registerKind(\n SINGLE_POINTER_SIGNAL_KIND,\n {\n createValue: createDefaultSinglePointerValue,\n resetValue: resetSinglePointerValue,\n },\n {\n initialSize: 20,\n maxSize: 100,\n },\n);\n\nexport function acquireSinglePointerSignal(): SinglePointerSignal {\n return signalPool.acquire(SINGLE_POINTER_SIGNAL_KIND);\n}\n\nexport function releaseSinglePointerSignal(signal: SinglePointerSignal): void {\n signalPool.release(signal);\n}\n","import type { Signal } from \"../../core/signal.js\";\nimport { acquireSinglePointerSignal, releaseSinglePointerSignal } from \"./pool.js\";\nimport type { SinglePointerSignal } from \"./single-pointer-signal.js\";\nimport type { SinglePointerOptions } from \"./types.js\";\n\nexport interface SinglePointerRecognizer<InputSignal extends Signal> {\n process(event: InputSignal): SinglePointerSignal;\n readonly isActive: boolean;\n reset(): void;\n dispose(): void;\n}\n\nexport function createSinglePointerRecognizer<InputSignal extends Signal>(\n processor: (inputSignal: InputSignal, pointerSignal: SinglePointerSignal) => void,\n _options: SinglePointerOptions = {},\n): SinglePointerRecognizer<InputSignal> {\n let current: SinglePointerSignal | null = null;\n\n function releaseCurrentPointer(): void {\n if (current) {\n releaseSinglePointerSignal(current);\n }\n current = null;\n }\n\n return {\n process: (inputSignal) => {\n const signal = acquireSinglePointerSignal();\n processor(inputSignal, signal);\n releaseCurrentPointer();\n current = signal;\n return signal;\n },\n get isActive(): boolean {\n return current !== null;\n },\n reset(): void {\n releaseCurrentPointer();\n },\n dispose(): void {\n this.reset();\n },\n };\n}\n"],"names":["deviceId","getCerebDeviceId","setCerebDeviceId","id","DEFAULT_INITIAL_SIZE","DEFAULT_MAX_SIZE","createSignalPool","kindPools","resetSignalCommon","signal","createSignalForKind","kind","entry","config","options","initialSize","maxSize","i","mutableSignal","signalPool","SINGLE_POINTER_SIGNAL_KIND","resetSinglePointerValue","value","v","createDefaultSinglePointerValue","acquireSinglePointerSignal","releaseSinglePointerSignal","createSinglePointerRecognizer","processor","_options","current","releaseCurrentPointer","inputSignal"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("../stream-Cp6eCZs2.cjs"),p=require("../recognizer-BrqdN-1T.cjs"),s=require("../types-BGR5Mhw9.cjs");function i(u={}){function c(n,e){const t=n.value;let o,r;switch(t.type){case"mousedown":o="start",r=s.toSinglePointerButton(t.button);break;case"mouseup":o="end",r=s.toSinglePointerButton(t.button);break;default:o="move",r="none"}e.value.id="",e.value.phase=o,e.value.x=t.clientX,e.value.y=t.clientY,e.value.pageX=t.pageX,e.value.pageY=t.pageY,e.value.pointerType="mouse",e.value.button=r,e.value.pressure=o==="move"&&t.buttons===0?0:.5}return p.createSinglePointerRecognizer(c,u)}function l(u={}){return c=>a.createStream(n=>{const e=i(u),t=c.subscribe({next(o){const r=e.process(o);n.next(r)},error(o){n.error?.(o)},complete(){n.complete?.()}});return()=>{t(),e.dispose()}})}exports.createMouseRecognizer=i;exports.singlePointerRecognizer=l;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("../stream-Cp6eCZs2.cjs"),g=require("../recognizer-BnYeedMd.cjs"),u=require("../types-BGR5Mhw9.cjs");function a(c={}){function i(r,s){const e=r.value;let t,o;switch(e.type){case"mousedown":t="start",o=u.toSinglePointerButton(e.button);break;case"mouseup":t="end",o=u.toSinglePointerButton(e.button);break;default:t="move",o="none"}const n=s.value;n.id="",n.phase=t,n.x=e.clientX,n.y=e.clientY,n.pageX=e.pageX,n.pageY=e.pageY,n.pointerType="mouse",n.button=o,n.pressure=t==="move"&&e.buttons===0?0:.5}return g.createSinglePointerRecognizer(i,c)}function l(c={}){return i=>p.createStream(r=>{const s=a(c),e=i.subscribe({next(t){const o=s.process(t);r.next(o)},error(t){r.error?.(t)},complete(){r.complete?.()}});return()=>{e(),s.dispose()}})}exports.createMouseRecognizer=a;exports.singlePointerRecognizer=l;
2
2
  //# sourceMappingURL=mouse.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"mouse.cjs","sources":["../../src/browser/single-pointer/recognizer-from-mouse.ts"],"sourcesContent":["import type { Operator } from \"../../core/stream.js\";\nimport { createStream } from \"../../core/stream.js\";\nimport type { DomEventSignal } from \"../dom-event/dom-event-signal.js\";\nimport { createSinglePointerRecognizer, type SinglePointerRecognizer } from \"./recognizer.js\";\nimport type { SinglePointerSignal } from \"./single-pointer-signal.js\";\nimport {\n type SinglePointerButton,\n type SinglePointerOptions,\n type SinglePointerPhase,\n toSinglePointerButton,\n} from \"./types.js\";\n\nexport function createMouseRecognizer(\n options: SinglePointerOptions = {},\n): SinglePointerRecognizer<DomEventSignal<MouseEvent>> {\n function processer(\n domEventSignal: DomEventSignal<MouseEvent>,\n signal: SinglePointerSignal,\n ): void {\n const e = domEventSignal.value;\n let phase: SinglePointerPhase;\n let button: SinglePointerButton;\n switch (e.type) {\n case \"mousedown\":\n phase = \"start\";\n button = toSinglePointerButton(e.button);\n break;\n case \"mouseup\":\n phase = \"end\";\n button = toSinglePointerButton(e.button);\n break;\n default:\n phase = \"move\";\n button = \"none\";\n }\n\n signal.value.id = \"\";\n signal.value.phase = phase;\n signal.value.x = e.clientX;\n signal.value.y = e.clientY;\n signal.value.pageX = e.pageX;\n signal.value.pageY = e.pageY;\n signal.value.pointerType = \"mouse\";\n signal.value.button = button;\n signal.value.pressure = phase === \"move\" && e.buttons === 0 ? 0 : 0.5;\n }\n\n return createSinglePointerRecognizer(processer, options);\n}\n\nexport function singlePointerFromMouse(\n options: SinglePointerOptions = {},\n): Operator<DomEventSignal<MouseEvent>, SinglePointerSignal> {\n return (source) =>\n createStream((observer) => {\n const recognizer = createMouseRecognizer(options);\n\n const unsub = source.subscribe({\n next(event) {\n const pointer = recognizer.process(event);\n observer.next(pointer);\n },\n error(err) {\n observer.error?.(err);\n },\n complete() {\n observer.complete?.();\n },\n });\n\n return () => {\n unsub();\n recognizer.dispose();\n };\n });\n}\n"],"names":["createMouseRecognizer","options","processer","domEventSignal","signal","e","phase","button","toSinglePointerButton","createSinglePointerRecognizer","singlePointerFromMouse","source","createStream","observer","recognizer","unsub","event","pointer","err"],"mappings":"qMAYO,SAASA,EACdC,EAAgC,GACqB,CACrD,SAASC,EACPC,EACAC,EACM,CACN,MAAMC,EAAIF,EAAe,MACzB,IAAIG,EACAC,EACJ,OAAQF,EAAE,KAAA,CACR,IAAK,YACHC,EAAQ,QACRC,EAASC,EAAAA,sBAAsBH,EAAE,MAAM,EACvC,MACF,IAAK,UACHC,EAAQ,MACRC,EAASC,EAAAA,sBAAsBH,EAAE,MAAM,EACvC,MACF,QACEC,EAAQ,OACRC,EAAS,MAAA,CAGbH,EAAO,MAAM,GAAK,GAClBA,EAAO,MAAM,MAAQE,EACrBF,EAAO,MAAM,EAAIC,EAAE,QACnBD,EAAO,MAAM,EAAIC,EAAE,QACnBD,EAAO,MAAM,MAAQC,EAAE,MACvBD,EAAO,MAAM,MAAQC,EAAE,MACvBD,EAAO,MAAM,YAAc,QAC3BA,EAAO,MAAM,OAASG,EACtBH,EAAO,MAAM,SAAWE,IAAU,QAAUD,EAAE,UAAY,EAAI,EAAI,EACpE,CAEA,OAAOI,EAAAA,8BAA8BP,EAAWD,CAAO,CACzD,CAEO,SAASS,EACdT,EAAgC,GAC2B,CAC3D,OAAQU,GACNC,eAAcC,GAAa,CACzB,MAAMC,EAAad,EAAsBC,CAAO,EAE1Cc,EAAQJ,EAAO,UAAU,CAC7B,KAAKK,EAAO,CACV,MAAMC,EAAUH,EAAW,QAAQE,CAAK,EACxCH,EAAS,KAAKI,CAAO,CACvB,EACA,MAAMC,EAAK,CACTL,EAAS,QAAQK,CAAG,CACtB,EACA,UAAW,CACTL,EAAS,WAAA,CACX,CAAA,CACD,EAED,MAAO,IAAM,CACXE,EAAA,EACAD,EAAW,QAAA,CACb,CACF,CAAC,CACL"}
1
+ {"version":3,"file":"mouse.cjs","sources":["../../src/browser/single-pointer/recognizer-from-mouse.ts"],"sourcesContent":["import type { Operator } from \"../../core/stream.js\";\nimport { createStream } from \"../../core/stream.js\";\nimport type { DeepMutable } from \"../../internal/types.js\";\nimport type { DomEventSignal } from \"../dom-event/dom-event-signal.js\";\nimport { createSinglePointerRecognizer, type SinglePointerRecognizer } from \"./recognizer.js\";\nimport type { SinglePointer, SinglePointerSignal } from \"./single-pointer-signal.js\";\nimport {\n type SinglePointerButton,\n type SinglePointerOptions,\n type SinglePointerPhase,\n toSinglePointerButton,\n} from \"./types.js\";\n\nexport function createMouseRecognizer(\n options: SinglePointerOptions = {},\n): SinglePointerRecognizer<DomEventSignal<MouseEvent>> {\n function processer(\n domEventSignal: DomEventSignal<MouseEvent>,\n signal: SinglePointerSignal,\n ): void {\n const e = domEventSignal.value;\n let phase: SinglePointerPhase;\n let button: SinglePointerButton;\n switch (e.type) {\n case \"mousedown\":\n phase = \"start\";\n button = toSinglePointerButton(e.button);\n break;\n case \"mouseup\":\n phase = \"end\";\n button = toSinglePointerButton(e.button);\n break;\n default:\n phase = \"move\";\n button = \"none\";\n }\n\n const v = signal.value as DeepMutable<SinglePointer>;\n v.id = \"\";\n v.phase = phase;\n v.x = e.clientX;\n v.y = e.clientY;\n v.pageX = e.pageX;\n v.pageY = e.pageY;\n v.pointerType = \"mouse\";\n v.button = button;\n v.pressure = phase === \"move\" && e.buttons === 0 ? 0 : 0.5;\n }\n\n return createSinglePointerRecognizer(processer, options);\n}\n\nexport function singlePointerFromMouse(\n options: SinglePointerOptions = {},\n): Operator<DomEventSignal<MouseEvent>, SinglePointerSignal> {\n return (source) =>\n createStream((observer) => {\n const recognizer = createMouseRecognizer(options);\n\n const unsub = source.subscribe({\n next(event) {\n const pointer = recognizer.process(event);\n observer.next(pointer);\n },\n error(err) {\n observer.error?.(err);\n },\n complete() {\n observer.complete?.();\n },\n });\n\n return () => {\n unsub();\n recognizer.dispose();\n };\n });\n}\n"],"names":["createMouseRecognizer","options","processer","domEventSignal","signal","phase","button","toSinglePointerButton","v","createSinglePointerRecognizer","singlePointerFromMouse","source","createStream","observer","recognizer","unsub","event","pointer","err"],"mappings":"qMAaO,SAASA,EACdC,EAAgC,GACqB,CACrD,SAASC,EACPC,EACAC,EACM,CACN,MAAM,EAAID,EAAe,MACzB,IAAIE,EACAC,EACJ,OAAQ,EAAE,KAAA,CACR,IAAK,YACHD,EAAQ,QACRC,EAASC,EAAAA,sBAAsB,EAAE,MAAM,EACvC,MACF,IAAK,UACHF,EAAQ,MACRC,EAASC,EAAAA,sBAAsB,EAAE,MAAM,EACvC,MACF,QACEF,EAAQ,OACRC,EAAS,MAAA,CAGb,MAAME,EAAIJ,EAAO,MACjBI,EAAE,GAAK,GACPA,EAAE,MAAQH,EACVG,EAAE,EAAI,EAAE,QACRA,EAAE,EAAI,EAAE,QACRA,EAAE,MAAQ,EAAE,MACZA,EAAE,MAAQ,EAAE,MACZA,EAAE,YAAc,QAChBA,EAAE,OAASF,EACXE,EAAE,SAAWH,IAAU,QAAU,EAAE,UAAY,EAAI,EAAI,EACzD,CAEA,OAAOI,EAAAA,8BAA8BP,EAAWD,CAAO,CACzD,CAEO,SAASS,EACdT,EAAgC,GAC2B,CAC3D,OAAQU,GACNC,eAAcC,GAAa,CACzB,MAAMC,EAAad,EAAsBC,CAAO,EAE1Cc,EAAQJ,EAAO,UAAU,CAC7B,KAAKK,EAAO,CACV,MAAMC,EAAUH,EAAW,QAAQE,CAAK,EACxCH,EAAS,KAAKI,CAAO,CACvB,EACA,MAAMC,EAAK,CACTL,EAAS,QAAQK,CAAG,CACtB,EACA,UAAW,CACTL,EAAS,WAAA,CACX,CAAA,CACD,EAED,MAAO,IAAM,CACXE,EAAA,EACAD,EAAW,QAAA,CACb,CACF,CAAC,CACL"}
@@ -1,45 +1,46 @@
1
1
  import { c as a } from "../stream-CDK0RZPi.js";
2
- import { c as p } from "../recognizer-FFAuyJ19.js";
3
- import { t as s } from "../types-Ccnqx90M.js";
4
- function i(u = {}) {
5
- function c(n, e) {
6
- const t = n.value;
7
- let o, r;
8
- switch (t.type) {
2
+ import { c as p } from "../recognizer-6XjwLbo4.js";
3
+ import { t as u } from "../types-Ccnqx90M.js";
4
+ function m(c = {}) {
5
+ function i(r, s) {
6
+ const e = r.value;
7
+ let t, n;
8
+ switch (e.type) {
9
9
  case "mousedown":
10
- o = "start", r = s(t.button);
10
+ t = "start", n = u(e.button);
11
11
  break;
12
12
  case "mouseup":
13
- o = "end", r = s(t.button);
13
+ t = "end", n = u(e.button);
14
14
  break;
15
15
  default:
16
- o = "move", r = "none";
16
+ t = "move", n = "none";
17
17
  }
18
- e.value.id = "", e.value.phase = o, e.value.x = t.clientX, e.value.y = t.clientY, e.value.pageX = t.pageX, e.value.pageY = t.pageY, e.value.pointerType = "mouse", e.value.button = r, e.value.pressure = o === "move" && t.buttons === 0 ? 0 : 0.5;
18
+ const o = s.value;
19
+ o.id = "", o.phase = t, o.x = e.clientX, o.y = e.clientY, o.pageX = e.pageX, o.pageY = e.pageY, o.pointerType = "mouse", o.button = n, o.pressure = t === "move" && e.buttons === 0 ? 0 : 0.5;
19
20
  }
20
- return p(c, u);
21
+ return p(i, c);
21
22
  }
22
- function b(u = {}) {
23
- return (c) => a((n) => {
24
- const e = i(u), t = c.subscribe({
25
- next(o) {
26
- const r = e.process(o);
27
- n.next(r);
23
+ function f(c = {}) {
24
+ return (i) => a((r) => {
25
+ const s = m(c), e = i.subscribe({
26
+ next(t) {
27
+ const n = s.process(t);
28
+ r.next(n);
28
29
  },
29
- error(o) {
30
- n.error?.(o);
30
+ error(t) {
31
+ r.error?.(t);
31
32
  },
32
33
  complete() {
33
- n.complete?.();
34
+ r.complete?.();
34
35
  }
35
36
  });
36
37
  return () => {
37
- t(), e.dispose();
38
+ e(), s.dispose();
38
39
  };
39
40
  });
40
41
  }
41
42
  export {
42
- i as createMouseRecognizer,
43
- b as singlePointerRecognizer
43
+ m as createMouseRecognizer,
44
+ f as singlePointerRecognizer
44
45
  };
45
46
  //# sourceMappingURL=mouse.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mouse.js","sources":["../../src/browser/single-pointer/recognizer-from-mouse.ts"],"sourcesContent":["import type { Operator } from \"../../core/stream.js\";\nimport { createStream } from \"../../core/stream.js\";\nimport type { DomEventSignal } from \"../dom-event/dom-event-signal.js\";\nimport { createSinglePointerRecognizer, type SinglePointerRecognizer } from \"./recognizer.js\";\nimport type { SinglePointerSignal } from \"./single-pointer-signal.js\";\nimport {\n type SinglePointerButton,\n type SinglePointerOptions,\n type SinglePointerPhase,\n toSinglePointerButton,\n} from \"./types.js\";\n\nexport function createMouseRecognizer(\n options: SinglePointerOptions = {},\n): SinglePointerRecognizer<DomEventSignal<MouseEvent>> {\n function processer(\n domEventSignal: DomEventSignal<MouseEvent>,\n signal: SinglePointerSignal,\n ): void {\n const e = domEventSignal.value;\n let phase: SinglePointerPhase;\n let button: SinglePointerButton;\n switch (e.type) {\n case \"mousedown\":\n phase = \"start\";\n button = toSinglePointerButton(e.button);\n break;\n case \"mouseup\":\n phase = \"end\";\n button = toSinglePointerButton(e.button);\n break;\n default:\n phase = \"move\";\n button = \"none\";\n }\n\n signal.value.id = \"\";\n signal.value.phase = phase;\n signal.value.x = e.clientX;\n signal.value.y = e.clientY;\n signal.value.pageX = e.pageX;\n signal.value.pageY = e.pageY;\n signal.value.pointerType = \"mouse\";\n signal.value.button = button;\n signal.value.pressure = phase === \"move\" && e.buttons === 0 ? 0 : 0.5;\n }\n\n return createSinglePointerRecognizer(processer, options);\n}\n\nexport function singlePointerFromMouse(\n options: SinglePointerOptions = {},\n): Operator<DomEventSignal<MouseEvent>, SinglePointerSignal> {\n return (source) =>\n createStream((observer) => {\n const recognizer = createMouseRecognizer(options);\n\n const unsub = source.subscribe({\n next(event) {\n const pointer = recognizer.process(event);\n observer.next(pointer);\n },\n error(err) {\n observer.error?.(err);\n },\n complete() {\n observer.complete?.();\n },\n });\n\n return () => {\n unsub();\n recognizer.dispose();\n };\n });\n}\n"],"names":["createMouseRecognizer","options","processer","domEventSignal","signal","e","phase","button","toSinglePointerButton","createSinglePointerRecognizer","singlePointerFromMouse","source","createStream","observer","recognizer","unsub","event","pointer","err"],"mappings":";;;AAYO,SAASA,EACdC,IAAgC,IACqB;AACrD,WAASC,EACPC,GACAC,GACM;AACN,UAAMC,IAAIF,EAAe;AACzB,QAAIG,GACAC;AACJ,YAAQF,EAAE,MAAA;AAAA,MACR,KAAK;AACH,QAAAC,IAAQ,SACRC,IAASC,EAAsBH,EAAE,MAAM;AACvC;AAAA,MACF,KAAK;AACH,QAAAC,IAAQ,OACRC,IAASC,EAAsBH,EAAE,MAAM;AACvC;AAAA,MACF;AACE,QAAAC,IAAQ,QACRC,IAAS;AAAA,IAAA;AAGb,IAAAH,EAAO,MAAM,KAAK,IAClBA,EAAO,MAAM,QAAQE,GACrBF,EAAO,MAAM,IAAIC,EAAE,SACnBD,EAAO,MAAM,IAAIC,EAAE,SACnBD,EAAO,MAAM,QAAQC,EAAE,OACvBD,EAAO,MAAM,QAAQC,EAAE,OACvBD,EAAO,MAAM,cAAc,SAC3BA,EAAO,MAAM,SAASG,GACtBH,EAAO,MAAM,WAAWE,MAAU,UAAUD,EAAE,YAAY,IAAI,IAAI;AAAA,EACpE;AAEA,SAAOI,EAA8BP,GAAWD,CAAO;AACzD;AAEO,SAASS,EACdT,IAAgC,IAC2B;AAC3D,SAAO,CAACU,MACNC,EAAa,CAACC,MAAa;AACzB,UAAMC,IAAad,EAAsBC,CAAO,GAE1Cc,IAAQJ,EAAO,UAAU;AAAA,MAC7B,KAAKK,GAAO;AACV,cAAMC,IAAUH,EAAW,QAAQE,CAAK;AACxC,QAAAH,EAAS,KAAKI,CAAO;AAAA,MACvB;AAAA,MACA,MAAMC,GAAK;AACT,QAAAL,EAAS,QAAQK,CAAG;AAAA,MACtB;AAAA,MACA,WAAW;AACT,QAAAL,EAAS,WAAA;AAAA,MACX;AAAA,IAAA,CACD;AAED,WAAO,MAAM;AACX,MAAAE,EAAA,GACAD,EAAW,QAAA;AAAA,IACb;AAAA,EACF,CAAC;AACL;"}
1
+ {"version":3,"file":"mouse.js","sources":["../../src/browser/single-pointer/recognizer-from-mouse.ts"],"sourcesContent":["import type { Operator } from \"../../core/stream.js\";\nimport { createStream } from \"../../core/stream.js\";\nimport type { DeepMutable } from \"../../internal/types.js\";\nimport type { DomEventSignal } from \"../dom-event/dom-event-signal.js\";\nimport { createSinglePointerRecognizer, type SinglePointerRecognizer } from \"./recognizer.js\";\nimport type { SinglePointer, SinglePointerSignal } from \"./single-pointer-signal.js\";\nimport {\n type SinglePointerButton,\n type SinglePointerOptions,\n type SinglePointerPhase,\n toSinglePointerButton,\n} from \"./types.js\";\n\nexport function createMouseRecognizer(\n options: SinglePointerOptions = {},\n): SinglePointerRecognizer<DomEventSignal<MouseEvent>> {\n function processer(\n domEventSignal: DomEventSignal<MouseEvent>,\n signal: SinglePointerSignal,\n ): void {\n const e = domEventSignal.value;\n let phase: SinglePointerPhase;\n let button: SinglePointerButton;\n switch (e.type) {\n case \"mousedown\":\n phase = \"start\";\n button = toSinglePointerButton(e.button);\n break;\n case \"mouseup\":\n phase = \"end\";\n button = toSinglePointerButton(e.button);\n break;\n default:\n phase = \"move\";\n button = \"none\";\n }\n\n const v = signal.value as DeepMutable<SinglePointer>;\n v.id = \"\";\n v.phase = phase;\n v.x = e.clientX;\n v.y = e.clientY;\n v.pageX = e.pageX;\n v.pageY = e.pageY;\n v.pointerType = \"mouse\";\n v.button = button;\n v.pressure = phase === \"move\" && e.buttons === 0 ? 0 : 0.5;\n }\n\n return createSinglePointerRecognizer(processer, options);\n}\n\nexport function singlePointerFromMouse(\n options: SinglePointerOptions = {},\n): Operator<DomEventSignal<MouseEvent>, SinglePointerSignal> {\n return (source) =>\n createStream((observer) => {\n const recognizer = createMouseRecognizer(options);\n\n const unsub = source.subscribe({\n next(event) {\n const pointer = recognizer.process(event);\n observer.next(pointer);\n },\n error(err) {\n observer.error?.(err);\n },\n complete() {\n observer.complete?.();\n },\n });\n\n return () => {\n unsub();\n recognizer.dispose();\n };\n });\n}\n"],"names":["createMouseRecognizer","options","processer","domEventSignal","signal","phase","button","toSinglePointerButton","v","createSinglePointerRecognizer","singlePointerFromMouse","source","createStream","observer","recognizer","unsub","event","pointer","err"],"mappings":";;;AAaO,SAASA,EACdC,IAAgC,IACqB;AACrD,WAASC,EACPC,GACAC,GACM;AACN,UAAM,IAAID,EAAe;AACzB,QAAIE,GACAC;AACJ,YAAQ,EAAE,MAAA;AAAA,MACR,KAAK;AACH,QAAAD,IAAQ,SACRC,IAASC,EAAsB,EAAE,MAAM;AACvC;AAAA,MACF,KAAK;AACH,QAAAF,IAAQ,OACRC,IAASC,EAAsB,EAAE,MAAM;AACvC;AAAA,MACF;AACE,QAAAF,IAAQ,QACRC,IAAS;AAAA,IAAA;AAGb,UAAME,IAAIJ,EAAO;AACjB,IAAAI,EAAE,KAAK,IACPA,EAAE,QAAQH,GACVG,EAAE,IAAI,EAAE,SACRA,EAAE,IAAI,EAAE,SACRA,EAAE,QAAQ,EAAE,OACZA,EAAE,QAAQ,EAAE,OACZA,EAAE,cAAc,SAChBA,EAAE,SAASF,GACXE,EAAE,WAAWH,MAAU,UAAU,EAAE,YAAY,IAAI,IAAI;AAAA,EACzD;AAEA,SAAOI,EAA8BP,GAAWD,CAAO;AACzD;AAEO,SAASS,EACdT,IAAgC,IAC2B;AAC3D,SAAO,CAACU,MACNC,EAAa,CAACC,MAAa;AACzB,UAAMC,IAAad,EAAsBC,CAAO,GAE1Cc,IAAQJ,EAAO,UAAU;AAAA,MAC7B,KAAKK,GAAO;AACV,cAAMC,IAAUH,EAAW,QAAQE,CAAK;AACxC,QAAAH,EAAS,KAAKI,CAAO;AAAA,MACvB;AAAA,MACA,MAAMC,GAAK;AACT,QAAAL,EAAS,QAAQK,CAAG;AAAA,MACtB;AAAA,MACA,WAAW;AACT,QAAAL,EAAS,WAAA;AAAA,MACX;AAAA,IAAA,CACD;AAED,WAAO,MAAM;AACX,MAAAE,EAAA,GACAD,EAAW,QAAA;AAAA,IACb;AAAA,EACF,CAAC;AACL;"}
@@ -1,2 +1,2 @@
1
- "use strict";
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("../stream-Cp6eCZs2.cjs"),l=require("../recognizer-BnYeedMd.cjs"),u=require("../types-BGR5Mhw9.cjs");function a(o={}){function s(i,c){const e=i.value;if(!e.isPrimary)return;let t,r;switch(e.type){case"pointerdown":t="start",r=u.toSinglePointerButton(e.button);break;case"pointerup":t="end",r=u.toSinglePointerButton(e.button);break;case"pointercancel":t="cancel",r="none";break;default:t="move",r="none"}const n=c.value;n.id=`${e.pointerType}-${e.pointerId}`,n.phase=t,n.x=e.clientX,n.y=e.clientY,n.pageX=e.pageX,n.pageY=e.pageY,n.pointerType=m(e.pointerType),n.button=r,n.pressure=e.pressure}return l.createSinglePointerRecognizer(s,o)}function g(o={}){return s=>p.createStream(i=>{const c=a(o),e=s.subscribe({next(t){const r=c.process(t);r&&i.next(r)},error(t){i.error?.(t)},complete(){i.complete?.()}});return()=>{e(),c.dispose()}})}function m(o){switch(o){case"mouse":return"mouse";case"touch":return"touch";case"pen":return"pen";default:return"unknown"}}exports.createPointerRecognizer=a;exports.singlePointerRecognizer=g;
2
2
  //# sourceMappingURL=pointer.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"pointer.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"pointer.cjs","sources":["../../src/browser/single-pointer/recognizer-from-pointer.ts"],"sourcesContent":["import type { Operator } from \"../../core/stream.js\";\nimport { createStream } from \"../../core/stream.js\";\nimport type { DeepMutable } from \"../../internal/types.js\";\nimport type { DomEventSignal } from \"../dom-event/dom-event-signal.js\";\nimport { createSinglePointerRecognizer, type SinglePointerRecognizer } from \"./recognizer.js\";\nimport type { SinglePointer, SinglePointerSignal } from \"./single-pointer-signal.js\";\nimport {\n type SinglePointerButton,\n type SinglePointerOptions,\n type SinglePointerPhase,\n type SinglePointerType,\n toSinglePointerButton,\n} from \"./types.js\";\n\nexport function createPointerRecognizer(\n options: SinglePointerOptions = {},\n): SinglePointerRecognizer<DomEventSignal<PointerEvent>> {\n function processer(\n domEventSignal: DomEventSignal<PointerEvent>,\n signal: SinglePointerSignal,\n ): void {\n const e = domEventSignal.value;\n\n if (!e.isPrimary) {\n return;\n }\n\n let phase: SinglePointerPhase;\n let button: SinglePointerButton;\n switch (e.type) {\n case \"pointerdown\":\n phase = \"start\";\n button = toSinglePointerButton(e.button);\n break;\n case \"pointerup\":\n phase = \"end\";\n button = toSinglePointerButton(e.button);\n break;\n case \"pointercancel\":\n phase = \"cancel\";\n button = \"none\";\n break;\n default:\n phase = \"move\";\n button = \"none\";\n }\n\n const v = signal.value as DeepMutable<SinglePointer>;\n v.id = `${e.pointerType}-${e.pointerId}`;\n v.phase = phase;\n v.x = e.clientX;\n v.y = e.clientY;\n v.pageX = e.pageX;\n v.pageY = e.pageY;\n v.pointerType = normalizePointerType(e.pointerType);\n v.button = button;\n v.pressure = e.pressure;\n }\n\n return createSinglePointerRecognizer(processer, options);\n}\n\nexport function singlePointerFromPointer(\n options: SinglePointerOptions = {},\n): Operator<DomEventSignal<PointerEvent>, SinglePointerSignal> {\n return (source) =>\n createStream((observer) => {\n const recognizer = createPointerRecognizer(options);\n\n const unsub = source.subscribe({\n next(event) {\n const pointer = recognizer.process(event);\n if (pointer) {\n observer.next(pointer);\n }\n },\n error(err) {\n observer.error?.(err);\n },\n complete() {\n observer.complete?.();\n },\n });\n\n return () => {\n unsub();\n recognizer.dispose();\n };\n });\n}\n\nfunction normalizePointerType(type: string): SinglePointerType {\n switch (type) {\n case \"mouse\":\n return \"mouse\";\n case \"touch\":\n return \"touch\";\n case \"pen\":\n return \"pen\";\n default:\n return \"unknown\";\n }\n}\n"],"names":["createPointerRecognizer","options","processer","domEventSignal","signal","phase","button","toSinglePointerButton","v","normalizePointerType","createSinglePointerRecognizer","singlePointerFromPointer","source","createStream","observer","recognizer","unsub","event","pointer","err","type"],"mappings":"qMAcO,SAASA,EACdC,EAAgC,GACuB,CACvD,SAASC,EACPC,EACAC,EACM,CACN,MAAM,EAAID,EAAe,MAEzB,GAAI,CAAC,EAAE,UACL,OAGF,IAAIE,EACAC,EACJ,OAAQ,EAAE,KAAA,CACR,IAAK,cACHD,EAAQ,QACRC,EAASC,EAAAA,sBAAsB,EAAE,MAAM,EACvC,MACF,IAAK,YACHF,EAAQ,MACRC,EAASC,EAAAA,sBAAsB,EAAE,MAAM,EACvC,MACF,IAAK,gBACHF,EAAQ,SACRC,EAAS,OACT,MACF,QACED,EAAQ,OACRC,EAAS,MAAA,CAGb,MAAME,EAAIJ,EAAO,MACjBI,EAAE,GAAK,GAAG,EAAE,WAAW,IAAI,EAAE,SAAS,GACtCA,EAAE,MAAQH,EACVG,EAAE,EAAI,EAAE,QACRA,EAAE,EAAI,EAAE,QACRA,EAAE,MAAQ,EAAE,MACZA,EAAE,MAAQ,EAAE,MACZA,EAAE,YAAcC,EAAqB,EAAE,WAAW,EAClDD,EAAE,OAASF,EACXE,EAAE,SAAW,EAAE,QACjB,CAEA,OAAOE,EAAAA,8BAA8BR,EAAWD,CAAO,CACzD,CAEO,SAASU,EACdV,EAAgC,GAC6B,CAC7D,OAAQW,GACNC,eAAcC,GAAa,CACzB,MAAMC,EAAaf,EAAwBC,CAAO,EAE5Ce,EAAQJ,EAAO,UAAU,CAC7B,KAAKK,EAAO,CACV,MAAMC,EAAUH,EAAW,QAAQE,CAAK,EACpCC,GACFJ,EAAS,KAAKI,CAAO,CAEzB,EACA,MAAMC,EAAK,CACTL,EAAS,QAAQK,CAAG,CACtB,EACA,UAAW,CACTL,EAAS,WAAA,CACX,CAAA,CACD,EAED,MAAO,IAAM,CACXE,EAAA,EACAD,EAAW,QAAA,CACb,CACF,CAAC,CACL,CAEA,SAASN,EAAqBW,EAAiC,CAC7D,OAAQA,EAAA,CACN,IAAK,QACH,MAAO,QACT,IAAK,QACH,MAAO,QACT,IAAK,MACH,MAAO,MACT,QACE,MAAO,SAAA,CAEb"}
@@ -1,2 +1,63 @@
1
-
1
+ import { c as a } from "../stream-CDK0RZPi.js";
2
+ import { c as u } from "../recognizer-6XjwLbo4.js";
3
+ import { t as p } from "../types-Ccnqx90M.js";
4
+ function l(o = {}) {
5
+ function s(i, c) {
6
+ const e = i.value;
7
+ if (!e.isPrimary)
8
+ return;
9
+ let t, r;
10
+ switch (e.type) {
11
+ case "pointerdown":
12
+ t = "start", r = p(e.button);
13
+ break;
14
+ case "pointerup":
15
+ t = "end", r = p(e.button);
16
+ break;
17
+ case "pointercancel":
18
+ t = "cancel", r = "none";
19
+ break;
20
+ default:
21
+ t = "move", r = "none";
22
+ }
23
+ const n = c.value;
24
+ n.id = `${e.pointerType}-${e.pointerId}`, n.phase = t, n.x = e.clientX, n.y = e.clientY, n.pageX = e.pageX, n.pageY = e.pageY, n.pointerType = m(e.pointerType), n.button = r, n.pressure = e.pressure;
25
+ }
26
+ return u(s, o);
27
+ }
28
+ function P(o = {}) {
29
+ return (s) => a((i) => {
30
+ const c = l(o), e = s.subscribe({
31
+ next(t) {
32
+ const r = c.process(t);
33
+ r && i.next(r);
34
+ },
35
+ error(t) {
36
+ i.error?.(t);
37
+ },
38
+ complete() {
39
+ i.complete?.();
40
+ }
41
+ });
42
+ return () => {
43
+ e(), c.dispose();
44
+ };
45
+ });
46
+ }
47
+ function m(o) {
48
+ switch (o) {
49
+ case "mouse":
50
+ return "mouse";
51
+ case "touch":
52
+ return "touch";
53
+ case "pen":
54
+ return "pen";
55
+ default:
56
+ return "unknown";
57
+ }
58
+ }
59
+ export {
60
+ l as createPointerRecognizer,
61
+ P as singlePointerRecognizer
62
+ };
2
63
  //# sourceMappingURL=pointer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pointer.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"pointer.js","sources":["../../src/browser/single-pointer/recognizer-from-pointer.ts"],"sourcesContent":["import type { Operator } from \"../../core/stream.js\";\nimport { createStream } from \"../../core/stream.js\";\nimport type { DeepMutable } from \"../../internal/types.js\";\nimport type { DomEventSignal } from \"../dom-event/dom-event-signal.js\";\nimport { createSinglePointerRecognizer, type SinglePointerRecognizer } from \"./recognizer.js\";\nimport type { SinglePointer, SinglePointerSignal } from \"./single-pointer-signal.js\";\nimport {\n type SinglePointerButton,\n type SinglePointerOptions,\n type SinglePointerPhase,\n type SinglePointerType,\n toSinglePointerButton,\n} from \"./types.js\";\n\nexport function createPointerRecognizer(\n options: SinglePointerOptions = {},\n): SinglePointerRecognizer<DomEventSignal<PointerEvent>> {\n function processer(\n domEventSignal: DomEventSignal<PointerEvent>,\n signal: SinglePointerSignal,\n ): void {\n const e = domEventSignal.value;\n\n if (!e.isPrimary) {\n return;\n }\n\n let phase: SinglePointerPhase;\n let button: SinglePointerButton;\n switch (e.type) {\n case \"pointerdown\":\n phase = \"start\";\n button = toSinglePointerButton(e.button);\n break;\n case \"pointerup\":\n phase = \"end\";\n button = toSinglePointerButton(e.button);\n break;\n case \"pointercancel\":\n phase = \"cancel\";\n button = \"none\";\n break;\n default:\n phase = \"move\";\n button = \"none\";\n }\n\n const v = signal.value as DeepMutable<SinglePointer>;\n v.id = `${e.pointerType}-${e.pointerId}`;\n v.phase = phase;\n v.x = e.clientX;\n v.y = e.clientY;\n v.pageX = e.pageX;\n v.pageY = e.pageY;\n v.pointerType = normalizePointerType(e.pointerType);\n v.button = button;\n v.pressure = e.pressure;\n }\n\n return createSinglePointerRecognizer(processer, options);\n}\n\nexport function singlePointerFromPointer(\n options: SinglePointerOptions = {},\n): Operator<DomEventSignal<PointerEvent>, SinglePointerSignal> {\n return (source) =>\n createStream((observer) => {\n const recognizer = createPointerRecognizer(options);\n\n const unsub = source.subscribe({\n next(event) {\n const pointer = recognizer.process(event);\n if (pointer) {\n observer.next(pointer);\n }\n },\n error(err) {\n observer.error?.(err);\n },\n complete() {\n observer.complete?.();\n },\n });\n\n return () => {\n unsub();\n recognizer.dispose();\n };\n });\n}\n\nfunction normalizePointerType(type: string): SinglePointerType {\n switch (type) {\n case \"mouse\":\n return \"mouse\";\n case \"touch\":\n return \"touch\";\n case \"pen\":\n return \"pen\";\n default:\n return \"unknown\";\n }\n}\n"],"names":["createPointerRecognizer","options","processer","domEventSignal","signal","phase","button","toSinglePointerButton","v","normalizePointerType","createSinglePointerRecognizer","singlePointerFromPointer","source","createStream","observer","recognizer","unsub","event","pointer","err","type"],"mappings":";;;AAcO,SAASA,EACdC,IAAgC,IACuB;AACvD,WAASC,EACPC,GACAC,GACM;AACN,UAAM,IAAID,EAAe;AAEzB,QAAI,CAAC,EAAE;AACL;AAGF,QAAIE,GACAC;AACJ,YAAQ,EAAE,MAAA;AAAA,MACR,KAAK;AACH,QAAAD,IAAQ,SACRC,IAASC,EAAsB,EAAE,MAAM;AACvC;AAAA,MACF,KAAK;AACH,QAAAF,IAAQ,OACRC,IAASC,EAAsB,EAAE,MAAM;AACvC;AAAA,MACF,KAAK;AACH,QAAAF,IAAQ,UACRC,IAAS;AACT;AAAA,MACF;AACE,QAAAD,IAAQ,QACRC,IAAS;AAAA,IAAA;AAGb,UAAME,IAAIJ,EAAO;AACjB,IAAAI,EAAE,KAAK,GAAG,EAAE,WAAW,IAAI,EAAE,SAAS,IACtCA,EAAE,QAAQH,GACVG,EAAE,IAAI,EAAE,SACRA,EAAE,IAAI,EAAE,SACRA,EAAE,QAAQ,EAAE,OACZA,EAAE,QAAQ,EAAE,OACZA,EAAE,cAAcC,EAAqB,EAAE,WAAW,GAClDD,EAAE,SAASF,GACXE,EAAE,WAAW,EAAE;AAAA,EACjB;AAEA,SAAOE,EAA8BR,GAAWD,CAAO;AACzD;AAEO,SAASU,EACdV,IAAgC,IAC6B;AAC7D,SAAO,CAACW,MACNC,EAAa,CAACC,MAAa;AACzB,UAAMC,IAAaf,EAAwBC,CAAO,GAE5Ce,IAAQJ,EAAO,UAAU;AAAA,MAC7B,KAAKK,GAAO;AACV,cAAMC,IAAUH,EAAW,QAAQE,CAAK;AACxC,QAAIC,KACFJ,EAAS,KAAKI,CAAO;AAAA,MAEzB;AAAA,MACA,MAAMC,GAAK;AACT,QAAAL,EAAS,QAAQK,CAAG;AAAA,MACtB;AAAA,MACA,WAAW;AACT,QAAAL,EAAS,WAAA;AAAA,MACX;AAAA,IAAA,CACD;AAED,WAAO,MAAM;AACX,MAAAE,EAAA,GACAD,EAAW,QAAA;AAAA,IACb;AAAA,EACF,CAAC;AACL;AAEA,SAASN,EAAqBW,GAAiC;AAC7D,UAAQA,GAAA;AAAA,IACN,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EAAA;AAEb;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("../stream-Cp6eCZs2.cjs"),i=require("../recognizer-BrqdN-1T.cjs");function a(n={}){function u(c,e){const o=c.value,t=o.touches[0]??o.changedTouches[0];if(!t)return;let r;switch(o.type){case"touchstart":r="start";break;case"touchend":r="end";break;case"touchcancel":r="cancel";break;default:r="move"}e.value.phase=r,e.value.x=t.clientX,e.value.y=t.clientY,e.value.pageX=t.pageX,e.value.pageY=t.pageY,e.value.pointerType="touch",e.value.button="none",e.value.pressure=t.force||.5}return i.createSinglePointerRecognizer(u,n)}function p(n={}){return u=>s.createStream(c=>{const e=a(n),o=u.subscribe({next(t){const r=e.process(t);r&&c.next(r)},error(t){c.error?.(t)},complete(){c.complete?.()}});return()=>{o(),e.dispose()}})}exports.createTouchRecognizer=a;exports.singlePointerRecognizer=p;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("../stream-Cp6eCZs2.cjs"),p=require("../recognizer-BnYeedMd.cjs");function i(s={}){function u(r,o){const n=r.value,e=n.touches[0]??n.changedTouches[0];if(!e)return;let t;switch(n.type){case"touchstart":t="start";break;case"touchend":t="end";break;case"touchcancel":t="cancel";break;default:t="move"}const c=o.value;c.phase=t,c.x=e.clientX,c.y=e.clientY,c.pageX=e.pageX,c.pageY=e.pageY,c.pointerType="touch",c.button="none",c.pressure=e.force||.5}return p.createSinglePointerRecognizer(u,s)}function g(s={}){return u=>a.createStream(r=>{const o=i(s),n=u.subscribe({next(e){const t=o.process(e);t&&r.next(t)},error(e){r.error?.(e)},complete(){r.complete?.()}});return()=>{n(),o.dispose()}})}exports.createTouchRecognizer=i;exports.singlePointerRecognizer=g;
2
2
  //# sourceMappingURL=touch.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"touch.cjs","sources":["../../src/browser/single-pointer/recognizer-from-touch.ts"],"sourcesContent":["import type { Operator } from \"../../core/stream.js\";\nimport { createStream } from \"../../core/stream.js\";\nimport type { DomEventSignal } from \"../dom-event/dom-event-signal.js\";\nimport { createSinglePointerRecognizer, type SinglePointerRecognizer } from \"./recognizer.js\";\nimport type { SinglePointerSignal } from \"./single-pointer-signal.js\";\nimport type { SinglePointerOptions, SinglePointerPhase } from \"./types.js\";\n\nexport function createTouchRecognizer(\n options: SinglePointerOptions = {},\n): SinglePointerRecognizer<DomEventSignal<TouchEvent>> {\n function processer(event: DomEventSignal<TouchEvent>, signal: SinglePointerSignal): void {\n const e = event.value;\n const touch = e.touches[0] ?? e.changedTouches[0];\n if (!touch) {\n return;\n }\n\n let phase: SinglePointerPhase;\n switch (e.type) {\n case \"touchstart\":\n phase = \"start\";\n break;\n case \"touchend\":\n phase = \"end\";\n break;\n case \"touchcancel\":\n phase = \"cancel\";\n break;\n default:\n phase = \"move\";\n }\n\n signal.value.phase = phase;\n signal.value.x = touch.clientX;\n signal.value.y = touch.clientY;\n signal.value.pageX = touch.pageX;\n signal.value.pageY = touch.pageY;\n signal.value.pointerType = \"touch\";\n signal.value.button = \"none\";\n signal.value.pressure = touch.force || 0.5;\n }\n\n return createSinglePointerRecognizer(processer, options);\n}\n\nexport function singlePointerFromTouch(\n options: SinglePointerOptions = {},\n): Operator<DomEventSignal<TouchEvent>, SinglePointerSignal> {\n return (source) =>\n createStream((observer) => {\n const recognizer = createTouchRecognizer(options);\n\n const unsub = source.subscribe({\n next(event) {\n const pointer = recognizer.process(event);\n if (pointer) {\n observer.next(pointer);\n }\n },\n error(err) {\n observer.error?.(err);\n },\n complete() {\n observer.complete?.();\n },\n });\n\n return () => {\n unsub();\n recognizer.dispose();\n };\n });\n}\n"],"names":["createTouchRecognizer","options","processer","event","signal","e","touch","phase","createSinglePointerRecognizer","singlePointerFromTouch","source","createStream","observer","recognizer","unsub","pointer","err"],"mappings":"kKAOO,SAASA,EACdC,EAAgC,GACqB,CACrD,SAASC,EAAUC,EAAmCC,EAAmC,CACvF,MAAMC,EAAIF,EAAM,MACVG,EAAQD,EAAE,QAAQ,CAAC,GAAKA,EAAE,eAAe,CAAC,EAChD,GAAI,CAACC,EACH,OAGF,IAAIC,EACJ,OAAQF,EAAE,KAAA,CACR,IAAK,aACHE,EAAQ,QACR,MACF,IAAK,WACHA,EAAQ,MACR,MACF,IAAK,cACHA,EAAQ,SACR,MACF,QACEA,EAAQ,MAAA,CAGZH,EAAO,MAAM,MAAQG,EACrBH,EAAO,MAAM,EAAIE,EAAM,QACvBF,EAAO,MAAM,EAAIE,EAAM,QACvBF,EAAO,MAAM,MAAQE,EAAM,MAC3BF,EAAO,MAAM,MAAQE,EAAM,MAC3BF,EAAO,MAAM,YAAc,QAC3BA,EAAO,MAAM,OAAS,OACtBA,EAAO,MAAM,SAAWE,EAAM,OAAS,EACzC,CAEA,OAAOE,EAAAA,8BAA8BN,EAAWD,CAAO,CACzD,CAEO,SAASQ,EACdR,EAAgC,GAC2B,CAC3D,OAAQS,GACNC,eAAcC,GAAa,CACzB,MAAMC,EAAab,EAAsBC,CAAO,EAE1Ca,EAAQJ,EAAO,UAAU,CAC7B,KAAKP,EAAO,CACV,MAAMY,EAAUF,EAAW,QAAQV,CAAK,EACpCY,GACFH,EAAS,KAAKG,CAAO,CAEzB,EACA,MAAMC,EAAK,CACTJ,EAAS,QAAQI,CAAG,CACtB,EACA,UAAW,CACTJ,EAAS,WAAA,CACX,CAAA,CACD,EAED,MAAO,IAAM,CACXE,EAAA,EACAD,EAAW,QAAA,CACb,CACF,CAAC,CACL"}
1
+ {"version":3,"file":"touch.cjs","sources":["../../src/browser/single-pointer/recognizer-from-touch.ts"],"sourcesContent":["import type { Operator } from \"../../core/stream.js\";\nimport { createStream } from \"../../core/stream.js\";\nimport type { DeepMutable } from \"../../internal/types.js\";\nimport type { DomEventSignal } from \"../dom-event/dom-event-signal.js\";\nimport { createSinglePointerRecognizer, type SinglePointerRecognizer } from \"./recognizer.js\";\nimport type { SinglePointer, SinglePointerSignal } from \"./single-pointer-signal.js\";\nimport type { SinglePointerOptions, SinglePointerPhase } from \"./types.js\";\n\nexport function createTouchRecognizer(\n options: SinglePointerOptions = {},\n): SinglePointerRecognizer<DomEventSignal<TouchEvent>> {\n function processer(event: DomEventSignal<TouchEvent>, signal: SinglePointerSignal): void {\n const e = event.value;\n const touch = e.touches[0] ?? e.changedTouches[0];\n if (!touch) {\n return;\n }\n\n let phase: SinglePointerPhase;\n switch (e.type) {\n case \"touchstart\":\n phase = \"start\";\n break;\n case \"touchend\":\n phase = \"end\";\n break;\n case \"touchcancel\":\n phase = \"cancel\";\n break;\n default:\n phase = \"move\";\n }\n\n const v = signal.value as DeepMutable<SinglePointer>;\n v.phase = phase;\n v.x = touch.clientX;\n v.y = touch.clientY;\n v.pageX = touch.pageX;\n v.pageY = touch.pageY;\n v.pointerType = \"touch\";\n v.button = \"none\";\n v.pressure = touch.force || 0.5;\n }\n\n return createSinglePointerRecognizer(processer, options);\n}\n\nexport function singlePointerFromTouch(\n options: SinglePointerOptions = {},\n): Operator<DomEventSignal<TouchEvent>, SinglePointerSignal> {\n return (source) =>\n createStream((observer) => {\n const recognizer = createTouchRecognizer(options);\n\n const unsub = source.subscribe({\n next(event) {\n const pointer = recognizer.process(event);\n if (pointer) {\n observer.next(pointer);\n }\n },\n error(err) {\n observer.error?.(err);\n },\n complete() {\n observer.complete?.();\n },\n });\n\n return () => {\n unsub();\n recognizer.dispose();\n };\n });\n}\n"],"names":["createTouchRecognizer","options","processer","event","signal","e","touch","phase","v","createSinglePointerRecognizer","singlePointerFromTouch","source","createStream","observer","recognizer","unsub","pointer","err"],"mappings":"kKAQO,SAASA,EACdC,EAAgC,GACqB,CACrD,SAASC,EAAUC,EAAmCC,EAAmC,CACvF,MAAMC,EAAIF,EAAM,MACVG,EAAQD,EAAE,QAAQ,CAAC,GAAKA,EAAE,eAAe,CAAC,EAChD,GAAI,CAACC,EACH,OAGF,IAAIC,EACJ,OAAQF,EAAE,KAAA,CACR,IAAK,aACHE,EAAQ,QACR,MACF,IAAK,WACHA,EAAQ,MACR,MACF,IAAK,cACHA,EAAQ,SACR,MACF,QACEA,EAAQ,MAAA,CAGZ,MAAMC,EAAIJ,EAAO,MACjBI,EAAE,MAAQD,EACVC,EAAE,EAAIF,EAAM,QACZE,EAAE,EAAIF,EAAM,QACZE,EAAE,MAAQF,EAAM,MAChBE,EAAE,MAAQF,EAAM,MAChBE,EAAE,YAAc,QAChBA,EAAE,OAAS,OACXA,EAAE,SAAWF,EAAM,OAAS,EAC9B,CAEA,OAAOG,EAAAA,8BAA8BP,EAAWD,CAAO,CACzD,CAEO,SAASS,EACdT,EAAgC,GAC2B,CAC3D,OAAQU,GACNC,eAAcC,GAAa,CACzB,MAAMC,EAAad,EAAsBC,CAAO,EAE1Cc,EAAQJ,EAAO,UAAU,CAC7B,KAAKR,EAAO,CACV,MAAMa,EAAUF,EAAW,QAAQX,CAAK,EACpCa,GACFH,EAAS,KAAKG,CAAO,CAEzB,EACA,MAAMC,EAAK,CACTJ,EAAS,QAAQI,CAAG,CACtB,EACA,UAAW,CACTJ,EAAS,WAAA,CACX,CAAA,CACD,EAED,MAAO,IAAM,CACXE,EAAA,EACAD,EAAW,QAAA,CACb,CACF,CAAC,CACL"}
@@ -1,49 +1,50 @@
1
- import { c as a } from "../stream-CDK0RZPi.js";
2
- import { c as s } from "../recognizer-FFAuyJ19.js";
3
- function p(n = {}) {
4
- function u(r, e) {
5
- const o = r.value, t = o.touches[0] ?? o.changedTouches[0];
6
- if (!t)
1
+ import { c as i } from "../stream-CDK0RZPi.js";
2
+ import { c as u } from "../recognizer-6XjwLbo4.js";
3
+ function p(s = {}) {
4
+ function a(o, n) {
5
+ const r = o.value, e = r.touches[0] ?? r.changedTouches[0];
6
+ if (!e)
7
7
  return;
8
- let c;
9
- switch (o.type) {
8
+ let t;
9
+ switch (r.type) {
10
10
  case "touchstart":
11
- c = "start";
11
+ t = "start";
12
12
  break;
13
13
  case "touchend":
14
- c = "end";
14
+ t = "end";
15
15
  break;
16
16
  case "touchcancel":
17
- c = "cancel";
17
+ t = "cancel";
18
18
  break;
19
19
  default:
20
- c = "move";
20
+ t = "move";
21
21
  }
22
- e.value.phase = c, e.value.x = t.clientX, e.value.y = t.clientY, e.value.pageX = t.pageX, e.value.pageY = t.pageY, e.value.pointerType = "touch", e.value.button = "none", e.value.pressure = t.force || 0.5;
22
+ const c = n.value;
23
+ c.phase = t, c.x = e.clientX, c.y = e.clientY, c.pageX = e.pageX, c.pageY = e.pageY, c.pointerType = "touch", c.button = "none", c.pressure = e.force || 0.5;
23
24
  }
24
- return s(u, n);
25
+ return u(a, s);
25
26
  }
26
- function l(n = {}) {
27
- return (u) => a((r) => {
28
- const e = p(n), o = u.subscribe({
29
- next(t) {
30
- const c = e.process(t);
31
- c && r.next(c);
27
+ function g(s = {}) {
28
+ return (a) => i((o) => {
29
+ const n = p(s), r = a.subscribe({
30
+ next(e) {
31
+ const t = n.process(e);
32
+ t && o.next(t);
32
33
  },
33
- error(t) {
34
- r.error?.(t);
34
+ error(e) {
35
+ o.error?.(e);
35
36
  },
36
37
  complete() {
37
- r.complete?.();
38
+ o.complete?.();
38
39
  }
39
40
  });
40
41
  return () => {
41
- o(), e.dispose();
42
+ r(), n.dispose();
42
43
  };
43
44
  });
44
45
  }
45
46
  export {
46
47
  p as createTouchRecognizer,
47
- l as singlePointerRecognizer
48
+ g as singlePointerRecognizer
48
49
  };
49
50
  //# sourceMappingURL=touch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"touch.js","sources":["../../src/browser/single-pointer/recognizer-from-touch.ts"],"sourcesContent":["import type { Operator } from \"../../core/stream.js\";\nimport { createStream } from \"../../core/stream.js\";\nimport type { DomEventSignal } from \"../dom-event/dom-event-signal.js\";\nimport { createSinglePointerRecognizer, type SinglePointerRecognizer } from \"./recognizer.js\";\nimport type { SinglePointerSignal } from \"./single-pointer-signal.js\";\nimport type { SinglePointerOptions, SinglePointerPhase } from \"./types.js\";\n\nexport function createTouchRecognizer(\n options: SinglePointerOptions = {},\n): SinglePointerRecognizer<DomEventSignal<TouchEvent>> {\n function processer(event: DomEventSignal<TouchEvent>, signal: SinglePointerSignal): void {\n const e = event.value;\n const touch = e.touches[0] ?? e.changedTouches[0];\n if (!touch) {\n return;\n }\n\n let phase: SinglePointerPhase;\n switch (e.type) {\n case \"touchstart\":\n phase = \"start\";\n break;\n case \"touchend\":\n phase = \"end\";\n break;\n case \"touchcancel\":\n phase = \"cancel\";\n break;\n default:\n phase = \"move\";\n }\n\n signal.value.phase = phase;\n signal.value.x = touch.clientX;\n signal.value.y = touch.clientY;\n signal.value.pageX = touch.pageX;\n signal.value.pageY = touch.pageY;\n signal.value.pointerType = \"touch\";\n signal.value.button = \"none\";\n signal.value.pressure = touch.force || 0.5;\n }\n\n return createSinglePointerRecognizer(processer, options);\n}\n\nexport function singlePointerFromTouch(\n options: SinglePointerOptions = {},\n): Operator<DomEventSignal<TouchEvent>, SinglePointerSignal> {\n return (source) =>\n createStream((observer) => {\n const recognizer = createTouchRecognizer(options);\n\n const unsub = source.subscribe({\n next(event) {\n const pointer = recognizer.process(event);\n if (pointer) {\n observer.next(pointer);\n }\n },\n error(err) {\n observer.error?.(err);\n },\n complete() {\n observer.complete?.();\n },\n });\n\n return () => {\n unsub();\n recognizer.dispose();\n };\n });\n}\n"],"names":["createTouchRecognizer","options","processer","event","signal","e","touch","phase","createSinglePointerRecognizer","singlePointerFromTouch","source","createStream","observer","recognizer","unsub","pointer","err"],"mappings":";;AAOO,SAASA,EACdC,IAAgC,IACqB;AACrD,WAASC,EAAUC,GAAmCC,GAAmC;AACvF,UAAMC,IAAIF,EAAM,OACVG,IAAQD,EAAE,QAAQ,CAAC,KAAKA,EAAE,eAAe,CAAC;AAChD,QAAI,CAACC;AACH;AAGF,QAAIC;AACJ,YAAQF,EAAE,MAAA;AAAA,MACR,KAAK;AACH,QAAAE,IAAQ;AACR;AAAA,MACF,KAAK;AACH,QAAAA,IAAQ;AACR;AAAA,MACF,KAAK;AACH,QAAAA,IAAQ;AACR;AAAA,MACF;AACE,QAAAA,IAAQ;AAAA,IAAA;AAGZ,IAAAH,EAAO,MAAM,QAAQG,GACrBH,EAAO,MAAM,IAAIE,EAAM,SACvBF,EAAO,MAAM,IAAIE,EAAM,SACvBF,EAAO,MAAM,QAAQE,EAAM,OAC3BF,EAAO,MAAM,QAAQE,EAAM,OAC3BF,EAAO,MAAM,cAAc,SAC3BA,EAAO,MAAM,SAAS,QACtBA,EAAO,MAAM,WAAWE,EAAM,SAAS;AAAA,EACzC;AAEA,SAAOE,EAA8BN,GAAWD,CAAO;AACzD;AAEO,SAASQ,EACdR,IAAgC,IAC2B;AAC3D,SAAO,CAACS,MACNC,EAAa,CAACC,MAAa;AACzB,UAAMC,IAAab,EAAsBC,CAAO,GAE1Ca,IAAQJ,EAAO,UAAU;AAAA,MAC7B,KAAKP,GAAO;AACV,cAAMY,IAAUF,EAAW,QAAQV,CAAK;AACxC,QAAIY,KACFH,EAAS,KAAKG,CAAO;AAAA,MAEzB;AAAA,MACA,MAAMC,GAAK;AACT,QAAAJ,EAAS,QAAQI,CAAG;AAAA,MACtB;AAAA,MACA,WAAW;AACT,QAAAJ,EAAS,WAAA;AAAA,MACX;AAAA,IAAA,CACD;AAED,WAAO,MAAM;AACX,MAAAE,EAAA,GACAD,EAAW,QAAA;AAAA,IACb;AAAA,EACF,CAAC;AACL;"}
1
+ {"version":3,"file":"touch.js","sources":["../../src/browser/single-pointer/recognizer-from-touch.ts"],"sourcesContent":["import type { Operator } from \"../../core/stream.js\";\nimport { createStream } from \"../../core/stream.js\";\nimport type { DeepMutable } from \"../../internal/types.js\";\nimport type { DomEventSignal } from \"../dom-event/dom-event-signal.js\";\nimport { createSinglePointerRecognizer, type SinglePointerRecognizer } from \"./recognizer.js\";\nimport type { SinglePointer, SinglePointerSignal } from \"./single-pointer-signal.js\";\nimport type { SinglePointerOptions, SinglePointerPhase } from \"./types.js\";\n\nexport function createTouchRecognizer(\n options: SinglePointerOptions = {},\n): SinglePointerRecognizer<DomEventSignal<TouchEvent>> {\n function processer(event: DomEventSignal<TouchEvent>, signal: SinglePointerSignal): void {\n const e = event.value;\n const touch = e.touches[0] ?? e.changedTouches[0];\n if (!touch) {\n return;\n }\n\n let phase: SinglePointerPhase;\n switch (e.type) {\n case \"touchstart\":\n phase = \"start\";\n break;\n case \"touchend\":\n phase = \"end\";\n break;\n case \"touchcancel\":\n phase = \"cancel\";\n break;\n default:\n phase = \"move\";\n }\n\n const v = signal.value as DeepMutable<SinglePointer>;\n v.phase = phase;\n v.x = touch.clientX;\n v.y = touch.clientY;\n v.pageX = touch.pageX;\n v.pageY = touch.pageY;\n v.pointerType = \"touch\";\n v.button = \"none\";\n v.pressure = touch.force || 0.5;\n }\n\n return createSinglePointerRecognizer(processer, options);\n}\n\nexport function singlePointerFromTouch(\n options: SinglePointerOptions = {},\n): Operator<DomEventSignal<TouchEvent>, SinglePointerSignal> {\n return (source) =>\n createStream((observer) => {\n const recognizer = createTouchRecognizer(options);\n\n const unsub = source.subscribe({\n next(event) {\n const pointer = recognizer.process(event);\n if (pointer) {\n observer.next(pointer);\n }\n },\n error(err) {\n observer.error?.(err);\n },\n complete() {\n observer.complete?.();\n },\n });\n\n return () => {\n unsub();\n recognizer.dispose();\n };\n });\n}\n"],"names":["createTouchRecognizer","options","processer","event","signal","e","touch","phase","v","createSinglePointerRecognizer","singlePointerFromTouch","source","createStream","observer","recognizer","unsub","pointer","err"],"mappings":";;AAQO,SAASA,EACdC,IAAgC,IACqB;AACrD,WAASC,EAAUC,GAAmCC,GAAmC;AACvF,UAAMC,IAAIF,EAAM,OACVG,IAAQD,EAAE,QAAQ,CAAC,KAAKA,EAAE,eAAe,CAAC;AAChD,QAAI,CAACC;AACH;AAGF,QAAIC;AACJ,YAAQF,EAAE,MAAA;AAAA,MACR,KAAK;AACH,QAAAE,IAAQ;AACR;AAAA,MACF,KAAK;AACH,QAAAA,IAAQ;AACR;AAAA,MACF,KAAK;AACH,QAAAA,IAAQ;AACR;AAAA,MACF;AACE,QAAAA,IAAQ;AAAA,IAAA;AAGZ,UAAMC,IAAIJ,EAAO;AACjB,IAAAI,EAAE,QAAQD,GACVC,EAAE,IAAIF,EAAM,SACZE,EAAE,IAAIF,EAAM,SACZE,EAAE,QAAQF,EAAM,OAChBE,EAAE,QAAQF,EAAM,OAChBE,EAAE,cAAc,SAChBA,EAAE,SAAS,QACXA,EAAE,WAAWF,EAAM,SAAS;AAAA,EAC9B;AAEA,SAAOG,EAA8BP,GAAWD,CAAO;AACzD;AAEO,SAASS,EACdT,IAAgC,IAC2B;AAC3D,SAAO,CAACU,MACNC,EAAa,CAACC,MAAa;AACzB,UAAMC,IAAad,EAAsBC,CAAO,GAE1Cc,IAAQJ,EAAO,UAAU;AAAA,MAC7B,KAAKR,GAAO;AACV,cAAMa,IAAUF,EAAW,QAAQX,CAAK;AACxC,QAAIa,KACFH,EAAS,KAAKG,CAAO;AAAA,MAEzB;AAAA,MACA,MAAMC,GAAK;AACT,QAAAJ,EAAS,QAAQI,CAAG;AAAA,MACtB;AAAA,MACA,WAAW;AACT,QAAAJ,EAAS,WAAA;AAAA,MACX;AAAA,IAAA,CACD;AAED,WAAO,MAAM;AACX,MAAAE,EAAA,GACAD,EAAW,QAAA;AAAA,IACb;AAAA,EACF,CAAC;AACL;"}
@@ -1 +1 @@
1
- {"version":3,"file":"types-BGR5Mhw9.cjs","sources":["../src/browser/single-pointer/types.ts"],"sourcesContent":["export interface SinglePointerOptions {\n pooling?: boolean; // default: false\n}\n\nexport type SinglePointerType = \"touch\" | \"mouse\" | \"pen\" | \"unknown\";\n\nexport type SinglePointerPhase = \"unknown\" | \"start\" | \"move\" | \"end\" | \"cancel\";\n\nexport type SinglePointerButton =\n | \"none\"\n | \"primary\"\n | \"secondary\"\n | \"auxiliary\"\n | \"back\"\n | \"forward\";\n\nexport function toSinglePointerButton(button: number): SinglePointerButton {\n switch (button) {\n case -1:\n return \"none\";\n case 0:\n return \"primary\";\n case 1:\n return \"auxiliary\";\n case 2:\n return \"secondary\";\n case 3:\n return \"back\";\n case 4:\n return \"forward\";\n default:\n return \"none\";\n }\n}\n"],"names":["toSinglePointerButton","button"],"mappings":"aAgBO,SAASA,EAAsBC,EAAqC,CACzE,OAAQA,EAAA,CACN,IAAK,GACH,MAAO,OACT,IAAK,GACH,MAAO,UACT,IAAK,GACH,MAAO,YACT,IAAK,GACH,MAAO,YACT,IAAK,GACH,MAAO,OACT,IAAK,GACH,MAAO,UACT,QACE,MAAO,MAAA,CAEb"}
1
+ {"version":3,"file":"types-BGR5Mhw9.cjs","sources":["../src/browser/single-pointer/types.ts"],"sourcesContent":["export type SinglePointerOptions = {};\n\nexport type SinglePointerType = \"touch\" | \"mouse\" | \"pen\" | \"unknown\";\n\nexport type SinglePointerPhase = \"unknown\" | \"start\" | \"move\" | \"end\" | \"cancel\";\n\nexport type SinglePointerButton =\n | \"none\"\n | \"primary\"\n | \"secondary\"\n | \"auxiliary\"\n | \"back\"\n | \"forward\";\n\nexport function toSinglePointerButton(button: number): SinglePointerButton {\n switch (button) {\n case -1:\n return \"none\";\n case 0:\n return \"primary\";\n case 1:\n return \"auxiliary\";\n case 2:\n return \"secondary\";\n case 3:\n return \"back\";\n case 4:\n return \"forward\";\n default:\n return \"none\";\n }\n}\n"],"names":["toSinglePointerButton","button"],"mappings":"aAcO,SAASA,EAAsBC,EAAqC,CACzE,OAAQA,EAAA,CACN,IAAK,GACH,MAAO,OACT,IAAK,GACH,MAAO,UACT,IAAK,GACH,MAAO,YACT,IAAK,GACH,MAAO,YACT,IAAK,GACH,MAAO,OACT,IAAK,GACH,MAAO,UACT,QACE,MAAO,MAAA,CAEb"}
@@ -1 +1 @@
1
- {"version":3,"file":"types-Ccnqx90M.js","sources":["../src/browser/single-pointer/types.ts"],"sourcesContent":["export interface SinglePointerOptions {\n pooling?: boolean; // default: false\n}\n\nexport type SinglePointerType = \"touch\" | \"mouse\" | \"pen\" | \"unknown\";\n\nexport type SinglePointerPhase = \"unknown\" | \"start\" | \"move\" | \"end\" | \"cancel\";\n\nexport type SinglePointerButton =\n | \"none\"\n | \"primary\"\n | \"secondary\"\n | \"auxiliary\"\n | \"back\"\n | \"forward\";\n\nexport function toSinglePointerButton(button: number): SinglePointerButton {\n switch (button) {\n case -1:\n return \"none\";\n case 0:\n return \"primary\";\n case 1:\n return \"auxiliary\";\n case 2:\n return \"secondary\";\n case 3:\n return \"back\";\n case 4:\n return \"forward\";\n default:\n return \"none\";\n }\n}\n"],"names":["toSinglePointerButton","button"],"mappings":"AAgBO,SAASA,EAAsBC,GAAqC;AACzE,UAAQA,GAAA;AAAA,IACN,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EAAA;AAEb;"}
1
+ {"version":3,"file":"types-Ccnqx90M.js","sources":["../src/browser/single-pointer/types.ts"],"sourcesContent":["export type SinglePointerOptions = {};\n\nexport type SinglePointerType = \"touch\" | \"mouse\" | \"pen\" | \"unknown\";\n\nexport type SinglePointerPhase = \"unknown\" | \"start\" | \"move\" | \"end\" | \"cancel\";\n\nexport type SinglePointerButton =\n | \"none\"\n | \"primary\"\n | \"secondary\"\n | \"auxiliary\"\n | \"back\"\n | \"forward\";\n\nexport function toSinglePointerButton(button: number): SinglePointerButton {\n switch (button) {\n case -1:\n return \"none\";\n case 0:\n return \"primary\";\n case 1:\n return \"auxiliary\";\n case 2:\n return \"secondary\";\n case 3:\n return \"back\";\n case 4:\n return \"forward\";\n default:\n return \"none\";\n }\n}\n"],"names":["toSinglePointerButton","button"],"mappings":"AAcO,SAASA,EAAsBC,GAAqC;AACzE,UAAQA,GAAA;AAAA,IACN,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EAAA;AAEb;"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "cereb",
3
3
  "description": "User input modeling and orchestration with a lightweight reactive stream library.",
4
- "version": "0.3.2",
4
+ "version": "0.4.0",
5
5
  "license": "MIT",
6
6
  "author": "devphilip21 <philip21.dev@gmail.com>",
7
7
  "repository": {
@@ -71,12 +71,5 @@
71
71
  "test": "vitest run",
72
72
  "test:watch": "vitest",
73
73
  "test:coverage": "vitest run --coverage"
74
- },
75
- "devDependencies": {
76
- "@cereb/builder": "workspace:^",
77
- "@vitest/coverage-v8": "*",
78
- "jsdom": "*",
79
- "vite": "*",
80
- "vitest": "*"
81
74
  }
82
75
  }
@@ -1,2 +0,0 @@
1
- "use strict";let c="";function f(){return c}function v(e){c=e}function s(e,i){return{kind:e,value:i,deviceId:f(),createdAt:performance.now()}}function g(e,i,o={}){const{initialSize:t=0,maxSize:u=100}=o,n=[];for(let r=0;r<t;r++)n.push(e());return{get size(){return n.length},acquire(){return n.length>0?n.pop():e()},release(r){n.length<u&&(i(r),n.push(r))}}}const S="single-pointer";function p(e){return s(S,e)}function d(){return p({id:"",phase:"move",x:0,y:0,pageX:0,pageY:0,pointerType:"unknown",button:"none",pressure:.5})}function P(e){e.value.phase="move",e.value.x=0,e.value.y=0,e.value.pageX=0,e.value.pageY=0,e.value.pointerType="unknown",e.value.button="none",e.value.pressure=.5,e.updatedAt=performance.now()}const l=g(d,P,{initialSize:20,maxSize:100});function h(e,i={}){const{pooling:o=!1}=i;let t=null;function u(){return o?l.acquire():p({id:"",phase:"move",x:0,y:0,pageX:0,pageY:0,pointerType:"mouse",button:"none",pressure:.5})}function n(){t&&o&&l.release(t),t=null}return{process:r=>{const a=u();return e(r,a),n(),t=a,a},get isActive(){return t!==null},reset(){n()},dispose(){this.reset()}}}exports.createObjectPool=g;exports.createSignal=s;exports.createSinglePointerRecognizer=h;exports.setCerebDeviceId=v;
2
- //# sourceMappingURL=recognizer-BrqdN-1T.cjs.map