UNPKG

@tamagui/react-native-web-lite

Version:
207 lines 8.97 kB
var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod)); var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var PanResponder_exports = {}; __export(PanResponder_exports, { PanResponder: () => PanResponder, default: () => PanResponder_default }); module.exports = __toCommonJS(PanResponder_exports); var import_react_native_web_internals = require("@tamagui/react-native-web-internals"); var import_TouchHistoryMath = __toESM(require("../TouchHistoryMath/index.cjs"), 1); const currentCentroidXOfTouchesChangedAfter = import_TouchHistoryMath.default.currentCentroidXOfTouchesChangedAfter; const currentCentroidYOfTouchesChangedAfter = import_TouchHistoryMath.default.currentCentroidYOfTouchesChangedAfter; const previousCentroidXOfTouchesChangedAfter = import_TouchHistoryMath.default.previousCentroidXOfTouchesChangedAfter; const previousCentroidYOfTouchesChangedAfter = import_TouchHistoryMath.default.previousCentroidYOfTouchesChangedAfter; const currentCentroidX = import_TouchHistoryMath.default.currentCentroidX; const currentCentroidY = import_TouchHistoryMath.default.currentCentroidY; const PanResponder = { _initializeGestureState(gestureState) { gestureState.moveX = 0; gestureState.moveY = 0; gestureState.x0 = 0; gestureState.y0 = 0; gestureState.dx = 0; gestureState.dy = 0; gestureState.vx = 0; gestureState.vy = 0; gestureState.numberActiveTouches = 0; gestureState._accountsForMovesUpTo = 0; }, _updateGestureStateOnMove(gestureState, touchHistory) { gestureState.numberActiveTouches = touchHistory.numberActiveTouches; gestureState.moveX = currentCentroidXOfTouchesChangedAfter(touchHistory, gestureState._accountsForMovesUpTo); gestureState.moveY = currentCentroidYOfTouchesChangedAfter(touchHistory, gestureState._accountsForMovesUpTo); const movedAfter = gestureState._accountsForMovesUpTo; const prevX = previousCentroidXOfTouchesChangedAfter(touchHistory, movedAfter); const x = currentCentroidXOfTouchesChangedAfter(touchHistory, movedAfter); const prevY = previousCentroidYOfTouchesChangedAfter(touchHistory, movedAfter); const y = currentCentroidYOfTouchesChangedAfter(touchHistory, movedAfter); const nextDX = gestureState.dx + (x - prevX); const nextDY = gestureState.dy + (y - prevY); const dt = touchHistory.mostRecentTimeStamp - gestureState._accountsForMovesUpTo; gestureState.vx = (nextDX - gestureState.dx) / dt; gestureState.vy = (nextDY - gestureState.dy) / dt; gestureState.dx = nextDX; gestureState.dy = nextDY; gestureState._accountsForMovesUpTo = touchHistory.mostRecentTimeStamp; }, create(config) { const interactionState = { handle: null, shouldCancelClick: false, timeout: null }; const gestureState = { stateID: Math.random(), moveX: 0, moveY: 0, x0: 0, y0: 0, dx: 0, dy: 0, vx: 0, vy: 0, numberActiveTouches: 0, _accountsForMovesUpTo: 0 }; const panHandlers = { onStartShouldSetResponder(event) { return config.onStartShouldSetPanResponder == null ? false : config.onStartShouldSetPanResponder(event, gestureState); }, onMoveShouldSetResponder(event) { return config.onMoveShouldSetPanResponder == null ? false : config.onMoveShouldSetPanResponder(event, gestureState); }, onStartShouldSetResponderCapture(event) { if (event.nativeEvent.touches.length === 1) { PanResponder._initializeGestureState(gestureState); } gestureState.numberActiveTouches = event.touchHistory.numberActiveTouches; return config.onStartShouldSetPanResponderCapture != null ? config.onStartShouldSetPanResponderCapture(event, gestureState) : false; }, onMoveShouldSetResponderCapture(event) { const touchHistory = event.touchHistory; if (gestureState._accountsForMovesUpTo === touchHistory.mostRecentTimeStamp) { return false; } PanResponder._updateGestureStateOnMove(gestureState, touchHistory); return config.onMoveShouldSetPanResponderCapture ? config.onMoveShouldSetPanResponderCapture(event, gestureState) : false; }, onResponderGrant(event) { if (!interactionState.handle) { interactionState.handle = import_react_native_web_internals.InteractionManager.createInteractionHandle(); } if (interactionState.timeout) { clearInteractionTimeout(interactionState); } interactionState.shouldCancelClick = true; gestureState.x0 = currentCentroidX(event.touchHistory); gestureState.y0 = currentCentroidY(event.touchHistory); gestureState.dx = 0; gestureState.dy = 0; if (config.onPanResponderGrant) { config.onPanResponderGrant(event, gestureState); } return config.onShouldBlockNativeResponder == null ? true : config.onShouldBlockNativeResponder(event, gestureState); }, onResponderReject(event) { clearInteractionHandle(interactionState, config.onPanResponderReject, event, gestureState); }, onResponderRelease(event) { clearInteractionHandle(interactionState, config.onPanResponderRelease, event, gestureState); setInteractionTimeout(interactionState); PanResponder._initializeGestureState(gestureState); }, onResponderStart(event) { const touchHistory = event.touchHistory; gestureState.numberActiveTouches = touchHistory.numberActiveTouches; if (config.onPanResponderStart) { config.onPanResponderStart(event, gestureState); } }, onResponderMove(event) { const touchHistory = event.touchHistory; if (gestureState._accountsForMovesUpTo === touchHistory.mostRecentTimeStamp) { return; } PanResponder._updateGestureStateOnMove(gestureState, touchHistory); if (config.onPanResponderMove) { config.onPanResponderMove(event, gestureState); } }, onResponderEnd(event) { const touchHistory = event.touchHistory; gestureState.numberActiveTouches = touchHistory.numberActiveTouches; clearInteractionHandle(interactionState, config.onPanResponderEnd, event, gestureState); }, onResponderTerminate(event) { clearInteractionHandle(interactionState, config.onPanResponderTerminate, event, gestureState); setInteractionTimeout(interactionState); PanResponder._initializeGestureState(gestureState); }, onResponderTerminationRequest(event) { return config.onPanResponderTerminationRequest == null ? true : config.onPanResponderTerminationRequest(event, gestureState); }, onClickCapture: event => { if (interactionState.shouldCancelClick === true) { event.stopPropagation(); event.preventDefault(); } } }; return { panHandlers, getInteractionHandle() { return interactionState.handle; } }; } }; function clearInteractionHandle(interactionState, callback, event, gestureState) { if (interactionState.handle) { import_react_native_web_internals.InteractionManager.clearInteractionHandle(interactionState.handle); interactionState.handle = null; } if (callback) { callback(event, gestureState); } } function clearInteractionTimeout(interactionState) { clearTimeout(interactionState.timeout); } function setInteractionTimeout(interactionState) { interactionState.timeout = setTimeout(() => { interactionState.shouldCancelClick = false; }, 250); } var PanResponder_default = PanResponder;