@tamagui/sheet 1.0.1-beta.111 → 1.0.1-beta.114
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 +155 -32
- package/dist/cjs/Sheet.js.map +2 -2
- package/dist/esm/Sheet.js +158 -34
- package/dist/esm/Sheet.js.map +2 -2
- package/dist/jsx/Sheet.js +150 -32
- package/dist/jsx/Sheet.js.map +2 -2
- package/package.json +8 -8
- package/src/Sheet.tsx +247 -68
- package/types/Sheet.d.ts +3 -1
- package/types/Sheet.d.ts.map +1 -1
package/dist/jsx/Sheet.js
CHANGED
|
@@ -7,7 +7,9 @@ import {
|
|
|
7
7
|
mergeEvent,
|
|
8
8
|
styled,
|
|
9
9
|
themeable,
|
|
10
|
+
useConstant,
|
|
10
11
|
useEvent,
|
|
12
|
+
useIsomorphicLayoutEffect,
|
|
11
13
|
useThemeName,
|
|
12
14
|
withStaticProperties
|
|
13
15
|
} from "@tamagui/core";
|
|
@@ -23,14 +25,14 @@ import React, {
|
|
|
23
25
|
useCallback,
|
|
24
26
|
useContext,
|
|
25
27
|
useEffect,
|
|
26
|
-
useLayoutEffect,
|
|
27
28
|
useMemo,
|
|
28
29
|
useRef,
|
|
29
30
|
useState
|
|
30
31
|
} from "react";
|
|
31
32
|
import {
|
|
32
33
|
Animated,
|
|
33
|
-
PanResponder
|
|
34
|
+
PanResponder,
|
|
35
|
+
ScrollView
|
|
34
36
|
} from "react-native";
|
|
35
37
|
const SHEET_NAME = "Sheet";
|
|
36
38
|
const SHEET_HANDLE_NAME = "SheetHandle";
|
|
@@ -89,13 +91,69 @@ const SheetOverlay = SheetOverlayFrame.extractable(({ __scopeSheet, ...props })
|
|
|
89
91
|
context.setOpen(false);
|
|
90
92
|
} : void 0)} /></RemoveScroll>;
|
|
91
93
|
});
|
|
94
|
+
const SHEET_SCROLL_VIEW_NAME = "SheetScrollView";
|
|
95
|
+
const SheetScrollView = forwardRef(({ __scopeSheet, ...props }, ref) => {
|
|
96
|
+
const { scrollBridge } = useSheetContext(SHEET_SCROLL_VIEW_NAME, __scopeSheet);
|
|
97
|
+
const [scrollEnabled, setScrollEnabled] = useState(true);
|
|
98
|
+
const state = useRef({
|
|
99
|
+
dy: 0,
|
|
100
|
+
dys: []
|
|
101
|
+
});
|
|
102
|
+
const release = () => {
|
|
103
|
+
setScrollEnabled(true);
|
|
104
|
+
const recentDys = state.current.dys.slice(-10);
|
|
105
|
+
const dist = recentDys.length ? recentDys.reduce((a, b, i) => {
|
|
106
|
+
var _a;
|
|
107
|
+
return a + b - ((_a = recentDys[i - 1]) != null ? _a : recentDys[0]);
|
|
108
|
+
}, 0) : 0;
|
|
109
|
+
const avgDy = dist / recentDys.length;
|
|
110
|
+
const vy = avgDy * 0.1;
|
|
111
|
+
state.current.dys = [];
|
|
112
|
+
scrollBridge.release({
|
|
113
|
+
dy: state.current.dy,
|
|
114
|
+
vy
|
|
115
|
+
});
|
|
116
|
+
};
|
|
117
|
+
return <ScrollView ref={ref} onScrollBeginDrag={() => {
|
|
118
|
+
console.log("begin drag");
|
|
119
|
+
}} scrollEventThrottle={16} scrollEnabled={scrollEnabled} onScroll={(e) => {
|
|
120
|
+
const { y } = e.nativeEvent.contentOffset;
|
|
121
|
+
scrollBridge.y = y;
|
|
122
|
+
if (y > 0) {
|
|
123
|
+
scrollBridge.scrollStartY = -1;
|
|
124
|
+
}
|
|
125
|
+
}} onResponderMove={(e) => {
|
|
126
|
+
const { pageY } = e.nativeEvent;
|
|
127
|
+
if (scrollBridge.y === 0) {
|
|
128
|
+
if (scrollBridge.scrollStartY === -1) {
|
|
129
|
+
scrollBridge.scrollStartY = pageY;
|
|
130
|
+
}
|
|
131
|
+
const dy = pageY - scrollBridge.scrollStartY;
|
|
132
|
+
if (dy <= 0) {
|
|
133
|
+
setScrollEnabled(true);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
setScrollEnabled(false);
|
|
137
|
+
scrollBridge.drag(dy);
|
|
138
|
+
state.current.dy = dy;
|
|
139
|
+
state.current.dys.push(dy);
|
|
140
|
+
if (state.current.dys.length > 100) {
|
|
141
|
+
state.current.dys = state.current.dys.slice(-10);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}} onResponderRelease={release} {...props} style={[
|
|
145
|
+
{
|
|
146
|
+
flex: 1
|
|
147
|
+
},
|
|
148
|
+
props.style
|
|
149
|
+
]} />;
|
|
150
|
+
});
|
|
92
151
|
const selectionStyleSheet = isClient ? document.createElement("style") : null;
|
|
93
152
|
if (selectionStyleSheet) {
|
|
94
153
|
document.head.appendChild(selectionStyleSheet);
|
|
95
154
|
}
|
|
96
|
-
const SHEET_FRAME_NAME = "SheetFrame";
|
|
97
155
|
const SheetFrameFrame = styled(YStack, {
|
|
98
|
-
name:
|
|
156
|
+
name: SHEET_NAME,
|
|
99
157
|
flex: 1,
|
|
100
158
|
backgroundColor: "$background",
|
|
101
159
|
borderTopLeftRadius: "$4",
|
|
@@ -106,7 +164,7 @@ const SheetFrameFrame = styled(YStack, {
|
|
|
106
164
|
pointerEvents: "auto"
|
|
107
165
|
});
|
|
108
166
|
const SheetFrame = SheetFrameFrame.extractable(forwardRef(({ __scopeSheet, ...props }, forwardedRef) => {
|
|
109
|
-
const context = useSheetContext(
|
|
167
|
+
const context = useSheetContext(SHEET_NAME, __scopeSheet);
|
|
110
168
|
const composedContentRef = useComposedRefs(forwardedRef, context.contentRef);
|
|
111
169
|
return <SheetFrameFrame ref={composedContentRef} {...props} />;
|
|
112
170
|
}));
|
|
@@ -130,11 +188,25 @@ const Sheet = withStaticProperties(themeable(forwardRef((props, ref) => {
|
|
|
130
188
|
modal,
|
|
131
189
|
allowPinchZoom
|
|
132
190
|
} = props;
|
|
191
|
+
if (process.env.NODE_ENV === "development") {
|
|
192
|
+
if (snapPointsProp.some((p) => p < 0 || p > 100)) {
|
|
193
|
+
console.warn(`\u26A0\uFE0F Invalid snapPoint given, snapPoints must be between 0 and 100, equal to percent height of frame`);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
133
196
|
const controller = useContext(SheetControllerContext);
|
|
134
197
|
const isHidden = (controller == null ? void 0 : controller.hidden) || false;
|
|
135
198
|
const disableDrag = disableDragProp != null ? disableDragProp : controller == null ? void 0 : controller.disableDrag;
|
|
136
199
|
const themeName = useThemeName();
|
|
137
200
|
const contentRef = React.useRef(null);
|
|
201
|
+
const scrollBridge = useConstant(() => ({
|
|
202
|
+
enabled: false,
|
|
203
|
+
y: 0,
|
|
204
|
+
scrollStartY: -1,
|
|
205
|
+
drag: () => {
|
|
206
|
+
},
|
|
207
|
+
release: () => {
|
|
208
|
+
}
|
|
209
|
+
}));
|
|
138
210
|
const onChangeOpenInternal = (val) => {
|
|
139
211
|
var _a2;
|
|
140
212
|
(_a2 = controller == null ? void 0 : controller.onChangeOpen) == null ? void 0 : _a2.call(controller, val);
|
|
@@ -168,7 +240,7 @@ const Sheet = withStaticProperties(themeable(forwardRef((props, ref) => {
|
|
|
168
240
|
positionValue.current = new Animated.Value(HIDDEN_SIZE);
|
|
169
241
|
}
|
|
170
242
|
const [isResizing, setIsResizing] = useState(true);
|
|
171
|
-
|
|
243
|
+
useIsomorphicLayoutEffect(() => {
|
|
172
244
|
if (!isResizing) {
|
|
173
245
|
setIsResizing(true);
|
|
174
246
|
}
|
|
@@ -187,41 +259,55 @@ const Sheet = withStaticProperties(themeable(forwardRef((props, ref) => {
|
|
|
187
259
|
}, [setPosition, shouldSetPositionOpen]);
|
|
188
260
|
const positions = useMemo(() => snapPoints.map((point) => getPercentSize(point, frameSize)), [frameSize, snapPoints]);
|
|
189
261
|
const animateTo = useEvent((position2) => {
|
|
190
|
-
const
|
|
262
|
+
const current = positionValue.current;
|
|
191
263
|
if (isHidden && open)
|
|
192
264
|
return;
|
|
193
|
-
if (!
|
|
265
|
+
if (!current)
|
|
194
266
|
return;
|
|
195
267
|
if (frameSize === 0)
|
|
196
268
|
return;
|
|
197
269
|
const hiddenValue = frameSize === 0 ? HIDDEN_SIZE : frameSize;
|
|
198
270
|
const toValue = isHidden || position2 === -1 ? hiddenValue : positions[position2];
|
|
199
|
-
if (
|
|
271
|
+
if (at.current === toValue)
|
|
200
272
|
return;
|
|
201
273
|
stopSpring();
|
|
202
274
|
if (isHidden || isResizing) {
|
|
203
275
|
if (isResizing) {
|
|
204
276
|
setIsResizing(false);
|
|
205
277
|
}
|
|
206
|
-
Animated.timing(
|
|
278
|
+
Animated.timing(current, {
|
|
207
279
|
useNativeDriver: !isWeb,
|
|
208
280
|
toValue,
|
|
209
281
|
duration: 0
|
|
210
282
|
}).start();
|
|
283
|
+
at.current = toValue;
|
|
211
284
|
return;
|
|
212
285
|
}
|
|
213
|
-
const overshootClamping =
|
|
214
|
-
spring.current = Animated.spring(
|
|
286
|
+
const overshootClamping = at.current === HIDDEN_SIZE;
|
|
287
|
+
spring.current = Animated.spring(current, {
|
|
215
288
|
useNativeDriver: !isWeb,
|
|
216
289
|
toValue,
|
|
217
290
|
overshootClamping,
|
|
218
291
|
...animationConfig
|
|
219
292
|
});
|
|
220
|
-
spring.current.start(({ finished }) =>
|
|
293
|
+
spring.current.start(({ finished }) => {
|
|
294
|
+
if (finished) {
|
|
295
|
+
stopSpring();
|
|
296
|
+
}
|
|
297
|
+
});
|
|
221
298
|
});
|
|
222
|
-
|
|
299
|
+
useIsomorphicLayoutEffect(() => {
|
|
223
300
|
animateTo(position);
|
|
224
301
|
}, [isHidden, frameSize, position, animateTo]);
|
|
302
|
+
const at = useRef(0);
|
|
303
|
+
useEffect(() => {
|
|
304
|
+
positionValue.current.addListener(({ value }) => {
|
|
305
|
+
at.current = value;
|
|
306
|
+
});
|
|
307
|
+
return () => {
|
|
308
|
+
positionValue.current.removeAllListeners();
|
|
309
|
+
};
|
|
310
|
+
}, []);
|
|
225
311
|
const panResponder = useMemo(() => {
|
|
226
312
|
if (disableDrag)
|
|
227
313
|
return;
|
|
@@ -229,7 +315,7 @@ const Sheet = withStaticProperties(themeable(forwardRef((props, ref) => {
|
|
|
229
315
|
return;
|
|
230
316
|
const pos = positionValue.current;
|
|
231
317
|
const minY = positions[0];
|
|
232
|
-
let startY =
|
|
318
|
+
let startY = at.current;
|
|
233
319
|
function makeUnselectable(val) {
|
|
234
320
|
if (!selectionStyleSheet)
|
|
235
321
|
return;
|
|
@@ -239,10 +325,12 @@ const Sheet = withStaticProperties(themeable(forwardRef((props, ref) => {
|
|
|
239
325
|
selectionStyleSheet.innerText = `:root * { user-select: none !important; -webkit-user-select: none !important; }`;
|
|
240
326
|
}
|
|
241
327
|
}
|
|
242
|
-
const
|
|
328
|
+
const release = ({ vy, dy }) => {
|
|
329
|
+
isExternalDrag = false;
|
|
330
|
+
previouslyScrolling = false;
|
|
243
331
|
makeUnselectable(false);
|
|
244
|
-
const
|
|
245
|
-
const end =
|
|
332
|
+
const at2 = dy + startY;
|
|
333
|
+
const end = at2 + frameSize * vy * 0.33;
|
|
246
334
|
let closestPoint = 0;
|
|
247
335
|
let dist = Infinity;
|
|
248
336
|
for (let i = 0; i < positions.length; i++) {
|
|
@@ -256,15 +344,45 @@ const Sheet = withStaticProperties(themeable(forwardRef((props, ref) => {
|
|
|
256
344
|
setPosition(closestPoint);
|
|
257
345
|
animateTo(closestPoint);
|
|
258
346
|
};
|
|
347
|
+
const finish = (_e, state) => {
|
|
348
|
+
release(state);
|
|
349
|
+
};
|
|
350
|
+
let previouslyScrolling = false;
|
|
351
|
+
const onMoveShouldSet = (_e, { dy }) => {
|
|
352
|
+
if (scrollBridge.y !== 0) {
|
|
353
|
+
previouslyScrolling = true;
|
|
354
|
+
return false;
|
|
355
|
+
}
|
|
356
|
+
if (scrollBridge.y === 0 && dy < 0) {
|
|
357
|
+
return false;
|
|
358
|
+
}
|
|
359
|
+
if (previouslyScrolling) {
|
|
360
|
+
previouslyScrolling = false;
|
|
361
|
+
return true;
|
|
362
|
+
}
|
|
363
|
+
return Math.abs(dy) > 8;
|
|
364
|
+
};
|
|
365
|
+
const grant = () => {
|
|
366
|
+
makeUnselectable(true);
|
|
367
|
+
stopSpring();
|
|
368
|
+
startY = at.current;
|
|
369
|
+
};
|
|
370
|
+
let isExternalDrag = false;
|
|
371
|
+
scrollBridge.drag = (dy) => {
|
|
372
|
+
if (!isExternalDrag) {
|
|
373
|
+
isExternalDrag = true;
|
|
374
|
+
grant();
|
|
375
|
+
}
|
|
376
|
+
const to = dy + startY;
|
|
377
|
+
pos.setValue(resisted(to, minY));
|
|
378
|
+
};
|
|
379
|
+
scrollBridge.release = release;
|
|
259
380
|
return PanResponder.create({
|
|
260
|
-
onMoveShouldSetPanResponder: (
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
onPanResponderGrant: () => {
|
|
264
|
-
makeUnselectable(true);
|
|
265
|
-
stopSpring();
|
|
266
|
-
startY = pos["_value"];
|
|
381
|
+
onMoveShouldSetPanResponder: (...args) => {
|
|
382
|
+
const res = onMoveShouldSet(...args);
|
|
383
|
+
return res;
|
|
267
384
|
},
|
|
385
|
+
onPanResponderGrant: grant,
|
|
268
386
|
onPanResponderMove: (_e, { dy }) => {
|
|
269
387
|
const to = dy + startY;
|
|
270
388
|
pos.setValue(resisted(to, minY));
|
|
@@ -285,7 +403,7 @@ const Sheet = withStaticProperties(themeable(forwardRef((props, ref) => {
|
|
|
285
403
|
case "SheetHandle":
|
|
286
404
|
handleComponent = child;
|
|
287
405
|
break;
|
|
288
|
-
case "
|
|
406
|
+
case "Sheet":
|
|
289
407
|
frameComponent = child;
|
|
290
408
|
break;
|
|
291
409
|
case "SheetOverlay":
|
|
@@ -300,7 +418,7 @@ const Sheet = withStaticProperties(themeable(forwardRef((props, ref) => {
|
|
|
300
418
|
if (preventShown) {
|
|
301
419
|
return null;
|
|
302
420
|
}
|
|
303
|
-
const contents = <SheetProvider contentRef={contentRef} dismissOnOverlayPress={dismissOnOverlayPress} dismissOnSnapToBottom={dismissOnSnapToBottom} allowPinchZoom={allowPinchZoom} open={open} hidden={isHidden} scope={__scopeSheet} position={position} snapPoints={snapPoints} setPosition={setPosition} setOpen={setOpen}>
|
|
421
|
+
const contents = <SheetProvider contentRef={contentRef} dismissOnOverlayPress={dismissOnOverlayPress} dismissOnSnapToBottom={dismissOnSnapToBottom} allowPinchZoom={allowPinchZoom} open={open} hidden={isHidden} scope={__scopeSheet} position={position} snapPoints={snapPoints} setPosition={setPosition} setOpen={setOpen} scrollBridge={scrollBridge}>
|
|
304
422
|
{isResizing ? null : overlayComponent}
|
|
305
423
|
{isHidden ? null : handleComponent}
|
|
306
424
|
<Animated.View ref={ref} {...panResponder == null ? void 0 : panResponder.panHandlers} onLayout={(e) => {
|
|
@@ -319,15 +437,14 @@ const Sheet = withStaticProperties(themeable(forwardRef((props, ref) => {
|
|
|
319
437
|
}}>{isResizing ? null : frameComponent}</Animated.View>
|
|
320
438
|
</SheetProvider>;
|
|
321
439
|
if (modal) {
|
|
322
|
-
return <Portal
|
|
440
|
+
return <Portal><Theme name={themeName}>{contents}</Theme></Portal>;
|
|
323
441
|
}
|
|
324
442
|
return contents;
|
|
325
|
-
}), {
|
|
326
|
-
componentName: "Sheet"
|
|
327
|
-
}), {
|
|
443
|
+
})), {
|
|
328
444
|
Handle: SheetHandle,
|
|
329
445
|
Frame: SheetFrame,
|
|
330
|
-
Overlay: SheetOverlay
|
|
446
|
+
Overlay: SheetOverlay,
|
|
447
|
+
ScrollView: SheetScrollView
|
|
331
448
|
});
|
|
332
449
|
function getPercentSize(point, frameSize) {
|
|
333
450
|
if (!frameSize)
|
|
@@ -374,6 +491,7 @@ export {
|
|
|
374
491
|
SheetHandleFrame,
|
|
375
492
|
SheetOverlay,
|
|
376
493
|
SheetOverlayFrame,
|
|
494
|
+
SheetScrollView,
|
|
377
495
|
createSheetScope
|
|
378
496
|
};
|
|
379
497
|
//# sourceMappingURL=Sheet.js.map
|
package/dist/jsx/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 isClient,\n isWeb,\n mergeEvent,\n styled,\n themeable,\n useEvent,\n useThemeName,\n withStaticProperties,\n} from '@tamagui/core'\nimport { ScopedProps, createContextScope } from '@tamagui/create-context'\nimport { Portal } from '@tamagui/portal'\nimport { RemoveScroll } from '@tamagui/remove-scroll'\nimport { XStack, XStackProps, YStack, YStackProps } from '@tamagui/stacks'\nimport { useControllableState } from '@tamagui/use-controllable-state'\nimport React, {\n ReactNode,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\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\nconst SHEET_NAME = 'Sheet'\nconst SHEET_HANDLE_NAME = 'SheetHandle'\n\ntype RemoveScrollProps = React.ComponentProps<typeof RemoveScroll>\n\nexport type SheetProps = ScopedProps<\n {\n open?: boolean\n defaultOpen?: boolean\n onChangeOpen?: OpenChangeHandler\n position?: number\n defaultPosition?: number\n snapPoints?: number[]\n onChangePosition?: PositionChangeHandler\n children?: ReactNode\n dismissOnOverlayPress?: boolean\n dismissOnSnapToBottom?: boolean\n animationConfig?: Animated.SpringAnimationConfig\n disableDrag?: boolean\n modal?: boolean\n\n /**\n * @see https://github.com/theKashey/react-remove-scroll#usage\n */\n allowPinchZoom?: RemoveScrollProps['allowPinchZoom']\n },\n 'Sheet'\n>\n\ntype PositionChangeHandler = (position: number) => void\n\ntype OpenChangeHandler = ((open: boolean) => void) | React.Dispatch<React.SetStateAction<boolean>>\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 allowPinchZoom: RemoveScrollProps['allowPinchZoom']\n contentRef: React.RefObject<TamaguiElement>\n dismissOnSnapToBottom: boolean\n}\n\nconst [createSheetContext, createSheetScope] = createContextScope(SHEET_NAME)\nconst [SheetProvider, useSheetContext] = createSheetContext<SheetContextValue>(\n SHEET_NAME,\n {} as any\n)\n\nexport const SheetHandleFrame = styled(XStack, {\n name: SHEET_HANDLE_NAME,\n height: 10,\n borderRadius: 100,\n backgroundColor: '$background',\n position: 'absolute',\n pointerEvents: 'auto',\n zIndex: 10,\n y: -18,\n top: 0,\n left: '35%',\n right: '35%',\n opacity: 0.5,\n\n hoverStyle: {\n opacity: 0.7,\n },\n})\n\ntype SheetScopedProps<A> = ScopedProps<A, 'Sheet'>\n\nexport const SheetHandle = SheetHandleFrame.extractable(\n ({ __scopeSheet, ...props }: SheetScopedProps<XStackProps>) => {\n const context = useSheetContext(SHEET_HANDLE_NAME, __scopeSheet)\n\n if (context.open === false) {\n return null\n }\n\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 {...props}\n />\n )\n }\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 // TODO still have as const bug\n } as const,\n },\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 <RemoveScroll\n enabled={context.open}\n as={Slot}\n allowPinchZoom={context.allowPinchZoom}\n shards={[context.contentRef]}\n // causes lots of bugs on touch web on site\n removeScrollBar={false}\n >\n <SheetOverlayFrame\n closed={!context.open || context.hidden}\n {...props}\n onPress={mergeEvent(\n props.onPress,\n context.dismissOnOverlayPress\n ? () => {\n context.setOpen(false)\n }\n : undefined\n )}\n />\n </RemoveScroll>\n )\n }\n)\n\nconst selectionStyleSheet = isClient ? document.createElement('style') : null\nif (selectionStyleSheet) {\n document.head.appendChild(selectionStyleSheet)\n}\n\nconst SHEET_FRAME_NAME = 'SheetFrame'\n\nexport const SheetFrameFrame = styled(YStack, {\n name: SHEET_FRAME_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(({ __scopeSheet, ...props }: SheetScopedProps<YStackProps>, forwardedRef) => {\n const context = useSheetContext(SHEET_FRAME_NAME, __scopeSheet)\n const composedContentRef = useComposedRefs(forwardedRef, context.contentRef)\n return <SheetFrameFrame ref={composedContentRef} {...props} />\n })\n)\n\n// set all the way off screen\nconst HIDDEN_SIZE = 10_000\n\nexport const Sheet = withStaticProperties(\n themeable(\n forwardRef<View, SheetProps>((props, ref) => {\n const {\n __scopeSheet,\n snapPoints: snapPointsProp = [80],\n open: openProp,\n defaultOpen,\n children: childrenProp,\n position: positionProp,\n onChangePosition,\n onChangeOpen,\n defaultPosition,\n dismissOnOverlayPress = true,\n animationConfig,\n dismissOnSnapToBottom = false,\n disableDrag: disableDragProp,\n modal,\n allowPinchZoom,\n } = props\n\n // allows for sheets to be controlled by other components\n const controller = useContext(SheetControllerContext)\n const isHidden = controller?.hidden || false\n const disableDrag = disableDragProp ?? controller?.disableDrag\n const themeName = useThemeName()\n const contentRef = React.useRef<TamaguiElement>(null)\n\n const onChangeOpenInternal = (val: boolean) => {\n controller?.onChangeOpen?.(val)\n onChangeOpen?.(val)\n }\n\n const [open, setOpen] = useControllableState({\n prop: controller?.open ?? openProp,\n defaultProp: defaultOpen || true,\n onChange: onChangeOpenInternal,\n strategy: controller ? 'most-recent-wins' : 'prop-wins',\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: onChangePosition,\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 }\n setPosition_(next)\n },\n [dismissOnSnapToBottom, snapPoints.length, setPosition_, setOpen]\n )\n\n const positionValue = useRef<Animated.Value>()\n if (!positionValue.current) {\n positionValue.current = new Animated.Value(HIDDEN_SIZE)\n }\n\n const [isResizing, setIsResizing] = useState(true)\n useLayoutEffect(() => {\n if (!isResizing) {\n setIsResizing(true)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [modal])\n\n const spring = useRef<Animated.CompositeAnimation | null>(null)\n function stopSpring() {\n spring.current?.stop()\n spring.current = null\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 pos = positionValue.current\n if (isHidden && open) return\n if (!pos) 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 (pos['_value'] === toValue) return\n stopSpring()\n if (isHidden || isResizing) {\n if (isResizing) {\n setIsResizing(false)\n }\n Animated.timing(pos, {\n useNativeDriver: !isWeb,\n toValue,\n duration: 0,\n }).start()\n return\n }\n // dont bounce on initial measure to bottom\n const overshootClamping = pos['_value'] === HIDDEN_SIZE\n spring.current = Animated.spring(pos, {\n useNativeDriver: !isWeb,\n toValue,\n overshootClamping,\n ...animationConfig,\n })\n spring.current.start(({ finished }) => finished && stopSpring())\n })\n\n useLayoutEffect(() => {\n animateTo(position)\n }, [isHidden, frameSize, position, animateTo])\n\n const panResponder = useMemo(() => {\n if (disableDrag) return\n if (!frameSize) return\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const pos = positionValue.current!\n const minY = positions[0]\n let startY = pos['_value']\n\n function makeUnselectable(val: boolean) {\n if (!selectionStyleSheet) return\n if (!val) {\n selectionStyleSheet.innerText = ``\n } else {\n selectionStyleSheet.innerText = `:root * { user-select: none !important; -webkit-user-select: none !important; }`\n }\n }\n\n const finish = (_e: GestureResponderEvent, { vy, dy }: PanResponderGestureState) => {\n makeUnselectable(false)\n const at = dy + 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.33\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 return PanResponder.create({\n onMoveShouldSetPanResponder: (_e, { dy }) => {\n // we could do some detection of other touchables and cancel here..\n return Math.abs(dy) > 6\n },\n onPanResponderGrant: () => {\n makeUnselectable(true)\n stopSpring()\n startY = pos['_value']\n },\n onPanResponderMove: (_e, { dy }) => {\n const to = dy + startY\n pos.setValue(resisted(to, minY))\n },\n onPanResponderEnd: finish,\n onPanResponderTerminate: finish,\n onPanResponderRelease: finish,\n })\n }, [disableDrag, animateTo, frameSize, positions, setPosition])\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 'SheetFrame':\n frameComponent = child\n break\n case 'SheetOverlay':\n overlayComponent = child\n break\n default:\n console.warn('Warning: passed invalid child to Sheet', child)\n }\n }\n })\n\n const preventShown = controller?.hidden && controller?.open\n\n if (preventShown) {\n return null\n }\n\n const contents = (\n <SheetProvider\n contentRef={contentRef}\n dismissOnOverlayPress={dismissOnOverlayPress}\n dismissOnSnapToBottom={dismissOnSnapToBottom}\n allowPinchZoom={allowPinchZoom}\n open={open}\n hidden={isHidden}\n scope={__scopeSheet}\n position={position}\n snapPoints={snapPoints}\n setPosition={setPosition}\n setOpen={setOpen}\n >\n {isResizing ? null : overlayComponent}\n {/* no fancy hidden animation etc for handle for now */}\n {isHidden ? null : handleComponent}\n <Animated.View\n ref={ref}\n {...panResponder?.panHandlers}\n onLayout={(e) => {\n const next = e.nativeEvent.layout.height\n setFrameSize((prev) => {\n const isBigChange = Math.abs(prev - next) > 50\n setIsResizing(isBigChange)\n return next\n })\n }}\n pointerEvents={open ? 'auto' : 'none'}\n style={{\n position: 'absolute',\n zIndex: 10,\n width: '100%',\n height: '100%',\n transform: [{ translateY: frameSize === 0 ? HIDDEN_SIZE : positionValue.current }],\n }}\n >\n {isResizing ? null : frameComponent}\n </Animated.View>\n </SheetProvider>\n )\n\n if (modal) {\n return (\n <Portal visible={open}>\n <Theme name={themeName}>{contents}</Theme>\n </Portal>\n )\n }\n\n return contents\n }),\n {\n componentName: 'Sheet',\n }\n ),\n {\n Handle: SheetHandle,\n Frame: SheetFrame,\n Overlay: SheetOverlay,\n }\n)\n\nfunction getPercentSize(point?: number, frameSize?: number) {\n if (!frameSize) return 0\n if (point === undefined) {\n console.warn(`No snapPoint`)\n return 0\n }\n const pct = point / 100\n const next = 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 onChangeOpen?: React.Dispatch<React.SetStateAction<boolean>> | ((val: boolean) => void)\n}\n\nconst SheetControllerContext = createContext<SheetControllerContextValue | null>(null)\n\nexport const SheetController = ({\n children,\n onChangeOpen: onChangeOpenProp,\n ...value\n}: Partial<SheetControllerContextValue> & { children?: React.ReactNode }) => {\n const onChangeOpen = useEvent(onChangeOpenProp)\n\n const memoValue = useMemo(\n () => ({\n open: value.open,\n hidden: value.hidden,\n disableDrag: value.disableDrag,\n onChangeOpen,\n }),\n [onChangeOpen, value.open, value.hidden, value.disableDrag]\n )\n\n return (\n <SheetControllerContext.Provider value={memoValue}>{children}</SheetControllerContext.Provider>\n )\n}\n\nexport { createSheetScope }\n"],
|
|
5
|
-
"mappings": "AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"sourcesContent": ["import { useComposedRefs } from '@tamagui/compose-refs'\nimport {\n GetProps,\n Slot,\n TamaguiElement,\n Theme,\n isClient,\n isWeb,\n mergeEvent,\n styled,\n themeable,\n useConstant,\n useEvent,\n useIsomorphicLayoutEffect,\n useThemeName,\n withStaticProperties,\n} from '@tamagui/core'\nimport { ScopedProps, createContextScope } from '@tamagui/create-context'\nimport { Portal } from '@tamagui/portal'\nimport { RemoveScroll } from '@tamagui/remove-scroll'\nimport { XStack, XStackProps, YStack, YStackProps } from '@tamagui/stacks'\nimport { useControllableState } from '@tamagui/use-controllable-state'\nimport React, {\n ReactNode,\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 ScrollView,\n ScrollViewProps,\n View,\n} from 'react-native'\n\nconst SHEET_NAME = 'Sheet'\nconst SHEET_HANDLE_NAME = 'SheetHandle'\n\ntype RemoveScrollProps = React.ComponentProps<typeof RemoveScroll>\n\nexport type SheetProps = ScopedProps<\n {\n open?: boolean\n defaultOpen?: boolean\n onChangeOpen?: OpenChangeHandler\n position?: number\n defaultPosition?: number\n snapPoints?: number[]\n onChangePosition?: PositionChangeHandler\n children?: ReactNode\n dismissOnOverlayPress?: boolean\n dismissOnSnapToBottom?: boolean\n animationConfig?: Animated.SpringAnimationConfig\n disableDrag?: boolean\n modal?: boolean\n\n /**\n * @see https://github.com/theKashey/react-remove-scroll#usage\n */\n allowPinchZoom?: RemoveScrollProps['allowPinchZoom']\n },\n 'Sheet'\n>\n\ntype PositionChangeHandler = (position: number) => void\n\ntype OpenChangeHandler = ((open: boolean) => void) | React.Dispatch<React.SetStateAction<boolean>>\n\ntype ScrollBridge = {\n enabled: boolean\n y: number\n scrollStartY: number\n drag: (dy: number) => void\n release: (state: { dy: number; vy: number }) => void\n}\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 allowPinchZoom: RemoveScrollProps['allowPinchZoom']\n contentRef: React.RefObject<TamaguiElement>\n dismissOnSnapToBottom: boolean\n scrollBridge: ScrollBridge\n}\n\nconst [createSheetContext, createSheetScope] = createContextScope(SHEET_NAME)\nconst [SheetProvider, useSheetContext] = createSheetContext<SheetContextValue>(\n SHEET_NAME,\n {} as any\n)\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 position: 'absolute',\n pointerEvents: 'auto',\n zIndex: 10,\n y: -18,\n top: 0,\n left: '35%',\n right: '35%',\n opacity: 0.5,\n\n hoverStyle: {\n opacity: 0.7,\n },\n})\n\ntype SheetScopedProps<A> = ScopedProps<A, 'Sheet'>\n\nexport const SheetHandle = SheetHandleFrame.extractable(\n ({ __scopeSheet, ...props }: SheetScopedProps<XStackProps>) => {\n const context = useSheetContext(SHEET_HANDLE_NAME, __scopeSheet)\n\n if (context.open === false) {\n return null\n }\n\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 {...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 // TODO still have as const bug\n } as const,\n },\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 <RemoveScroll\n enabled={context.open}\n as={Slot}\n allowPinchZoom={context.allowPinchZoom}\n shards={[context.contentRef]}\n // causes lots of bugs on touch web on site\n removeScrollBar={false}\n >\n <SheetOverlayFrame\n closed={!context.open || context.hidden}\n {...props}\n onPress={mergeEvent(\n props.onPress,\n context.dismissOnOverlayPress\n ? () => {\n context.setOpen(false)\n }\n : undefined\n )}\n />\n </RemoveScroll>\n )\n }\n)\n\n/* -------------------------------------------------------------------------------------------------\n * SheetScrollView\n * -----------------------------------------------------------------------------------------------*/\n\nconst SHEET_SCROLL_VIEW_NAME = 'SheetScrollView'\n\nexport const SheetScrollView = forwardRef<ScrollView, ScrollViewProps>(\n ({ __scopeSheet, ...props }: SheetScopedProps<ScrollViewProps>, ref) => {\n const { scrollBridge } = useSheetContext(SHEET_SCROLL_VIEW_NAME, __scopeSheet)\n const [scrollEnabled, setScrollEnabled] = useState(true)\n const state = useRef({\n dy: 0,\n // store a few recent dys to get velocity on release\n dys: [] as number[],\n })\n\n const release = () => {\n setScrollEnabled(true)\n const recentDys = state.current.dys.slice(-10)\n const dist = recentDys.length\n ? recentDys.reduce((a, b, i) => a + b - (recentDys[i - 1] ?? recentDys[0]), 0)\n : 0\n const avgDy = dist / recentDys.length\n const vy = avgDy * 0.1\n state.current.dys = []\n scrollBridge.release({\n dy: state.current.dy,\n vy,\n })\n }\n\n return (\n <ScrollView\n ref={ref}\n onScrollBeginDrag={() => {\n console.log('begin drag')\n }}\n scrollEventThrottle={16}\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 onResponderMove={(e) => {\n const { pageY } = e.nativeEvent\n if (scrollBridge.y === 0) {\n if (scrollBridge.scrollStartY === -1) {\n scrollBridge.scrollStartY = pageY\n }\n const dy = pageY - scrollBridge.scrollStartY\n if (dy <= 0) {\n setScrollEnabled(true)\n return\n }\n setScrollEnabled(false)\n scrollBridge.drag(dy)\n state.current.dy = dy\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 }}\n onResponderRelease={release}\n // todo release we can just grab the last dY and estimate vY using a sample of last dYs\n {...props}\n style={[\n {\n flex: 1,\n },\n props.style,\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(({ __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// set all the way off screen\nconst HIDDEN_SIZE = 10_000\n\nexport const Sheet = withStaticProperties(\n themeable(\n forwardRef<View, SheetProps>((props, ref) => {\n const {\n __scopeSheet,\n snapPoints: snapPointsProp = [80],\n open: openProp,\n defaultOpen,\n children: childrenProp,\n position: positionProp,\n onChangePosition,\n onChangeOpen,\n defaultPosition,\n dismissOnOverlayPress = true,\n animationConfig,\n dismissOnSnapToBottom = false,\n disableDrag: disableDragProp,\n modal,\n allowPinchZoom,\n } = props\n\n if (process.env.NODE_ENV === 'development') {\n if (snapPointsProp.some((p) => p < 0 || p > 100)) {\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 // allows for sheets to be controlled by other components\n const controller = useContext(SheetControllerContext)\n const isHidden = controller?.hidden || false\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 scrollStartY: -1,\n drag: () => {},\n release: () => {},\n }))\n\n const onChangeOpenInternal = (val: boolean) => {\n controller?.onChangeOpen?.(val)\n onChangeOpen?.(val)\n }\n\n const [open, setOpen] = useControllableState({\n prop: controller?.open ?? openProp,\n defaultProp: defaultOpen || true,\n onChange: onChangeOpenInternal,\n strategy: controller ? 'most-recent-wins' : 'prop-wins',\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: onChangePosition,\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 }\n setPosition_(next)\n },\n [dismissOnSnapToBottom, snapPoints.length, setPosition_, setOpen]\n )\n\n const positionValue = useRef<Animated.Value>()\n if (!positionValue.current) {\n positionValue.current = new Animated.Value(HIDDEN_SIZE)\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 const spring = useRef<Animated.CompositeAnimation | null>(null)\n function stopSpring() {\n spring.current?.stop()\n spring.current = null\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 = positionValue.current\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 Animated.timing(current, {\n useNativeDriver: !isWeb,\n toValue,\n duration: 0,\n }).start()\n at.current = toValue\n return\n }\n // dont bounce on initial measure to bottom\n const overshootClamping = at.current === HIDDEN_SIZE\n spring.current = Animated.spring(current, {\n useNativeDriver: !isWeb,\n toValue,\n overshootClamping,\n ...animationConfig,\n })\n spring.current.start(({ finished }) => {\n if (finished) {\n stopSpring()\n }\n })\n })\n\n useIsomorphicLayoutEffect(() => {\n animateTo(position)\n }, [isHidden, frameSize, position, animateTo])\n\n // native only fix\n const at = useRef(0)\n useEffect(() => {\n positionValue.current!.addListener(({ value }) => {\n at.current = value\n })\n return () => {\n positionValue.current!.removeAllListeners()\n }\n }, [])\n\n const panResponder = useMemo(\n () => {\n if (disableDrag) return\n if (!frameSize) return\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const pos = positionValue.current!\n const minY = positions[0]\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 = `:root * { user-select: none !important; -webkit-user-select: none !important; }`\n }\n }\n\n const release = ({ vy, dy }: { dy: number; vy: number }) => {\n isExternalDrag = false\n previouslyScrolling = false\n makeUnselectable(false)\n const at = dy + 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.33\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(state)\n }\n\n let previouslyScrolling = false\n\n const onMoveShouldSet = (_e: GestureResponderEvent, { dy }: PanResponderGestureState) => {\n if (scrollBridge.y !== 0) {\n previouslyScrolling = true\n return false\n }\n if (scrollBridge.y === 0 && dy < 0) {\n return false\n }\n if (previouslyScrolling) {\n previouslyScrolling = false\n return true\n }\n // we could do some detection of other touchables and cancel here..\n return Math.abs(dy) > 8\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 pos.setValue(resisted(to, minY))\n }\n\n scrollBridge.release = release\n\n return PanResponder.create({\n onMoveShouldSetPanResponder: (...args) => {\n const res = onMoveShouldSet(...args)\n // console.log('res', res, scrollBridge.y)\n return res\n },\n onPanResponderGrant: grant,\n onPanResponderMove: (_e, { dy }) => {\n const to = dy + startY\n pos.setValue(resisted(to, minY))\n },\n onPanResponderEnd: finish,\n onPanResponderTerminate: finish,\n onPanResponderRelease: finish,\n })\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [disableDrag, 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 console.warn('Warning: passed invalid child to Sheet', child)\n }\n }\n })\n\n const preventShown = controller?.hidden && controller?.open\n\n if (preventShown) {\n return null\n }\n\n const contents = (\n <SheetProvider\n contentRef={contentRef}\n dismissOnOverlayPress={dismissOnOverlayPress}\n dismissOnSnapToBottom={dismissOnSnapToBottom}\n allowPinchZoom={allowPinchZoom}\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 ? null : overlayComponent}\n {/* no fancy hidden animation etc for handle for now */}\n {isHidden ? null : handleComponent}\n <Animated.View\n ref={ref}\n {...panResponder?.panHandlers}\n onLayout={(e) => {\n const next = e.nativeEvent.layout.height\n setFrameSize((prev) => {\n const isBigChange = Math.abs(prev - next) > 50\n setIsResizing(isBigChange)\n return next\n })\n }}\n pointerEvents={open ? 'auto' : 'none'}\n style={{\n position: 'absolute',\n zIndex: 10,\n width: '100%',\n height: '100%',\n transform: [{ translateY: frameSize === 0 ? HIDDEN_SIZE : positionValue.current }],\n }}\n >\n {isResizing ? null : frameComponent}\n </Animated.View>\n </SheetProvider>\n )\n\n if (modal) {\n return (\n <Portal>\n <Theme name={themeName}>{contents}</Theme>\n </Portal>\n )\n }\n\n return contents\n })\n ),\n {\n Handle: SheetHandle,\n Frame: SheetFrame,\n Overlay: SheetOverlay,\n ScrollView: SheetScrollView,\n }\n)\n\n/* -------------------------------------------------------------------------------------------------*/\n\nfunction getPercentSize(point?: number, frameSize?: number) {\n if (!frameSize) return 0\n if (point === undefined) {\n console.warn(`No snapPoint`)\n return 0\n }\n const pct = point / 100\n const next = 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 onChangeOpen?: React.Dispatch<React.SetStateAction<boolean>> | ((val: boolean) => void)\n}\n\nconst SheetControllerContext = createContext<SheetControllerContextValue | null>(null)\n\nexport const SheetController = ({\n children,\n onChangeOpen: onChangeOpenProp,\n ...value\n}: Partial<SheetControllerContextValue> & { children?: React.ReactNode }) => {\n const onChangeOpen = useEvent(onChangeOpenProp)\n\n const memoValue = useMemo(\n () => ({\n open: value.open,\n hidden: value.hidden,\n disableDrag: value.disableDrag,\n onChangeOpen,\n }),\n [onChangeOpen, value.open, value.hidden, value.disableDrag]\n )\n\n return (\n <SheetControllerContext.Provider value={memoValue}>{children}</SheetControllerContext.Provider>\n )\n}\n\nexport { createSheetScope }\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tamagui/sheet",
|
|
3
|
-
"version": "1.0.1-beta.
|
|
3
|
+
"version": "1.0.1-beta.114",
|
|
4
4
|
"sideEffects": [
|
|
5
5
|
"*.css"
|
|
6
6
|
],
|
|
@@ -20,12 +20,12 @@
|
|
|
20
20
|
"watch": "tamagui-build --watch"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@tamagui/compose-refs": "^1.0.1-beta.
|
|
24
|
-
"@tamagui/core": "^1.0.1-beta.
|
|
25
|
-
"@tamagui/create-context": "^1.0.1-beta.
|
|
26
|
-
"@tamagui/remove-scroll": "^1.0.1-beta.
|
|
27
|
-
"@tamagui/stacks": "^1.0.1-beta.
|
|
28
|
-
"@tamagui/use-controllable-state": "^1.0.1-beta.
|
|
23
|
+
"@tamagui/compose-refs": "^1.0.1-beta.114",
|
|
24
|
+
"@tamagui/core": "^1.0.1-beta.114",
|
|
25
|
+
"@tamagui/create-context": "^1.0.1-beta.114",
|
|
26
|
+
"@tamagui/remove-scroll": "^1.0.1-beta.114",
|
|
27
|
+
"@tamagui/stacks": "^1.0.1-beta.114",
|
|
28
|
+
"@tamagui/use-controllable-state": "^1.0.1-beta.114"
|
|
29
29
|
},
|
|
30
30
|
"peerDependencies": {
|
|
31
31
|
"react": "*",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"react-native": "*"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@tamagui/build": "^1.0.1-beta.
|
|
36
|
+
"@tamagui/build": "^1.0.1-beta.114",
|
|
37
37
|
"react": "*",
|
|
38
38
|
"react-dom": "*",
|
|
39
39
|
"react-native": "*"
|