{"ast":null,"code":"import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport { disableTextSelection, restoreTextSelection } from \"./textSelection\";\nimport { useMemo, useRef } from 'react';\nimport { useGlobalListeners } from '@react-aria/utils';\nexport function useMove(props) {\n  var onMoveStart = props.onMoveStart,\n      onMove = props.onMove,\n      onMoveEnd = props.onMoveEnd;\n  var state = useRef({\n    didMove: false,\n    lastPosition: null,\n    id: null\n  });\n\n  var _useGlobalListeners = useGlobalListeners(),\n      addGlobalListener = _useGlobalListeners.addGlobalListener,\n      removeGlobalListener = _useGlobalListeners.removeGlobalListener;\n\n  var moveProps = useMemo(function () {\n    var moveProps = {};\n\n    var start = function start() {\n      disableTextSelection();\n      state.current.didMove = false;\n    };\n\n    var move = function move(pointerType, deltaX, deltaY) {\n      if (deltaX === 0 && deltaY === 0) {\n        return;\n      }\n\n      if (!state.current.didMove) {\n        state.current.didMove = true;\n        onMoveStart === null || onMoveStart === void 0 ? void 0 : onMoveStart({\n          type: 'movestart',\n          pointerType: pointerType\n        });\n      }\n\n      onMove({\n        type: 'move',\n        pointerType: pointerType,\n        deltaX: deltaX,\n        deltaY: deltaY\n      });\n    };\n\n    var end = function end(pointerType) {\n      restoreTextSelection();\n\n      if (state.current.didMove) {\n        onMoveEnd === null || onMoveEnd === void 0 ? void 0 : onMoveEnd({\n          type: 'moveend',\n          pointerType: pointerType\n        });\n      }\n    };\n\n    if (typeof PointerEvent !== 'undefined') {\n      var onMouseMove = function onMouseMove(e) {\n        if (e.button === 0) {\n          move('mouse', e.pageX - state.current.lastPosition.pageX, e.pageY - state.current.lastPosition.pageY);\n          state.current.lastPosition = {\n            pageX: e.pageX,\n            pageY: e.pageY\n          };\n        }\n      };\n\n      var onMouseUp = function onMouseUp(e) {\n        if (e.button === 0) {\n          end('mouse');\n          removeGlobalListener(window, 'mousemove', onMouseMove, false);\n          removeGlobalListener(window, 'mouseup', onMouseUp, false);\n        }\n      };\n\n      moveProps.onMouseDown = function (e) {\n        if (e.button === 0) {\n          start();\n          e.stopPropagation();\n          e.preventDefault();\n          state.current.lastPosition = {\n            pageX: e.pageX,\n            pageY: e.pageY\n          };\n          addGlobalListener(window, 'mousemove', onMouseMove, false);\n          addGlobalListener(window, 'mouseup', onMouseUp, false);\n        }\n      };\n\n      var onTouchMove = function onTouchMove(e) {\n        var touch = _toConsumableArray(e.changedTouches).findIndex(function (_ref) {\n          var identifier = _ref.identifier;\n          return identifier === state.current.id;\n        });\n\n        if (touch >= 0) {\n          var _e$changedTouches$tou = e.changedTouches[touch],\n              pageX = _e$changedTouches$tou.pageX,\n              pageY = _e$changedTouches$tou.pageY;\n          move('touch', pageX - state.current.lastPosition.pageX, pageY - state.current.lastPosition.pageY);\n          state.current.lastPosition = {\n            pageX: pageX,\n            pageY: pageY\n          };\n        }\n      };\n\n      var onTouchEnd = function onTouchEnd(e) {\n        var touch = _toConsumableArray(e.changedTouches).findIndex(function (_ref2) {\n          var identifier = _ref2.identifier;\n          return identifier === state.current.id;\n        });\n\n        if (touch >= 0) {\n          end('touch');\n          state.current.id = null;\n          removeGlobalListener(window, 'touchmove', onTouchMove);\n          removeGlobalListener(window, 'touchend', onTouchEnd);\n          removeGlobalListener(window, 'touchcancel', onTouchEnd);\n        }\n      };\n\n      moveProps.onTouchStart = function (e) {\n        if (e.changedTouches.length === 0 || state.current.id != null) {\n          return;\n        }\n\n        var _e$changedTouches$ = e.changedTouches[0],\n            pageX = _e$changedTouches$.pageX,\n            pageY = _e$changedTouches$.pageY,\n            identifier = _e$changedTouches$.identifier;\n        start();\n        e.stopPropagation();\n        e.preventDefault();\n        state.current.lastPosition = {\n          pageX: pageX,\n          pageY: pageY\n        };\n        state.current.id = identifier;\n        addGlobalListener(window, 'touchmove', onTouchMove, false);\n        addGlobalListener(window, 'touchend', onTouchEnd, false);\n        addGlobalListener(window, 'touchcancel', onTouchEnd, false);\n      };\n    }\n\n    var triggerKeyboardMove = function triggerKeyboardMove(deltaX, deltaY) {\n      start();\n      move('keyboard', deltaX, deltaY);\n      end('keyboard');\n    };\n\n    moveProps.onKeyDown = function (e) {\n      switch (e.key) {\n        case 'Left':\n        case 'ArrowLeft':\n          e.preventDefault();\n          e.stopPropagation();\n          triggerKeyboardMove(-1, 0);\n          break;\n\n        case 'Right':\n        case 'ArrowRight':\n          e.preventDefault();\n          e.stopPropagation();\n          triggerKeyboardMove(1, 0);\n          break;\n\n        case 'Up':\n        case 'ArrowUp':\n          e.preventDefault();\n          e.stopPropagation();\n          triggerKeyboardMove(0, -1);\n          break;\n\n        case 'Down':\n        case 'ArrowDown':\n          e.preventDefault();\n          e.stopPropagation();\n          triggerKeyboardMove(0, 1);\n          break;\n      }\n    };\n\n    return moveProps;\n  }, [state, onMoveStart, onMove, onMoveEnd, addGlobalListener, removeGlobalListener]);\n  return {\n    moveProps: moveProps\n  };\n}","map":{"version":3,"sources":["useMove.web.ts"],"names":["onMoveEnd","state","useRef","didMove","lastPosition","id","removeGlobalListener","useGlobalListeners","moveProps","useMemo","start","disableTextSelection","move","deltaX","deltaY","onMoveStart","type","pointerType","onMove","end","restoreTextSelection","onMouseMove","e","pageX","pageY","onMouseUp","addGlobalListener","onTouchMove","touch","identifier","onTouchEnd","triggerKeyboardMove"],"mappings":";AAYA,SAAA,oBAAA,EAAA,oBAAA;AAEA,SAAA,OAAA,EAAA,MAAA,QAAA,OAAA;AACA,SAAA,kBAAA,QAAA,mBAAA;AAYA,OAAO,SAAA,OAAA,CAAA,KAAA,EAAgD;AAAA,MACjD,WADiD,GACrD,KADqD,CACjD,WADiD;AAAA,MACjD,MADiD,GACrD,KADqD,CACjD,MADiD;AAAA,MAC1BA,SAD0B,GACrD,KADqD,CAC1BA,SAD0B;AAGrD,MAAIC,KAAK,GAAGC,MAAM,CAIf;AAAEC,IAAAA,OAAO,EAAT,KAAA;AAAkBC,IAAAA,YAAY,EAA9B,IAAA;AAAsCC,IAAAA,EAAE,EAAE;AAA1C,GAJe,CAAlB;;AAHqD,4BASHE,kBAAlD,EATqD;AAAA,MASjD,iBATiD,uBASjD,iBATiD;AAAA,MAS5BD,oBAT4B,uBAS5BA,oBAT4B;;AAWrD,MAAIE,SAAS,GAAGC,OAAO,CAAC,YAAM;AAC5B,QAAID,SAAsC,GAA1C,EAAA;;AAEA,QAAIE,KAAK,GAAG,SAARA,KAAQ,GAAM;AAChBC,MAAAA,oBAAoB;AACpBV,MAAAA,KAAK,CAALA,OAAAA,CAAAA,OAAAA,GAAAA,KAAAA;AAFF,KAAA;;AAIA,QAAIW,IAAI,GAAG,SAAPA,IAAO,CAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAA8D;AACvE,UAAIC,MAAM,KAANA,CAAAA,IAAgBC,MAAM,KAA1B,CAAA,EAAkC;AAChC;AACD;;AAED,UAAI,CAACb,KAAK,CAALA,OAAAA,CAAL,OAAA,EAA4B;AAC1BA,QAAAA,KAAK,CAALA,OAAAA,CAAAA,OAAAA,GAAAA,IAAAA;AACAc,QAAAA,WAAW,KAAXA,IAAAA,IAAAA,WAAW,KAAA,KAAXA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,WAAW,CAAG;AACZC,UAAAA,IAAI,EADQ,WAAA;AAEZC,UAAAA,WAAAA,EAAAA;AAFY,SAAH,CAAXF;AAID;;AACDG,MAAAA,MAAM,CAAC;AACLF,QAAAA,IAAI,EADC,MAAA;AAELC,QAAAA,WAFK,EAELA,WAFK;AAGLJ,QAAAA,MAAM,EAHD,MAAA;AAILC,QAAAA,MAAM,EAAEA;AAJH,OAAD,CAANI;AAZF,KAAA;;AAmBA,QAAIC,GAAG,GAAIF,SAAPE,GAAOF,CAAAA,WAAD,EAA8B;AACtCG,MAAAA,oBAAoB;;AACpB,UAAInB,KAAK,CAALA,OAAAA,CAAJ,OAAA,EAA2B;AACzBD,QAAAA,SAAS,KAATA,IAAAA,IAAAA,SAAS,KAAA,KAATA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,SAAS,CAAG;AACVgB,UAAAA,IAAI,EADM,SAAA;AAEVC,UAAAA,WAAAA,EAAAA;AAFU,SAAH,CAATjB;AAID;AAPH,KAAA;;AAUA,QAAI,OAAA,YAAA,KAAJ,WAAA,EAAyC;AACvC,UAAIqB,WAAW,GAAIC,SAAfD,WAAeC,CAAAA,CAAD,EAAmB;AACnC,YAAIA,CAAC,CAADA,MAAAA,KAAJ,CAAA,EAAoB;AAClBV,UAAAA,IAAI,CAAA,OAAA,EAEFU,CAAC,CAADA,KAAAA,GAAUrB,KAAK,CAALA,OAAAA,CAAAA,YAAAA,CAFR,KAAA,EAGFqB,CAAC,CAADA,KAAAA,GAAUrB,KAAK,CAALA,OAAAA,CAAAA,YAAAA,CAHZW,KAAI,CAAJA;AAKAX,UAAAA,KAAK,CAALA,OAAAA,CAAAA,YAAAA,GAA6B;AAAEsB,YAAAA,KAAK,EAAED,CAAC,CAAV,KAAA;AAAkBE,YAAAA,KAAK,EAAEF,CAAC,CAACE;AAA3B,WAA7BvB;AACD;AARH,OAAA;;AAUA,UAAIwB,SAAS,GAAIH,SAAbG,SAAaH,CAAAA,CAAD,EAAmB;AACjC,YAAIA,CAAC,CAADA,MAAAA,KAAJ,CAAA,EAAoB;AAClBH,UAAAA,GAAG,CAAHA,OAAG,CAAHA;AACAb,UAAAA,oBAAoB,CAAA,MAAA,EAAA,WAAA,EAAA,WAAA,EAApBA,KAAoB,CAApBA;AACAA,UAAAA,oBAAoB,CAAA,MAAA,EAAA,SAAA,EAAA,SAAA,EAApBA,KAAoB,CAApBA;AACD;AALH,OAAA;;AAOAE,MAAAA,SAAS,CAATA,WAAAA,GAAyBc,UAAAA,CAAD,EAAyB;AAC/C,YAAIA,CAAC,CAADA,MAAAA,KAAJ,CAAA,EAAoB;AAClBZ,UAAAA,KAAK;AACLY,UAAAA,CAAC,CAADA,eAAAA;AACAA,UAAAA,CAAC,CAADA,cAAAA;AACArB,UAAAA,KAAK,CAALA,OAAAA,CAAAA,YAAAA,GAA6B;AAAEsB,YAAAA,KAAK,EAAED,CAAC,CAAV,KAAA;AAAkBE,YAAAA,KAAK,EAAEF,CAAC,CAACE;AAA3B,WAA7BvB;AACAyB,UAAAA,iBAAiB,CAAA,MAAA,EAAA,WAAA,EAAA,WAAA,EAAjBA,KAAiB,CAAjBA;AACAA,UAAAA,iBAAiB,CAAA,MAAA,EAAA,SAAA,EAAA,SAAA,EAAjBA,KAAiB,CAAjBA;AACD;AARHlB,OAAAA;;AAWA,UAAImB,WAAW,GAAIL,SAAfK,WAAeL,CAAAA,CAAD,EAAmB;AAEnC,YAAIM,KAAK,GAAG,mBAAIN,CAAC,CAAL,cAAA,EAAA,SAAA,CACV;AAAA,cAAGO,UAAH,QAAGA,UAAH;AAAA,iBAAoBA,UAAU,KAAK5B,KAAK,CAALA,OAAAA,CADrC,EACE;AAAA,SADU,CAAZ;;AAGA,YAAI2B,KAAK,IAAT,CAAA,EAAgB;AAAA,sCACSN,CAAC,CAADA,cAAAA,CAAvB,KAAuBA,CADT;AAAA,cACV,KADU,yBACV,KADU;AAAA,cACDE,KADC,yBACDA,KADC;AAEdZ,UAAAA,IAAI,CAAA,OAAA,EAEFW,KAAK,GAAGtB,KAAK,CAALA,OAAAA,CAAAA,YAAAA,CAFN,KAAA,EAGFuB,KAAK,GAAGvB,KAAK,CAALA,OAAAA,CAAAA,YAAAA,CAHVW,KAAI,CAAJA;AAKAX,UAAAA,KAAK,CAALA,OAAAA,CAAAA,YAAAA,GAA6B;AAAEsB,YAAAA,KAAF,EAAEA,KAAF;AAASC,YAAAA,KAAAA,EAAAA;AAAT,WAA7BvB;AACD;AAbH,OAAA;;AAeA,UAAI6B,UAAU,GAAIR,SAAdQ,UAAcR,CAAAA,CAAD,EAAmB;AAElC,YAAIM,KAAK,GAAG,mBAAIN,CAAC,CAAL,cAAA,EAAA,SAAA,CACV;AAAA,cAAGO,UAAH,SAAGA,UAAH;AAAA,iBAAoBA,UAAU,KAAK5B,KAAK,CAALA,OAAAA,CADrC,EACE;AAAA,SADU,CAAZ;;AAGA,YAAI2B,KAAK,IAAT,CAAA,EAAgB;AACdT,UAAAA,GAAG,CAAHA,OAAG,CAAHA;AACAlB,UAAAA,KAAK,CAALA,OAAAA,CAAAA,EAAAA,GAAAA,IAAAA;AACAK,UAAAA,oBAAoB,CAAA,MAAA,EAAA,WAAA,EAApBA,WAAoB,CAApBA;AACAA,UAAAA,oBAAoB,CAAA,MAAA,EAAA,UAAA,EAApBA,UAAoB,CAApBA;AACAA,UAAAA,oBAAoB,CAAA,MAAA,EAAA,aAAA,EAApBA,UAAoB,CAApBA;AACD;AAXH,OAAA;;AAaAE,MAAAA,SAAS,CAATA,YAAAA,GAA0Bc,UAAAA,CAAD,EAAyB;AAChD,YAAIA,CAAC,CAADA,cAAAA,CAAAA,MAAAA,KAAAA,CAAAA,IAAiCrB,KAAK,CAALA,OAAAA,CAAAA,EAAAA,IAArC,IAAA,EAA+D;AAC7D;AACD;;AAH+C,iCAKbqB,CAAC,CAADA,cAAAA,CAAnC,CAAmCA,CALa;AAAA,YAK5C,KAL4C,sBAK5C,KAL4C;AAAA,YAK5C,KAL4C,sBAK5C,KAL4C;AAAA,YAK5BO,UAL4B,sBAK5BA,UAL4B;AAMhDnB,QAAAA,KAAK;AACLY,QAAAA,CAAC,CAADA,eAAAA;AACAA,QAAAA,CAAC,CAADA,cAAAA;AACArB,QAAAA,KAAK,CAALA,OAAAA,CAAAA,YAAAA,GAA6B;AAAEsB,UAAAA,KAAF,EAAEA,KAAF;AAASC,UAAAA,KAAAA,EAAAA;AAAT,SAA7BvB;AACAA,QAAAA,KAAK,CAALA,OAAAA,CAAAA,EAAAA,GAAAA,UAAAA;AACAyB,QAAAA,iBAAiB,CAAA,MAAA,EAAA,WAAA,EAAA,WAAA,EAAjBA,KAAiB,CAAjBA;AACAA,QAAAA,iBAAiB,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAjBA,KAAiB,CAAjBA;AACAA,QAAAA,iBAAiB,CAAA,MAAA,EAAA,aAAA,EAAA,UAAA,EAAjBA,KAAiB,CAAjBA;AAbFlB,OAAAA;AAeD;;AAED,QAAIuB,mBAAmB,GAAG,SAAtBA,mBAAsB,CAAA,MAAA,EAAA,MAAA,EAAoC;AAC5DrB,MAAAA,KAAK;AACLE,MAAAA,IAAI,CAAA,UAAA,EAAA,MAAA,EAAJA,MAAI,CAAJA;AACAO,MAAAA,GAAG,CAAHA,UAAG,CAAHA;AAHF,KAAA;;AAMAX,IAAAA,SAAS,CAATA,SAAAA,GAAuBc,UAAAA,CAAD,EAAO;AAC3B,cAAQA,CAAC,CAAT,GAAA;AACE,aAAA,MAAA;AACA,aAAA,WAAA;AACEA,UAAAA,CAAC,CAADA,cAAAA;AACAA,UAAAA,CAAC,CAADA,eAAAA;AACAS,UAAAA,mBAAmB,CAAC,CAAD,CAAA,EAAnBA,CAAmB,CAAnBA;AACA;;AACF,aAAA,OAAA;AACA,aAAA,YAAA;AACET,UAAAA,CAAC,CAADA,cAAAA;AACAA,UAAAA,CAAC,CAADA,eAAAA;AACAS,UAAAA,mBAAmB,CAAA,CAAA,EAAnBA,CAAmB,CAAnBA;AACA;;AACF,aAAA,IAAA;AACA,aAAA,SAAA;AACET,UAAAA,CAAC,CAADA,cAAAA;AACAA,UAAAA,CAAC,CAADA,eAAAA;AACAS,UAAAA,mBAAmB,CAAA,CAAA,EAAI,CAAvBA,CAAmB,CAAnBA;AACA;;AACF,aAAA,MAAA;AACA,aAAA,WAAA;AACET,UAAAA,CAAC,CAADA,cAAAA;AACAA,UAAAA,CAAC,CAADA,eAAAA;AACAS,UAAAA,mBAAmB,CAAA,CAAA,EAAnBA,CAAmB,CAAnBA;AACA;AAxBJ;AADFvB,KAAAA;;AA6BA,WAAA,SAAA;AAjJqB,GAAA,EAkJpB,CAAA,KAAA,EAAA,WAAA,EAAA,MAAA,EAAA,SAAA,EAAA,iBAAA,EAlJH,oBAkJG,CAlJoB,CAAvB;AA2JA,SAAO;AAAEA,IAAAA,SAAAA,EAAAA;AAAF,GAAP;AACD","sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport { disableTextSelection, restoreTextSelection } from './textSelection';\nimport { MoveEvents, PointerType } from '@react-types/shared';\nimport React, { HTMLAttributes, useMemo, useRef } from 'react';\nimport { useGlobalListeners } from '@react-aria/utils';\n\ninterface MoveResult {\n  /** Props to spread on the target element. */\n  moveProps: HTMLAttributes<HTMLElement>;\n}\n\n/**\n * Handles move interactions across mouse, touch, and keyboard, including dragging with\n * the mouse or touch, and using the arrow keys. Normalizes behavior across browsers and\n * platforms, and ignores emulated mouse events on touch devices.\n */\nexport function useMove(props: MoveEvents): MoveResult {\n  let { onMoveStart, onMove, onMoveEnd } = props;\n\n  let state = useRef<{\n    didMove: boolean;\n    lastPosition: { pageX: number; pageY: number } | null;\n    id: number | null;\n  }>({ didMove: false, lastPosition: null, id: null });\n\n  let { addGlobalListener, removeGlobalListener } = useGlobalListeners();\n\n  let moveProps = useMemo(() => {\n    let moveProps: HTMLAttributes<HTMLElement> = {};\n\n    let start = () => {\n      disableTextSelection();\n      state.current.didMove = false;\n    };\n    let move = (pointerType: PointerType, deltaX: number, deltaY: number) => {\n      if (deltaX === 0 && deltaY === 0) {\n        return;\n      }\n\n      if (!state.current.didMove) {\n        state.current.didMove = true;\n        onMoveStart?.({\n          type: 'movestart',\n          pointerType,\n        });\n      }\n      onMove({\n        type: 'move',\n        pointerType,\n        deltaX: deltaX,\n        deltaY: deltaY,\n      });\n    };\n    let end = (pointerType: PointerType) => {\n      restoreTextSelection();\n      if (state.current.didMove) {\n        onMoveEnd?.({\n          type: 'moveend',\n          pointerType,\n        });\n      }\n    };\n\n    if (typeof PointerEvent !== 'undefined') {\n      let onMouseMove = (e: MouseEvent) => {\n        if (e.button === 0) {\n          move(\n            'mouse',\n            e.pageX - state.current.lastPosition.pageX,\n            e.pageY - state.current.lastPosition.pageY\n          );\n          state.current.lastPosition = { pageX: e.pageX, pageY: e.pageY };\n        }\n      };\n      let onMouseUp = (e: MouseEvent) => {\n        if (e.button === 0) {\n          end('mouse');\n          removeGlobalListener(window, 'mousemove', onMouseMove, false);\n          removeGlobalListener(window, 'mouseup', onMouseUp, false);\n        }\n      };\n      moveProps.onMouseDown = (e: React.MouseEvent) => {\n        if (e.button === 0) {\n          start();\n          e.stopPropagation();\n          e.preventDefault();\n          state.current.lastPosition = { pageX: e.pageX, pageY: e.pageY };\n          addGlobalListener(window, 'mousemove', onMouseMove, false);\n          addGlobalListener(window, 'mouseup', onMouseUp, false);\n        }\n      };\n\n      let onTouchMove = (e: TouchEvent) => {\n        // @ts-ignore\n        let touch = [...e.changedTouches].findIndex(\n          ({ identifier }) => identifier === state.current.id\n        );\n        if (touch >= 0) {\n          let { pageX, pageY } = e.changedTouches[touch];\n          move(\n            'touch',\n            pageX - state.current.lastPosition.pageX,\n            pageY - state.current.lastPosition.pageY\n          );\n          state.current.lastPosition = { pageX, pageY };\n        }\n      };\n      let onTouchEnd = (e: TouchEvent) => {\n        // @ts-ignore\n        let touch = [...e.changedTouches].findIndex(\n          ({ identifier }) => identifier === state.current.id\n        );\n        if (touch >= 0) {\n          end('touch');\n          state.current.id = null;\n          removeGlobalListener(window, 'touchmove', onTouchMove);\n          removeGlobalListener(window, 'touchend', onTouchEnd);\n          removeGlobalListener(window, 'touchcancel', onTouchEnd);\n        }\n      };\n      moveProps.onTouchStart = (e: React.TouchEvent) => {\n        if (e.changedTouches.length === 0 || state.current.id != null) {\n          return;\n        }\n\n        let { pageX, pageY, identifier } = e.changedTouches[0];\n        start();\n        e.stopPropagation();\n        e.preventDefault();\n        state.current.lastPosition = { pageX, pageY };\n        state.current.id = identifier;\n        addGlobalListener(window, 'touchmove', onTouchMove, false);\n        addGlobalListener(window, 'touchend', onTouchEnd, false);\n        addGlobalListener(window, 'touchcancel', onTouchEnd, false);\n      };\n    }\n\n    let triggerKeyboardMove = (deltaX: number, deltaY: number) => {\n      start();\n      move('keyboard', deltaX, deltaY);\n      end('keyboard');\n    };\n\n    moveProps.onKeyDown = (e) => {\n      switch (e.key) {\n        case 'Left':\n        case 'ArrowLeft':\n          e.preventDefault();\n          e.stopPropagation();\n          triggerKeyboardMove(-1, 0);\n          break;\n        case 'Right':\n        case 'ArrowRight':\n          e.preventDefault();\n          e.stopPropagation();\n          triggerKeyboardMove(1, 0);\n          break;\n        case 'Up':\n        case 'ArrowUp':\n          e.preventDefault();\n          e.stopPropagation();\n          triggerKeyboardMove(0, -1);\n          break;\n        case 'Down':\n        case 'ArrowDown':\n          e.preventDefault();\n          e.stopPropagation();\n          triggerKeyboardMove(0, 1);\n          break;\n      }\n    };\n\n    return moveProps;\n  }, [\n    state,\n    onMoveStart,\n    onMove,\n    onMoveEnd,\n    addGlobalListener,\n    removeGlobalListener,\n  ]);\n\n  return { moveProps };\n}\n"]},"metadata":{},"sourceType":"module"}