merge

Combines multiple streams into one, emitting signals from all sources.

Functions

merge

Combines multiple streams into a single stream.

function merge<T extends Signal>(...sources: Stream<T>[]): Stream<T>

mergeWith

Operator version that merges another stream with the source.

function mergeWith<T extends Signal, R extends Signal>(
other: Stream<R>
): Operator<T, T | R>

Examples

Merge Multiple Streams

import { keyboard, wheel } from "cereb";
import { merge } from "cereb/operators";
const keyboard$ = keyboard(window, { code: ["Equal", "Minus"] });
const wheel$ = wheel(element);
merge(keyboard$, wheel$).on((signal) => {
// Receives signals from both sources
});

mergeWith Operator

import { pinch } from "@cereb/pinch";
import { mergeWith, extend } from "cereb/operators";
pinch(element)
.pipe(
mergeWith(
wheel(element).pipe(
extend((s) => ({ ratio: Math.exp(-s.value.deltaY * 0.005) }))
)
)
)
.on(handleZoom);

Use Cases

Multiple Zoom Inputs

const pinchZoom$ = pinch(element).pipe(zoom());
const wheelZoom$ = wheel(element)
.pipe(extend((s) => ({ ratio: Math.exp(-s.value.deltaY * 0.005) })))
.pipe(zoom());
const keyboardZoom$ = keydown(window, { code: ["Equal", "Minus"] })
.pipe(extend((s) => ({ ratio: s.value.code === "Equal" ? 1.2 : 0.8 })))
.pipe(zoom());
merge(pinchZoom$, wheelZoom$, keyboardZoom$).on(applyScale);