cereb 0.1.0 → 0.2.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.
- package/README.md +13 -13
- package/dist/browser/dom-event/dom-event-signal.d.ts +6 -0
- package/dist/browser/dom-event/dom-event-signal.d.ts.map +1 -0
- package/dist/browser/dom-event/dom-event.d.ts +3 -2
- package/dist/browser/dom-event/dom-event.d.ts.map +1 -1
- package/dist/browser/dom-event/mouse-events.d.ts +3 -2
- package/dist/browser/dom-event/mouse-events.d.ts.map +1 -1
- package/dist/browser/dom-event/pointer-events.d.ts +3 -2
- package/dist/browser/dom-event/pointer-events.d.ts.map +1 -1
- package/dist/browser/dom-event/touch-events.d.ts +3 -2
- package/dist/browser/dom-event/touch-events.d.ts.map +1 -1
- package/dist/browser/single-pointer/emitter.d.ts +13 -0
- package/dist/browser/single-pointer/emitter.d.ts.map +1 -0
- package/dist/browser/single-pointer/index.d.ts +2 -3
- package/dist/browser/single-pointer/index.d.ts.map +1 -1
- package/dist/browser/single-pointer/mouse-emitter.d.ts +6 -14
- package/dist/browser/single-pointer/mouse-emitter.d.ts.map +1 -1
- package/dist/browser/single-pointer/mouse.d.ts +2 -3
- package/dist/browser/single-pointer/mouse.d.ts.map +1 -1
- package/dist/browser/single-pointer/pointer-emitter.d.ts +7 -18
- package/dist/browser/single-pointer/pointer-emitter.d.ts.map +1 -1
- package/dist/browser/single-pointer/pointer.d.ts +2 -3
- package/dist/browser/single-pointer/pointer.d.ts.map +1 -1
- package/dist/browser/single-pointer/pool.d.ts +3 -3
- package/dist/browser/single-pointer/pool.d.ts.map +1 -1
- package/dist/browser/single-pointer/single-pointer-signal.d.ts +25 -0
- package/dist/browser/single-pointer/single-pointer-signal.d.ts.map +1 -0
- package/dist/browser/single-pointer/touch-emitter.d.ts +6 -14
- package/dist/browser/single-pointer/touch-emitter.d.ts.map +1 -1
- package/dist/browser/single-pointer/touch.d.ts +2 -3
- package/dist/browser/single-pointer/touch.d.ts.map +1 -1
- package/dist/browser/single-pointer/types.d.ts +4 -4
- package/dist/browser/single-pointer/types.d.ts.map +1 -1
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/meta.d.ts +3 -0
- package/dist/core/meta.d.ts.map +1 -0
- package/dist/core/signal.d.ts +9 -0
- package/dist/core/signal.d.ts.map +1 -0
- package/dist/{stream → core}/stream.d.ts +6 -5
- package/dist/core/stream.d.ts.map +1 -0
- package/dist/emitter-CyT5OiQO.cjs +2 -0
- package/dist/emitter-CyT5OiQO.cjs.map +1 -0
- package/dist/emitter-FFAuyJ19.js +101 -0
- package/dist/emitter-FFAuyJ19.js.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +129 -39
- package/dist/index.js.map +1 -1
- package/dist/internal/subject.d.ts +6 -5
- package/dist/internal/subject.d.ts.map +1 -1
- package/dist/internal/test-utils.d.ts +10 -0
- package/dist/internal/test-utils.d.ts.map +1 -0
- package/dist/ochestrations/compose.d.ts +8 -7
- package/dist/ochestrations/compose.d.ts.map +1 -1
- package/dist/ochestrations/pipe.d.ts +12 -11
- package/dist/ochestrations/pipe.d.ts.map +1 -1
- package/dist/operators/buffer.d.ts +5 -4
- package/dist/operators/buffer.d.ts.map +1 -1
- package/dist/operators/debounce.d.ts +3 -2
- package/dist/operators/debounce.d.ts.map +1 -1
- package/dist/operators/distinct.d.ts +8 -7
- package/dist/operators/distinct.d.ts.map +1 -1
- package/dist/operators/filter.d.ts +3 -2
- package/dist/operators/filter.d.ts.map +1 -1
- package/dist/operators/index.d.ts +0 -1
- package/dist/operators/index.d.ts.map +1 -1
- package/dist/operators/map.d.ts +3 -2
- package/dist/operators/map.d.ts.map +1 -1
- package/dist/operators/merge.d.ts +4 -3
- package/dist/operators/merge.d.ts.map +1 -1
- package/dist/operators/share.d.ts +4 -3
- package/dist/operators/share.d.ts.map +1 -1
- package/dist/operators/skip.d.ts +5 -4
- package/dist/operators/skip.d.ts.map +1 -1
- package/dist/operators/spy.d.ts +3 -2
- package/dist/operators/spy.d.ts.map +1 -1
- package/dist/operators/take.d.ts +5 -4
- package/dist/operators/take.d.ts.map +1 -1
- package/dist/operators/throttle.d.ts +4 -3
- package/dist/operators/throttle.d.ts.map +1 -1
- package/dist/operators.cjs +1 -1
- package/dist/operators.cjs.map +1 -1
- package/dist/operators.js +178 -192
- package/dist/operators.js.map +1 -1
- package/dist/single-pointer/mouse.cjs +1 -1
- package/dist/single-pointer/mouse.cjs.map +1 -1
- package/dist/single-pointer/mouse.js +31 -60
- package/dist/single-pointer/mouse.js.map +1 -1
- package/dist/single-pointer/pointer.cjs +1 -1
- package/dist/single-pointer/pointer.js +1 -6
- package/dist/single-pointer/pointer.js.map +1 -1
- package/dist/single-pointer/touch.cjs +1 -1
- package/dist/single-pointer/touch.cjs.map +1 -1
- package/dist/single-pointer/touch.js +34 -64
- package/dist/single-pointer/touch.js.map +1 -1
- package/dist/stream-CDK0RZPi.js.map +1 -1
- package/dist/stream-Cp6eCZs2.cjs.map +1 -1
- package/dist/{types-DkXpfiI3.cjs → types-BGR5Mhw9.cjs} +2 -2
- package/dist/types-BGR5Mhw9.cjs.map +1 -0
- package/dist/types-Ccnqx90M.js.map +1 -1
- package/package.json +1 -1
- package/dist/browser/single-pointer/single-pointer.d.ts +0 -22
- package/dist/browser/single-pointer/single-pointer.d.ts.map +0 -1
- package/dist/factory/defer.d.ts +0 -3
- package/dist/factory/defer.d.ts.map +0 -1
- package/dist/factory/empty.d.ts +0 -3
- package/dist/factory/empty.d.ts.map +0 -1
- package/dist/factory/from-promise.d.ts +0 -3
- package/dist/factory/from-promise.d.ts.map +0 -1
- package/dist/factory/from.d.ts +0 -3
- package/dist/factory/from.d.ts.map +0 -1
- package/dist/factory/index.d.ts +0 -10
- package/dist/factory/index.d.ts.map +0 -1
- package/dist/factory/interval.d.ts +0 -3
- package/dist/factory/interval.d.ts.map +0 -1
- package/dist/factory/never.d.ts +0 -3
- package/dist/factory/never.d.ts.map +0 -1
- package/dist/factory/of.d.ts +0 -3
- package/dist/factory/of.d.ts.map +0 -1
- package/dist/factory/throw-error.d.ts +0 -3
- package/dist/factory/throw-error.d.ts.map +0 -1
- package/dist/factory/timer.d.ts +0 -3
- package/dist/factory/timer.d.ts.map +0 -1
- package/dist/operators/combine.d.ts +0 -8
- package/dist/operators/combine.d.ts.map +0 -1
- package/dist/pointer-CX9qwBVm.cjs +0 -2
- package/dist/pointer-CX9qwBVm.cjs.map +0 -1
- package/dist/pointer-Cq2B2vwv.js +0 -111
- package/dist/pointer-Cq2B2vwv.js.map +0 -1
- package/dist/pool-CM9teIjt.js +0 -42
- package/dist/pool-CM9teIjt.js.map +0 -1
- package/dist/pool-Dr67Mz_1.cjs +0 -2
- package/dist/pool-Dr67Mz_1.cjs.map +0 -1
- package/dist/stream/stream.d.ts.map +0 -1
- package/dist/types-DkXpfiI3.cjs.map +0 -1
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@ User input modeling and orchestration with a lightweight reactive stream library
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
npm install
|
|
8
|
+
npm install cereb
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
## Quick Start
|
|
@@ -14,7 +14,7 @@ Cereb models user input as lightweight reactive streams—from low-level DOM eve
|
|
|
14
14
|
Below is a minimal example for a **single pointer** stream.
|
|
15
15
|
|
|
16
16
|
```typescript
|
|
17
|
-
import { singlePointer } from "
|
|
17
|
+
import { singlePointer } from "cereb";
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
20
|
* Provides a stream for a single pointer.
|
|
@@ -46,7 +46,7 @@ singlePointer(canvas).subscribe((e) => {
|
|
|
46
46
|
Cereb includes factories to convert DOM events into streams, and to build higher-level streams by merging mouse/touch/pointer events.
|
|
47
47
|
|
|
48
48
|
```typescript
|
|
49
|
-
import { domEvent, mouseEvents } from "
|
|
49
|
+
import { domEvent, mouseEvents } from "cereb";
|
|
50
50
|
|
|
51
51
|
const $touchScrollContainer = domEvent(scrollContainerElement, "touchstart");
|
|
52
52
|
const $mouseSomething = mouseEvents(somethingElement);
|
|
@@ -55,15 +55,15 @@ const $mouseSomething = mouseEvents(somethingElement);
|
|
|
55
55
|
You can also build a `singlePointer` stream from touch events:
|
|
56
56
|
|
|
57
57
|
```typescript
|
|
58
|
-
import { touchEvents, pipe } from "
|
|
59
|
-
import { singlePointerEmitter } from "
|
|
58
|
+
import { touchEvents, pipe } from "cereb";
|
|
59
|
+
import { singlePointerEmitter } from "cereb/single-pointer/touch";
|
|
60
60
|
|
|
61
|
-
const $
|
|
61
|
+
const pointSomething$ = pipe(
|
|
62
62
|
touchEvents(somethingElement),
|
|
63
63
|
singlePointerEmitter(),
|
|
64
64
|
);
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
pointSomething$.subscribe((e) => console.log(e.x, e.y));
|
|
67
67
|
```
|
|
68
68
|
|
|
69
69
|
### Blocking Streams
|
|
@@ -71,7 +71,7 @@ $pointSomething.subscribe((e) => console.log(e.x, e.y));
|
|
|
71
71
|
All streams are blockable - events are silently dropped when blocked:
|
|
72
72
|
|
|
73
73
|
```typescript
|
|
74
|
-
import { singlePointer } from "
|
|
74
|
+
import { singlePointer } from "cereb";
|
|
75
75
|
|
|
76
76
|
const stream$ = singlePointer(element);
|
|
77
77
|
|
|
@@ -96,7 +96,7 @@ Core includes common stream operators:
|
|
|
96
96
|
| `distinctUntilChanged` | Skip consecutive duplicates |
|
|
97
97
|
|
|
98
98
|
```typescript
|
|
99
|
-
import { pipe, filter, throttle, map } from "
|
|
99
|
+
import { pipe, filter, throttle, map } from "cereb";
|
|
100
100
|
|
|
101
101
|
const stream = pipe(
|
|
102
102
|
singlePointer(element),
|
|
@@ -109,14 +109,14 @@ const stream = pipe(
|
|
|
109
109
|
### Combining Streams
|
|
110
110
|
|
|
111
111
|
```typescript
|
|
112
|
-
import { pipe, merge, singlePointer, domEvent } from "
|
|
112
|
+
import { pipe, merge, singlePointer, domEvent } from "cereb";
|
|
113
113
|
|
|
114
|
-
const keyboard = domEvent(window, "keydown");
|
|
115
|
-
const pointer = singlePointer(element);
|
|
114
|
+
const keyboard$ = domEvent(window, "keydown");
|
|
115
|
+
const pointer$ = singlePointer(element);
|
|
116
116
|
|
|
117
117
|
// You can subscribe to events from multiple sources as one stream.
|
|
118
118
|
// This example simply merges, but you can orchestrate behavior with pipelines and operators.
|
|
119
|
-
const combined = merge(keyboard
|
|
119
|
+
const combined$ = merge(keyboard$, pointer$);
|
|
120
120
|
```
|
|
121
121
|
|
|
122
122
|
## License
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Signal } from '../../core/signal.js';
|
|
2
|
+
export interface DomEventSignal<E extends Event> extends Signal<"dom-event", E> {
|
|
3
|
+
}
|
|
4
|
+
export declare const DOM_EVENT_SIGNAL_KIND: "dom-event";
|
|
5
|
+
export declare function createDomEventSignal<E extends Event>(event: E): DomEventSignal<E>;
|
|
6
|
+
//# sourceMappingURL=dom-event-signal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom-event-signal.d.ts","sourceRoot":"","sources":["../../../src/browser/dom-event/dom-event-signal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEjE,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,KAAK,CAAE,SAAQ,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;CAAG;AAElF,eAAO,MAAM,qBAAqB,EAAG,WAAoB,CAAC;AAE1D,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAEjF"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import { Stream } from '../../
|
|
2
|
-
|
|
1
|
+
import { Stream } from '../../core/stream.js';
|
|
2
|
+
import { DomEventSignal } from './dom-event-signal.js';
|
|
3
|
+
export declare function domEvent(target: EventTarget, eventName: string, options?: AddEventListenerOptions): Stream<DomEventSignal<Event>>;
|
|
3
4
|
//# sourceMappingURL=dom-event.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom-event.d.ts","sourceRoot":"","sources":["../../../src/browser/dom-event/dom-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"dom-event.d.ts","sourceRoot":"","sources":["../../../src/browser/dom-event/dom-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAElF,wBAAgB,QAAQ,CACtB,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,uBAAuB,GAChC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAY/B"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import { Stream } from '../../
|
|
2
|
-
|
|
1
|
+
import { Stream } from '../../core/stream.js';
|
|
2
|
+
import { DomEventSignal } from './dom-event-signal.js';
|
|
3
|
+
export declare function mouseEvents(target: EventTarget, options?: AddEventListenerOptions): Stream<DomEventSignal<MouseEvent>>;
|
|
3
4
|
//# sourceMappingURL=mouse-events.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mouse-events.d.ts","sourceRoot":"","sources":["../../../src/browser/dom-event/mouse-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"mouse-events.d.ts","sourceRoot":"","sources":["../../../src/browser/dom-event/mouse-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAIlF,wBAAgB,WAAW,CACzB,MAAM,EAAE,WAAW,EACnB,OAAO,CAAC,EAAE,uBAAuB,GAChC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAkBpC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import { Stream } from '../../
|
|
2
|
-
|
|
1
|
+
import { Stream } from '../../core/stream.js';
|
|
2
|
+
import { DomEventSignal } from './dom-event-signal.js';
|
|
3
|
+
export declare function pointerEvents(target: EventTarget, options?: AddEventListenerOptions): Stream<DomEventSignal<PointerEvent>>;
|
|
3
4
|
//# sourceMappingURL=pointer-events.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pointer-events.d.ts","sourceRoot":"","sources":["../../../src/browser/dom-event/pointer-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"pointer-events.d.ts","sourceRoot":"","sources":["../../../src/browser/dom-event/pointer-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAIlF,wBAAgB,aAAa,CAC3B,MAAM,EAAE,WAAW,EACnB,OAAO,CAAC,EAAE,uBAAuB,GAChC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAkBtC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import { Stream } from '../../
|
|
2
|
-
|
|
1
|
+
import { Stream } from '../../core/stream.js';
|
|
2
|
+
import { DomEventSignal } from './dom-event-signal.js';
|
|
3
|
+
export declare function touchEvents(target: EventTarget, options?: AddEventListenerOptions): Stream<DomEventSignal<TouchEvent>>;
|
|
3
4
|
//# sourceMappingURL=touch-events.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"touch-events.d.ts","sourceRoot":"","sources":["../../../src/browser/dom-event/touch-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"touch-events.d.ts","sourceRoot":"","sources":["../../../src/browser/dom-event/touch-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAIlF,wBAAgB,WAAW,CACzB,MAAM,EAAE,WAAW,EACnB,OAAO,CAAC,EAAE,uBAAuB,GAChC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAkBpC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Signal } from '../../core/signal.js';
|
|
2
|
+
import { SinglePointerSignal } from './single-pointer-signal.js';
|
|
3
|
+
export interface SinglePointerEmitter<InputSignal extends Signal> {
|
|
4
|
+
process(event: InputSignal): SinglePointerSignal;
|
|
5
|
+
readonly isActive: boolean;
|
|
6
|
+
reset(): void;
|
|
7
|
+
dispose(): void;
|
|
8
|
+
}
|
|
9
|
+
export interface SinglePointerEmitterOptions {
|
|
10
|
+
pooling?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare function createSinglePointerEmitter<InputSignal extends Signal>(processor: (inputSignal: InputSignal, pointerSignal: SinglePointerSignal) => void, options?: SinglePointerEmitterOptions): SinglePointerEmitter<InputSignal>;
|
|
13
|
+
//# sourceMappingURL=emitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/emitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAA6B,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjG,MAAM,WAAW,oBAAoB,CAAC,WAAW,SAAS,MAAM;IAC9D,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,mBAAmB,CAAC;IACjD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,KAAK,IAAI,IAAI,CAAC;IACd,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,0BAA0B,CAAC,WAAW,SAAS,MAAM,EACnE,SAAS,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,mBAAmB,KAAK,IAAI,EACjF,OAAO,GAAE,2BAAgC,GACxC,oBAAoB,CAAC,WAAW,CAAC,CA8CnC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
export type { SinglePointerOptions } from './pointer-emitter.js';
|
|
2
1
|
export { singlePointer } from './pointer-emitter.js';
|
|
3
|
-
export type { SinglePointer } from './single-pointer.js';
|
|
4
|
-
export type {
|
|
2
|
+
export type { SINGLE_POINTER_SIGNAL_KIND, SinglePointer, SinglePointerSignal, } from './single-pointer-signal.js';
|
|
3
|
+
export type { SinglePointerButton, SinglePointerPhase, SinglePointerType } from './types.js';
|
|
5
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,YAAY,EACV,0BAA0B,EAC1B,aAAa,EACb,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,15 +1,7 @@
|
|
|
1
|
-
import { Operator } from '../../
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export interface MouseEmitter {
|
|
8
|
-
process(event: MouseEvent): SinglePointer;
|
|
9
|
-
readonly isActive: boolean;
|
|
10
|
-
reset(): void;
|
|
11
|
-
dispose(): void;
|
|
12
|
-
}
|
|
13
|
-
export declare function createMouseEmitter(options?: MouseEmitterOptions): MouseEmitter;
|
|
14
|
-
export declare function mouseToSinglePointer(options?: MouseEmitterOptions): Operator<MouseEvent, SinglePointer>;
|
|
1
|
+
import { Operator } from '../../core/stream.js';
|
|
2
|
+
import { DomEventSignal } from '../dom-event/dom-event-signal.js';
|
|
3
|
+
import { SinglePointerEmitter, SinglePointerEmitterOptions } from './emitter.js';
|
|
4
|
+
import { SinglePointerSignal } from './single-pointer-signal.js';
|
|
5
|
+
export declare function createMouseEmitter(options?: SinglePointerEmitterOptions): SinglePointerEmitter<DomEventSignal<MouseEvent>>;
|
|
6
|
+
export declare function mouseToSinglePointer(options?: SinglePointerEmitterOptions): Operator<DomEventSignal<MouseEvent>, SinglePointerSignal>;
|
|
15
7
|
//# sourceMappingURL=mouse-emitter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mouse-emitter.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/mouse-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"mouse-emitter.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/mouse-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,2BAA2B,EACjC,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAOtE,wBAAgB,kBAAkB,CAChC,OAAO,GAAE,2BAAgC,GACxC,oBAAoB,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAkClD;AAED,wBAAgB,oBAAoB,CAClC,OAAO,GAAE,2BAAgC,GACxC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC,CAuB3D"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export
|
|
2
|
-
export {
|
|
3
|
-
export type { SinglePointer } from './single-pointer.js';
|
|
1
|
+
export { createMouseEmitter, mouseToSinglePointer as singlePointer } from './mouse-emitter.js';
|
|
2
|
+
export type { SinglePointer } from './single-pointer-signal.js';
|
|
4
3
|
//# sourceMappingURL=mouse.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mouse.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/mouse.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"mouse.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/mouse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC/F,YAAY,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -1,19 +1,8 @@
|
|
|
1
|
-
import { Operator, Stream } from '../../
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export
|
|
8
|
-
process(event: PointerEvent): SinglePointer | null;
|
|
9
|
-
readonly isActive: boolean;
|
|
10
|
-
reset(): void;
|
|
11
|
-
dispose(): void;
|
|
12
|
-
}
|
|
13
|
-
export declare function createPointerEmitter(options?: PointerEmitterOptions): PointerEmitter;
|
|
14
|
-
export declare function toSinglePointer(options?: PointerEmitterOptions): Operator<PointerEvent, SinglePointer>;
|
|
15
|
-
export interface SinglePointerOptions extends PointerEmitterOptions {
|
|
16
|
-
listenerOptions?: AddEventListenerOptions;
|
|
17
|
-
}
|
|
18
|
-
export declare function singlePointer(target: EventTarget, options?: SinglePointerOptions): Stream<SinglePointer>;
|
|
1
|
+
import { Operator, Stream } from '../../core/stream.js';
|
|
2
|
+
import { DomEventSignal } from '../dom-event/dom-event-signal.js';
|
|
3
|
+
import { SinglePointerEmitter, SinglePointerEmitterOptions } from './emitter.js';
|
|
4
|
+
import { SinglePointerSignal } from './single-pointer-signal.js';
|
|
5
|
+
export declare function createPointerEmitter(options?: SinglePointerEmitterOptions): SinglePointerEmitter<DomEventSignal<PointerEvent>>;
|
|
6
|
+
export declare function pointerToSinglePointer(options?: SinglePointerEmitterOptions): Operator<DomEventSignal<PointerEvent>, SinglePointerSignal>;
|
|
7
|
+
export declare function singlePointer(target: EventTarget): Stream<SinglePointerSignal>;
|
|
19
8
|
//# sourceMappingURL=pointer-emitter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pointer-emitter.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/pointer-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"pointer-emitter.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/pointer-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEvE,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,2BAA2B,EACjC,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAQtE,wBAAgB,oBAAoB,CAClC,OAAO,GAAE,2BAAgC,GACxC,oBAAoB,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CA2CpD;AAED,wBAAgB,sBAAsB,CACpC,OAAO,GAAE,2BAAgC,GACxC,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,mBAAmB,CAAC,CAyB7D;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAG9E"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export type {
|
|
2
|
-
export {
|
|
3
|
-
export type { SinglePointer } from './single-pointer.js';
|
|
1
|
+
export type { createPointerEmitter, pointerToSinglePointer, singlePointer, } from './pointer-emitter.js';
|
|
2
|
+
export type { SinglePointer } from './single-pointer-signal.js';
|
|
4
3
|
//# sourceMappingURL=pointer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pointer.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/pointer.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,
|
|
1
|
+
{"version":3,"file":"pointer.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/pointer.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,oBAAoB,EACpB,sBAAsB,EACtB,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare const singlePointerPool: import('../../internal/object-pool.js').ObjectPool<
|
|
3
|
-
export declare function releaseSinglePointer(
|
|
1
|
+
import { SinglePointerSignal } from './single-pointer-signal.js';
|
|
2
|
+
export declare const singlePointerPool: import('../../internal/object-pool.js').ObjectPool<SinglePointerSignal>;
|
|
3
|
+
export declare function releaseSinglePointer(signal: SinglePointerSignal): void;
|
|
4
4
|
//# sourceMappingURL=pool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/pool.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,
|
|
1
|
+
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/pool.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,4BAA4B,CAAC;AAEpC,eAAO,MAAM,iBAAiB,yEAO7B,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAEtE"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Signal } from '../../core/signal.js';
|
|
2
|
+
import { SinglePointerButton, SinglePointerPhase, SinglePointerType } from './types.js';
|
|
3
|
+
export interface SinglePointerSignal extends Signal<"single-pointer", SinglePointer> {
|
|
4
|
+
}
|
|
5
|
+
export declare const SINGLE_POINTER_SIGNAL_KIND: "single-pointer";
|
|
6
|
+
/**
|
|
7
|
+
* Normalized pointer data representing a single point of contact.
|
|
8
|
+
* Abstracts away differences between mouse, touch, and pointer events.
|
|
9
|
+
*/
|
|
10
|
+
export interface SinglePointer {
|
|
11
|
+
phase: SinglePointerPhase;
|
|
12
|
+
x: number;
|
|
13
|
+
y: number;
|
|
14
|
+
pageX: number;
|
|
15
|
+
pageY: number;
|
|
16
|
+
pointerType: SinglePointerType;
|
|
17
|
+
button: SinglePointerButton;
|
|
18
|
+
/** 0.0 ~ 1.0, default 0.5 if unsupported */
|
|
19
|
+
pressure: number;
|
|
20
|
+
id: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function createSinglePointerSignal(pointer: SinglePointer): SinglePointerSignal;
|
|
23
|
+
export declare function createDefaultSinglePointerSignal(): SinglePointerSignal;
|
|
24
|
+
export declare function resetSinglePointerSignal(p: SinglePointerSignal): void;
|
|
25
|
+
//# sourceMappingURL=single-pointer-signal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"single-pointer-signal.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/single-pointer-signal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE7F,MAAM,WAAW,mBAAoB,SAAQ,MAAM,CAAC,gBAAgB,EAAE,aAAa,CAAC;CAAG;AAEvF,eAAO,MAAM,0BAA0B,EAAG,gBAAyB,CAAC;AAEpE;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,kBAAkB,CAAC;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,iBAAiB,CAAC;IAC/B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,aAAa,GAAG,mBAAmB,CAErF;AAED,wBAAgB,gCAAgC,IAAI,mBAAmB,CAYtE;AAED,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAUrE"}
|
|
@@ -1,15 +1,7 @@
|
|
|
1
|
-
import { Operator } from '../../
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export interface TouchEmitter {
|
|
8
|
-
process(event: TouchEvent): SinglePointer | null;
|
|
9
|
-
readonly isActive: boolean;
|
|
10
|
-
reset(): void;
|
|
11
|
-
dispose(): void;
|
|
12
|
-
}
|
|
13
|
-
export declare function createTouchEmitter(options?: TouchEmitterOptions): TouchEmitter;
|
|
14
|
-
export declare function singlePointerEmitter(options?: TouchEmitterOptions): Operator<TouchEvent, SinglePointer>;
|
|
1
|
+
import { Operator } from '../../core/stream.js';
|
|
2
|
+
import { DomEventSignal } from '../dom-event/dom-event-signal.js';
|
|
3
|
+
import { SinglePointerEmitter, SinglePointerEmitterOptions } from './emitter.js';
|
|
4
|
+
import { SinglePointerSignal } from './single-pointer-signal.js';
|
|
5
|
+
export declare function createTouchEmitter(options?: SinglePointerEmitterOptions): SinglePointerEmitter<DomEventSignal<TouchEvent>>;
|
|
6
|
+
export declare function touchToSinglePointer(options?: SinglePointerEmitterOptions): Operator<DomEventSignal<TouchEvent>, SinglePointerSignal>;
|
|
15
7
|
//# sourceMappingURL=touch-emitter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"touch-emitter.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/touch-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"touch-emitter.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/touch-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,2BAA2B,EACjC,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGtE,wBAAgB,kBAAkB,CAChC,OAAO,GAAE,2BAAgC,GACxC,oBAAoB,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAkClD;AAED,wBAAgB,oBAAoB,CAClC,OAAO,GAAE,2BAAgC,GACxC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC,CAyB3D"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export type { SinglePointer } from './single-pointer.js';
|
|
2
|
-
export
|
|
3
|
-
export { createTouchEmitter, singlePointerEmitter } from './touch-emitter.js';
|
|
1
|
+
export type { SinglePointer } from './single-pointer-signal.js';
|
|
2
|
+
export { createTouchEmitter, touchToSinglePointer as singlePointer } from './touch-emitter.js';
|
|
4
3
|
//# sourceMappingURL=touch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"touch.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/touch.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"touch.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/touch.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export type
|
|
2
|
-
export type
|
|
3
|
-
export type
|
|
4
|
-
export declare function
|
|
1
|
+
export type SinglePointerType = "touch" | "mouse" | "pen" | "unknown";
|
|
2
|
+
export type SinglePointerPhase = "unknown" | "start" | "move" | "end" | "cancel";
|
|
3
|
+
export type SinglePointerButton = "none" | "primary" | "secondary" | "auxiliary" | "back" | "forward";
|
|
4
|
+
export declare function toSinglePointerButton(button: number): SinglePointerButton;
|
|
5
5
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/browser/single-pointer/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;AAEtE,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEjF,MAAM,MAAM,mBAAmB,GAC3B,MAAM,GACN,SAAS,GACT,WAAW,GACX,WAAW,GACX,MAAM,GACN,SAAS,CAAC;AAEd,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAiBzE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,YAAY,EACZ,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,MAAM,EACX,KAAK,WAAW,GACjB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/core/meta.ts"],"names":[],"mappings":"AAEA,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAEjD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface Signal<K extends string = string, V = unknown> {
|
|
2
|
+
kind: K;
|
|
3
|
+
value: V;
|
|
4
|
+
deviceId: string;
|
|
5
|
+
createdAt: number;
|
|
6
|
+
updatedAt?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function createSignal<K extends string = string, V = unknown>(kind: K, value: V): Signal<K, V>;
|
|
9
|
+
//# sourceMappingURL=signal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../src/core/signal.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,MAAM,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,OAAO;IAC5D,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,EAAE,CAAC,CAAC;IACT,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,OAAO,EACjE,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,CAAC,GACP,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAOd"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { Signal } from './signal.js';
|
|
1
2
|
export type Unsubscribe = () => void;
|
|
2
|
-
export interface Observer<T> {
|
|
3
|
+
export interface Observer<T extends Signal> {
|
|
3
4
|
next(value: T): void;
|
|
4
5
|
error?(err: unknown): void;
|
|
5
6
|
complete?(): void;
|
|
@@ -9,7 +10,7 @@ export interface Observer<T> {
|
|
|
9
10
|
* All streams are blockable - when blocked, events are silently dropped.
|
|
10
11
|
* By default, streams support a single observer. Use share() for multicast.
|
|
11
12
|
*/
|
|
12
|
-
export interface Stream<T> {
|
|
13
|
+
export interface Stream<T extends Signal> {
|
|
13
14
|
subscribe(observer: Observer<T> | ((value: T) => void)): Unsubscribe;
|
|
14
15
|
/** Block event propagation. Events are dropped, not queued. */
|
|
15
16
|
block(): void;
|
|
@@ -18,11 +19,11 @@ export interface Stream<T> {
|
|
|
18
19
|
/** Returns true if the stream is currently blocked. */
|
|
19
20
|
readonly isBlocked: boolean;
|
|
20
21
|
}
|
|
21
|
-
export type Operator<T, R> = (source: Stream<T>) => Stream<R>;
|
|
22
|
-
export declare function toObserver<T>(observerOrNext: Observer<T> | ((value: T) => void)): Observer<T>;
|
|
22
|
+
export type Operator<T extends Signal, R extends Signal> = (source: Stream<T>) => Stream<R>;
|
|
23
|
+
export declare function toObserver<T extends Signal>(observerOrNext: Observer<T> | ((value: T) => void)): Observer<T>;
|
|
23
24
|
/**
|
|
24
25
|
* Creates a Stream from a subscribe function.
|
|
25
26
|
* The stream can be blocked/unblocked to control event flow.
|
|
26
27
|
*/
|
|
27
|
-
export declare function createStream<T>(subscribeFn: (observer: Observer<T>) => Unsubscribe | void): Stream<T>;
|
|
28
|
+
export declare function createStream<T extends Signal>(subscribeFn: (observer: Observer<T>) => Unsubscribe | void): Stream<T>;
|
|
28
29
|
//# sourceMappingURL=stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/core/stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAErC,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,MAAM;IACxC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,IAAI,IAAI,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,MAAM,CAAC,CAAC,SAAS,MAAM;IACtC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,WAAW,CAAC;IAErE,+DAA+D;IAC/D,KAAK,IAAI,IAAI,CAAC;IAEd,uDAAuD;IACvD,OAAO,IAAI,IAAI,CAAC;IAEhB,uDAAuD;IACvD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC;AAE5F,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EACzC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,GACjD,QAAQ,CAAC,CAAC,CAAC,CAKb;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAC3C,WAAW,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,WAAW,GAAG,IAAI,GACzD,MAAM,CAAC,CAAC,CAAC,CAiCX"}
|
|
@@ -0,0 +1,2 @@
|
|
|
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.createSinglePointerEmitter=h;exports.setCerebDeviceId=v;
|
|
2
|
+
//# sourceMappingURL=emitter-CyT5OiQO.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emitter-CyT5OiQO.cjs","sources":["../src/core/meta.ts","../src/core/signal.ts","../src/internal/object-pool.ts","../src/browser/single-pointer/single-pointer-signal.ts","../src/browser/single-pointer/pool.ts","../src/browser/single-pointer/emitter.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 { getCerebDeviceId } from \"./meta.js\";\n\nexport interface Signal<K extends string = string, V = unknown> {\n kind: K;\n value: V;\n deviceId: string;\n createdAt: number;\n updatedAt?: number;\n}\n\nexport function createSignal<K extends string = string, V = unknown>(\n kind: K,\n value: V,\n): Signal<K, V> {\n return {\n kind,\n value,\n deviceId: getCerebDeviceId(),\n createdAt: performance.now(),\n };\n}\n","export interface ObjectPool<T> {\n acquire(): T;\n release(item: T): void;\n readonly size: number;\n}\n\nexport interface ObjectPoolOptions {\n initialSize?: number;\n maxSize?: number;\n}\n\n/**\n * Generic object pool for reusing objects and reducing GC pressure.\n * Useful for high-frequency scenarios like pointer/touch events.\n */\nexport function createObjectPool<T>(\n create: () => T,\n reset: (item: T) => void,\n options: ObjectPoolOptions = {},\n): ObjectPool<T> {\n const { initialSize = 0, maxSize = 100 } = options;\n const pool: T[] = [];\n\n for (let i = 0; i < initialSize; i++) {\n pool.push(create());\n }\n\n return {\n get size() {\n return pool.length;\n },\n\n acquire(): T {\n if (pool.length > 0) {\n return pool.pop()!;\n }\n return create();\n },\n\n release(item: T): void {\n if (pool.length < maxSize) {\n reset(item);\n pool.push(item);\n }\n },\n };\n}\n","import { createSignal, type Signal } from \"../../core/signal.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 resetSinglePointerSignal(p: SinglePointerSignal): void {\n p.value.phase = \"move\";\n p.value.x = 0;\n p.value.y = 0;\n p.value.pageX = 0;\n p.value.pageY = 0;\n p.value.pointerType = \"unknown\";\n p.value.button = \"none\";\n p.value.pressure = 0.5;\n p.updatedAt = performance.now();\n}\n","import { createObjectPool } from \"../../internal/object-pool.js\";\nimport {\n createDefaultSinglePointerSignal,\n resetSinglePointerSignal,\n type SinglePointerSignal,\n} from \"./single-pointer-signal.js\";\n\nexport const singlePointerPool = createObjectPool<SinglePointerSignal>(\n createDefaultSinglePointerSignal,\n resetSinglePointerSignal,\n {\n initialSize: 20,\n maxSize: 100,\n },\n);\n\nexport function releaseSinglePointer(signal: SinglePointerSignal): void {\n singlePointerPool.release(signal);\n}\n","import type { Signal } from \"../../core/signal.js\";\nimport { singlePointerPool } from \"./pool.js\";\nimport { createSinglePointerSignal, type SinglePointerSignal } from \"./single-pointer-signal.js\";\n\nexport interface SinglePointerEmitter<InputSignal extends Signal> {\n process(event: InputSignal): SinglePointerSignal;\n readonly isActive: boolean;\n reset(): void;\n dispose(): void;\n}\n\nexport interface SinglePointerEmitterOptions {\n pooling?: boolean;\n}\n\nexport function createSinglePointerEmitter<InputSignal extends Signal>(\n processor: (inputSignal: InputSignal, pointerSignal: SinglePointerSignal) => void,\n options: SinglePointerEmitterOptions = {},\n): SinglePointerEmitter<InputSignal> {\n const { pooling = false } = options;\n let current: SinglePointerSignal | null = null;\n\n function acquireSignal(): SinglePointerSignal {\n if (pooling) {\n return singlePointerPool.acquire();\n }\n return createSinglePointerSignal({\n id: \"\",\n phase: \"move\",\n x: 0,\n y: 0,\n pageX: 0,\n pageY: 0,\n pointerType: \"mouse\",\n button: \"none\",\n pressure: 0.5,\n });\n }\n\n function releaseCurrentPointer(): void {\n if (current && pooling) {\n singlePointerPool.release(current);\n }\n current = null;\n }\n\n return {\n process: (inputSignal) => {\n const signal = acquireSignal();\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","createSignal","kind","value","createObjectPool","create","reset","options","initialSize","maxSize","pool","i","item","SINGLE_POINTER_SIGNAL_KIND","createSinglePointerSignal","pointer","createDefaultSinglePointerSignal","resetSinglePointerSignal","p","singlePointerPool","createSinglePointerEmitter","processor","pooling","current","acquireSignal","releaseCurrentPointer","inputSignal","signal"],"mappings":"aAAA,IAAIA,EAAmB,GAEhB,SAASC,GAA2B,CACzC,OAAOD,CACT,CAEO,SAASE,EAAiBC,EAAkB,CACjDH,EAAWG,CACb,CCEO,SAASC,EACdC,EACAC,EACc,CACd,MAAO,CACL,KAAAD,EACA,MAAAC,EACA,SAAUL,EAAA,EACV,UAAW,YAAY,IAAA,CAAI,CAE/B,CCLO,SAASM,EACdC,EACAC,EACAC,EAA6B,CAAA,EACd,CACf,KAAM,CAAE,YAAAC,EAAc,EAAG,QAAAC,EAAU,KAAQF,EACrCG,EAAY,CAAA,EAElB,QAASC,EAAI,EAAGA,EAAIH,EAAaG,IAC/BD,EAAK,KAAKL,GAAQ,EAGpB,MAAO,CACL,IAAI,MAAO,CACT,OAAOK,EAAK,MACd,EAEA,SAAa,CACX,OAAIA,EAAK,OAAS,EACTA,EAAK,IAAA,EAEPL,EAAA,CACT,EAEA,QAAQO,EAAe,CACjBF,EAAK,OAASD,IAChBH,EAAMM,CAAI,EACVF,EAAK,KAAKE,CAAI,EAElB,CAAA,CAEJ,CCzCO,MAAMC,EAA6B,iBAmBnC,SAASC,EAA0BC,EAA6C,CACrF,OAAOd,EAAaY,EAA4BE,CAAO,CACzD,CAEO,SAASC,GAAwD,CACtE,OAAOF,EAA0B,CAC/B,GAAI,GACJ,MAAO,OACP,EAAG,EACH,EAAG,EACH,MAAO,EACP,MAAO,EACP,YAAa,UACb,OAAQ,OACR,SAAU,EAAA,CACX,CACH,CAEO,SAASG,EAAyBC,EAA8B,CACrEA,EAAE,MAAM,MAAQ,OAChBA,EAAE,MAAM,EAAI,EACZA,EAAE,MAAM,EAAI,EACZA,EAAE,MAAM,MAAQ,EAChBA,EAAE,MAAM,MAAQ,EAChBA,EAAE,MAAM,YAAc,UACtBA,EAAE,MAAM,OAAS,OACjBA,EAAE,MAAM,SAAW,GACnBA,EAAE,UAAY,YAAY,IAAA,CAC5B,CC7CO,MAAMC,EAAoBf,EAC/BY,EACAC,EACA,CACE,YAAa,GACb,QAAS,GAAA,CAEb,ECCO,SAASG,EACdC,EACAd,EAAuC,GACJ,CACnC,KAAM,CAAE,QAAAe,EAAU,EAAA,EAAUf,EAC5B,IAAIgB,EAAsC,KAE1C,SAASC,GAAqC,CAC5C,OAAIF,EACKH,EAAkB,QAAA,EAEpBL,EAA0B,CAC/B,GAAI,GACJ,MAAO,OACP,EAAG,EACH,EAAG,EACH,MAAO,EACP,MAAO,EACP,YAAa,QACb,OAAQ,OACR,SAAU,EAAA,CACX,CACH,CAEA,SAASW,GAA8B,CACjCF,GAAWD,GACbH,EAAkB,QAAQI,CAAO,EAEnCA,EAAU,IACZ,CAEA,MAAO,CACL,QAAUG,GAAgB,CACxB,MAAMC,EAASH,EAAA,EACf,OAAAH,EAAUK,EAAaC,CAAM,EAC7BF,EAAA,EACAF,EAAUI,EACHA,CACT,EACA,IAAI,UAAoB,CACtB,OAAOJ,IAAY,IACrB,EACA,OAAc,CACZE,EAAA,CACF,EACA,SAAgB,CACd,KAAK,MAAA,CACP,CAAA,CAEJ"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
let s = "";
|
|
2
|
+
function g() {
|
|
3
|
+
return s;
|
|
4
|
+
}
|
|
5
|
+
function h(e) {
|
|
6
|
+
s = e;
|
|
7
|
+
}
|
|
8
|
+
function p(e, i) {
|
|
9
|
+
return {
|
|
10
|
+
kind: e,
|
|
11
|
+
value: i,
|
|
12
|
+
deviceId: g(),
|
|
13
|
+
createdAt: performance.now()
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function f(e, i, o = {}) {
|
|
17
|
+
const { initialSize: t = 0, maxSize: u = 100 } = o, n = [];
|
|
18
|
+
for (let r = 0; r < t; r++)
|
|
19
|
+
n.push(e());
|
|
20
|
+
return {
|
|
21
|
+
get size() {
|
|
22
|
+
return n.length;
|
|
23
|
+
},
|
|
24
|
+
acquire() {
|
|
25
|
+
return n.length > 0 ? n.pop() : e();
|
|
26
|
+
},
|
|
27
|
+
release(r) {
|
|
28
|
+
n.length < u && (i(r), n.push(r));
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const v = "single-pointer";
|
|
33
|
+
function c(e) {
|
|
34
|
+
return p(v, e);
|
|
35
|
+
}
|
|
36
|
+
function S() {
|
|
37
|
+
return c({
|
|
38
|
+
id: "",
|
|
39
|
+
phase: "move",
|
|
40
|
+
x: 0,
|
|
41
|
+
y: 0,
|
|
42
|
+
pageX: 0,
|
|
43
|
+
pageY: 0,
|
|
44
|
+
pointerType: "unknown",
|
|
45
|
+
button: "none",
|
|
46
|
+
pressure: 0.5
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
function d(e) {
|
|
50
|
+
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 = 0.5, e.updatedAt = performance.now();
|
|
51
|
+
}
|
|
52
|
+
const l = f(
|
|
53
|
+
S,
|
|
54
|
+
d,
|
|
55
|
+
{
|
|
56
|
+
initialSize: 20,
|
|
57
|
+
maxSize: 100
|
|
58
|
+
}
|
|
59
|
+
);
|
|
60
|
+
function P(e, i = {}) {
|
|
61
|
+
const { pooling: o = !1 } = i;
|
|
62
|
+
let t = null;
|
|
63
|
+
function u() {
|
|
64
|
+
return o ? l.acquire() : c({
|
|
65
|
+
id: "",
|
|
66
|
+
phase: "move",
|
|
67
|
+
x: 0,
|
|
68
|
+
y: 0,
|
|
69
|
+
pageX: 0,
|
|
70
|
+
pageY: 0,
|
|
71
|
+
pointerType: "mouse",
|
|
72
|
+
button: "none",
|
|
73
|
+
pressure: 0.5
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
function n() {
|
|
77
|
+
t && o && l.release(t), t = null;
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
process: (r) => {
|
|
81
|
+
const a = u();
|
|
82
|
+
return e(r, a), n(), t = a, a;
|
|
83
|
+
},
|
|
84
|
+
get isActive() {
|
|
85
|
+
return t !== null;
|
|
86
|
+
},
|
|
87
|
+
reset() {
|
|
88
|
+
n();
|
|
89
|
+
},
|
|
90
|
+
dispose() {
|
|
91
|
+
this.reset();
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
export {
|
|
96
|
+
p as a,
|
|
97
|
+
f as b,
|
|
98
|
+
P as c,
|
|
99
|
+
h as s
|
|
100
|
+
};
|
|
101
|
+
//# sourceMappingURL=emitter-FFAuyJ19.js.map
|