@tamagui/sheet 1.0.1-rc.6 → 1.0.1-rc.8
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 +16 -21
- package/dist/cjs/Sheet.js.map +2 -2
- package/dist/cjs/SheetContext.js +6 -3
- package/dist/cjs/SheetContext.js.map +2 -2
- package/dist/cjs/SheetScrollView.js +21 -6
- package/dist/cjs/SheetScrollView.js.map +3 -3
- package/dist/cjs/constants.js +35 -0
- package/dist/cjs/constants.js.map +7 -0
- package/dist/esm/Sheet.js +12 -17
- package/dist/esm/Sheet.js.map +2 -2
- package/dist/esm/SheetContext.js +5 -2
- package/dist/esm/SheetContext.js.map +2 -2
- package/dist/esm/SheetScrollView.js +23 -8
- package/dist/esm/SheetScrollView.js.map +3 -3
- package/dist/esm/constants.js +9 -0
- package/dist/esm/constants.js.map +7 -0
- package/dist/jsx/Sheet.js +8 -17
- package/dist/jsx/Sheet.js.map +2 -2
- package/dist/jsx/SheetContext.js +5 -2
- package/dist/jsx/SheetContext.js.map +2 -2
- package/dist/jsx/SheetScrollView.js +18 -6
- package/dist/jsx/SheetScrollView.js.map +3 -3
- package/dist/jsx/constants.js +9 -0
- package/dist/jsx/constants.js.map +7 -0
- package/package.json +11 -11
- package/src/Sheet.tsx +10 -2
- package/src/SheetContext.tsx +6 -3
- package/src/SheetScrollView.tsx +15 -3
- package/src/{SHEET_HANDLE_NAME.tsx → constants.tsx} +0 -0
- package/types/SheetContext.d.ts +2 -0
- package/types/constants.d.ts +4 -0
package/dist/cjs/Sheet.js
CHANGED
|
@@ -37,6 +37,7 @@ __export(Sheet_exports, {
|
|
|
37
37
|
});
|
|
38
38
|
module.exports = __toCommonJS(Sheet_exports);
|
|
39
39
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
40
|
+
var import_adapt = require("@tamagui/adapt");
|
|
40
41
|
var import_compose_refs = require("@tamagui/compose-refs");
|
|
41
42
|
var import_core = require("@tamagui/core");
|
|
42
43
|
var import_portal = require("@tamagui/portal");
|
|
@@ -46,12 +47,12 @@ var import_use_constant = require("@tamagui/use-constant");
|
|
|
46
47
|
var import_use_controllable_state = require("@tamagui/use-controllable-state");
|
|
47
48
|
var import_react = __toESM(require("react"));
|
|
48
49
|
var import_react_native = require("react-native");
|
|
49
|
-
var
|
|
50
|
+
var import_constants = require("./constants");
|
|
50
51
|
var import_SheetContext = require("./SheetContext");
|
|
51
52
|
var import_SheetScrollView = require("./SheetScrollView");
|
|
52
53
|
var import_SheetContext2 = require("./SheetContext");
|
|
53
54
|
const SheetHandleFrame = (0, import_core.styled)(import_stacks.XStack, {
|
|
54
|
-
name:
|
|
55
|
+
name: import_constants.SHEET_HANDLE_NAME,
|
|
55
56
|
height: 10,
|
|
56
57
|
borderRadius: 100,
|
|
57
58
|
backgroundColor: "$background",
|
|
@@ -76,7 +77,7 @@ const SheetHandleFrame = (0, import_core.styled)(import_stacks.XStack, {
|
|
|
76
77
|
});
|
|
77
78
|
const SheetHandle = SheetHandleFrame.extractable(
|
|
78
79
|
({ __scopeSheet, ...props }) => {
|
|
79
|
-
const context = (0, import_SheetContext.useSheetContext)(
|
|
80
|
+
const context = (0, import_SheetContext.useSheetContext)(import_constants.SHEET_HANDLE_NAME, __scopeSheet);
|
|
80
81
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SheetHandleFrame, {
|
|
81
82
|
onPress: () => {
|
|
82
83
|
const max = context.snapPoints.length + (context.dismissOnSnapToBottom ? -1 : 0);
|
|
@@ -127,7 +128,7 @@ if (selectionStyleSheet) {
|
|
|
127
128
|
document.head.appendChild(selectionStyleSheet);
|
|
128
129
|
}
|
|
129
130
|
const SheetFrameFrame = (0, import_core.styled)(import_stacks.YStack, {
|
|
130
|
-
name:
|
|
131
|
+
name: import_constants.SHEET_NAME,
|
|
131
132
|
flex: 1,
|
|
132
133
|
backgroundColor: "$background",
|
|
133
134
|
borderTopLeftRadius: "$4",
|
|
@@ -140,7 +141,7 @@ const SheetFrameFrame = (0, import_core.styled)(import_stacks.YStack, {
|
|
|
140
141
|
const SheetFrame = SheetFrameFrame.extractable(
|
|
141
142
|
(0, import_react.forwardRef)(
|
|
142
143
|
({ __scopeSheet, ...props }, forwardedRef) => {
|
|
143
|
-
const context = (0, import_SheetContext.useSheetContext)(
|
|
144
|
+
const context = (0, import_SheetContext.useSheetContext)(import_constants.SHEET_NAME, __scopeSheet);
|
|
144
145
|
const composedContentRef = (0, import_compose_refs.useComposedRefs)(forwardedRef, context.contentRef);
|
|
145
146
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SheetFrameFrame, {
|
|
146
147
|
ref: composedContentRef,
|
|
@@ -430,14 +431,7 @@ const SheetImplementation = (0, import_core.themeable)(
|
|
|
430
431
|
onPanResponderRelease: finish
|
|
431
432
|
});
|
|
432
433
|
},
|
|
433
|
-
[
|
|
434
|
-
disableDrag,
|
|
435
|
-
isShowingInnerSheet,
|
|
436
|
-
animateTo,
|
|
437
|
-
frameSize,
|
|
438
|
-
positions,
|
|
439
|
-
setPosition
|
|
440
|
-
]
|
|
434
|
+
[disableDrag, isShowingInnerSheet, animateTo, frameSize, positions, setPosition]
|
|
441
435
|
);
|
|
442
436
|
let handleComponent = null;
|
|
443
437
|
let overlayComponent = null;
|
|
@@ -501,10 +495,11 @@ const SheetImplementation = (0, import_core.themeable)(
|
|
|
501
495
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_SheetContext.SheetProvider, {
|
|
502
496
|
modal,
|
|
503
497
|
contentRef,
|
|
498
|
+
frameSize,
|
|
504
499
|
dismissOnOverlayPress,
|
|
505
500
|
dismissOnSnapToBottom,
|
|
506
501
|
open,
|
|
507
|
-
hidden: isHidden,
|
|
502
|
+
hidden: !!isHidden,
|
|
508
503
|
scope: __scopeSheet,
|
|
509
504
|
position,
|
|
510
505
|
snapPoints,
|
|
@@ -543,12 +538,16 @@ const SheetImplementation = (0, import_core.themeable)(
|
|
|
543
538
|
]
|
|
544
539
|
})
|
|
545
540
|
});
|
|
541
|
+
const adaptContext = (0, import_react.useContext)(import_adapt.AdaptParentContext);
|
|
546
542
|
if (modal) {
|
|
547
543
|
const modalContents = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_portal.Portal, {
|
|
548
544
|
zIndex,
|
|
549
545
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_core.Theme, {
|
|
550
546
|
name: themeName,
|
|
551
|
-
children:
|
|
547
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_adapt.AdaptParentContext.Provider, {
|
|
548
|
+
value: adaptContext,
|
|
549
|
+
children: contents
|
|
550
|
+
})
|
|
552
551
|
})
|
|
553
552
|
});
|
|
554
553
|
if (import_core.isWeb) {
|
|
@@ -563,9 +562,7 @@ const SheetImplementation = (0, import_core.themeable)(
|
|
|
563
562
|
}),
|
|
564
563
|
{ componentName: "Sheet" }
|
|
565
564
|
);
|
|
566
|
-
const SheetInsideSheetContext = (0, import_react.createContext)(
|
|
567
|
-
null
|
|
568
|
-
);
|
|
565
|
+
const SheetInsideSheetContext = (0, import_react.createContext)(null);
|
|
569
566
|
const ControlledSheet = Sheet;
|
|
570
567
|
function getPercentSize(point, frameSize) {
|
|
571
568
|
if (!frameSize)
|
|
@@ -588,9 +585,7 @@ function resisted(y, minY, maxOverflow = 25) {
|
|
|
588
585
|
}
|
|
589
586
|
return y;
|
|
590
587
|
}
|
|
591
|
-
const SheetControllerContext = (0, import_react.createContext)(
|
|
592
|
-
null
|
|
593
|
-
);
|
|
588
|
+
const SheetControllerContext = (0, import_react.createContext)(null);
|
|
594
589
|
const SheetController = ({
|
|
595
590
|
children,
|
|
596
591
|
onOpenChange: onOpenChangeProp,
|
package/dist/cjs/Sheet.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/Sheet.tsx"],
|
|
4
|
-
"sourcesContent": ["import { 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 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 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 GestureResponderEvent,\n PanResponder,\n PanResponderGestureState,\n View,\n} from 'react-native'\n\nimport { SHEET_HANDLE_NAME, SHEET_NAME } from './SHEET_HANDLE_NAME'\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 =\n 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 // TODO this should be $background without opacity and just customized by theme\n backgroundColor: '$color',\n fullscreen: true,\n opacity: 0.2,\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: '$4',\n borderTopRightRadius: '$4',\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 { isShowingNonSheet } = useSheetContoller()\n\n /**\n * Performance is sensitive here so avoid all the hooks below with this\n */\n if (isShowingNonSheet) {\n return null\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 disableDrag: disableDragProp,\n modal = false,\n handleDisableScroll = true,\n zIndex = parentSheet.zIndex + 1,\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 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 animatedNumber = driver.useAnimatedNumber(HIDDEN_SIZE)\n\n // native only fix\n const at = useRef(0)\n driver.useAnimatedNumberReaction(animatedNumber, (value) => {\n at.current = value\n scrollBridge.paneY = value\n })\n\n const [isResizing, setIsResizing] = useState(true)\n useIsomorphicLayoutEffect(() => {\n if (!isResizing) {\n setIsResizing(true)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [modal])\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 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 || isResizing) {\n if (isResizing) {\n setIsResizing(false)\n }\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 = (\n _e: GestureResponderEvent,\n state: PanResponderGestureState,\n ) => {\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 const isAtTop = scrollBridge.paneY <= scrollBridge.paneMinY\n if (isScrolled) {\n previouslyScrolling = true\n return false\n }\n if (previouslyScrolling) {\n previouslyScrolling = false\n return true\n }\n // prevent drag once at top and pulling up\n if (isAtTop) {\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 [\n disableDrag,\n isShowingInnerSheet,\n animateTo,\n frameSize,\n positions,\n setPosition,\n ],\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 = driver.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\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((prev) => {\n const isBigChange = Math.abs(prev - next) > 20\n setIsResizing(isBigChange)\n return next\n })\n }, [])\n\n const contents = (\n <ParentSheetContext.Provider value={nextParentContext}>\n <SheetProvider\n modal={modal}\n contentRef={contentRef}\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 {isResizing || shouldHideParentSheet ? null : overlayComponent}\n\n <AnimatedView\n debug=\"verbose\"\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 },\n animatedStyle,\n ]}\n >\n {handleComponent}\n\n <RemoveScroll\n enabled={open && modal && handleDisableScroll}\n as={Slot}\n allowPinchZoom\n shards={[contentRef]}\n // causes lots of bugs on touch web on site\n removeScrollBar={false}\n >\n {isResizing ? null : frameComponent}\n </RemoveScroll>\n </AnimatedView>\n </SheetProvider>\n </ParentSheetContext.Provider>\n )\n\n if (modal) {\n const modalContents = (\n <Portal zIndex={zIndex}>\n <Theme name={themeName}>{contents}</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>(\n null,\n)\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?:\n | React.Dispatch<React.SetStateAction<boolean>>\n | ((val: boolean) => void)\n}\n\nconst SheetControllerContext = createContext<SheetControllerContextValue | null>(\n null,\n)\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 getAnimationDriver,\n isClient,\n isTouchable,\n isWeb,\n mergeEvent,\n styled,\n themeable,\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 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 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 // TODO this should be $background without opacity and just customized by theme\n backgroundColor: '$color',\n fullscreen: true,\n opacity: 0.2,\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: '$4',\n borderTopRightRadius: '$4',\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 { isShowingNonSheet } = useSheetContoller()\n\n /**\n * Performance is sensitive here so avoid all the hooks below with this\n */\n if (isShowingNonSheet) {\n return null\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 disableDrag: disableDragProp,\n modal = false,\n handleDisableScroll = true,\n zIndex = parentSheet.zIndex + 1,\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 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 animatedNumber = driver.useAnimatedNumber(HIDDEN_SIZE)\n\n // native only fix\n const at = useRef(0)\n driver.useAnimatedNumberReaction(animatedNumber, (value) => {\n at.current = value\n scrollBridge.paneY = value\n })\n\n const [isResizing, setIsResizing] = useState(true)\n useIsomorphicLayoutEffect(() => {\n if (!isResizing) {\n setIsResizing(true)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [modal])\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 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 || isResizing) {\n if (isResizing) {\n setIsResizing(false)\n }\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 const isAtTop = scrollBridge.paneY <= scrollBridge.paneMinY\n if (isScrolled) {\n previouslyScrolling = true\n return false\n }\n if (previouslyScrolling) {\n previouslyScrolling = false\n return true\n }\n // prevent drag once at top and pulling up\n if (isAtTop) {\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 = driver.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\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((prev) => {\n const isBigChange = Math.abs(prev - next) > 20\n setIsResizing(isBigChange)\n return next\n })\n }, [])\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 {isResizing || shouldHideParentSheet ? null : overlayComponent}\n\n <AnimatedView\n debug=\"verbose\"\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 },\n animatedStyle,\n ]}\n >\n {handleComponent}\n\n <RemoveScroll\n enabled={open && modal && handleDisableScroll}\n as={Slot}\n allowPinchZoom\n shards={[contentRef]}\n // causes lots of bugs on touch web on site\n removeScrollBar={false}\n >\n {isResizing ? null : 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}>\n <Theme 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
|
}
|
package/dist/cjs/SheetContext.js
CHANGED
|
@@ -25,9 +25,12 @@ __export(SheetContext_exports, {
|
|
|
25
25
|
});
|
|
26
26
|
module.exports = __toCommonJS(SheetContext_exports);
|
|
27
27
|
var import_create_context = require("@tamagui/create-context");
|
|
28
|
-
var
|
|
29
|
-
const [createSheetContext, createSheetScope] = (0, import_create_context.createContextScope)(
|
|
30
|
-
const [SheetProvider, useSheetContext] = createSheetContext(
|
|
28
|
+
var import_constants = require("./constants");
|
|
29
|
+
const [createSheetContext, createSheetScope] = (0, import_create_context.createContextScope)(import_constants.SHEET_NAME);
|
|
30
|
+
const [SheetProvider, useSheetContext] = createSheetContext(
|
|
31
|
+
import_constants.SHEET_NAME,
|
|
32
|
+
{}
|
|
33
|
+
);
|
|
31
34
|
// Annotate the CommonJS export names for ESM import in node:
|
|
32
35
|
0 && (module.exports = {
|
|
33
36
|
SheetProvider,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/SheetContext.tsx"],
|
|
4
|
-
"sourcesContent": ["import { TamaguiElement } from '@tamagui/core'\nimport { createContextScope } from '@tamagui/create-context'\nimport React from 'react'\n\nimport { SHEET_NAME } from './
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,4BAAmC;AAGnC
|
|
4
|
+
"sourcesContent": ["import { TamaguiElement } from '@tamagui/core'\nimport { createContextScope } from '@tamagui/create-context'\nimport React from 'react'\n\nimport { SHEET_NAME } from './constants'\nimport { PositionChangeHandler, ScrollBridge, SheetProps } from './types'\n\ntype SheetContextValue = Required<\n Pick<SheetProps, 'open' | 'position' | 'snapPoints' | 'dismissOnOverlayPress'>\n> & {\n hidden: boolean\n setPosition: PositionChangeHandler\n setOpen: React.Dispatch<React.SetStateAction<boolean>>\n contentRef: React.RefObject<TamaguiElement>\n dismissOnSnapToBottom: boolean\n scrollBridge: ScrollBridge\n frameSize: number\n modal: boolean\n}\n\nexport const [createSheetContext, createSheetScope] = createContextScope(SHEET_NAME)\n\nexport const [SheetProvider, useSheetContext] = createSheetContext<SheetContextValue>(\n SHEET_NAME,\n {} as any\n)\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,4BAAmC;AAGnC,uBAA2B;AAgBpB,MAAM,CAAC,oBAAoB,gBAAgB,QAAI,0CAAmB,2BAAU;AAE5E,MAAM,CAAC,eAAe,eAAe,IAAI;AAAA,EAC9C;AAAA,EACA,CAAC;AACH;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -29,15 +29,24 @@ var import_SheetContext = require("./SheetContext");
|
|
|
29
29
|
const SHEET_SCROLL_VIEW_NAME = "SheetScrollView";
|
|
30
30
|
const SheetScrollView = (0, import_react.forwardRef)(
|
|
31
31
|
({ __scopeSheet, children, ...props }, ref) => {
|
|
32
|
-
const { scrollBridge } = (0, import_SheetContext.useSheetContext)(
|
|
32
|
+
const { scrollBridge, position, snapPoints, frameSize, open } = (0, import_SheetContext.useSheetContext)(
|
|
33
|
+
SHEET_SCROLL_VIEW_NAME,
|
|
34
|
+
__scopeSheet
|
|
35
|
+
);
|
|
33
36
|
const [scrollEnabled, setScrollEnabled_] = (0, import_react.useState)(true);
|
|
34
37
|
const scrollRef = (0, import_react.useRef)(null);
|
|
35
|
-
const
|
|
38
|
+
const percentOpened = snapPoints[position] ?? 0;
|
|
39
|
+
const [percentToPadBottom, setPercentToPadBottom] = (0, import_react.useState)(0);
|
|
40
|
+
const next = 100 - percentOpened;
|
|
41
|
+
if (open && next !== percentToPadBottom) {
|
|
42
|
+
setPercentToPadBottom(next);
|
|
43
|
+
}
|
|
44
|
+
const setScrollEnabled = (next2) => {
|
|
36
45
|
var _a, _b;
|
|
37
46
|
(_b = (_a = scrollRef.current) == null ? void 0 : _a.setNativeProps) == null ? void 0 : _b.call(_a, {
|
|
38
|
-
scrollEnabled:
|
|
47
|
+
scrollEnabled: next2
|
|
39
48
|
});
|
|
40
|
-
setScrollEnabled_(
|
|
49
|
+
setScrollEnabled_(next2);
|
|
41
50
|
};
|
|
42
51
|
const state = (0, import_react.useRef)({
|
|
43
52
|
lastPageY: 0,
|
|
@@ -62,7 +71,7 @@ const SheetScrollView = (0, import_react.forwardRef)(
|
|
|
62
71
|
vy
|
|
63
72
|
});
|
|
64
73
|
};
|
|
65
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.
|
|
74
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_scroll_view.ScrollView, {
|
|
66
75
|
ref: (0, import_core.composeRefs)(scrollRef, ref),
|
|
67
76
|
flex: 1,
|
|
68
77
|
scrollEventThrottle: 8,
|
|
@@ -81,7 +90,13 @@ const SheetScrollView = (0, import_react.forwardRef)(
|
|
|
81
90
|
onMoveShouldSetResponder: () => true,
|
|
82
91
|
onResponderRelease: release,
|
|
83
92
|
...props,
|
|
84
|
-
children:
|
|
93
|
+
children: [
|
|
94
|
+
(0, import_react.useMemo)(() => children, [children]),
|
|
95
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_core.Stack, {
|
|
96
|
+
height: percentToPadBottom / 100 * frameSize,
|
|
97
|
+
width: 0
|
|
98
|
+
})
|
|
99
|
+
]
|
|
85
100
|
});
|
|
86
101
|
}
|
|
87
102
|
);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/SheetScrollView.tsx"],
|
|
4
|
-
"sourcesContent": ["import { TamaguiElement, composeRefs } from '@tamagui/core'\nimport { ScrollView, ScrollViewProps } from '@tamagui/scroll-view'\nimport { forwardRef, useMemo, useRef, useState } from 'react'\nimport { ScrollView as RNScrollView } from 'react-native'\n\nimport { useSheetContext } from './SheetContext'\nimport { SheetScopedProps } from './types'\n\n// TODO ideally would replicate https://github.com/ammarahm-ed/react-native-actions-sheet/blob/master/src/index.tsx\n\n/* -------------------------------------------------------------------------------------------------\n * SheetScrollView\n * -----------------------------------------------------------------------------------------------*/\n\nconst SHEET_SCROLL_VIEW_NAME = 'SheetScrollView'\n\nexport const SheetScrollView = forwardRef<TamaguiElement, ScrollViewProps>(\n ({ __scopeSheet, children, ...props }: SheetScopedProps<ScrollViewProps>, ref) => {\n const { scrollBridge } = useSheetContext(SHEET_SCROLL_VIEW_NAME
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
6
|
-
"names": []
|
|
4
|
+
"sourcesContent": ["import { Stack, TamaguiElement, composeRefs } from '@tamagui/core'\nimport { ScrollView, ScrollViewProps } from '@tamagui/scroll-view'\nimport { forwardRef, useMemo, useRef, useState } from 'react'\nimport { ScrollView as RNScrollView } from 'react-native'\n\nimport { useSheetContext } from './SheetContext'\nimport { SheetScopedProps } from './types'\n\n// TODO ideally would replicate https://github.com/ammarahm-ed/react-native-actions-sheet/blob/master/src/index.tsx\n\n/* -------------------------------------------------------------------------------------------------\n * SheetScrollView\n * -----------------------------------------------------------------------------------------------*/\n\nconst SHEET_SCROLL_VIEW_NAME = 'SheetScrollView'\n\nexport const SheetScrollView = forwardRef<TamaguiElement, ScrollViewProps>(\n ({ __scopeSheet, children, ...props }: SheetScopedProps<ScrollViewProps>, ref) => {\n const { scrollBridge, position, snapPoints, frameSize, open } = useSheetContext(\n SHEET_SCROLL_VIEW_NAME,\n __scopeSheet\n )\n const [scrollEnabled, setScrollEnabled_] = useState(true)\n const scrollRef = useRef<RNScrollView | null>(null)\n\n const percentOpened = snapPoints[position] ?? 0\n const [percentToPadBottom, setPercentToPadBottom] = useState(0)\n\n const next = 100 - percentOpened\n if (open && next !== percentToPadBottom) {\n setPercentToPadBottom(next)\n }\n\n const setScrollEnabled = (next: boolean) => {\n scrollRef.current?.setNativeProps?.({\n scrollEnabled: next,\n })\n setScrollEnabled_(next)\n }\n\n const state = useRef({\n lastPageY: 0,\n dragAt: 0,\n dys: [] as number[], // store a few recent dys to get velocity on release\n isScrolling: false,\n })\n\n const release = () => {\n scrollBridge.scrollStartY = -1\n state.current.isScrolling = false\n setScrollEnabled(true)\n let vy = 0\n if (state.current.dys.length) {\n const recentDys = state.current.dys.slice(-10)\n const dist = recentDys.length ? recentDys.reduce((a, b) => a + b, 0) : 0\n const avgDy = dist / recentDys.length\n vy = avgDy * 0.04\n }\n state.current.dys = []\n scrollBridge.release({\n dragAt: state.current.dragAt,\n vy,\n })\n }\n\n return (\n <ScrollView\n ref={composeRefs(scrollRef as any, ref)}\n flex={1}\n scrollEventThrottle={8}\n scrollEnabled={scrollEnabled}\n onScroll={(e) => {\n const { y } = e.nativeEvent.contentOffset\n scrollBridge.y = y\n if (y > 0) {\n scrollBridge.scrollStartY = -1\n }\n }}\n onStartShouldSetResponder={() => {\n scrollBridge.scrollStartY = -1\n return true\n }}\n onMoveShouldSetResponder={() => true}\n // somehow disabling works better, regression, no more nice drag continue scroll\n // onResponderMove={(e) => {\n // const { pageY } = e.nativeEvent\n\n // if (state.current.isScrolling) {\n // return\n // }\n\n // if (scrollBridge.scrollStartY === -1) {\n // scrollBridge.scrollStartY = pageY\n // state.current.lastPageY = pageY\n // }\n\n // const dragAt = pageY - scrollBridge.scrollStartY\n // const dy = pageY - state.current.lastPageY\n // state.current.lastPageY = pageY // after dy\n // const isDraggingUp = dy < 0\n // const isPaneAtTop = scrollBridge.paneY <= scrollBridge.paneMinY\n\n // if ((dy === 0 || isDraggingUp) && isPaneAtTop) {\n // state.current.isScrolling = true\n // setScrollEnabled(true)\n // return\n // }\n\n // setScrollEnabled(false)\n // scrollBridge.drag(dragAt)\n // state.current.dragAt = dragAt\n // state.current.dys.push(dy)\n // // only do every so often, cut down to 10 again\n // if (state.current.dys.length > 100) {\n // state.current.dys = state.current.dys.slice(-10)\n // }\n // }}\n onResponderRelease={release}\n {...props}\n >\n {useMemo(() => children, [children])}\n <Stack height={(percentToPadBottom / 100) * frameSize} width={0} />\n </ScrollView>\n )\n }\n)\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkEM;AAlEN,kBAAmD;AACnD,yBAA4C;AAC5C,mBAAsD;AAGtD,0BAAgC;AAShC,MAAM,yBAAyB;AAExB,MAAM,sBAAkB;AAAA,EAC7B,CAAC,EAAE,cAAc,aAAa,MAAM,GAAsC,QAAQ;AAChF,UAAM,EAAE,cAAc,UAAU,YAAY,WAAW,KAAK,QAAI;AAAA,MAC9D;AAAA,MACA;AAAA,IACF;AACA,UAAM,CAAC,eAAe,iBAAiB,QAAI,uBAAS,IAAI;AACxD,UAAM,gBAAY,qBAA4B,IAAI;AAElD,UAAM,gBAAgB,WAAW,aAAa;AAC9C,UAAM,CAAC,oBAAoB,qBAAqB,QAAI,uBAAS,CAAC;AAE9D,UAAM,OAAO,MAAM;AACnB,QAAI,QAAQ,SAAS,oBAAoB;AACvC,4BAAsB,IAAI;AAAA,IAC5B;AAEA,UAAM,mBAAmB,CAACA,UAAkB;AAjChD;AAkCM,4BAAU,YAAV,mBAAmB,mBAAnB,4BAAoC;AAAA,QAClC,eAAeA;AAAA,MACjB;AACA,wBAAkBA,KAAI;AAAA,IACxB;AAEA,UAAM,YAAQ,qBAAO;AAAA,MACnB,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,KAAK,CAAC;AAAA,MACN,aAAa;AAAA,IACf,CAAC;AAED,UAAM,UAAU,MAAM;AACpB,mBAAa,eAAe;AAC5B,YAAM,QAAQ,cAAc;AAC5B,uBAAiB,IAAI;AACrB,UAAI,KAAK;AACT,UAAI,MAAM,QAAQ,IAAI,QAAQ;AAC5B,cAAM,YAAY,MAAM,QAAQ,IAAI,MAAM,GAAG;AAC7C,cAAM,OAAO,UAAU,SAAS,UAAU,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,IAAI;AACvE,cAAM,QAAQ,OAAO,UAAU;AAC/B,aAAK,QAAQ;AAAA,MACf;AACA,YAAM,QAAQ,MAAM,CAAC;AACrB,mBAAa,QAAQ;AAAA,QACnB,QAAQ,MAAM,QAAQ;AAAA,QACtB;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WACE,6CAAC;AAAA,MACC,SAAK,yBAAY,WAAkB,GAAG;AAAA,MACtC,MAAM;AAAA,MACN,qBAAqB;AAAA,MACrB;AAAA,MACA,UAAU,CAAC,MAAM;AACf,cAAM,EAAE,EAAE,IAAI,EAAE,YAAY;AAC5B,qBAAa,IAAI;AACjB,YAAI,IAAI,GAAG;AACT,uBAAa,eAAe;AAAA,QAC9B;AAAA,MACF;AAAA,MACA,2BAA2B,MAAM;AAC/B,qBAAa,eAAe;AAC5B,eAAO;AAAA,MACT;AAAA,MACA,0BAA0B,MAAM;AAAA,MAmChC,oBAAoB;AAAA,MACnB,GAAG;AAAA,MAEH;AAAA,kCAAQ,MAAM,UAAU,CAAC,QAAQ,CAAC;AAAA,QACnC,4CAAC;AAAA,UAAM,QAAS,qBAAqB,MAAO;AAAA,UAAW,OAAO;AAAA,SAAG;AAAA;AAAA,KACnE;AAAA,EAEJ;AACF;",
|
|
6
|
+
"names": ["next"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var constants_exports = {};
|
|
20
|
+
__export(constants_exports, {
|
|
21
|
+
SHEET_HANDLE_NAME: () => SHEET_HANDLE_NAME,
|
|
22
|
+
SHEET_NAME: () => SHEET_NAME,
|
|
23
|
+
constants: () => constants
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(constants_exports);
|
|
26
|
+
const constants = {};
|
|
27
|
+
const SHEET_NAME = "Sheet";
|
|
28
|
+
const SHEET_HANDLE_NAME = "SheetHandle";
|
|
29
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
30
|
+
0 && (module.exports = {
|
|
31
|
+
SHEET_HANDLE_NAME,
|
|
32
|
+
SHEET_NAME,
|
|
33
|
+
constants
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/constants.tsx"],
|
|
4
|
+
"sourcesContent": ["export const constants = {}\n\nexport const SHEET_NAME = 'Sheet'\nexport const SHEET_HANDLE_NAME = 'SheetHandle'\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,YAAY,CAAC;AAEnB,MAAM,aAAa;AACnB,MAAM,oBAAoB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/esm/Sheet.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { AdaptParentContext } from "@tamagui/adapt";
|
|
2
3
|
import { useComposedRefs } from "@tamagui/compose-refs";
|
|
3
4
|
import {
|
|
4
5
|
Slot,
|
|
@@ -34,7 +35,7 @@ import React, {
|
|
|
34
35
|
import {
|
|
35
36
|
PanResponder
|
|
36
37
|
} from "react-native";
|
|
37
|
-
import { SHEET_HANDLE_NAME, SHEET_NAME } from "./
|
|
38
|
+
import { SHEET_HANDLE_NAME, SHEET_NAME } from "./constants";
|
|
38
39
|
import { SheetProvider, useSheetContext } from "./SheetContext";
|
|
39
40
|
import { SheetScrollView } from "./SheetScrollView";
|
|
40
41
|
import { createSheetScope } from "./SheetContext";
|
|
@@ -418,14 +419,7 @@ const SheetImplementation = themeable(
|
|
|
418
419
|
onPanResponderRelease: finish
|
|
419
420
|
});
|
|
420
421
|
},
|
|
421
|
-
[
|
|
422
|
-
disableDrag,
|
|
423
|
-
isShowingInnerSheet,
|
|
424
|
-
animateTo,
|
|
425
|
-
frameSize,
|
|
426
|
-
positions,
|
|
427
|
-
setPosition
|
|
428
|
-
]
|
|
422
|
+
[disableDrag, isShowingInnerSheet, animateTo, frameSize, positions, setPosition]
|
|
429
423
|
);
|
|
430
424
|
let handleComponent = null;
|
|
431
425
|
let overlayComponent = null;
|
|
@@ -489,10 +483,11 @@ const SheetImplementation = themeable(
|
|
|
489
483
|
children: /* @__PURE__ */ jsxs(SheetProvider, {
|
|
490
484
|
modal,
|
|
491
485
|
contentRef,
|
|
486
|
+
frameSize,
|
|
492
487
|
dismissOnOverlayPress,
|
|
493
488
|
dismissOnSnapToBottom,
|
|
494
489
|
open,
|
|
495
|
-
hidden: isHidden,
|
|
490
|
+
hidden: !!isHidden,
|
|
496
491
|
scope: __scopeSheet,
|
|
497
492
|
position,
|
|
498
493
|
snapPoints,
|
|
@@ -531,12 +526,16 @@ const SheetImplementation = themeable(
|
|
|
531
526
|
]
|
|
532
527
|
})
|
|
533
528
|
});
|
|
529
|
+
const adaptContext = useContext(AdaptParentContext);
|
|
534
530
|
if (modal) {
|
|
535
531
|
const modalContents = /* @__PURE__ */ jsx(Portal, {
|
|
536
532
|
zIndex,
|
|
537
533
|
children: /* @__PURE__ */ jsx(Theme, {
|
|
538
534
|
name: themeName,
|
|
539
|
-
children:
|
|
535
|
+
children: /* @__PURE__ */ jsx(AdaptParentContext.Provider, {
|
|
536
|
+
value: adaptContext,
|
|
537
|
+
children: contents
|
|
538
|
+
})
|
|
540
539
|
})
|
|
541
540
|
});
|
|
542
541
|
if (isWeb) {
|
|
@@ -551,9 +550,7 @@ const SheetImplementation = themeable(
|
|
|
551
550
|
}),
|
|
552
551
|
{ componentName: "Sheet" }
|
|
553
552
|
);
|
|
554
|
-
const SheetInsideSheetContext = createContext(
|
|
555
|
-
null
|
|
556
|
-
);
|
|
553
|
+
const SheetInsideSheetContext = createContext(null);
|
|
557
554
|
const ControlledSheet = Sheet;
|
|
558
555
|
function getPercentSize(point, frameSize) {
|
|
559
556
|
if (!frameSize)
|
|
@@ -576,9 +573,7 @@ function resisted(y, minY, maxOverflow = 25) {
|
|
|
576
573
|
}
|
|
577
574
|
return y;
|
|
578
575
|
}
|
|
579
|
-
const SheetControllerContext = createContext(
|
|
580
|
-
null
|
|
581
|
-
);
|
|
576
|
+
const SheetControllerContext = createContext(null);
|
|
582
577
|
const SheetController = ({
|
|
583
578
|
children,
|
|
584
579
|
onOpenChange: onOpenChangeProp,
|