@tamagui/sheet 1.9.15 → 1.9.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cjs/Sheet.js CHANGED
@@ -190,7 +190,7 @@ const Sheet = (0, import_core.withStaticProperties)(
190
190
  sheetComponents
191
191
  );
192
192
  const SheetImplementation = (0, import_core.themeable)(
193
- (0, import_react.forwardRef)(function SheetImplementation2(props, ref) {
193
+ (0, import_react.forwardRef)(function SheetImplementation2(props, forwardedRef) {
194
194
  const parentSheet = (0, import_react.useContext)(ParentSheetContext);
195
195
  const { isHidden, controller } = useSheetContoller();
196
196
  const {
@@ -219,7 +219,9 @@ const SheetImplementation = (0, import_core.themeable)(
219
219
  );
220
220
  }
221
221
  }
222
- const driver = (0, import_core.getAnimationDriver)();
222
+ const sheetRef = (0, import_react.useRef)(null);
223
+ const ref = (0, import_compose_refs.useComposedRefs)(forwardedRef, sheetRef);
224
+ const driver = (0, import_core.useAnimationDriver)();
223
225
  if (!driver) {
224
226
  throw new Error("Must set animations in tamagui.config.ts");
225
227
  }
@@ -281,10 +283,18 @@ const SheetImplementation = (0, import_core.themeable)(
281
283
  const { useAnimatedNumber, useAnimatedNumberReaction, useAnimatedNumberStyle } = driver;
282
284
  const animatedNumber = useAnimatedNumber(HIDDEN_SIZE);
283
285
  const at = (0, import_react.useRef)(0);
284
- useAnimatedNumberReaction(animatedNumber, (value) => {
285
- at.current = value;
286
- scrollBridge.paneY = value;
287
- });
286
+ useAnimatedNumberReaction(
287
+ {
288
+ value: animatedNumber,
289
+ hostRef: sheetRef
290
+ },
291
+ (value) => {
292
+ if (!driver.isReactNative)
293
+ return;
294
+ at.current = value;
295
+ scrollBridge.paneY = value;
296
+ }
297
+ );
288
298
  function stopSpring() {
289
299
  animatedNumber.stop();
290
300
  if (scrollBridge.onFinishAnimate) {
@@ -488,16 +498,19 @@ const SheetImplementation = (0, import_core.themeable)(
488
498
  }),
489
499
  [zIndex]
490
500
  );
491
- const handleLayout = (0, import_react.useCallback)((e) => {
492
- var _a;
493
- let next = (_a = e.nativeEvent) == null ? void 0 : _a.layout.height;
494
- if (import_core.isWeb && import_core.isTouchable && !open) {
495
- next += 100;
496
- }
497
- if (!next)
498
- return;
499
- setFrameSize(() => next);
500
- }, [keyboardIsVisible]);
501
+ const handleLayout = (0, import_react.useCallback)(
502
+ (e) => {
503
+ var _a;
504
+ let next = (_a = e.nativeEvent) == null ? void 0 : _a.layout.height;
505
+ if (import_core.isWeb && import_core.isTouchable && !open) {
506
+ next += 100;
507
+ }
508
+ if (!next)
509
+ return;
510
+ setFrameSize(() => next);
511
+ },
512
+ [keyboardIsVisible]
513
+ );
501
514
  const removeScrollEnabled = forceRemoveScrollEnabled ?? (open && modal);
502
515
  const contents = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ParentSheetContext.Provider, { value: nextParentContext, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
503
516
  import_SheetContext.SheetProvider,
@@ -524,6 +537,7 @@ const SheetImplementation = (0, import_core.themeable)(
524
537
  ...panResponder == null ? void 0 : panResponder.panHandlers,
525
538
  onLayout: handleLayout,
526
539
  pointerEvents: open && !shouldHideParentSheet ? "auto" : "none",
540
+ animation: props.animation,
527
541
  style: [
528
542
  {
529
543
  position: "absolute",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/Sheet.tsx"],
4
- "sourcesContent": ["import { AdaptParentContext } from '@tamagui/adapt'\nimport { useComposedRefs } from '@tamagui/compose-refs'\nimport {\n GetProps,\n Slot,\n TamaguiElement,\n Theme,\n getAnimationDriver,\n isClient,\n isTouchable,\n isWeb,\n mergeEvent,\n styled,\n themeable,\n useDidFinishSSR,\n useEvent,\n useIsomorphicLayoutEffect,\n useThemeName,\n withStaticProperties,\n} from '@tamagui/core'\nimport { Portal } from '@tamagui/portal'\nimport { RemoveScroll } from '@tamagui/remove-scroll'\nimport { XStack, XStackProps, YStack, YStackProps } from '@tamagui/stacks'\nimport { useConstant } from '@tamagui/use-constant'\nimport { useControllableState } from '@tamagui/use-controllable-state'\nimport { useKeyboardVisible } from '@tamagui/use-keyboard-visible'\nimport React, {\n FunctionComponent,\n RefAttributes,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport {\n Animated,\n GestureResponderEvent,\n PanResponder,\n PanResponderGestureState,\n View,\n} from 'react-native'\n\nimport { SHEET_HANDLE_NAME, SHEET_NAME } from './constants'\nimport { SheetProvider, useSheetContext } from './SheetContext'\nimport { SheetScrollView } from './SheetScrollView'\nimport { ScrollBridge, SheetProps, SheetScopedProps } from './types'\n\nexport { createSheetScope } from './SheetContext'\n\n/* -------------------------------------------------------------------------------------------------\n * SheetHandle\n * -----------------------------------------------------------------------------------------------*/\n\nexport const SheetHandleFrame = styled(XStack, {\n name: SHEET_HANDLE_NAME,\n height: 10,\n borderRadius: 100,\n backgroundColor: '$background',\n zIndex: 10,\n marginHorizontal: '35%',\n marginBottom: '$2',\n opacity: 0.5,\n\n hoverStyle: {\n opacity: 0.7,\n },\n\n variants: {\n open: {\n true: {\n pointerEvents: 'auto',\n },\n false: {\n opacity: 0,\n pointerEvents: 'none',\n },\n },\n } as const,\n})\n\nexport const SheetHandle = SheetHandleFrame.extractable(\n ({ __scopeSheet, ...props }: SheetScopedProps<XStackProps>) => {\n const context = useSheetContext(SHEET_HANDLE_NAME, __scopeSheet)\n return (\n <SheetHandleFrame\n onPress={() => {\n // don't toggle to the bottom snap position when dismissOnSnapToBottom set\n const max = context.snapPoints.length + (context.dismissOnSnapToBottom ? -1 : 0)\n const nextPos = (context.position + 1) % max\n context.setPosition(nextPos)\n }}\n open={context.open}\n {...props}\n />\n )\n }\n)\n\n/* -------------------------------------------------------------------------------------------------\n * SheetOverlay\n * -----------------------------------------------------------------------------------------------*/\n\nconst SHEET_OVERLAY_NAME = 'SheetOverlay'\n\nexport const SheetOverlayFrame = styled(YStack, {\n name: SHEET_OVERLAY_NAME,\n backgroundColor: '$color10',\n fullscreen: true,\n opacity: 0.5,\n zIndex: 0,\n\n variants: {\n closed: {\n true: {\n opacity: 0,\n pointerEvents: 'none',\n },\n false: {\n pointerEvents: 'auto',\n },\n },\n } as const,\n})\n\nexport type SheetOverlayProps = GetProps<typeof SheetOverlayFrame>\n\nexport const SheetOverlay = SheetOverlayFrame.extractable(\n ({ __scopeSheet, ...props }: SheetScopedProps<SheetOverlayProps>) => {\n const context = useSheetContext(SHEET_OVERLAY_NAME, __scopeSheet)\n return (\n <SheetOverlayFrame\n closed={!context.open || context.hidden}\n {...props}\n onPress={mergeEvent(\n props.onPress as any,\n context.dismissOnOverlayPress\n ? () => {\n context.setOpen(false)\n }\n : undefined\n )}\n />\n )\n }\n)\n\n/* -------------------------------------------------------------------------------------------------\n * Sheet\n * -----------------------------------------------------------------------------------------------*/\n\nconst selectionStyleSheet = isClient ? document.createElement('style') : null\nif (selectionStyleSheet) {\n document.head.appendChild(selectionStyleSheet)\n}\n\nexport const SheetFrameFrame = styled(YStack, {\n name: SHEET_NAME,\n flex: 1,\n backgroundColor: '$background',\n borderTopLeftRadius: '$true',\n borderTopRightRadius: '$true',\n width: '100%',\n maxHeight: '100%',\n overflow: 'hidden',\n pointerEvents: 'auto',\n})\n\nexport const SheetFrame = SheetFrameFrame.extractable(\n forwardRef(\n ({ __scopeSheet, ...props }: SheetScopedProps<YStackProps>, forwardedRef) => {\n const context = useSheetContext(SHEET_NAME, __scopeSheet)\n const composedContentRef = useComposedRefs(forwardedRef, context.contentRef)\n return <SheetFrameFrame ref={composedContentRef} {...props} />\n }\n )\n)\n\n// set all the way off screen\nconst HIDDEN_SIZE = 10_000\n\nconst sheetComponents = {\n Handle: SheetHandle,\n Frame: SheetFrame,\n Overlay: SheetOverlay,\n ScrollView: SheetScrollView,\n}\n\nconst ParentSheetContext = createContext({\n zIndex: 40,\n})\n\nconst useSheetContoller = () => {\n const controller = useContext(SheetControllerContext)\n const isHidden = controller?.hidden\n const isShowingNonSheet = isHidden && controller?.open\n return {\n controller,\n isHidden,\n isShowingNonSheet,\n }\n}\n\nexport const Sheet = withStaticProperties(\n forwardRef<View, SheetProps>(function Sheet(props, ref) {\n const hydrated = useDidFinishSSR()\n const { isShowingNonSheet } = useSheetContoller()\n\n /**\n * Performance is sensitive here so avoid all the hooks below with this\n */\n if (isShowingNonSheet || !hydrated) {\n return null\n }\n\n return <SheetImplementation ref={ref} {...props} />\n }),\n sheetComponents\n)\n\nconst SheetImplementation = themeable(\n forwardRef<View, SheetProps>(function SheetImplementation(props, ref) {\n const parentSheet = useContext(ParentSheetContext)\n const { isHidden, controller } = useSheetContoller()\n\n const {\n __scopeSheet,\n snapPoints: snapPointsProp = [80],\n open: openProp,\n defaultOpen,\n children: childrenProp,\n position: positionProp,\n onPositionChange,\n onOpenChange,\n defaultPosition,\n dismissOnOverlayPress = true,\n animationConfig,\n dismissOnSnapToBottom = false,\n forceRemoveScrollEnabled = null,\n disableDrag: disableDragProp,\n modal = false,\n zIndex = parentSheet.zIndex + 1,\n portalProps,\n } = props\n\n if (process.env.NODE_ENV === 'development') {\n if (snapPointsProp.some((p) => p < 0 || p > 100)) {\n // eslint-disable-next-line no-console\n console.warn(\n '\u26A0\uFE0F Invalid snapPoint given, snapPoints must be between 0 and 100, equal to percent height of frame'\n )\n }\n }\n\n const driver = getAnimationDriver()\n if (!driver) {\n throw new Error('Must set animations in tamagui.config.ts')\n }\n\n const disableDrag = disableDragProp ?? controller?.disableDrag\n const keyboardIsVisible = useKeyboardVisible();\n const themeName = useThemeName()\n const contentRef = React.useRef<TamaguiElement>(null)\n const scrollBridge = useConstant<ScrollBridge>(() => ({\n enabled: false,\n y: 0,\n paneY: 0,\n paneMinY: 0,\n scrollStartY: -1,\n drag: () => {},\n release: () => {},\n scrollLock: false,\n }))\n\n const onOpenChangeInternal = (val: boolean) => {\n controller?.onOpenChange?.(val)\n onOpenChange?.(val)\n }\n\n const [open, setOpen] = useControllableState({\n prop: controller?.open ?? openProp,\n defaultProp: true,\n onChange: onOpenChangeInternal,\n strategy: 'most-recent-wins',\n transition: true,\n })\n\n const [frameSize, setFrameSize] = useState<number>(0)\n\n const snapPoints = useMemo(\n () => (dismissOnSnapToBottom ? [...snapPointsProp, 0] : snapPointsProp),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [JSON.stringify(snapPointsProp), dismissOnSnapToBottom]\n )\n\n // lets set -1 to be always the \"open = false\" position\n const [position_, setPosition_] = useControllableState({\n prop: positionProp,\n defaultProp: defaultPosition || (open ? 0 : -1),\n onChange: onPositionChange,\n strategy: 'most-recent-wins',\n transition: true,\n })\n const position = open === false ? -1 : position_\n\n // reset position to fully open on re-open after dismissOnSnapToBottom\n if (open && dismissOnSnapToBottom && position === snapPoints.length - 1) {\n setPosition_(0)\n }\n\n const setPosition = useCallback(\n (next: number) => {\n // close on dismissOnSnapToBottom (and set position so it animates)\n if (dismissOnSnapToBottom && next === snapPoints.length - 1) {\n setOpen(false)\n } else {\n setPosition_(next)\n }\n },\n [dismissOnSnapToBottom, snapPoints.length, setPosition_, setOpen]\n )\n\n const { useAnimatedNumber, useAnimatedNumberReaction, useAnimatedNumberStyle } =\n driver\n\n const animatedNumber = useAnimatedNumber(HIDDEN_SIZE)\n\n // native only fix\n const at = useRef(0)\n\n useAnimatedNumberReaction(animatedNumber, (value) => {\n at.current = value\n scrollBridge.paneY = value\n })\n\n function stopSpring() {\n animatedNumber.stop()\n if (scrollBridge.onFinishAnimate) {\n scrollBridge.onFinishAnimate()\n scrollBridge.onFinishAnimate = undefined\n }\n }\n\n // open must set position\n const shouldSetPositionOpen = open && position < 0\n useEffect(() => {\n if (shouldSetPositionOpen) {\n setPosition(0)\n }\n }, [setPosition, shouldSetPositionOpen])\n\n const positions = useMemo(\n () => snapPoints.map((point) => getPercentSize(point, frameSize)),\n [frameSize, snapPoints]\n )\n\n // we need to set this *after* fully closed to 0, to avoid it overlapping\n // the page when resizing quickly on web for example\n const [opacity, setOpacity] = useState(open ? 1 : 0)\n if (open && opacity === 0) {\n setOpacity(1)\n }\n useEffect(() => {\n if (!open) {\n // need to wait for animation complete, for now lets just do it naively\n const tm = setTimeout(() => {\n setOpacity(0)\n }, 400)\n return () => {\n clearTimeout(tm)\n }\n }\n }, [open])\n\n const animateTo = useEvent((position: number) => {\n const current = animatedNumber.getValue()\n if (isHidden && open) return\n if (!current) return\n if (frameSize === 0) return\n const hiddenValue = frameSize === 0 ? HIDDEN_SIZE : frameSize\n const toValue = isHidden || position === -1 ? hiddenValue : positions[position]\n if (at.current === toValue) return\n stopSpring()\n if (isHidden) {\n animatedNumber.setValue(toValue, {\n type: 'timing',\n duration: 0,\n })\n at.current = toValue\n return\n }\n // dont bounce on initial measure to bottom\n const overshootClamping = at.current === HIDDEN_SIZE\n animatedNumber.setValue(toValue, {\n ...animationConfig,\n type: 'spring',\n overshootClamping,\n })\n })\n\n useIsomorphicLayoutEffect(() => {\n animateTo(position)\n }, [isHidden, frameSize, position, animateTo])\n\n /**\n * This is a hacky workaround for native:\n */\n const [isShowingInnerSheet, setIsShowingInnerSheet] = useState(false)\n const shouldHideParentSheet = !isWeb && modal && isShowingInnerSheet\n const parentSheetContext = useContext(SheetInsideSheetContext)\n const onInnerSheet = useCallback((hasChild: boolean) => {\n setIsShowingInnerSheet(hasChild)\n }, [])\n\n const panResponder = useMemo(\n () => {\n if (disableDrag) return\n if (!frameSize) return\n if (isShowingInnerSheet) return\n\n const minY = positions[0]\n scrollBridge.paneMinY = minY\n let startY = at.current\n\n function makeUnselectable(val: boolean) {\n if (!selectionStyleSheet) return\n if (!val) {\n selectionStyleSheet.innerText = ''\n } else {\n selectionStyleSheet.innerText =\n ':root * { user-select: none !important; -webkit-user-select: none !important; }'\n }\n }\n\n const release = ({ vy, dragAt }: { dragAt: number; vy: number }) => {\n isExternalDrag = false\n previouslyScrolling = false\n makeUnselectable(false)\n const at = dragAt + startY\n // seems liky vy goes up to about 4 at the very most (+ is down, - is up)\n // lets base our multiplier on the total layout height\n const end = at + frameSize * vy * 0.2\n let closestPoint = 0\n let dist = Infinity\n for (let i = 0; i < positions.length; i++) {\n const position = positions[i]\n const curDist = end > position ? end - position : position - end\n if (curDist < dist) {\n dist = curDist\n closestPoint = i\n }\n }\n // have to call both because state may not change but need to snap back\n setPosition(closestPoint)\n animateTo(closestPoint)\n }\n\n const finish = (_e: GestureResponderEvent, state: PanResponderGestureState) => {\n release({\n vy: state.vy,\n dragAt: state.dy,\n })\n }\n\n let previouslyScrolling = false\n\n const onMoveShouldSet = (\n _e: GestureResponderEvent,\n { dy }: PanResponderGestureState\n ) => {\n const isScrolled = scrollBridge.y !== 0\n const isDraggingUp = dy < 0\n // we can treat near top instead of exactly to avoid trouble with springs\n const isNearTop = scrollBridge.paneY - 5 <= scrollBridge.paneMinY\n if (isScrolled) {\n previouslyScrolling = true\n return false\n }\n // prevent drag once at top and pulling up\n if (isNearTop) {\n if (!isScrolled && isDraggingUp) {\n return false\n }\n }\n // we could do some detection of other touchables and cancel here..\n return Math.abs(dy) > 5\n }\n\n const grant = () => {\n makeUnselectable(true)\n stopSpring()\n startY = at.current\n }\n\n let isExternalDrag = false\n\n scrollBridge.drag = (dy) => {\n if (!isExternalDrag) {\n isExternalDrag = true\n grant()\n }\n const to = dy + startY\n animatedNumber.setValue(resisted(to, minY), { type: 'direct' })\n }\n\n scrollBridge.release = release\n\n return PanResponder.create({\n onMoveShouldSetPanResponder: onMoveShouldSet,\n onPanResponderGrant: grant,\n onPanResponderMove: (_e, { dy }) => {\n const toFull = dy + startY\n const to = resisted(toFull, minY)\n animatedNumber.setValue(to, { type: 'direct' })\n },\n onPanResponderEnd: finish,\n onPanResponderTerminate: finish,\n onPanResponderRelease: finish,\n })\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [disableDrag, isShowingInnerSheet, animateTo, frameSize, positions, setPosition]\n )\n\n let handleComponent: React.ReactElement | null = null\n let overlayComponent: React.ReactElement | null = null\n let frameComponent: React.ReactElement | null = null\n\n // TODO do more radix-like and don't require direct children descendents\n React.Children.forEach(childrenProp, (child) => {\n if (isValidElement(child)) {\n const name = child.type?.['staticConfig']?.componentName\n switch (name) {\n case 'SheetHandle':\n handleComponent = child\n break\n case 'Sheet':\n frameComponent = child\n break\n case 'SheetOverlay':\n overlayComponent = child\n break\n default:\n // eslint-disable-next-line no-console\n console.warn('Warning: passed invalid child to Sheet', child)\n }\n }\n })\n\n const animatedStyle = useAnimatedNumberStyle(animatedNumber, (val) => {\n const translateY = frameSize === 0 ? HIDDEN_SIZE : val\n return {\n transform: [{ translateY }],\n }\n })\n\n // temp until reanimated useAnimatedNumber fix\n const AnimatedView = (driver['NumberView'] ?? driver.View) as typeof Animated.View\n\n useIsomorphicLayoutEffect(() => {\n if (!(parentSheetContext && open)) return\n parentSheetContext(true)\n return () => {\n parentSheetContext(false)\n }\n }, [parentSheetContext, open])\n\n const nextParentContext = useMemo(\n () => ({\n zIndex,\n }),\n [zIndex]\n )\n\n const handleLayout = useCallback((e) => {\n let next = e.nativeEvent?.layout.height\n if (isWeb && isTouchable && !open) {\n // temp fix ios bug where it doesn't go below dynamic bottom...\n next += 100\n }\n if (!next) return\n setFrameSize(() => next)\n }, [keyboardIsVisible])\n\n const removeScrollEnabled = forceRemoveScrollEnabled ?? (open && modal)\n\n const contents = (\n <ParentSheetContext.Provider value={nextParentContext}>\n <SheetProvider\n modal={modal}\n contentRef={contentRef}\n frameSize={frameSize}\n dismissOnOverlayPress={dismissOnOverlayPress}\n dismissOnSnapToBottom={dismissOnSnapToBottom}\n open={open}\n hidden={!!isHidden}\n scope={__scopeSheet}\n position={position}\n snapPoints={snapPoints}\n setPosition={setPosition}\n setOpen={setOpen}\n scrollBridge={scrollBridge}\n >\n {shouldHideParentSheet ? null : overlayComponent}\n\n <AnimatedView\n ref={ref}\n {...panResponder?.panHandlers}\n onLayout={handleLayout}\n pointerEvents={open && !shouldHideParentSheet ? 'auto' : 'none'}\n style={[\n {\n position: 'absolute',\n zIndex,\n width: '100%',\n height: '100%',\n opacity,\n },\n animatedStyle,\n ]}\n >\n {handleComponent}\n\n {/* @ts-ignore */}\n <RemoveScroll\n forwardProps\n enabled={removeScrollEnabled}\n allowPinchZoom\n shards={[contentRef]}\n // causes lots of bugs on touch web on site\n removeScrollBar={false}\n >\n {frameComponent}\n </RemoveScroll>\n </AnimatedView>\n </SheetProvider>\n </ParentSheetContext.Provider>\n )\n\n const adaptContext = useContext(AdaptParentContext)\n\n if (modal) {\n const modalContents = (\n <Portal zIndex={zIndex} {...portalProps}>\n <Theme forceClassName name={themeName}>\n <AdaptParentContext.Provider value={adaptContext}>\n {contents}\n </AdaptParentContext.Provider>\n </Theme>\n </Portal>\n )\n\n if (isWeb) {\n return modalContents\n }\n\n // on native we don't support multiple modals yet... fix for now is to hide outer one\n return (\n <SheetInsideSheetContext.Provider value={onInnerSheet}>\n {modalContents}\n </SheetInsideSheetContext.Provider>\n )\n }\n\n return contents\n }),\n { componentName: 'Sheet' }\n)\n\nconst SheetInsideSheetContext = createContext<((hasChild: boolean) => void) | null>(null)\n\nexport const ControlledSheet = Sheet as FunctionComponent<\n Omit<SheetProps, 'open' | 'onOpenChange'> & RefAttributes<View>\n> &\n typeof sheetComponents\n\n/* -------------------------------------------------------------------------------------------------*/\n\nfunction getPercentSize(point?: number, frameSize?: number) {\n if (!frameSize) return 0\n if (point === undefined) {\n // eslint-disable-next-line no-console\n console.warn('No snapPoint')\n return 0\n }\n const pct = point / 100\n const next = Math.round(frameSize - pct * frameSize)\n return next\n}\n\nfunction resisted(y: number, minY: number, maxOverflow = 25) {\n if (y < minY) {\n const past = minY - y\n const pctPast = Math.min(maxOverflow, past) / maxOverflow\n const diminishBy = 1.1 - Math.pow(0.1, pctPast)\n const extra = -diminishBy * maxOverflow\n return minY + extra\n }\n return y\n}\n\ntype SheetControllerContextValue = {\n disableDrag?: boolean\n open?: boolean\n // hide without \"closing\" to prevent re-animation when shown again\n hidden?: boolean\n onOpenChange?: React.Dispatch<React.SetStateAction<boolean>> | ((val: boolean) => void)\n}\n\nconst SheetControllerContext = createContext<SheetControllerContextValue | null>(null)\n\nexport const SheetController = ({\n children,\n onOpenChange: onOpenChangeProp,\n ...value\n}: Partial<SheetControllerContextValue> & { children?: React.ReactNode }) => {\n const onOpenChange = useEvent(onOpenChangeProp)\n\n const memoValue = useMemo(\n () => ({\n open: value.open,\n hidden: value.hidden,\n disableDrag: value.disableDrag,\n onOpenChange,\n }),\n [onOpenChange, value.open, value.hidden, value.disableDrag]\n )\n\n return (\n <SheetControllerContext.Provider value={memoValue}>\n {children}\n </SheetControllerContext.Provider>\n )\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { AdaptParentContext } from '@tamagui/adapt'\nimport { useComposedRefs } from '@tamagui/compose-refs'\nimport {\n GetProps,\n Slot,\n TamaguiElement,\n Theme,\n isClient,\n isTouchable,\n isWeb,\n mergeEvent,\n styled,\n themeable,\n useAnimationDriver,\n useDidFinishSSR,\n useEvent,\n useIsomorphicLayoutEffect,\n useThemeName,\n withStaticProperties,\n} from '@tamagui/core'\nimport { Portal } from '@tamagui/portal'\nimport { RemoveScroll } from '@tamagui/remove-scroll'\nimport { XStack, XStackProps, YStack, YStackProps } from '@tamagui/stacks'\nimport { useConstant } from '@tamagui/use-constant'\nimport { useControllableState } from '@tamagui/use-controllable-state'\nimport { useKeyboardVisible } from '@tamagui/use-keyboard-visible'\nimport React, {\n FunctionComponent,\n RefAttributes,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport {\n Animated,\n GestureResponderEvent,\n PanResponder,\n PanResponderGestureState,\n View,\n} from 'react-native'\n\nimport { SHEET_HANDLE_NAME, SHEET_NAME } from './constants'\nimport { SheetProvider, useSheetContext } from './SheetContext'\nimport { SheetScrollView } from './SheetScrollView'\nimport { ScrollBridge, SheetProps, SheetScopedProps } from './types'\n\nexport { createSheetScope } from './SheetContext'\n\n/* -------------------------------------------------------------------------------------------------\n * SheetHandle\n * -----------------------------------------------------------------------------------------------*/\n\nexport const SheetHandleFrame = styled(XStack, {\n name: SHEET_HANDLE_NAME,\n height: 10,\n borderRadius: 100,\n backgroundColor: '$background',\n zIndex: 10,\n marginHorizontal: '35%',\n marginBottom: '$2',\n opacity: 0.5,\n\n hoverStyle: {\n opacity: 0.7,\n },\n\n variants: {\n open: {\n true: {\n pointerEvents: 'auto',\n },\n false: {\n opacity: 0,\n pointerEvents: 'none',\n },\n },\n } as const,\n})\n\nexport const SheetHandle = SheetHandleFrame.extractable(\n ({ __scopeSheet, ...props }: SheetScopedProps<XStackProps>) => {\n const context = useSheetContext(SHEET_HANDLE_NAME, __scopeSheet)\n return (\n <SheetHandleFrame\n onPress={() => {\n // don't toggle to the bottom snap position when dismissOnSnapToBottom set\n const max = context.snapPoints.length + (context.dismissOnSnapToBottom ? -1 : 0)\n const nextPos = (context.position + 1) % max\n context.setPosition(nextPos)\n }}\n open={context.open}\n {...props}\n />\n )\n }\n)\n\n/* -------------------------------------------------------------------------------------------------\n * SheetOverlay\n * -----------------------------------------------------------------------------------------------*/\n\nconst SHEET_OVERLAY_NAME = 'SheetOverlay'\n\nexport const SheetOverlayFrame = styled(YStack, {\n name: SHEET_OVERLAY_NAME,\n backgroundColor: '$color10',\n fullscreen: true,\n opacity: 0.5,\n zIndex: 0,\n\n variants: {\n closed: {\n true: {\n opacity: 0,\n pointerEvents: 'none',\n },\n false: {\n pointerEvents: 'auto',\n },\n },\n } as const,\n})\n\nexport type SheetOverlayProps = GetProps<typeof SheetOverlayFrame>\n\nexport const SheetOverlay = SheetOverlayFrame.extractable(\n ({ __scopeSheet, ...props }: SheetScopedProps<SheetOverlayProps>) => {\n const context = useSheetContext(SHEET_OVERLAY_NAME, __scopeSheet)\n return (\n <SheetOverlayFrame\n closed={!context.open || context.hidden}\n {...props}\n onPress={mergeEvent(\n props.onPress as any,\n context.dismissOnOverlayPress\n ? () => {\n context.setOpen(false)\n }\n : undefined\n )}\n />\n )\n }\n)\n\n/* -------------------------------------------------------------------------------------------------\n * Sheet\n * -----------------------------------------------------------------------------------------------*/\n\nconst selectionStyleSheet = isClient ? document.createElement('style') : null\nif (selectionStyleSheet) {\n document.head.appendChild(selectionStyleSheet)\n}\n\nexport const SheetFrameFrame = styled(YStack, {\n name: SHEET_NAME,\n flex: 1,\n backgroundColor: '$background',\n borderTopLeftRadius: '$true',\n borderTopRightRadius: '$true',\n width: '100%',\n maxHeight: '100%',\n overflow: 'hidden',\n pointerEvents: 'auto',\n})\n\nexport const SheetFrame = SheetFrameFrame.extractable(\n forwardRef(\n ({ __scopeSheet, ...props }: SheetScopedProps<YStackProps>, forwardedRef) => {\n const context = useSheetContext(SHEET_NAME, __scopeSheet)\n const composedContentRef = useComposedRefs(forwardedRef, context.contentRef)\n return <SheetFrameFrame ref={composedContentRef} {...props} />\n }\n )\n)\n\n// set all the way off screen\nconst HIDDEN_SIZE = 10_000\n\nconst sheetComponents = {\n Handle: SheetHandle,\n Frame: SheetFrame,\n Overlay: SheetOverlay,\n ScrollView: SheetScrollView,\n}\n\nconst ParentSheetContext = createContext({\n zIndex: 40,\n})\n\nconst useSheetContoller = () => {\n const controller = useContext(SheetControllerContext)\n const isHidden = controller?.hidden\n const isShowingNonSheet = isHidden && controller?.open\n return {\n controller,\n isHidden,\n isShowingNonSheet,\n }\n}\n\nexport const Sheet = withStaticProperties(\n forwardRef<View, SheetProps>(function Sheet(props, ref) {\n const hydrated = useDidFinishSSR()\n const { isShowingNonSheet } = useSheetContoller()\n\n /**\n * Performance is sensitive here so avoid all the hooks below with this\n */\n if (isShowingNonSheet || !hydrated) {\n return null\n }\n\n return <SheetImplementation ref={ref} {...props} />\n }),\n sheetComponents\n)\n\nconst SheetImplementation = themeable(\n forwardRef<View, SheetProps>(function SheetImplementation(props, forwardedRef) {\n const parentSheet = useContext(ParentSheetContext)\n const { isHidden, controller } = useSheetContoller()\n\n const {\n __scopeSheet,\n snapPoints: snapPointsProp = [80],\n open: openProp,\n defaultOpen,\n children: childrenProp,\n position: positionProp,\n onPositionChange,\n onOpenChange,\n defaultPosition,\n dismissOnOverlayPress = true,\n animationConfig,\n dismissOnSnapToBottom = false,\n forceRemoveScrollEnabled = null,\n disableDrag: disableDragProp,\n modal = false,\n zIndex = parentSheet.zIndex + 1,\n portalProps,\n } = props\n\n if (process.env.NODE_ENV === 'development') {\n if (snapPointsProp.some((p) => p < 0 || p > 100)) {\n // eslint-disable-next-line no-console\n console.warn(\n '\u26A0\uFE0F Invalid snapPoint given, snapPoints must be between 0 and 100, equal to percent height of frame'\n )\n }\n }\n\n const sheetRef = useRef<View>(null)\n const ref = useComposedRefs(forwardedRef, sheetRef)\n\n const driver = useAnimationDriver()\n if (!driver) {\n throw new Error('Must set animations in tamagui.config.ts')\n }\n\n const disableDrag = disableDragProp ?? controller?.disableDrag\n const keyboardIsVisible = useKeyboardVisible()\n const themeName = useThemeName()\n const contentRef = React.useRef<TamaguiElement>(null)\n const scrollBridge = useConstant<ScrollBridge>(() => ({\n enabled: false,\n y: 0,\n paneY: 0,\n paneMinY: 0,\n scrollStartY: -1,\n drag: () => {},\n release: () => {},\n scrollLock: false,\n }))\n\n const onOpenChangeInternal = (val: boolean) => {\n controller?.onOpenChange?.(val)\n onOpenChange?.(val)\n }\n\n const [open, setOpen] = useControllableState({\n prop: controller?.open ?? openProp,\n defaultProp: true,\n onChange: onOpenChangeInternal,\n strategy: 'most-recent-wins',\n transition: true,\n })\n\n const [frameSize, setFrameSize] = useState<number>(0)\n\n const snapPoints = useMemo(\n () => (dismissOnSnapToBottom ? [...snapPointsProp, 0] : snapPointsProp),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [JSON.stringify(snapPointsProp), dismissOnSnapToBottom]\n )\n\n // lets set -1 to be always the \"open = false\" position\n const [position_, setPosition_] = useControllableState({\n prop: positionProp,\n defaultProp: defaultPosition || (open ? 0 : -1),\n onChange: onPositionChange,\n strategy: 'most-recent-wins',\n transition: true,\n })\n const position = open === false ? -1 : position_\n\n // reset position to fully open on re-open after dismissOnSnapToBottom\n if (open && dismissOnSnapToBottom && position === snapPoints.length - 1) {\n setPosition_(0)\n }\n\n const setPosition = useCallback(\n (next: number) => {\n // close on dismissOnSnapToBottom (and set position so it animates)\n if (dismissOnSnapToBottom && next === snapPoints.length - 1) {\n setOpen(false)\n } else {\n setPosition_(next)\n }\n },\n [dismissOnSnapToBottom, snapPoints.length, setPosition_, setOpen]\n )\n\n const { useAnimatedNumber, useAnimatedNumberReaction, useAnimatedNumberStyle } =\n driver\n\n const animatedNumber = useAnimatedNumber(HIDDEN_SIZE)\n\n // native only fix\n const at = useRef(0)\n\n useAnimatedNumberReaction(\n {\n value: animatedNumber,\n hostRef: sheetRef,\n },\n (value) => {\n if (!driver.isReactNative) return\n at.current = value\n scrollBridge.paneY = value\n }\n )\n\n function stopSpring() {\n animatedNumber.stop()\n if (scrollBridge.onFinishAnimate) {\n scrollBridge.onFinishAnimate()\n scrollBridge.onFinishAnimate = undefined\n }\n }\n\n // open must set position\n const shouldSetPositionOpen = open && position < 0\n useEffect(() => {\n if (shouldSetPositionOpen) {\n setPosition(0)\n }\n }, [setPosition, shouldSetPositionOpen])\n\n const positions = useMemo(\n () => snapPoints.map((point) => getPercentSize(point, frameSize)),\n [frameSize, snapPoints]\n )\n\n // we need to set this *after* fully closed to 0, to avoid it overlapping\n // the page when resizing quickly on web for example\n const [opacity, setOpacity] = useState(open ? 1 : 0)\n if (open && opacity === 0) {\n setOpacity(1)\n }\n useEffect(() => {\n if (!open) {\n // need to wait for animation complete, for now lets just do it naively\n const tm = setTimeout(() => {\n setOpacity(0)\n }, 400)\n return () => {\n clearTimeout(tm)\n }\n }\n }, [open])\n\n const animateTo = useEvent((position: number) => {\n const current = animatedNumber.getValue()\n if (isHidden && open) return\n if (!current) return\n if (frameSize === 0) return\n const hiddenValue = frameSize === 0 ? HIDDEN_SIZE : frameSize\n const toValue = isHidden || position === -1 ? hiddenValue : positions[position]\n if (at.current === toValue) return\n stopSpring()\n if (isHidden) {\n animatedNumber.setValue(toValue, {\n type: 'timing',\n duration: 0,\n })\n at.current = toValue\n return\n }\n // dont bounce on initial measure to bottom\n const overshootClamping = at.current === HIDDEN_SIZE\n animatedNumber.setValue(toValue, {\n ...animationConfig,\n type: 'spring',\n overshootClamping,\n })\n })\n\n useIsomorphicLayoutEffect(() => {\n animateTo(position)\n }, [isHidden, frameSize, position, animateTo])\n\n /**\n * This is a hacky workaround for native:\n */\n const [isShowingInnerSheet, setIsShowingInnerSheet] = useState(false)\n const shouldHideParentSheet = !isWeb && modal && isShowingInnerSheet\n const parentSheetContext = useContext(SheetInsideSheetContext)\n const onInnerSheet = useCallback((hasChild: boolean) => {\n setIsShowingInnerSheet(hasChild)\n }, [])\n\n const panResponder = useMemo(\n () => {\n if (disableDrag) return\n if (!frameSize) return\n if (isShowingInnerSheet) return\n\n const minY = positions[0]\n scrollBridge.paneMinY = minY\n let startY = at.current\n\n function makeUnselectable(val: boolean) {\n if (!selectionStyleSheet) return\n if (!val) {\n selectionStyleSheet.innerText = ''\n } else {\n selectionStyleSheet.innerText =\n ':root * { user-select: none !important; -webkit-user-select: none !important; }'\n }\n }\n\n const release = ({ vy, dragAt }: { dragAt: number; vy: number }) => {\n isExternalDrag = false\n previouslyScrolling = false\n makeUnselectable(false)\n const at = dragAt + startY\n // seems liky vy goes up to about 4 at the very most (+ is down, - is up)\n // lets base our multiplier on the total layout height\n const end = at + frameSize * vy * 0.2\n let closestPoint = 0\n let dist = Infinity\n for (let i = 0; i < positions.length; i++) {\n const position = positions[i]\n const curDist = end > position ? end - position : position - end\n if (curDist < dist) {\n dist = curDist\n closestPoint = i\n }\n }\n // have to call both because state may not change but need to snap back\n setPosition(closestPoint)\n animateTo(closestPoint)\n }\n\n const finish = (_e: GestureResponderEvent, state: PanResponderGestureState) => {\n release({\n vy: state.vy,\n dragAt: state.dy,\n })\n }\n\n let previouslyScrolling = false\n\n const onMoveShouldSet = (\n _e: GestureResponderEvent,\n { dy }: PanResponderGestureState\n ) => {\n const isScrolled = scrollBridge.y !== 0\n const isDraggingUp = dy < 0\n // we can treat near top instead of exactly to avoid trouble with springs\n const isNearTop = scrollBridge.paneY - 5 <= scrollBridge.paneMinY\n if (isScrolled) {\n previouslyScrolling = true\n return false\n }\n // prevent drag once at top and pulling up\n if (isNearTop) {\n if (!isScrolled && isDraggingUp) {\n return false\n }\n }\n // we could do some detection of other touchables and cancel here..\n return Math.abs(dy) > 5\n }\n\n const grant = () => {\n makeUnselectable(true)\n stopSpring()\n startY = at.current\n }\n\n let isExternalDrag = false\n\n scrollBridge.drag = (dy) => {\n if (!isExternalDrag) {\n isExternalDrag = true\n grant()\n }\n const to = dy + startY\n animatedNumber.setValue(resisted(to, minY), { type: 'direct' })\n }\n\n scrollBridge.release = release\n\n return PanResponder.create({\n onMoveShouldSetPanResponder: onMoveShouldSet,\n onPanResponderGrant: grant,\n onPanResponderMove: (_e, { dy }) => {\n const toFull = dy + startY\n const to = resisted(toFull, minY)\n animatedNumber.setValue(to, { type: 'direct' })\n },\n onPanResponderEnd: finish,\n onPanResponderTerminate: finish,\n onPanResponderRelease: finish,\n })\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [disableDrag, isShowingInnerSheet, animateTo, frameSize, positions, setPosition]\n )\n\n let handleComponent: React.ReactElement | null = null\n let overlayComponent: React.ReactElement | null = null\n let frameComponent: React.ReactElement | null = null\n\n // TODO do more radix-like and don't require direct children descendents\n React.Children.forEach(childrenProp, (child) => {\n if (isValidElement(child)) {\n const name = child.type?.['staticConfig']?.componentName\n switch (name) {\n case 'SheetHandle':\n handleComponent = child\n break\n case 'Sheet':\n frameComponent = child\n break\n case 'SheetOverlay':\n overlayComponent = child\n break\n default:\n // eslint-disable-next-line no-console\n console.warn('Warning: passed invalid child to Sheet', child)\n }\n }\n })\n\n const animatedStyle = useAnimatedNumberStyle(animatedNumber, (val) => {\n const translateY = frameSize === 0 ? HIDDEN_SIZE : val\n return {\n transform: [{ translateY }],\n }\n })\n\n // temp until reanimated useAnimatedNumber fix\n const AnimatedView = (driver['NumberView'] ?? driver.View) as typeof Animated.View\n\n useIsomorphicLayoutEffect(() => {\n if (!(parentSheetContext && open)) return\n parentSheetContext(true)\n return () => {\n parentSheetContext(false)\n }\n }, [parentSheetContext, open])\n\n const nextParentContext = useMemo(\n () => ({\n zIndex,\n }),\n [zIndex]\n )\n\n const handleLayout = useCallback(\n (e) => {\n let next = e.nativeEvent?.layout.height\n if (isWeb && isTouchable && !open) {\n // temp fix ios bug where it doesn't go below dynamic bottom...\n next += 100\n }\n if (!next) return\n setFrameSize(() => next)\n },\n [keyboardIsVisible]\n )\n\n const removeScrollEnabled = forceRemoveScrollEnabled ?? (open && modal)\n\n const contents = (\n <ParentSheetContext.Provider value={nextParentContext}>\n <SheetProvider\n modal={modal}\n contentRef={contentRef}\n frameSize={frameSize}\n dismissOnOverlayPress={dismissOnOverlayPress}\n dismissOnSnapToBottom={dismissOnSnapToBottom}\n open={open}\n hidden={!!isHidden}\n scope={__scopeSheet}\n position={position}\n snapPoints={snapPoints}\n setPosition={setPosition}\n setOpen={setOpen}\n scrollBridge={scrollBridge}\n >\n {shouldHideParentSheet ? null : overlayComponent}\n\n <AnimatedView\n ref={ref}\n {...panResponder?.panHandlers}\n onLayout={handleLayout}\n pointerEvents={open && !shouldHideParentSheet ? 'auto' : 'none'}\n // @ts-ignore\n animation={props.animation}\n style={[\n {\n position: 'absolute',\n zIndex,\n width: '100%',\n height: '100%',\n opacity,\n },\n animatedStyle,\n ]}\n >\n {handleComponent}\n\n {/* @ts-ignore */}\n <RemoveScroll\n forwardProps\n enabled={removeScrollEnabled}\n allowPinchZoom\n shards={[contentRef]}\n // causes lots of bugs on touch web on site\n removeScrollBar={false}\n >\n {frameComponent}\n </RemoveScroll>\n </AnimatedView>\n </SheetProvider>\n </ParentSheetContext.Provider>\n )\n\n const adaptContext = useContext(AdaptParentContext)\n\n if (modal) {\n const modalContents = (\n <Portal zIndex={zIndex} {...portalProps}>\n <Theme forceClassName name={themeName}>\n <AdaptParentContext.Provider value={adaptContext}>\n {contents}\n </AdaptParentContext.Provider>\n </Theme>\n </Portal>\n )\n\n if (isWeb) {\n return modalContents\n }\n\n // on native we don't support multiple modals yet... fix for now is to hide outer one\n return (\n <SheetInsideSheetContext.Provider value={onInnerSheet}>\n {modalContents}\n </SheetInsideSheetContext.Provider>\n )\n }\n\n return contents\n }),\n { componentName: 'Sheet' }\n)\n\nconst SheetInsideSheetContext = createContext<((hasChild: boolean) => void) | null>(null)\n\nexport const ControlledSheet = Sheet as FunctionComponent<\n Omit<SheetProps, 'open' | 'onOpenChange'> & RefAttributes<View>\n> &\n typeof sheetComponents\n\n/* -------------------------------------------------------------------------------------------------*/\n\nfunction getPercentSize(point?: number, frameSize?: number) {\n if (!frameSize) return 0\n if (point === undefined) {\n // eslint-disable-next-line no-console\n console.warn('No snapPoint')\n return 0\n }\n const pct = point / 100\n const next = Math.round(frameSize - pct * frameSize)\n return next\n}\n\nfunction resisted(y: number, minY: number, maxOverflow = 25) {\n if (y < minY) {\n const past = minY - y\n const pctPast = Math.min(maxOverflow, past) / maxOverflow\n const diminishBy = 1.1 - Math.pow(0.1, pctPast)\n const extra = -diminishBy * maxOverflow\n return minY + extra\n }\n return y\n}\n\ntype SheetControllerContextValue = {\n disableDrag?: boolean\n open?: boolean\n // hide without \"closing\" to prevent re-animation when shown again\n hidden?: boolean\n onOpenChange?: React.Dispatch<React.SetStateAction<boolean>> | ((val: boolean) => void)\n}\n\nconst SheetControllerContext = createContext<SheetControllerContextValue | null>(null)\n\nexport const SheetController = ({\n children,\n onOpenChange: onOpenChangeProp,\n ...value\n}: Partial<SheetControllerContextValue> & { children?: React.ReactNode }) => {\n const onOpenChange = useEvent(onOpenChangeProp)\n\n const memoValue = useMemo(\n () => ({\n open: value.open,\n hidden: value.hidden,\n disableDrag: value.disableDrag,\n onOpenChange,\n }),\n [onOpenChange, value.open, value.hidden, value.disableDrag]\n )\n\n return (\n <SheetControllerContext.Provider value={memoValue}>\n {children}\n </SheetControllerContext.Provider>\n )\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_SheetContext", "Sheet", "SheetImplementation", "React", "position", "at"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/types.tsx"],
4
- "sourcesContent": ["import { AnimatedNumberStrategy } from '@tamagui/core'\nimport type { ScopedProps } from '@tamagui/create-context'\nimport type { PortalProps } from '@tamagui/portal'\nimport { RemoveScroll } from '@tamagui/remove-scroll'\nimport React, { ReactNode } from 'react'\n\nexport type SheetProps = ScopedProps<\n {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: OpenChangeHandler\n position?: number\n defaultPosition?: number\n snapPoints?: number[]\n onPositionChange?: PositionChangeHandler\n children?: ReactNode\n dismissOnOverlayPress?: boolean\n dismissOnSnapToBottom?: boolean\n forceRemoveScrollEnabled?: boolean\n animationConfig?: AnimatedNumberStrategy\n handleDisableScroll?: boolean\n disableDrag?: boolean\n modal?: boolean\n zIndex?: number\n portalProps?: PortalProps\n },\n 'Sheet'\n>\n\nexport type PositionChangeHandler = (position: number) => void\n\ntype OpenChangeHandler =\n | ((open: boolean) => void)\n | React.Dispatch<React.SetStateAction<boolean>>\n\nexport type RemoveScrollProps = React.ComponentProps<typeof RemoveScroll>\n\nexport type SheetScopedProps<A> = ScopedProps<A, 'Sheet'>\n\nexport type ScrollBridge = {\n enabled: boolean\n y: number\n paneY: number\n paneMinY: number\n scrollStartY: number\n drag: (dy: number) => void\n release: (state: { dragAt: number; vy: number }) => void\n scrollLock: boolean\n onFinishAnimate?: () => void\n}\n"],
4
+ "sourcesContent": ["import { AnimatedNumberStrategy, AnimationProp } from '@tamagui/core'\nimport type { ScopedProps } from '@tamagui/create-context'\nimport type { PortalProps } from '@tamagui/portal'\nimport { RemoveScroll } from '@tamagui/remove-scroll'\nimport React, { ReactNode } from 'react'\n\nexport type SheetProps = ScopedProps<\n {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: OpenChangeHandler\n position?: number\n defaultPosition?: number\n snapPoints?: number[]\n onPositionChange?: PositionChangeHandler\n children?: ReactNode\n dismissOnOverlayPress?: boolean\n dismissOnSnapToBottom?: boolean\n forceRemoveScrollEnabled?: boolean\n animationConfig?: AnimatedNumberStrategy\n /**\n * Pass if you're using the CSS animation driver\n */\n animation?: AnimationProp\n handleDisableScroll?: boolean\n disableDrag?: boolean\n modal?: boolean\n zIndex?: number\n portalProps?: PortalProps\n },\n 'Sheet'\n>\n\nexport type PositionChangeHandler = (position: number) => void\n\ntype OpenChangeHandler =\n | ((open: boolean) => void)\n | React.Dispatch<React.SetStateAction<boolean>>\n\nexport type RemoveScrollProps = React.ComponentProps<typeof RemoveScroll>\n\nexport type SheetScopedProps<A> = ScopedProps<A, 'Sheet'>\n\nexport type ScrollBridge = {\n enabled: boolean\n y: number\n paneY: number\n paneMinY: number\n scrollStartY: number\n drag: (dy: number) => void\n release: (state: { dragAt: number; vy: number }) => void\n scrollLock: boolean\n onFinishAnimate?: () => void\n}\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;AAAA;AAAA;",
6
6
  "names": []
7
7
  }
package/dist/esm/Sheet.js CHANGED
@@ -3,13 +3,13 @@ import { AdaptParentContext } from "@tamagui/adapt";
3
3
  import { useComposedRefs } from "@tamagui/compose-refs";
4
4
  import {
5
5
  Theme,
6
- getAnimationDriver,
7
6
  isClient,
8
7
  isTouchable,
9
8
  isWeb,
10
9
  mergeEvent,
11
10
  styled,
12
11
  themeable,
12
+ useAnimationDriver,
13
13
  useDidFinishSSR,
14
14
  useEvent,
15
15
  useIsomorphicLayoutEffect,
@@ -174,7 +174,7 @@ const Sheet = withStaticProperties(
174
174
  sheetComponents
175
175
  );
176
176
  const SheetImplementation = themeable(
177
- forwardRef(function SheetImplementation2(props, ref) {
177
+ forwardRef(function SheetImplementation2(props, forwardedRef) {
178
178
  const parentSheet = useContext(ParentSheetContext);
179
179
  const { isHidden, controller } = useSheetContoller();
180
180
  const {
@@ -203,7 +203,9 @@ const SheetImplementation = themeable(
203
203
  );
204
204
  }
205
205
  }
206
- const driver = getAnimationDriver();
206
+ const sheetRef = useRef(null);
207
+ const ref = useComposedRefs(forwardedRef, sheetRef);
208
+ const driver = useAnimationDriver();
207
209
  if (!driver) {
208
210
  throw new Error("Must set animations in tamagui.config.ts");
209
211
  }
@@ -265,10 +267,18 @@ const SheetImplementation = themeable(
265
267
  const { useAnimatedNumber, useAnimatedNumberReaction, useAnimatedNumberStyle } = driver;
266
268
  const animatedNumber = useAnimatedNumber(HIDDEN_SIZE);
267
269
  const at = useRef(0);
268
- useAnimatedNumberReaction(animatedNumber, (value) => {
269
- at.current = value;
270
- scrollBridge.paneY = value;
271
- });
270
+ useAnimatedNumberReaction(
271
+ {
272
+ value: animatedNumber,
273
+ hostRef: sheetRef
274
+ },
275
+ (value) => {
276
+ if (!driver.isReactNative)
277
+ return;
278
+ at.current = value;
279
+ scrollBridge.paneY = value;
280
+ }
281
+ );
272
282
  function stopSpring() {
273
283
  animatedNumber.stop();
274
284
  if (scrollBridge.onFinishAnimate) {
@@ -472,16 +482,19 @@ const SheetImplementation = themeable(
472
482
  }),
473
483
  [zIndex]
474
484
  );
475
- const handleLayout = useCallback((e) => {
476
- var _a;
477
- let next = (_a = e.nativeEvent) == null ? void 0 : _a.layout.height;
478
- if (isWeb && isTouchable && !open) {
479
- next += 100;
480
- }
481
- if (!next)
482
- return;
483
- setFrameSize(() => next);
484
- }, [keyboardIsVisible]);
485
+ const handleLayout = useCallback(
486
+ (e) => {
487
+ var _a;
488
+ let next = (_a = e.nativeEvent) == null ? void 0 : _a.layout.height;
489
+ if (isWeb && isTouchable && !open) {
490
+ next += 100;
491
+ }
492
+ if (!next)
493
+ return;
494
+ setFrameSize(() => next);
495
+ },
496
+ [keyboardIsVisible]
497
+ );
485
498
  const removeScrollEnabled = forceRemoveScrollEnabled ?? (open && modal);
486
499
  const contents = /* @__PURE__ */ jsx(ParentSheetContext.Provider, { value: nextParentContext, children: /* @__PURE__ */ jsxs(
487
500
  SheetProvider,
@@ -508,6 +521,7 @@ const SheetImplementation = themeable(
508
521
  ...panResponder == null ? void 0 : panResponder.panHandlers,
509
522
  onLayout: handleLayout,
510
523
  pointerEvents: open && !shouldHideParentSheet ? "auto" : "none",
524
+ animation: props.animation,
511
525
  style: [
512
526
  {
513
527
  position: "absolute",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/Sheet.tsx"],
4
- "sourcesContent": ["import { AdaptParentContext } from '@tamagui/adapt'\nimport { useComposedRefs } from '@tamagui/compose-refs'\nimport {\n GetProps,\n Slot,\n TamaguiElement,\n Theme,\n getAnimationDriver,\n isClient,\n isTouchable,\n isWeb,\n mergeEvent,\n styled,\n themeable,\n useDidFinishSSR,\n useEvent,\n useIsomorphicLayoutEffect,\n useThemeName,\n withStaticProperties,\n} from '@tamagui/core'\nimport { Portal } from '@tamagui/portal'\nimport { RemoveScroll } from '@tamagui/remove-scroll'\nimport { XStack, XStackProps, YStack, YStackProps } from '@tamagui/stacks'\nimport { useConstant } from '@tamagui/use-constant'\nimport { useControllableState } from '@tamagui/use-controllable-state'\nimport { useKeyboardVisible } from '@tamagui/use-keyboard-visible'\nimport React, {\n FunctionComponent,\n RefAttributes,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport {\n Animated,\n GestureResponderEvent,\n PanResponder,\n PanResponderGestureState,\n View,\n} from 'react-native'\n\nimport { SHEET_HANDLE_NAME, SHEET_NAME } from './constants'\nimport { SheetProvider, useSheetContext } from './SheetContext'\nimport { SheetScrollView } from './SheetScrollView'\nimport { ScrollBridge, SheetProps, SheetScopedProps } from './types'\n\nexport { createSheetScope } from './SheetContext'\n\n/* -------------------------------------------------------------------------------------------------\n * SheetHandle\n * -----------------------------------------------------------------------------------------------*/\n\nexport const SheetHandleFrame = styled(XStack, {\n name: SHEET_HANDLE_NAME,\n height: 10,\n borderRadius: 100,\n backgroundColor: '$background',\n zIndex: 10,\n marginHorizontal: '35%',\n marginBottom: '$2',\n opacity: 0.5,\n\n hoverStyle: {\n opacity: 0.7,\n },\n\n variants: {\n open: {\n true: {\n pointerEvents: 'auto',\n },\n false: {\n opacity: 0,\n pointerEvents: 'none',\n },\n },\n } as const,\n})\n\nexport const SheetHandle = SheetHandleFrame.extractable(\n ({ __scopeSheet, ...props }: SheetScopedProps<XStackProps>) => {\n const context = useSheetContext(SHEET_HANDLE_NAME, __scopeSheet)\n return (\n <SheetHandleFrame\n onPress={() => {\n // don't toggle to the bottom snap position when dismissOnSnapToBottom set\n const max = context.snapPoints.length + (context.dismissOnSnapToBottom ? -1 : 0)\n const nextPos = (context.position + 1) % max\n context.setPosition(nextPos)\n }}\n open={context.open}\n {...props}\n />\n )\n }\n)\n\n/* -------------------------------------------------------------------------------------------------\n * SheetOverlay\n * -----------------------------------------------------------------------------------------------*/\n\nconst SHEET_OVERLAY_NAME = 'SheetOverlay'\n\nexport const SheetOverlayFrame = styled(YStack, {\n name: SHEET_OVERLAY_NAME,\n backgroundColor: '$color10',\n fullscreen: true,\n opacity: 0.5,\n zIndex: 0,\n\n variants: {\n closed: {\n true: {\n opacity: 0,\n pointerEvents: 'none',\n },\n false: {\n pointerEvents: 'auto',\n },\n },\n } as const,\n})\n\nexport type SheetOverlayProps = GetProps<typeof SheetOverlayFrame>\n\nexport const SheetOverlay = SheetOverlayFrame.extractable(\n ({ __scopeSheet, ...props }: SheetScopedProps<SheetOverlayProps>) => {\n const context = useSheetContext(SHEET_OVERLAY_NAME, __scopeSheet)\n return (\n <SheetOverlayFrame\n closed={!context.open || context.hidden}\n {...props}\n onPress={mergeEvent(\n props.onPress as any,\n context.dismissOnOverlayPress\n ? () => {\n context.setOpen(false)\n }\n : undefined\n )}\n />\n )\n }\n)\n\n/* -------------------------------------------------------------------------------------------------\n * Sheet\n * -----------------------------------------------------------------------------------------------*/\n\nconst selectionStyleSheet = isClient ? document.createElement('style') : null\nif (selectionStyleSheet) {\n document.head.appendChild(selectionStyleSheet)\n}\n\nexport const SheetFrameFrame = styled(YStack, {\n name: SHEET_NAME,\n flex: 1,\n backgroundColor: '$background',\n borderTopLeftRadius: '$true',\n borderTopRightRadius: '$true',\n width: '100%',\n maxHeight: '100%',\n overflow: 'hidden',\n pointerEvents: 'auto',\n})\n\nexport const SheetFrame = SheetFrameFrame.extractable(\n forwardRef(\n ({ __scopeSheet, ...props }: SheetScopedProps<YStackProps>, forwardedRef) => {\n const context = useSheetContext(SHEET_NAME, __scopeSheet)\n const composedContentRef = useComposedRefs(forwardedRef, context.contentRef)\n return <SheetFrameFrame ref={composedContentRef} {...props} />\n }\n )\n)\n\n// set all the way off screen\nconst HIDDEN_SIZE = 10_000\n\nconst sheetComponents = {\n Handle: SheetHandle,\n Frame: SheetFrame,\n Overlay: SheetOverlay,\n ScrollView: SheetScrollView,\n}\n\nconst ParentSheetContext = createContext({\n zIndex: 40,\n})\n\nconst useSheetContoller = () => {\n const controller = useContext(SheetControllerContext)\n const isHidden = controller?.hidden\n const isShowingNonSheet = isHidden && controller?.open\n return {\n controller,\n isHidden,\n isShowingNonSheet,\n }\n}\n\nexport const Sheet = withStaticProperties(\n forwardRef<View, SheetProps>(function Sheet(props, ref) {\n const hydrated = useDidFinishSSR()\n const { isShowingNonSheet } = useSheetContoller()\n\n /**\n * Performance is sensitive here so avoid all the hooks below with this\n */\n if (isShowingNonSheet || !hydrated) {\n return null\n }\n\n return <SheetImplementation ref={ref} {...props} />\n }),\n sheetComponents\n)\n\nconst SheetImplementation = themeable(\n forwardRef<View, SheetProps>(function SheetImplementation(props, ref) {\n const parentSheet = useContext(ParentSheetContext)\n const { isHidden, controller } = useSheetContoller()\n\n const {\n __scopeSheet,\n snapPoints: snapPointsProp = [80],\n open: openProp,\n defaultOpen,\n children: childrenProp,\n position: positionProp,\n onPositionChange,\n onOpenChange,\n defaultPosition,\n dismissOnOverlayPress = true,\n animationConfig,\n dismissOnSnapToBottom = false,\n forceRemoveScrollEnabled = null,\n disableDrag: disableDragProp,\n modal = false,\n zIndex = parentSheet.zIndex + 1,\n portalProps,\n } = props\n\n if (process.env.NODE_ENV === 'development') {\n if (snapPointsProp.some((p) => p < 0 || p > 100)) {\n // eslint-disable-next-line no-console\n console.warn(\n '\u26A0\uFE0F Invalid snapPoint given, snapPoints must be between 0 and 100, equal to percent height of frame'\n )\n }\n }\n\n const driver = getAnimationDriver()\n if (!driver) {\n throw new Error('Must set animations in tamagui.config.ts')\n }\n\n const disableDrag = disableDragProp ?? controller?.disableDrag\n const keyboardIsVisible = useKeyboardVisible();\n const themeName = useThemeName()\n const contentRef = React.useRef<TamaguiElement>(null)\n const scrollBridge = useConstant<ScrollBridge>(() => ({\n enabled: false,\n y: 0,\n paneY: 0,\n paneMinY: 0,\n scrollStartY: -1,\n drag: () => {},\n release: () => {},\n scrollLock: false,\n }))\n\n const onOpenChangeInternal = (val: boolean) => {\n controller?.onOpenChange?.(val)\n onOpenChange?.(val)\n }\n\n const [open, setOpen] = useControllableState({\n prop: controller?.open ?? openProp,\n defaultProp: true,\n onChange: onOpenChangeInternal,\n strategy: 'most-recent-wins',\n transition: true,\n })\n\n const [frameSize, setFrameSize] = useState<number>(0)\n\n const snapPoints = useMemo(\n () => (dismissOnSnapToBottom ? [...snapPointsProp, 0] : snapPointsProp),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [JSON.stringify(snapPointsProp), dismissOnSnapToBottom]\n )\n\n // lets set -1 to be always the \"open = false\" position\n const [position_, setPosition_] = useControllableState({\n prop: positionProp,\n defaultProp: defaultPosition || (open ? 0 : -1),\n onChange: onPositionChange,\n strategy: 'most-recent-wins',\n transition: true,\n })\n const position = open === false ? -1 : position_\n\n // reset position to fully open on re-open after dismissOnSnapToBottom\n if (open && dismissOnSnapToBottom && position === snapPoints.length - 1) {\n setPosition_(0)\n }\n\n const setPosition = useCallback(\n (next: number) => {\n // close on dismissOnSnapToBottom (and set position so it animates)\n if (dismissOnSnapToBottom && next === snapPoints.length - 1) {\n setOpen(false)\n } else {\n setPosition_(next)\n }\n },\n [dismissOnSnapToBottom, snapPoints.length, setPosition_, setOpen]\n )\n\n const { useAnimatedNumber, useAnimatedNumberReaction, useAnimatedNumberStyle } =\n driver\n\n const animatedNumber = useAnimatedNumber(HIDDEN_SIZE)\n\n // native only fix\n const at = useRef(0)\n\n useAnimatedNumberReaction(animatedNumber, (value) => {\n at.current = value\n scrollBridge.paneY = value\n })\n\n function stopSpring() {\n animatedNumber.stop()\n if (scrollBridge.onFinishAnimate) {\n scrollBridge.onFinishAnimate()\n scrollBridge.onFinishAnimate = undefined\n }\n }\n\n // open must set position\n const shouldSetPositionOpen = open && position < 0\n useEffect(() => {\n if (shouldSetPositionOpen) {\n setPosition(0)\n }\n }, [setPosition, shouldSetPositionOpen])\n\n const positions = useMemo(\n () => snapPoints.map((point) => getPercentSize(point, frameSize)),\n [frameSize, snapPoints]\n )\n\n // we need to set this *after* fully closed to 0, to avoid it overlapping\n // the page when resizing quickly on web for example\n const [opacity, setOpacity] = useState(open ? 1 : 0)\n if (open && opacity === 0) {\n setOpacity(1)\n }\n useEffect(() => {\n if (!open) {\n // need to wait for animation complete, for now lets just do it naively\n const tm = setTimeout(() => {\n setOpacity(0)\n }, 400)\n return () => {\n clearTimeout(tm)\n }\n }\n }, [open])\n\n const animateTo = useEvent((position: number) => {\n const current = animatedNumber.getValue()\n if (isHidden && open) return\n if (!current) return\n if (frameSize === 0) return\n const hiddenValue = frameSize === 0 ? HIDDEN_SIZE : frameSize\n const toValue = isHidden || position === -1 ? hiddenValue : positions[position]\n if (at.current === toValue) return\n stopSpring()\n if (isHidden) {\n animatedNumber.setValue(toValue, {\n type: 'timing',\n duration: 0,\n })\n at.current = toValue\n return\n }\n // dont bounce on initial measure to bottom\n const overshootClamping = at.current === HIDDEN_SIZE\n animatedNumber.setValue(toValue, {\n ...animationConfig,\n type: 'spring',\n overshootClamping,\n })\n })\n\n useIsomorphicLayoutEffect(() => {\n animateTo(position)\n }, [isHidden, frameSize, position, animateTo])\n\n /**\n * This is a hacky workaround for native:\n */\n const [isShowingInnerSheet, setIsShowingInnerSheet] = useState(false)\n const shouldHideParentSheet = !isWeb && modal && isShowingInnerSheet\n const parentSheetContext = useContext(SheetInsideSheetContext)\n const onInnerSheet = useCallback((hasChild: boolean) => {\n setIsShowingInnerSheet(hasChild)\n }, [])\n\n const panResponder = useMemo(\n () => {\n if (disableDrag) return\n if (!frameSize) return\n if (isShowingInnerSheet) return\n\n const minY = positions[0]\n scrollBridge.paneMinY = minY\n let startY = at.current\n\n function makeUnselectable(val: boolean) {\n if (!selectionStyleSheet) return\n if (!val) {\n selectionStyleSheet.innerText = ''\n } else {\n selectionStyleSheet.innerText =\n ':root * { user-select: none !important; -webkit-user-select: none !important; }'\n }\n }\n\n const release = ({ vy, dragAt }: { dragAt: number; vy: number }) => {\n isExternalDrag = false\n previouslyScrolling = false\n makeUnselectable(false)\n const at = dragAt + startY\n // seems liky vy goes up to about 4 at the very most (+ is down, - is up)\n // lets base our multiplier on the total layout height\n const end = at + frameSize * vy * 0.2\n let closestPoint = 0\n let dist = Infinity\n for (let i = 0; i < positions.length; i++) {\n const position = positions[i]\n const curDist = end > position ? end - position : position - end\n if (curDist < dist) {\n dist = curDist\n closestPoint = i\n }\n }\n // have to call both because state may not change but need to snap back\n setPosition(closestPoint)\n animateTo(closestPoint)\n }\n\n const finish = (_e: GestureResponderEvent, state: PanResponderGestureState) => {\n release({\n vy: state.vy,\n dragAt: state.dy,\n })\n }\n\n let previouslyScrolling = false\n\n const onMoveShouldSet = (\n _e: GestureResponderEvent,\n { dy }: PanResponderGestureState\n ) => {\n const isScrolled = scrollBridge.y !== 0\n const isDraggingUp = dy < 0\n // we can treat near top instead of exactly to avoid trouble with springs\n const isNearTop = scrollBridge.paneY - 5 <= scrollBridge.paneMinY\n if (isScrolled) {\n previouslyScrolling = true\n return false\n }\n // prevent drag once at top and pulling up\n if (isNearTop) {\n if (!isScrolled && isDraggingUp) {\n return false\n }\n }\n // we could do some detection of other touchables and cancel here..\n return Math.abs(dy) > 5\n }\n\n const grant = () => {\n makeUnselectable(true)\n stopSpring()\n startY = at.current\n }\n\n let isExternalDrag = false\n\n scrollBridge.drag = (dy) => {\n if (!isExternalDrag) {\n isExternalDrag = true\n grant()\n }\n const to = dy + startY\n animatedNumber.setValue(resisted(to, minY), { type: 'direct' })\n }\n\n scrollBridge.release = release\n\n return PanResponder.create({\n onMoveShouldSetPanResponder: onMoveShouldSet,\n onPanResponderGrant: grant,\n onPanResponderMove: (_e, { dy }) => {\n const toFull = dy + startY\n const to = resisted(toFull, minY)\n animatedNumber.setValue(to, { type: 'direct' })\n },\n onPanResponderEnd: finish,\n onPanResponderTerminate: finish,\n onPanResponderRelease: finish,\n })\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [disableDrag, isShowingInnerSheet, animateTo, frameSize, positions, setPosition]\n )\n\n let handleComponent: React.ReactElement | null = null\n let overlayComponent: React.ReactElement | null = null\n let frameComponent: React.ReactElement | null = null\n\n // TODO do more radix-like and don't require direct children descendents\n React.Children.forEach(childrenProp, (child) => {\n if (isValidElement(child)) {\n const name = child.type?.['staticConfig']?.componentName\n switch (name) {\n case 'SheetHandle':\n handleComponent = child\n break\n case 'Sheet':\n frameComponent = child\n break\n case 'SheetOverlay':\n overlayComponent = child\n break\n default:\n // eslint-disable-next-line no-console\n console.warn('Warning: passed invalid child to Sheet', child)\n }\n }\n })\n\n const animatedStyle = useAnimatedNumberStyle(animatedNumber, (val) => {\n const translateY = frameSize === 0 ? HIDDEN_SIZE : val\n return {\n transform: [{ translateY }],\n }\n })\n\n // temp until reanimated useAnimatedNumber fix\n const AnimatedView = (driver['NumberView'] ?? driver.View) as typeof Animated.View\n\n useIsomorphicLayoutEffect(() => {\n if (!(parentSheetContext && open)) return\n parentSheetContext(true)\n return () => {\n parentSheetContext(false)\n }\n }, [parentSheetContext, open])\n\n const nextParentContext = useMemo(\n () => ({\n zIndex,\n }),\n [zIndex]\n )\n\n const handleLayout = useCallback((e) => {\n let next = e.nativeEvent?.layout.height\n if (isWeb && isTouchable && !open) {\n // temp fix ios bug where it doesn't go below dynamic bottom...\n next += 100\n }\n if (!next) return\n setFrameSize(() => next)\n }, [keyboardIsVisible])\n\n const removeScrollEnabled = forceRemoveScrollEnabled ?? (open && modal)\n\n const contents = (\n <ParentSheetContext.Provider value={nextParentContext}>\n <SheetProvider\n modal={modal}\n contentRef={contentRef}\n frameSize={frameSize}\n dismissOnOverlayPress={dismissOnOverlayPress}\n dismissOnSnapToBottom={dismissOnSnapToBottom}\n open={open}\n hidden={!!isHidden}\n scope={__scopeSheet}\n position={position}\n snapPoints={snapPoints}\n setPosition={setPosition}\n setOpen={setOpen}\n scrollBridge={scrollBridge}\n >\n {shouldHideParentSheet ? null : overlayComponent}\n\n <AnimatedView\n ref={ref}\n {...panResponder?.panHandlers}\n onLayout={handleLayout}\n pointerEvents={open && !shouldHideParentSheet ? 'auto' : 'none'}\n style={[\n {\n position: 'absolute',\n zIndex,\n width: '100%',\n height: '100%',\n opacity,\n },\n animatedStyle,\n ]}\n >\n {handleComponent}\n\n {/* @ts-ignore */}\n <RemoveScroll\n forwardProps\n enabled={removeScrollEnabled}\n allowPinchZoom\n shards={[contentRef]}\n // causes lots of bugs on touch web on site\n removeScrollBar={false}\n >\n {frameComponent}\n </RemoveScroll>\n </AnimatedView>\n </SheetProvider>\n </ParentSheetContext.Provider>\n )\n\n const adaptContext = useContext(AdaptParentContext)\n\n if (modal) {\n const modalContents = (\n <Portal zIndex={zIndex} {...portalProps}>\n <Theme forceClassName name={themeName}>\n <AdaptParentContext.Provider value={adaptContext}>\n {contents}\n </AdaptParentContext.Provider>\n </Theme>\n </Portal>\n )\n\n if (isWeb) {\n return modalContents\n }\n\n // on native we don't support multiple modals yet... fix for now is to hide outer one\n return (\n <SheetInsideSheetContext.Provider value={onInnerSheet}>\n {modalContents}\n </SheetInsideSheetContext.Provider>\n )\n }\n\n return contents\n }),\n { componentName: 'Sheet' }\n)\n\nconst SheetInsideSheetContext = createContext<((hasChild: boolean) => void) | null>(null)\n\nexport const ControlledSheet = Sheet as FunctionComponent<\n Omit<SheetProps, 'open' | 'onOpenChange'> & RefAttributes<View>\n> &\n typeof sheetComponents\n\n/* -------------------------------------------------------------------------------------------------*/\n\nfunction getPercentSize(point?: number, frameSize?: number) {\n if (!frameSize) return 0\n if (point === undefined) {\n // eslint-disable-next-line no-console\n console.warn('No snapPoint')\n return 0\n }\n const pct = point / 100\n const next = Math.round(frameSize - pct * frameSize)\n return next\n}\n\nfunction resisted(y: number, minY: number, maxOverflow = 25) {\n if (y < minY) {\n const past = minY - y\n const pctPast = Math.min(maxOverflow, past) / maxOverflow\n const diminishBy = 1.1 - Math.pow(0.1, pctPast)\n const extra = -diminishBy * maxOverflow\n return minY + extra\n }\n return y\n}\n\ntype SheetControllerContextValue = {\n disableDrag?: boolean\n open?: boolean\n // hide without \"closing\" to prevent re-animation when shown again\n hidden?: boolean\n onOpenChange?: React.Dispatch<React.SetStateAction<boolean>> | ((val: boolean) => void)\n}\n\nconst SheetControllerContext = createContext<SheetControllerContextValue | null>(null)\n\nexport const SheetController = ({\n children,\n onOpenChange: onOpenChangeProp,\n ...value\n}: Partial<SheetControllerContextValue> & { children?: React.ReactNode }) => {\n const onOpenChange = useEvent(onOpenChangeProp)\n\n const memoValue = useMemo(\n () => ({\n open: value.open,\n hidden: value.hidden,\n disableDrag: value.disableDrag,\n onOpenChange,\n }),\n [onOpenChange, value.open, value.hidden, value.disableDrag]\n )\n\n return (\n <SheetControllerContext.Provider value={memoValue}>\n {children}\n </SheetControllerContext.Provider>\n )\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { AdaptParentContext } from '@tamagui/adapt'\nimport { useComposedRefs } from '@tamagui/compose-refs'\nimport {\n GetProps,\n Slot,\n TamaguiElement,\n Theme,\n isClient,\n isTouchable,\n isWeb,\n mergeEvent,\n styled,\n themeable,\n useAnimationDriver,\n useDidFinishSSR,\n useEvent,\n useIsomorphicLayoutEffect,\n useThemeName,\n withStaticProperties,\n} from '@tamagui/core'\nimport { Portal } from '@tamagui/portal'\nimport { RemoveScroll } from '@tamagui/remove-scroll'\nimport { XStack, XStackProps, YStack, YStackProps } from '@tamagui/stacks'\nimport { useConstant } from '@tamagui/use-constant'\nimport { useControllableState } from '@tamagui/use-controllable-state'\nimport { useKeyboardVisible } from '@tamagui/use-keyboard-visible'\nimport React, {\n FunctionComponent,\n RefAttributes,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport {\n Animated,\n GestureResponderEvent,\n PanResponder,\n PanResponderGestureState,\n View,\n} from 'react-native'\n\nimport { SHEET_HANDLE_NAME, SHEET_NAME } from './constants'\nimport { SheetProvider, useSheetContext } from './SheetContext'\nimport { SheetScrollView } from './SheetScrollView'\nimport { ScrollBridge, SheetProps, SheetScopedProps } from './types'\n\nexport { createSheetScope } from './SheetContext'\n\n/* -------------------------------------------------------------------------------------------------\n * SheetHandle\n * -----------------------------------------------------------------------------------------------*/\n\nexport const SheetHandleFrame = styled(XStack, {\n name: SHEET_HANDLE_NAME,\n height: 10,\n borderRadius: 100,\n backgroundColor: '$background',\n zIndex: 10,\n marginHorizontal: '35%',\n marginBottom: '$2',\n opacity: 0.5,\n\n hoverStyle: {\n opacity: 0.7,\n },\n\n variants: {\n open: {\n true: {\n pointerEvents: 'auto',\n },\n false: {\n opacity: 0,\n pointerEvents: 'none',\n },\n },\n } as const,\n})\n\nexport const SheetHandle = SheetHandleFrame.extractable(\n ({ __scopeSheet, ...props }: SheetScopedProps<XStackProps>) => {\n const context = useSheetContext(SHEET_HANDLE_NAME, __scopeSheet)\n return (\n <SheetHandleFrame\n onPress={() => {\n // don't toggle to the bottom snap position when dismissOnSnapToBottom set\n const max = context.snapPoints.length + (context.dismissOnSnapToBottom ? -1 : 0)\n const nextPos = (context.position + 1) % max\n context.setPosition(nextPos)\n }}\n open={context.open}\n {...props}\n />\n )\n }\n)\n\n/* -------------------------------------------------------------------------------------------------\n * SheetOverlay\n * -----------------------------------------------------------------------------------------------*/\n\nconst SHEET_OVERLAY_NAME = 'SheetOverlay'\n\nexport const SheetOverlayFrame = styled(YStack, {\n name: SHEET_OVERLAY_NAME,\n backgroundColor: '$color10',\n fullscreen: true,\n opacity: 0.5,\n zIndex: 0,\n\n variants: {\n closed: {\n true: {\n opacity: 0,\n pointerEvents: 'none',\n },\n false: {\n pointerEvents: 'auto',\n },\n },\n } as const,\n})\n\nexport type SheetOverlayProps = GetProps<typeof SheetOverlayFrame>\n\nexport const SheetOverlay = SheetOverlayFrame.extractable(\n ({ __scopeSheet, ...props }: SheetScopedProps<SheetOverlayProps>) => {\n const context = useSheetContext(SHEET_OVERLAY_NAME, __scopeSheet)\n return (\n <SheetOverlayFrame\n closed={!context.open || context.hidden}\n {...props}\n onPress={mergeEvent(\n props.onPress as any,\n context.dismissOnOverlayPress\n ? () => {\n context.setOpen(false)\n }\n : undefined\n )}\n />\n )\n }\n)\n\n/* -------------------------------------------------------------------------------------------------\n * Sheet\n * -----------------------------------------------------------------------------------------------*/\n\nconst selectionStyleSheet = isClient ? document.createElement('style') : null\nif (selectionStyleSheet) {\n document.head.appendChild(selectionStyleSheet)\n}\n\nexport const SheetFrameFrame = styled(YStack, {\n name: SHEET_NAME,\n flex: 1,\n backgroundColor: '$background',\n borderTopLeftRadius: '$true',\n borderTopRightRadius: '$true',\n width: '100%',\n maxHeight: '100%',\n overflow: 'hidden',\n pointerEvents: 'auto',\n})\n\nexport const SheetFrame = SheetFrameFrame.extractable(\n forwardRef(\n ({ __scopeSheet, ...props }: SheetScopedProps<YStackProps>, forwardedRef) => {\n const context = useSheetContext(SHEET_NAME, __scopeSheet)\n const composedContentRef = useComposedRefs(forwardedRef, context.contentRef)\n return <SheetFrameFrame ref={composedContentRef} {...props} />\n }\n )\n)\n\n// set all the way off screen\nconst HIDDEN_SIZE = 10_000\n\nconst sheetComponents = {\n Handle: SheetHandle,\n Frame: SheetFrame,\n Overlay: SheetOverlay,\n ScrollView: SheetScrollView,\n}\n\nconst ParentSheetContext = createContext({\n zIndex: 40,\n})\n\nconst useSheetContoller = () => {\n const controller = useContext(SheetControllerContext)\n const isHidden = controller?.hidden\n const isShowingNonSheet = isHidden && controller?.open\n return {\n controller,\n isHidden,\n isShowingNonSheet,\n }\n}\n\nexport const Sheet = withStaticProperties(\n forwardRef<View, SheetProps>(function Sheet(props, ref) {\n const hydrated = useDidFinishSSR()\n const { isShowingNonSheet } = useSheetContoller()\n\n /**\n * Performance is sensitive here so avoid all the hooks below with this\n */\n if (isShowingNonSheet || !hydrated) {\n return null\n }\n\n return <SheetImplementation ref={ref} {...props} />\n }),\n sheetComponents\n)\n\nconst SheetImplementation = themeable(\n forwardRef<View, SheetProps>(function SheetImplementation(props, forwardedRef) {\n const parentSheet = useContext(ParentSheetContext)\n const { isHidden, controller } = useSheetContoller()\n\n const {\n __scopeSheet,\n snapPoints: snapPointsProp = [80],\n open: openProp,\n defaultOpen,\n children: childrenProp,\n position: positionProp,\n onPositionChange,\n onOpenChange,\n defaultPosition,\n dismissOnOverlayPress = true,\n animationConfig,\n dismissOnSnapToBottom = false,\n forceRemoveScrollEnabled = null,\n disableDrag: disableDragProp,\n modal = false,\n zIndex = parentSheet.zIndex + 1,\n portalProps,\n } = props\n\n if (process.env.NODE_ENV === 'development') {\n if (snapPointsProp.some((p) => p < 0 || p > 100)) {\n // eslint-disable-next-line no-console\n console.warn(\n '\u26A0\uFE0F Invalid snapPoint given, snapPoints must be between 0 and 100, equal to percent height of frame'\n )\n }\n }\n\n const sheetRef = useRef<View>(null)\n const ref = useComposedRefs(forwardedRef, sheetRef)\n\n const driver = useAnimationDriver()\n if (!driver) {\n throw new Error('Must set animations in tamagui.config.ts')\n }\n\n const disableDrag = disableDragProp ?? controller?.disableDrag\n const keyboardIsVisible = useKeyboardVisible()\n const themeName = useThemeName()\n const contentRef = React.useRef<TamaguiElement>(null)\n const scrollBridge = useConstant<ScrollBridge>(() => ({\n enabled: false,\n y: 0,\n paneY: 0,\n paneMinY: 0,\n scrollStartY: -1,\n drag: () => {},\n release: () => {},\n scrollLock: false,\n }))\n\n const onOpenChangeInternal = (val: boolean) => {\n controller?.onOpenChange?.(val)\n onOpenChange?.(val)\n }\n\n const [open, setOpen] = useControllableState({\n prop: controller?.open ?? openProp,\n defaultProp: true,\n onChange: onOpenChangeInternal,\n strategy: 'most-recent-wins',\n transition: true,\n })\n\n const [frameSize, setFrameSize] = useState<number>(0)\n\n const snapPoints = useMemo(\n () => (dismissOnSnapToBottom ? [...snapPointsProp, 0] : snapPointsProp),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [JSON.stringify(snapPointsProp), dismissOnSnapToBottom]\n )\n\n // lets set -1 to be always the \"open = false\" position\n const [position_, setPosition_] = useControllableState({\n prop: positionProp,\n defaultProp: defaultPosition || (open ? 0 : -1),\n onChange: onPositionChange,\n strategy: 'most-recent-wins',\n transition: true,\n })\n const position = open === false ? -1 : position_\n\n // reset position to fully open on re-open after dismissOnSnapToBottom\n if (open && dismissOnSnapToBottom && position === snapPoints.length - 1) {\n setPosition_(0)\n }\n\n const setPosition = useCallback(\n (next: number) => {\n // close on dismissOnSnapToBottom (and set position so it animates)\n if (dismissOnSnapToBottom && next === snapPoints.length - 1) {\n setOpen(false)\n } else {\n setPosition_(next)\n }\n },\n [dismissOnSnapToBottom, snapPoints.length, setPosition_, setOpen]\n )\n\n const { useAnimatedNumber, useAnimatedNumberReaction, useAnimatedNumberStyle } =\n driver\n\n const animatedNumber = useAnimatedNumber(HIDDEN_SIZE)\n\n // native only fix\n const at = useRef(0)\n\n useAnimatedNumberReaction(\n {\n value: animatedNumber,\n hostRef: sheetRef,\n },\n (value) => {\n if (!driver.isReactNative) return\n at.current = value\n scrollBridge.paneY = value\n }\n )\n\n function stopSpring() {\n animatedNumber.stop()\n if (scrollBridge.onFinishAnimate) {\n scrollBridge.onFinishAnimate()\n scrollBridge.onFinishAnimate = undefined\n }\n }\n\n // open must set position\n const shouldSetPositionOpen = open && position < 0\n useEffect(() => {\n if (shouldSetPositionOpen) {\n setPosition(0)\n }\n }, [setPosition, shouldSetPositionOpen])\n\n const positions = useMemo(\n () => snapPoints.map((point) => getPercentSize(point, frameSize)),\n [frameSize, snapPoints]\n )\n\n // we need to set this *after* fully closed to 0, to avoid it overlapping\n // the page when resizing quickly on web for example\n const [opacity, setOpacity] = useState(open ? 1 : 0)\n if (open && opacity === 0) {\n setOpacity(1)\n }\n useEffect(() => {\n if (!open) {\n // need to wait for animation complete, for now lets just do it naively\n const tm = setTimeout(() => {\n setOpacity(0)\n }, 400)\n return () => {\n clearTimeout(tm)\n }\n }\n }, [open])\n\n const animateTo = useEvent((position: number) => {\n const current = animatedNumber.getValue()\n if (isHidden && open) return\n if (!current) return\n if (frameSize === 0) return\n const hiddenValue = frameSize === 0 ? HIDDEN_SIZE : frameSize\n const toValue = isHidden || position === -1 ? hiddenValue : positions[position]\n if (at.current === toValue) return\n stopSpring()\n if (isHidden) {\n animatedNumber.setValue(toValue, {\n type: 'timing',\n duration: 0,\n })\n at.current = toValue\n return\n }\n // dont bounce on initial measure to bottom\n const overshootClamping = at.current === HIDDEN_SIZE\n animatedNumber.setValue(toValue, {\n ...animationConfig,\n type: 'spring',\n overshootClamping,\n })\n })\n\n useIsomorphicLayoutEffect(() => {\n animateTo(position)\n }, [isHidden, frameSize, position, animateTo])\n\n /**\n * This is a hacky workaround for native:\n */\n const [isShowingInnerSheet, setIsShowingInnerSheet] = useState(false)\n const shouldHideParentSheet = !isWeb && modal && isShowingInnerSheet\n const parentSheetContext = useContext(SheetInsideSheetContext)\n const onInnerSheet = useCallback((hasChild: boolean) => {\n setIsShowingInnerSheet(hasChild)\n }, [])\n\n const panResponder = useMemo(\n () => {\n if (disableDrag) return\n if (!frameSize) return\n if (isShowingInnerSheet) return\n\n const minY = positions[0]\n scrollBridge.paneMinY = minY\n let startY = at.current\n\n function makeUnselectable(val: boolean) {\n if (!selectionStyleSheet) return\n if (!val) {\n selectionStyleSheet.innerText = ''\n } else {\n selectionStyleSheet.innerText =\n ':root * { user-select: none !important; -webkit-user-select: none !important; }'\n }\n }\n\n const release = ({ vy, dragAt }: { dragAt: number; vy: number }) => {\n isExternalDrag = false\n previouslyScrolling = false\n makeUnselectable(false)\n const at = dragAt + startY\n // seems liky vy goes up to about 4 at the very most (+ is down, - is up)\n // lets base our multiplier on the total layout height\n const end = at + frameSize * vy * 0.2\n let closestPoint = 0\n let dist = Infinity\n for (let i = 0; i < positions.length; i++) {\n const position = positions[i]\n const curDist = end > position ? end - position : position - end\n if (curDist < dist) {\n dist = curDist\n closestPoint = i\n }\n }\n // have to call both because state may not change but need to snap back\n setPosition(closestPoint)\n animateTo(closestPoint)\n }\n\n const finish = (_e: GestureResponderEvent, state: PanResponderGestureState) => {\n release({\n vy: state.vy,\n dragAt: state.dy,\n })\n }\n\n let previouslyScrolling = false\n\n const onMoveShouldSet = (\n _e: GestureResponderEvent,\n { dy }: PanResponderGestureState\n ) => {\n const isScrolled = scrollBridge.y !== 0\n const isDraggingUp = dy < 0\n // we can treat near top instead of exactly to avoid trouble with springs\n const isNearTop = scrollBridge.paneY - 5 <= scrollBridge.paneMinY\n if (isScrolled) {\n previouslyScrolling = true\n return false\n }\n // prevent drag once at top and pulling up\n if (isNearTop) {\n if (!isScrolled && isDraggingUp) {\n return false\n }\n }\n // we could do some detection of other touchables and cancel here..\n return Math.abs(dy) > 5\n }\n\n const grant = () => {\n makeUnselectable(true)\n stopSpring()\n startY = at.current\n }\n\n let isExternalDrag = false\n\n scrollBridge.drag = (dy) => {\n if (!isExternalDrag) {\n isExternalDrag = true\n grant()\n }\n const to = dy + startY\n animatedNumber.setValue(resisted(to, minY), { type: 'direct' })\n }\n\n scrollBridge.release = release\n\n return PanResponder.create({\n onMoveShouldSetPanResponder: onMoveShouldSet,\n onPanResponderGrant: grant,\n onPanResponderMove: (_e, { dy }) => {\n const toFull = dy + startY\n const to = resisted(toFull, minY)\n animatedNumber.setValue(to, { type: 'direct' })\n },\n onPanResponderEnd: finish,\n onPanResponderTerminate: finish,\n onPanResponderRelease: finish,\n })\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [disableDrag, isShowingInnerSheet, animateTo, frameSize, positions, setPosition]\n )\n\n let handleComponent: React.ReactElement | null = null\n let overlayComponent: React.ReactElement | null = null\n let frameComponent: React.ReactElement | null = null\n\n // TODO do more radix-like and don't require direct children descendents\n React.Children.forEach(childrenProp, (child) => {\n if (isValidElement(child)) {\n const name = child.type?.['staticConfig']?.componentName\n switch (name) {\n case 'SheetHandle':\n handleComponent = child\n break\n case 'Sheet':\n frameComponent = child\n break\n case 'SheetOverlay':\n overlayComponent = child\n break\n default:\n // eslint-disable-next-line no-console\n console.warn('Warning: passed invalid child to Sheet', child)\n }\n }\n })\n\n const animatedStyle = useAnimatedNumberStyle(animatedNumber, (val) => {\n const translateY = frameSize === 0 ? HIDDEN_SIZE : val\n return {\n transform: [{ translateY }],\n }\n })\n\n // temp until reanimated useAnimatedNumber fix\n const AnimatedView = (driver['NumberView'] ?? driver.View) as typeof Animated.View\n\n useIsomorphicLayoutEffect(() => {\n if (!(parentSheetContext && open)) return\n parentSheetContext(true)\n return () => {\n parentSheetContext(false)\n }\n }, [parentSheetContext, open])\n\n const nextParentContext = useMemo(\n () => ({\n zIndex,\n }),\n [zIndex]\n )\n\n const handleLayout = useCallback(\n (e) => {\n let next = e.nativeEvent?.layout.height\n if (isWeb && isTouchable && !open) {\n // temp fix ios bug where it doesn't go below dynamic bottom...\n next += 100\n }\n if (!next) return\n setFrameSize(() => next)\n },\n [keyboardIsVisible]\n )\n\n const removeScrollEnabled = forceRemoveScrollEnabled ?? (open && modal)\n\n const contents = (\n <ParentSheetContext.Provider value={nextParentContext}>\n <SheetProvider\n modal={modal}\n contentRef={contentRef}\n frameSize={frameSize}\n dismissOnOverlayPress={dismissOnOverlayPress}\n dismissOnSnapToBottom={dismissOnSnapToBottom}\n open={open}\n hidden={!!isHidden}\n scope={__scopeSheet}\n position={position}\n snapPoints={snapPoints}\n setPosition={setPosition}\n setOpen={setOpen}\n scrollBridge={scrollBridge}\n >\n {shouldHideParentSheet ? null : overlayComponent}\n\n <AnimatedView\n ref={ref}\n {...panResponder?.panHandlers}\n onLayout={handleLayout}\n pointerEvents={open && !shouldHideParentSheet ? 'auto' : 'none'}\n // @ts-ignore\n animation={props.animation}\n style={[\n {\n position: 'absolute',\n zIndex,\n width: '100%',\n height: '100%',\n opacity,\n },\n animatedStyle,\n ]}\n >\n {handleComponent}\n\n {/* @ts-ignore */}\n <RemoveScroll\n forwardProps\n enabled={removeScrollEnabled}\n allowPinchZoom\n shards={[contentRef]}\n // causes lots of bugs on touch web on site\n removeScrollBar={false}\n >\n {frameComponent}\n </RemoveScroll>\n </AnimatedView>\n </SheetProvider>\n </ParentSheetContext.Provider>\n )\n\n const adaptContext = useContext(AdaptParentContext)\n\n if (modal) {\n const modalContents = (\n <Portal zIndex={zIndex} {...portalProps}>\n <Theme forceClassName name={themeName}>\n <AdaptParentContext.Provider value={adaptContext}>\n {contents}\n </AdaptParentContext.Provider>\n </Theme>\n </Portal>\n )\n\n if (isWeb) {\n return modalContents\n }\n\n // on native we don't support multiple modals yet... fix for now is to hide outer one\n return (\n <SheetInsideSheetContext.Provider value={onInnerSheet}>\n {modalContents}\n </SheetInsideSheetContext.Provider>\n )\n }\n\n return contents\n }),\n { componentName: 'Sheet' }\n)\n\nconst SheetInsideSheetContext = createContext<((hasChild: boolean) => void) | null>(null)\n\nexport const ControlledSheet = Sheet as FunctionComponent<\n Omit<SheetProps, 'open' | 'onOpenChange'> & RefAttributes<View>\n> &\n typeof sheetComponents\n\n/* -------------------------------------------------------------------------------------------------*/\n\nfunction getPercentSize(point?: number, frameSize?: number) {\n if (!frameSize) return 0\n if (point === undefined) {\n // eslint-disable-next-line no-console\n console.warn('No snapPoint')\n return 0\n }\n const pct = point / 100\n const next = Math.round(frameSize - pct * frameSize)\n return next\n}\n\nfunction resisted(y: number, minY: number, maxOverflow = 25) {\n if (y < minY) {\n const past = minY - y\n const pctPast = Math.min(maxOverflow, past) / maxOverflow\n const diminishBy = 1.1 - Math.pow(0.1, pctPast)\n const extra = -diminishBy * maxOverflow\n return minY + extra\n }\n return y\n}\n\ntype SheetControllerContextValue = {\n disableDrag?: boolean\n open?: boolean\n // hide without \"closing\" to prevent re-animation when shown again\n hidden?: boolean\n onOpenChange?: React.Dispatch<React.SetStateAction<boolean>> | ((val: boolean) => void)\n}\n\nconst SheetControllerContext = createContext<SheetControllerContextValue | null>(null)\n\nexport const SheetController = ({\n children,\n onOpenChange: onOpenChangeProp,\n ...value\n}: Partial<SheetControllerContextValue> & { children?: React.ReactNode }) => {\n const onOpenChange = useEvent(onOpenChangeProp)\n\n const memoValue = useMemo(\n () => ({\n open: value.open,\n hidden: value.hidden,\n disableDrag: value.disableDrag,\n onOpenChange,\n }),\n [onOpenChange, value.open, value.hidden, value.disableDrag]\n )\n\n return (\n <SheetControllerContext.Provider value={memoValue}>\n {children}\n </SheetControllerContext.Provider>\n )\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["Sheet", "SheetImplementation", "position", "at"]
7
7
  }
@@ -3,13 +3,13 @@ import { AdaptParentContext } from "@tamagui/adapt";
3
3
  import { useComposedRefs } from "@tamagui/compose-refs";
4
4
  import {
5
5
  Theme,
6
- getAnimationDriver,
7
6
  isClient,
8
7
  isTouchable,
9
8
  isWeb,
10
9
  mergeEvent,
11
10
  styled,
12
11
  themeable,
12
+ useAnimationDriver,
13
13
  useDidFinishSSR,
14
14
  useEvent,
15
15
  useIsomorphicLayoutEffect,
@@ -174,7 +174,7 @@ const Sheet = withStaticProperties(
174
174
  sheetComponents
175
175
  );
176
176
  const SheetImplementation = themeable(
177
- forwardRef(function SheetImplementation2(props, ref) {
177
+ forwardRef(function SheetImplementation2(props, forwardedRef) {
178
178
  const parentSheet = useContext(ParentSheetContext);
179
179
  const { isHidden, controller } = useSheetContoller();
180
180
  const {
@@ -203,7 +203,9 @@ const SheetImplementation = themeable(
203
203
  );
204
204
  }
205
205
  }
206
- const driver = getAnimationDriver();
206
+ const sheetRef = useRef(null);
207
+ const ref = useComposedRefs(forwardedRef, sheetRef);
208
+ const driver = useAnimationDriver();
207
209
  if (!driver) {
208
210
  throw new Error("Must set animations in tamagui.config.ts");
209
211
  }
@@ -265,10 +267,18 @@ const SheetImplementation = themeable(
265
267
  const { useAnimatedNumber, useAnimatedNumberReaction, useAnimatedNumberStyle } = driver;
266
268
  const animatedNumber = useAnimatedNumber(HIDDEN_SIZE);
267
269
  const at = useRef(0);
268
- useAnimatedNumberReaction(animatedNumber, (value) => {
269
- at.current = value;
270
- scrollBridge.paneY = value;
271
- });
270
+ useAnimatedNumberReaction(
271
+ {
272
+ value: animatedNumber,
273
+ hostRef: sheetRef
274
+ },
275
+ (value) => {
276
+ if (!driver.isReactNative)
277
+ return;
278
+ at.current = value;
279
+ scrollBridge.paneY = value;
280
+ }
281
+ );
272
282
  function stopSpring() {
273
283
  animatedNumber.stop();
274
284
  if (scrollBridge.onFinishAnimate) {
@@ -472,16 +482,19 @@ const SheetImplementation = themeable(
472
482
  }),
473
483
  [zIndex]
474
484
  );
475
- const handleLayout = useCallback((e) => {
476
- var _a;
477
- let next = (_a = e.nativeEvent) == null ? void 0 : _a.layout.height;
478
- if (isWeb && isTouchable && !open) {
479
- next += 100;
480
- }
481
- if (!next)
482
- return;
483
- setFrameSize(() => next);
484
- }, [keyboardIsVisible]);
485
+ const handleLayout = useCallback(
486
+ (e) => {
487
+ var _a;
488
+ let next = (_a = e.nativeEvent) == null ? void 0 : _a.layout.height;
489
+ if (isWeb && isTouchable && !open) {
490
+ next += 100;
491
+ }
492
+ if (!next)
493
+ return;
494
+ setFrameSize(() => next);
495
+ },
496
+ [keyboardIsVisible]
497
+ );
485
498
  const removeScrollEnabled = forceRemoveScrollEnabled ?? (open && modal);
486
499
  const contents = /* @__PURE__ */ jsx(ParentSheetContext.Provider, { value: nextParentContext, children: /* @__PURE__ */ jsxs(
487
500
  SheetProvider,
@@ -508,6 +521,7 @@ const SheetImplementation = themeable(
508
521
  ...panResponder == null ? void 0 : panResponder.panHandlers,
509
522
  onLayout: handleLayout,
510
523
  pointerEvents: open && !shouldHideParentSheet ? "auto" : "none",
524
+ animation: props.animation,
511
525
  style: [
512
526
  {
513
527
  position: "absolute",