@tomorrowevening/hermes
Version:
An extendable set of Web Tools controlled via a separate window for non-intereference with content.
2 lines (1 loc) • 1.4 kB
JavaScript
;const f=require("react");function x(e){const[E,a]=f.useState(e.defaultValue);return f.useEffect(()=>{let i=!1,l=-1,s=0,t=e.defaultValue,r=!1;const o=n=>{r=n.ctrlKey},v=n=>{i=!0,s=Number(e.input.current?.value),l=n.clientX,document.addEventListener("mouseup",u,!1),document.addEventListener("mousemove",m,!1),document.addEventListener("contextmenu",u,!1)},m=n=>{if(!i)return;const d=e.step!==void 0?e.step:1,L=(n.clientX-l)*d*(r?10:1);t=Number((s+L).toFixed(4)),e.min!==void 0&&(t=Math.max(t,e.min)),e.max!==void 0&&(t=Math.min(t,e.max)),e.onChange!==void 0&&e.onChange(t),a(t)},u=()=>{i=!1,document.removeEventListener("mouseup",u),document.removeEventListener("mousemove",m),document.removeEventListener("contextmenu",u)},c=n=>{const d=Number(n.target.value);e.onChange!==void 0&&e.onChange(d),a(d)};return e.label.current?.addEventListener("mousedown",v,!1),e.sliderRef!==void 0&&e.sliderRef.current?.addEventListener("input",c),document.addEventListener("keydown",o,!1),document.addEventListener("keyup",o,!1),()=>{e.label.current?.removeEventListener("mousedown",v),e.sliderRef!==void 0&&e.sliderRef.current?.removeEventListener("input",c),document.removeEventListener("mouseup",u),document.removeEventListener("mousemove",m),document.removeEventListener("contextmenu",u),document.removeEventListener("keydown",o),document.addEventListener("keyup",o,!1)}},[]),E}module.exports=x;