UNPKG

@attio/react-native-bottom-sheet-toolbox

Version:
96 lines (94 loc) 3.94 kB
"use strict"; import * as React from "react"; import { StyleSheet, View } from "react-native"; import { runOnJS, useAnimatedReaction } from "react-native-reanimated"; import { useSafeAreaInsets } from "react-native-safe-area-context"; import { BottomSheetDragGesture, BottomSheetToolboxDefaultBackdrop, BottomSheetToolboxSheet, BottomSheetToolboxWrapper } from "./components"; import { useBottomSheetToolboxInternalContext } from "./context/bottom-sheet-toolbox-internal-context"; import { useBottomSheetActions, useBottomSheetDevToolsAdapter, useBottomSheetIsReady, useBottomSheetOnCloseDetection, useBottomSheetOnSnapDetection, useBottomSheetOpenWhenReady, useBottomSheetSnapWhenIdle, useKeyboardAvoidingSnapPoints, useNormalizedSnapPoints } from "./hooks"; import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; function useSetupSnapPoints(snapPoints, disableSnapPointKeyboardAdjust) { const { normalizedSnapPointsSharedValue } = useBottomSheetToolboxInternalContext(); const normalizedSnapPoints = useNormalizedSnapPoints(snapPoints); const keyboardAvoidingSnapPointsSharedValue = useKeyboardAvoidingSnapPoints(normalizedSnapPoints); useAnimatedReaction(() => disableSnapPointKeyboardAdjust ? normalizedSnapPoints.get() : keyboardAvoidingSnapPointsSharedValue.get(), kb => { normalizedSnapPointsSharedValue.set(kb); }, [keyboardAvoidingSnapPointsSharedValue, normalizedSnapPoints, disableSnapPointKeyboardAdjust]); } function useSetupIsReady({ additionalIsReady = true, onReadyChange }) { const { isReadySharedValue } = useBottomSheetToolboxInternalContext(); useBottomSheetIsReady(additionalIsReady); useAnimatedReaction(() => isReadySharedValue.get(), (ready, lastReady) => { if (ready === lastReady) return; if (onReadyChange) runOnJS(onReadyChange)(ready); }, [isReadySharedValue]); } function useInsetTopWithDefault(outerInsetTop) { const insets = useSafeAreaInsets(); const insetTop = outerInsetTop === undefined ? Math.max(insets.top + 12, 24) : outerInsetTop || 0; return insetTop; } /** * A general-purpose composer of all our bottom sheet utilities. */ export function BottomSheetToolboxComposer({ children, snapPoints, initialSnapPointIndex, insetTop: outerInsetTop, backdropComponent = /*#__PURE__*/_jsx(BottomSheetToolboxDefaultBackdrop, {}), overlayComponent, onSnapChange, onClose, sheetStyle, disableSheetDrag = false, disableSnapPointKeyboardAdjust = false, additionalIsReady = true, onReadyChange, ref }) { useBottomSheetDevToolsAdapter(); useSetupSnapPoints(snapPoints, disableSnapPointKeyboardAdjust); useSetupIsReady({ additionalIsReady, ...(onReadyChange && { onReadyChange }) }); const insetTop = useInsetTopWithDefault(outerInsetTop); useBottomSheetOpenWhenReady(initialSnapPointIndex); useBottomSheetSnapWhenIdle(); useBottomSheetOnSnapDetection(onSnapChange); useBottomSheetOnCloseDetection(onClose); const actions = useBottomSheetActions("BottomSheetImperativeHandle"); React.useImperativeHandle(ref, () => actions, [actions]); return /*#__PURE__*/_jsxs(_Fragment, { children: [backdropComponent && /*#__PURE__*/_jsx(View, { style: StyleSheet.absoluteFill, pointerEvents: "box-none", children: backdropComponent }), /*#__PURE__*/_jsxs(BottomSheetToolboxWrapper, { insetTop: insetTop, children: [/*#__PURE__*/_jsx(BottomSheetDragGesture, { id: "BottomSheetToolboxComposer:sheet-drag", disabled: disableSheetDrag, children: /*#__PURE__*/_jsx(BottomSheetToolboxSheet, { style: sheetStyle, children: children }) }), overlayComponent && /*#__PURE__*/_jsx(View, { style: StyleSheet.absoluteFill, pointerEvents: "box-none", children: overlayComponent })] })] }); } //# sourceMappingURL=bottom-sheet-toolbox-composer.js.map