import { fromEvent, interval } from 'rxjs';
import { mergeScan, take, takeUntil, map, scan } from 'rxjs/operators';
const durationElem = document.getElementById('duration');
const mouseDown$ = fromEvent(document, 'mousedown');
const mouseUp$ = fromEvent(document, 'mouseup');
// accumulate time mouse held down over time
mergeScan((acc, curr) => {
return interval(1000).pipe(
map((val: any) => val + acc),
// output: 1s...2s...3s...4s...
.subscribe(val => (durationElem.innerHTML = `${val}s`));