@progress/kendo-react-common
Version:
React Common package delivers common utilities that can be used with the KendoReact UI components. KendoReact Common Utilities package
10 lines (9 loc) • 6.63 kB
JavaScript
/**
* @license
*-------------------------------------------------------------------------------------------
* Copyright © 2025 Progress Software Corporation. All rights reserved.
* Licensed under commercial license. See LICENSE.md in the package root for more information
*-------------------------------------------------------------------------------------------
*/
"use client";
;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Te=require("react"),w=require("@progress/kendo-draggable-common"),i=require("../noop.js"),ve=require("./useInheritedState.js"),je=require("../drag-n-drop/context/index.js"),qe=require("./use-isomorphic-layout-effect.js");function Ae(o){const m=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(o){for(const d in o)if(d!=="default"){const h=Object.getOwnPropertyDescriptor(o,d);Object.defineProperty(m,d,h.get?h:{enumerable:!0,get:()=>o[d]})}}return m.default=o,Object.freeze(m)}const t=Ae(Te),_e=2e3;function Ue(o,m,d={}){const{onPress:h=i.noop,onRelease:Y=i.noop,onDragStart:Z=i.noop,onDrag:$=i.noop,onDragEnd:ee=i.noop}=m,{hint:a=null,mouseOnly:P=!1,autoScroll:s=!0,scrollContainer:u=null,context:Ce=je.DragAndDropContext}=d,[f,be]=t.useState(!1),[E,Ee]=t.useState(!1),{drop:ke,setDrop:ye,drag:Se,setDrag:De,drops:k,drags:y,registerDrag:S,deregisterDrag:D}=t.useContext(Ce),[x]=ve.useInheritedState([ke,ye]),[I,O]=ve.useInheritedState([Se,De]),p=t.useRef({x:0,y:0}),M=t.useRef(void 0),L=t.useRef(!1),te=t.useRef(void 0),v=t.useRef(null),T=t.useRef(!1),j=t.useRef({x:0,y:0}),q=t.useRef({x:0,y:0}),C=t.useRef({x:0,y:0}),A=t.useRef({x:0,y:0}),_=t.useRef({x:0,y:0}),U=t.useRef({x:0,y:0}),Oe=!!(typeof window!="undefined"&&window.PointerEvent),ne=!P&&Oe,l=t.useCallback(()=>o.current&&o.current.element?o.current.element:o.current,[o]),Le=t.useCallback(()=>a&&a.current&&a.current.element?a.current.element:a?a.current:null,[a]),re=t.useCallback(()=>u&&u.current&&u.current.element?u.current.element:u?u.current:null,[u]),oe=t.useCallback(()=>typeof s=="object"&&s.boundaryElementRef&&s.boundaryElementRef.current&&s.boundaryElementRef.current.element?s.boundaryElementRef.current.element:typeof s=="object"&&s.boundaryElementRef&&s.boundaryElementRef.current?s.boundaryElementRef.current:null,[s]),b=t.useRef(null);t.useImperativeHandle(b,()=>({get element(){return l()},get hint(){return Le()},onPress:Re,onDragStart:Pe,onDrag:xe,onDragEnd:Ie,onRelease:we,data:o.current}));const R=t.useCallback(()=>{const e=l();return e&&e.ownerDocument||document},[l]),g=t.useCallback(()=>{const e=R();return e&&e.defaultView||window},[R]),se=t.useCallback(()=>({get drag(){return I?I.current:null},get drop(){return x?x.current:null},get drags(){return(y!=null?y:[]).map(e=>e.current)},get drops(){return(k!=null?k:[]).map(e=>e.current)},pressed:!!f,ignoreMouse:L.current,scrollOffset:_.current,offset:j.current,pageOffset:q.current,initialScrollOffset:U.current,clientOffset:C.current,initialClientOffset:A.current,velocity:p.current,autoScroll:!!(typeof s=="object"?s.enabled!==!1:s),scrollableParent:oe(),autoScrollDirection:typeof s=="object"?s.direction:{horizontal:!0,vertical:!0},isScrolling:E}),[I,x,y,k,f,L,_,j,q,U,C,A,p,s,E,oe]),ce=t.useCallback(e=>{be(e)},[]),le=t.useCallback(e=>{Ee(e)},[]),ae=t.useCallback(e=>{p.current=e},[]),ue=t.useCallback(e=>{j.current=e},[]),ie=t.useCallback(e=>{C.current=e},[]),de=t.useCallback(e=>{q.current=e},[]),fe=t.useCallback(e=>{A.current=e},[]),ge=t.useCallback(e=>{_.current=e},[]),me=t.useCallback(e=>{U.current=e},[]),Re=t.useCallback(e=>{h(e)},[h]),we=t.useCallback(e=>{Y(e)},[Y]),Pe=t.useCallback(e=>{O(b,{target:o.current,event:e}),Z(e)},[O,o,Z]),xe=t.useCallback(e=>{$(e)},[$]),Ie=t.useCallback(e=>{T.current||(O(null,{target:o.current,event:e}),ee(e))},[ee,O,o]),n=t.useCallback(e=>{w.dispatchDragAndDrop(se(),{event:e,payload:b.current},{onVelocityChange:ae,onOffsetChange:ue,onClientOffsetChange:ie,onPageOffsetChange:de,onInitialClientOffsetChange:fe,onScrollOffsetChange:ge,onInitialScrollOffsetChange:me,onIsPressedChange:ce,onIsScrollingChange:le})},[se,ae,ue,de,ie,fe,me,ce,ge,le]),B=t.useCallback(e=>{n(e)},[n]),V=t.useCallback(e=>{n(e)},[n]),z=t.useCallback(e=>{n(e)},[n]),H=t.useCallback(e=>{n(e)},[n]),N=t.useCallback(e=>{n(e)},[n]),W=t.useCallback(e=>{n(e)},[n]),F=t.useCallback(e=>{n(e)},[n]),G=t.useCallback(e=>{e.preventDefault(),n(e)},[n]),J=t.useCallback(e=>{e.preventDefault(),n(e)},[n]),K=t.useCallback(e=>{e.preventDefault(),n(e)},[n]),Q=t.useCallback(e=>{if(e.touches.length===0&&e.changedTouches.length===1){const r=g();L.current=!0,te.current=r.setTimeout(()=>{L.current=!1},_e)}n(e)},[n,g]),X=t.useCallback(e=>{n(e)},[n]),he=t.useCallback(()=>{const e=l();if(e){const r=e.style.touchAction;return e.style.touchAction="none",()=>{e.style.touchAction=r}}},[l]),pe=t.useCallback(()=>(S==null||S(b),()=>{D==null||D(b)}),[D,S]),Me=()=>{const e=g(),r=l(),c=R();return ne?(r&&(v.current=w.getScrollableParent(r),v.current&&v.current.addEventListener("scroll",X,{passive:!0}),r.addEventListener("pointerdown",B,{passive:!0})),f&&(c.addEventListener("pointermove",V),c.addEventListener("pointerup",H,!0),c.addEventListener("contextmenu",G),c.addEventListener("pointercancel",z,{passive:!0}))):(e.addEventListener("touchmove",i.noop,{capture:!1,passive:!1}),r&&(r.addEventListener("mousedown",N,{passive:!0}),P||(r.addEventListener("touchstart",J,{passive:!0}),f&&(r.addEventListener("touchmove",K,{passive:!0}),r.addEventListener("touchend",Q,{passive:!0})))),f&&(c.addEventListener("mousemove",W,{passive:!0}),c.addEventListener("mouseup",F,{passive:!0}))),()=>{v.current&&v.current.removeEventListener("scroll",X),r&&(r.removeEventListener("pointerdown",B),r.removeEventListener("mousedown",N),r.removeEventListener("touchstart",J),r.removeEventListener("touchmove",K),r.removeEventListener("touchend",Q)),c.removeEventListener("pointermove",V),c.removeEventListener("pointerup",H,!0),c.removeEventListener("contextmenu",G),c.removeEventListener("pointercancel",z),c.removeEventListener("mousemove",W),c.removeEventListener("mouseup",F),e.removeEventListener("touchmove",i.noop),e.clearTimeout(te.current)}};t.useEffect(()=>{const e=g();if(E){const r=re()||w.getScrollableParent(document.elementFromPoint(C.current.x,C.current.y));e.clearInterval(M.current),M.current=e.setInterval(()=>{w.autoScroll(r,{x:p.current.x,y:p.current.y})},50)}return()=>{e.clearInterval(M.current)}},[l,re,g,E]),t.useEffect(he,[he]),t.useEffect(Me,[f,g,l,R,P,ne,G,N,W,F,z,B,V,H,Q,K,J,X]),t.useEffect(()=>(T.current=!1,()=>{T.current=!0}),[]),qe.useIsomorphicLayoutEffect(pe,[pe])}exports.useDraggable=Ue;