e', onMouseDragged, false); }; let onMouseDown = (e: React.MouseEvent) => { const target = e.currentTarget; // If we're already handling dragging on a descendant with useDrag1D, then // we don't want to handle the drag motion on this target as well. if (draggingElements.some(elt => target.contains(elt))) { return; } draggingElements.push(target); window.addEventListener('mousemove', onMouseDragged, false); window.addEventListener('mouseup', onMouseUp, false); }; let onMouseEnter = () => { if (onHover) { onHover(true); } }; let onMouseOut = () => { if (onHover) { onHover(false); } }; let onKeyDown = (e) => { switch (e.key) { case 'Left': case 'ArrowLeft': if (orientation === 'horizontal') { e.preventDefault(); if (onDecrement && !reverse) { onDecrement(); } else if (onIncrement && reverse) { onIncrement(); } } break; case 'Up': case 'ArrowUp': if (orientation === 'vertical') { e.preventDefault(); if (onDecrement && !reverse) { onDecrement(); } else if (onIncrement && reverse) { onIncrement(); } } break; case 'Right': case 'ArrowRight': if (orientation === 'horizontal') { e.preventDefault(); if (onIncrement && !reverse) { onIncrement(); } else if (onDecrement && reverse) { onDecrement(); } } break; case 'Down': case 'ArrowDown': if (orientation === 'vertical') { e.preventDefault(); if (onIncrement && !reverse) { onIncrement(); } else if (onDecrement && reverse) { onDecrement(); } } break; case 'Home': e.preventDefault(); if (onDecrementToMin) { onDecrementToMin(); } break; case 'End': e.preventDefault(); if (onIncrementToMax) { onIncrementToMax(); } break; case 'Enter': e.preventDefault(); if (onCollapseToggle) { onCollapseToggle(); } break; } }; return {onMouseDown, onMouseEnter, onMouseOut, onKeyDown}; }