UNPKG

@tamagui/react-native-web-lite

Version:
110 lines (109 loc) 3.69 kB
import { jsx as _jsx } from "react/jsx-runtime"; import { usePressEvents } from "@tamagui/react-native-use-pressable"; import * as React from "react"; import { forwardRef, memo, useMemo, useRef, useState } from "react"; import { StyleSheet } from "@tamagui/react-native-web-internals"; import { useHover, useMergeRefs } from "@tamagui/react-native-web-internals"; import View from "../View/index.native.js"; function Pressable(props, forwardedRef) { var { children, delayLongPress, delayPressIn, delayPressOut, disabled, focusable, onBlur, onContextMenu, onFocus, onHoverIn, onHoverOut, onKeyDown, onLongPress, onPress, onPressMove, onPressIn, onPressOut, style, testOnly_hovered, testOnly_pressed, ...rest } = props, [hovered, setHovered] = useForceableState(testOnly_hovered === !0), [focused, setFocused] = useForceableState(!1), [pressed, setPressed] = useForceableState(testOnly_pressed === !0), hostRef = useRef(null), setRef = useMergeRefs(forwardedRef, hostRef), pressConfig = useMemo(function () { return { delayLongPress, delayPressStart: delayPressIn, delayPressEnd: delayPressOut, disabled, onLongPress, onPress, onPressChange: setPressed, onPressStart: onPressIn, onPressMove, onPressEnd: onPressOut }; }, [delayLongPress, delayPressIn, delayPressOut, disabled, onLongPress, onPress, onPressIn, onPressMove, onPressOut, setPressed]), pressEventHandlers = usePressEvents(hostRef, pressConfig), { onContextMenu: onContextMenuPress, onKeyDown: onKeyDownPress } = pressEventHandlers; useHover(hostRef, { contain: !0, disabled, onHoverChange: setHovered, onHoverStart: onHoverIn, onHoverEnd: onHoverOut }); var interactionState = { hovered, focused, pressed }, blurHandler = React.useCallback(function (e) { disabled || e.nativeEvent.target === hostRef.current && (setFocused(!1), onBlur?.(e)); }, [disabled, hostRef, setFocused, onBlur]), focusHandler = React.useCallback(function (e) { disabled || e.nativeEvent.target === hostRef.current && (setFocused(!0), onFocus?.(e)); }, [disabled, hostRef, setFocused, onFocus]), contextMenuHandler = React.useCallback(function (e) { onContextMenuPress?.(e), onContextMenu?.(e); }, [onContextMenu, onContextMenuPress]), keyDownHandler = React.useCallback(function (e) { onKeyDownPress?.(e), onKeyDown?.(e); }, [onKeyDown, onKeyDownPress]); return /* @__PURE__ */_jsx(View, { ...rest, ...pressEventHandlers, accessibilityDisabled: disabled, focusable: !disabled && focusable !== !1, onBlur: blurHandler, onContextMenu: contextMenuHandler, onFocus: focusHandler, onKeyDown: keyDownHandler, pointerEvents: disabled ? "none" : rest.pointerEvents, ref: setRef, style: [!disabled && styles.root, typeof style == "function" ? style(interactionState) : style], children: typeof children == "function" ? children(interactionState) : children }); } function useForceableState(forced) { var [bool, setBool] = useState(!1); return [bool || forced, setBool]; } var styles = StyleSheet.create({ root: { cursor: "pointer", touchAction: "manipulation" } }), MemoedPressable = /* @__PURE__ */memo(/* @__PURE__ */forwardRef(Pressable)); MemoedPressable.displayName = "Pressable"; var Pressable_default = MemoedPressable; export { Pressable_default as default }; //# sourceMappingURL=index.native.js.map