1export function forwardWheelToTimeline(event: WheelEvent, timeline: HTMLElement): void {
2 if (event.defaultPrevented || event.ctrlKey || event.deltaY === 0) return;
3 event.preventDefault();
4
5 const forwarded = new WheelEvent("wheel", {
6 bubbles: true,
7 cancelable: true,
8 deltaX: event.deltaX,
9 deltaY: event.deltaY,
10 deltaZ: event.deltaZ,
11 deltaMode: event.deltaMode,
12 clientX: event.clientX,
13 clientY: event.clientY,
14 screenX: event.screenX,
15 screenY: event.screenY,
16 altKey: event.altKey,
17 metaKey: event.metaKey,
18 shiftKey: event.shiftKey,
19 });
20 if (!timeline.dispatchEvent(forwarded)) return;
21
22 const pixelsPerUnit =
23 event.deltaMode === WheelEvent.DOM_DELTA_LINE
24 ? 16
25 : event.deltaMode === WheelEvent.DOM_DELTA_PAGE
26 ? timeline.clientHeight
27 : 1;
28 timeline.scrollBy({ top: event.deltaY * pixelsPerUnit });
29}