@tamagui/sheet 1.0.1-beta.100 → 1.0.1-beta.101
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 +252 -112
- package/dist/cjs/Sheet.js.map +2 -2
- package/dist/esm/Sheet.js +262 -109
- package/dist/esm/Sheet.js.map +2 -2
- package/dist/jsx/Sheet.js +242 -99
- package/dist/jsx/Sheet.js.map +2 -2
- package/package.json +6 -6
- package/src/Sheet.tsx +338 -134
- package/types/Sheet.d.ts +73 -87
- package/types/Sheet.d.ts.map +1 -1
- package/types/Drawer.d.ts +0 -184
- package/types/Drawer.d.ts.map +0 -1
package/dist/jsx/Sheet.js
CHANGED
|
@@ -1,22 +1,40 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
Theme,
|
|
3
|
+
isClient,
|
|
4
|
+
isWeb,
|
|
5
|
+
mergeEvent,
|
|
6
|
+
styled,
|
|
7
|
+
themeable,
|
|
8
|
+
useEvent,
|
|
9
|
+
useIsomorphicLayoutEffect,
|
|
10
|
+
useThemeName,
|
|
11
|
+
withStaticProperties
|
|
12
|
+
} from "@tamagui/core";
|
|
2
13
|
import { createContextScope } from "@tamagui/create-context";
|
|
14
|
+
import { Portal } from "@tamagui/portal";
|
|
3
15
|
import { XStack, YStack } from "@tamagui/stacks";
|
|
4
16
|
import { useControllableState } from "@tamagui/use-controllable-state";
|
|
5
17
|
import React, {
|
|
18
|
+
createContext,
|
|
6
19
|
forwardRef,
|
|
7
20
|
isValidElement,
|
|
8
|
-
|
|
21
|
+
useContext,
|
|
9
22
|
useEffect,
|
|
10
23
|
useLayoutEffect,
|
|
11
24
|
useMemo,
|
|
12
25
|
useRef,
|
|
13
26
|
useState
|
|
14
27
|
} from "react";
|
|
15
|
-
import {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
28
|
+
import {
|
|
29
|
+
Animated,
|
|
30
|
+
PanResponder
|
|
31
|
+
} from "react-native";
|
|
32
|
+
const SHEET_NAME = "Sheet";
|
|
33
|
+
const SHEET_HANDLE_NAME = "SheetHandle";
|
|
34
|
+
const [createSheetContext, createSheetScope] = createContextScope(SHEET_NAME);
|
|
35
|
+
const [SheetProvider, useSheetContext] = createSheetContext(SHEET_NAME, {});
|
|
36
|
+
const SheetHandleFrame = styled(XStack, {
|
|
37
|
+
name: SHEET_HANDLE_NAME,
|
|
20
38
|
height: 10,
|
|
21
39
|
borderRadius: 100,
|
|
22
40
|
backgroundColor: "$background",
|
|
@@ -32,98 +50,194 @@ const DrawerHandleFrame = styled(XStack, {
|
|
|
32
50
|
opacity: 0.7
|
|
33
51
|
}
|
|
34
52
|
});
|
|
35
|
-
const
|
|
36
|
-
const context =
|
|
37
|
-
|
|
53
|
+
const SheetHandle = SheetHandleFrame.extractable(({ __scopeSheet, ...props }) => {
|
|
54
|
+
const context = useSheetContext(SHEET_HANDLE_NAME, __scopeSheet);
|
|
55
|
+
if (context.open === false) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
return <SheetHandleFrame onPress={() => {
|
|
38
59
|
const nextPos = (context.position + 1) % context.snapPoints.length;
|
|
39
60
|
context.setPosition(nextPos);
|
|
40
61
|
}} {...props} />;
|
|
41
62
|
});
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
const DrawerBackdrop = styled(YStack, {
|
|
45
|
-
name: "DrawerBackdrop",
|
|
63
|
+
const SheetOverlayFrame = styled(YStack, {
|
|
64
|
+
name: "SheetOverlay",
|
|
46
65
|
backgroundColor: "$color",
|
|
47
66
|
fullscreen: true,
|
|
48
|
-
opacity: 0.2
|
|
67
|
+
opacity: 0.2,
|
|
68
|
+
zIndex: 0,
|
|
69
|
+
variants: {
|
|
70
|
+
closed: {
|
|
71
|
+
true: {
|
|
72
|
+
opacity: 0,
|
|
73
|
+
pointerEvents: "none"
|
|
74
|
+
},
|
|
75
|
+
false: {
|
|
76
|
+
pointerEvents: "auto"
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
49
80
|
});
|
|
50
|
-
const
|
|
51
|
-
|
|
81
|
+
const SheetOverlay = SheetOverlayFrame.extractable(({ __scopeSheet, ...props }) => {
|
|
82
|
+
const context = useSheetContext(SHEET_HANDLE_NAME, __scopeSheet);
|
|
83
|
+
return <SheetOverlayFrame closed={!context.open || context.hidden} {...props} onPress={mergeEvent(props.onPress, context.dismissOnOverlayPress ? () => {
|
|
84
|
+
context.setOpen(false);
|
|
85
|
+
} : void 0)} />;
|
|
86
|
+
});
|
|
87
|
+
const selectionStyleSheet = isClient ? document.createElement("style") : null;
|
|
88
|
+
if (selectionStyleSheet) {
|
|
89
|
+
document.head.appendChild(selectionStyleSheet);
|
|
90
|
+
}
|
|
91
|
+
const SheetFrame = styled(YStack, {
|
|
92
|
+
name: "SheetFrame",
|
|
52
93
|
flex: 1,
|
|
53
94
|
backgroundColor: "$background",
|
|
54
95
|
borderTopLeftRadius: "$4",
|
|
55
96
|
borderTopRightRadius: "$4",
|
|
56
97
|
padding: "$4",
|
|
57
|
-
width: "100%"
|
|
98
|
+
width: "100%",
|
|
99
|
+
pointerEvents: "auto"
|
|
58
100
|
});
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
if (isWeb && !isSSR) {
|
|
63
|
-
setVal(false);
|
|
64
|
-
}
|
|
65
|
-
}, []);
|
|
66
|
-
return val;
|
|
67
|
-
};
|
|
68
|
-
const Drawer = withStaticProperties(themeable(forwardRef((props, ref) => {
|
|
101
|
+
const HIDDEN_SIZE = 1e4;
|
|
102
|
+
const Sheet = withStaticProperties(themeable(forwardRef((props, ref) => {
|
|
103
|
+
var _a;
|
|
69
104
|
const {
|
|
70
|
-
|
|
105
|
+
__scopeSheet,
|
|
71
106
|
snapPoints: snapPointsProp = [80, 10],
|
|
107
|
+
open: openProp,
|
|
108
|
+
defaultOpen,
|
|
72
109
|
children: childrenProp,
|
|
73
110
|
position: positionProp,
|
|
74
111
|
onChangePosition,
|
|
112
|
+
onChangeOpen,
|
|
75
113
|
defaultPosition,
|
|
76
|
-
|
|
114
|
+
dismissOnOverlayPress = true,
|
|
115
|
+
animationConfig,
|
|
116
|
+
disableDrag: disableDragProp,
|
|
117
|
+
modal
|
|
77
118
|
} = props;
|
|
78
|
-
const
|
|
79
|
-
const
|
|
119
|
+
const controller = useContext(SheetControllerContext);
|
|
120
|
+
const isHidden = (controller == null ? void 0 : controller.hidden) || false;
|
|
121
|
+
const disableDrag = disableDragProp != null ? disableDragProp : controller == null ? void 0 : controller.disableDrag;
|
|
122
|
+
const themeName = useThemeName();
|
|
123
|
+
const onChangeOpenInternal = (val) => {
|
|
124
|
+
var _a2;
|
|
125
|
+
(_a2 = controller == null ? void 0 : controller.onChangeOpen) == null ? void 0 : _a2.call(controller, val);
|
|
126
|
+
onChangeOpen == null ? void 0 : onChangeOpen(val);
|
|
127
|
+
};
|
|
128
|
+
const [open, setOpen] = useControllableState({
|
|
129
|
+
prop: (_a = controller == null ? void 0 : controller.open) != null ? _a : openProp,
|
|
130
|
+
defaultProp: defaultOpen || true,
|
|
131
|
+
onChange: onChangeOpenInternal,
|
|
132
|
+
strategy: controller ? "most-recent-wins" : "prop-wins"
|
|
133
|
+
});
|
|
134
|
+
const [frameSize, setFrameSize] = useState(0);
|
|
135
|
+
const snapPoints = useMemo(() => snapPointsProp, [JSON.stringify(snapPointsProp)]);
|
|
136
|
+
const [position_, setPosition] = useControllableState({
|
|
80
137
|
prop: positionProp,
|
|
81
|
-
defaultProp: defaultPosition || 0,
|
|
82
|
-
onChange: onChangePosition
|
|
83
|
-
strategy: "most-recent-wins"
|
|
138
|
+
defaultProp: defaultPosition || (open ? 0 : -1),
|
|
139
|
+
onChange: onChangePosition
|
|
84
140
|
});
|
|
85
|
-
const
|
|
141
|
+
const position = open === false ? -1 : position_;
|
|
86
142
|
const positionValue = useRef();
|
|
87
143
|
if (!positionValue.current) {
|
|
88
|
-
positionValue.current = new Animated.Value(
|
|
89
|
-
}
|
|
90
|
-
const snapPoints = useMemo(() => snapPointsProp, [JSON.stringify(snapPointsProp)]);
|
|
91
|
-
if (isServerSide) {
|
|
92
|
-
return null;
|
|
144
|
+
positionValue.current = new Animated.Value(HIDDEN_SIZE);
|
|
93
145
|
}
|
|
146
|
+
const [isResizing, setIsResizing] = useState(true);
|
|
147
|
+
useLayoutEffect(() => {
|
|
148
|
+
if (!isResizing) {
|
|
149
|
+
setIsResizing(true);
|
|
150
|
+
}
|
|
151
|
+
}, [modal]);
|
|
94
152
|
const spring = useRef(null);
|
|
95
153
|
function stopSpring() {
|
|
96
|
-
var
|
|
97
|
-
(
|
|
154
|
+
var _a2;
|
|
155
|
+
(_a2 = spring.current) == null ? void 0 : _a2.stop();
|
|
98
156
|
spring.current = null;
|
|
99
157
|
}
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
if (
|
|
158
|
+
const shouldSetPositionOpen = open && position < 0;
|
|
159
|
+
useEffect(() => {
|
|
160
|
+
if (shouldSetPositionOpen) {
|
|
161
|
+
setPosition(0);
|
|
162
|
+
}
|
|
163
|
+
}, [setPosition, shouldSetPositionOpen]);
|
|
164
|
+
const positions = useMemo(() => snapPoints.map((point) => getPercentSize(point, frameSize)), [frameSize, snapPoints]);
|
|
165
|
+
const animateTo = useEvent((position2) => {
|
|
166
|
+
const pos = positionValue.current;
|
|
167
|
+
if (isHidden && open)
|
|
168
|
+
return;
|
|
169
|
+
if (!pos)
|
|
170
|
+
return;
|
|
171
|
+
if (frameSize === 0)
|
|
172
|
+
return;
|
|
173
|
+
const hiddenValue = frameSize === 0 ? HIDDEN_SIZE : frameSize;
|
|
174
|
+
const toValue = isHidden || position2 === -1 ? hiddenValue : positions[position2];
|
|
175
|
+
if (pos["_value"] === toValue)
|
|
103
176
|
return;
|
|
104
|
-
const toValue = positions[position2];
|
|
105
177
|
stopSpring();
|
|
106
|
-
|
|
178
|
+
if (isHidden || isResizing) {
|
|
179
|
+
if (isResizing) {
|
|
180
|
+
setIsResizing(false);
|
|
181
|
+
}
|
|
182
|
+
Animated.timing(pos, {
|
|
183
|
+
useNativeDriver: !isWeb,
|
|
184
|
+
toValue,
|
|
185
|
+
duration: 0
|
|
186
|
+
}).start();
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
const overshootClamping = pos["_value"] === HIDDEN_SIZE;
|
|
190
|
+
spring.current = Animated.spring(pos, {
|
|
107
191
|
useNativeDriver: !isWeb,
|
|
108
|
-
toValue
|
|
192
|
+
toValue,
|
|
193
|
+
overshootClamping,
|
|
194
|
+
...animationConfig
|
|
109
195
|
});
|
|
110
196
|
spring.current.start(({ finished }) => finished && stopSpring());
|
|
111
|
-
}
|
|
197
|
+
});
|
|
112
198
|
useLayoutEffect(() => {
|
|
113
199
|
animateTo(position);
|
|
114
|
-
}, [position, animateTo]);
|
|
200
|
+
}, [isHidden, frameSize, position, animateTo]);
|
|
115
201
|
const panResponder = useMemo(() => {
|
|
116
|
-
if (
|
|
202
|
+
if (disableDrag)
|
|
203
|
+
return;
|
|
204
|
+
if (!frameSize)
|
|
117
205
|
return;
|
|
118
|
-
console.log("setup pan");
|
|
119
206
|
const pos = positionValue.current;
|
|
120
207
|
const minY = positions[0];
|
|
121
208
|
let startY = pos["_value"];
|
|
209
|
+
function makeUnselectable(val) {
|
|
210
|
+
if (!selectionStyleSheet)
|
|
211
|
+
return;
|
|
212
|
+
if (!val) {
|
|
213
|
+
selectionStyleSheet.innerText = ``;
|
|
214
|
+
} else {
|
|
215
|
+
selectionStyleSheet.innerText = `:root * { user-select: none !important; -webkit-user-select: none !important; }`;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
const finish = (_e, { vy, dy }) => {
|
|
219
|
+
makeUnselectable(false);
|
|
220
|
+
const at = dy + startY;
|
|
221
|
+
const end = at + frameSize * vy * 0.33;
|
|
222
|
+
let closestPoint = 0;
|
|
223
|
+
let dist = Infinity;
|
|
224
|
+
for (let i = 0; i < positions.length; i++) {
|
|
225
|
+
const position2 = positions[i];
|
|
226
|
+
const curDist = end > position2 ? end - position2 : position2 - end;
|
|
227
|
+
if (curDist < dist) {
|
|
228
|
+
dist = curDist;
|
|
229
|
+
closestPoint = i;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
setPosition(closestPoint);
|
|
233
|
+
animateTo(closestPoint);
|
|
234
|
+
};
|
|
122
235
|
return PanResponder.create({
|
|
123
236
|
onMoveShouldSetPanResponder: (_e, { dy }) => {
|
|
124
237
|
return Math.abs(dy) > 6;
|
|
125
238
|
},
|
|
126
239
|
onPanResponderGrant: () => {
|
|
240
|
+
makeUnselectable(true);
|
|
127
241
|
stopSpring();
|
|
128
242
|
startY = pos["_value"];
|
|
129
243
|
},
|
|
@@ -131,72 +245,75 @@ const Drawer = withStaticProperties(themeable(forwardRef((props, ref) => {
|
|
|
131
245
|
const to = dy + startY;
|
|
132
246
|
pos.setValue(resisted(to, minY));
|
|
133
247
|
},
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
let closestPoint = 0;
|
|
138
|
-
let dist = Infinity;
|
|
139
|
-
for (let i = 0; i < positions.length; i++) {
|
|
140
|
-
const position2 = positions[i];
|
|
141
|
-
const curDist = end > position2 ? end - position2 : position2 - end;
|
|
142
|
-
if (curDist < dist) {
|
|
143
|
-
dist = curDist;
|
|
144
|
-
closestPoint = i;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
setPosition(closestPoint);
|
|
148
|
-
animateTo(closestPoint);
|
|
149
|
-
}
|
|
248
|
+
onPanResponderEnd: finish,
|
|
249
|
+
onPanResponderTerminate: finish,
|
|
250
|
+
onPanResponderRelease: finish
|
|
150
251
|
});
|
|
151
|
-
}, [
|
|
252
|
+
}, [disableDrag, animateTo, frameSize, positions, setPosition]);
|
|
152
253
|
let handleComponent = null;
|
|
153
|
-
let
|
|
254
|
+
let overlayComponent = null;
|
|
154
255
|
let frameComponent = null;
|
|
155
256
|
React.Children.forEach(childrenProp, (child) => {
|
|
156
|
-
var
|
|
257
|
+
var _a2, _b;
|
|
157
258
|
if (isValidElement(child)) {
|
|
158
|
-
|
|
159
|
-
|
|
259
|
+
const name = (_b = (_a2 = child.type) == null ? void 0 : _a2["staticConfig"]) == null ? void 0 : _b.componentName;
|
|
260
|
+
switch (name) {
|
|
261
|
+
case "SheetHandle":
|
|
160
262
|
handleComponent = child;
|
|
161
263
|
break;
|
|
162
|
-
case "
|
|
264
|
+
case "SheetFrame":
|
|
163
265
|
frameComponent = child;
|
|
164
266
|
break;
|
|
165
|
-
case "
|
|
166
|
-
|
|
267
|
+
case "SheetOverlay":
|
|
268
|
+
overlayComponent = child;
|
|
167
269
|
break;
|
|
168
270
|
default:
|
|
169
|
-
console.warn("Warning: passed invalid child to
|
|
271
|
+
console.warn("Warning: passed invalid child to Sheet", child);
|
|
170
272
|
}
|
|
171
273
|
}
|
|
172
274
|
});
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
275
|
+
const preventShown = (controller == null ? void 0 : controller.hidden) && (controller == null ? void 0 : controller.open);
|
|
276
|
+
if (preventShown) {
|
|
277
|
+
return null;
|
|
278
|
+
}
|
|
279
|
+
const contents = <SheetProvider dismissOnOverlayPress={dismissOnOverlayPress} open={open} hidden={isHidden} scope={__scopeSheet} position={position} snapPoints={snapPoints} setPosition={setPosition} setOpen={setOpen}>
|
|
280
|
+
{isResizing ? null : overlayComponent}
|
|
281
|
+
{isHidden ? null : handleComponent}
|
|
282
|
+
<Animated.View ref={ref} {...panResponder == null ? void 0 : panResponder.panHandlers} onLayout={(e) => {
|
|
283
|
+
const next = e.nativeEvent.layout.height;
|
|
284
|
+
setFrameSize((prev) => {
|
|
285
|
+
const isBigChange = Math.abs(prev - next) > 50;
|
|
286
|
+
setIsResizing(isBigChange);
|
|
287
|
+
return next;
|
|
288
|
+
});
|
|
178
289
|
}} style={{
|
|
290
|
+
position: "absolute",
|
|
291
|
+
zIndex: 10,
|
|
179
292
|
width: "100%",
|
|
180
293
|
height: "100%",
|
|
181
|
-
transform: [{ translateY: positionValue.current }]
|
|
182
|
-
}}>{frameComponent}</Animated.View>
|
|
183
|
-
</
|
|
294
|
+
transform: [{ translateY: frameSize === 0 ? HIDDEN_SIZE : positionValue.current }]
|
|
295
|
+
}}>{isResizing ? null : frameComponent}</Animated.View>
|
|
296
|
+
</SheetProvider>;
|
|
297
|
+
if (modal) {
|
|
298
|
+
return <Portal><Theme name={themeName}>{contents}</Theme></Portal>;
|
|
299
|
+
}
|
|
300
|
+
return contents;
|
|
184
301
|
}), {
|
|
185
|
-
componentName: "
|
|
302
|
+
componentName: "Sheet"
|
|
186
303
|
}), {
|
|
187
|
-
Handle:
|
|
188
|
-
Frame:
|
|
189
|
-
|
|
304
|
+
Handle: SheetHandle,
|
|
305
|
+
Frame: SheetFrame,
|
|
306
|
+
Overlay: SheetOverlay
|
|
190
307
|
});
|
|
191
|
-
function
|
|
192
|
-
if (!
|
|
308
|
+
function getPercentSize(point, frameSize) {
|
|
309
|
+
if (!frameSize)
|
|
193
310
|
return 0;
|
|
194
311
|
if (point === void 0) {
|
|
195
312
|
console.warn(`No snapPoint`);
|
|
196
313
|
return 0;
|
|
197
314
|
}
|
|
198
315
|
const pct = point / 100;
|
|
199
|
-
const next =
|
|
316
|
+
const next = frameSize - pct * frameSize;
|
|
200
317
|
return next;
|
|
201
318
|
}
|
|
202
319
|
function resisted(y, minY, maxOverflow = 25) {
|
|
@@ -209,12 +326,38 @@ function resisted(y, minY, maxOverflow = 25) {
|
|
|
209
326
|
}
|
|
210
327
|
return y;
|
|
211
328
|
}
|
|
329
|
+
const SheetControllerContext = createContext(null);
|
|
330
|
+
const SheetController = ({
|
|
331
|
+
children,
|
|
332
|
+
onChangeOpen: onChangeOpenProp,
|
|
333
|
+
...value
|
|
334
|
+
}) => {
|
|
335
|
+
const onChangeOpen = useEvent(onChangeOpenProp);
|
|
336
|
+
const memoValue = useMemo(() => ({
|
|
337
|
+
open: value.open,
|
|
338
|
+
hidden: value.hidden,
|
|
339
|
+
disableDrag: value.disableDrag,
|
|
340
|
+
onChangeOpen
|
|
341
|
+
}), [onChangeOpen, value.open, value.hidden, value.disableDrag]);
|
|
342
|
+
return <SheetControllerContext.Provider value={memoValue}>{children}</SheetControllerContext.Provider>;
|
|
343
|
+
};
|
|
344
|
+
function useLastRenderValue(val) {
|
|
345
|
+
const ref = useRef(val);
|
|
346
|
+
useIsomorphicLayoutEffect(() => {
|
|
347
|
+
return () => {
|
|
348
|
+
ref.current = val;
|
|
349
|
+
};
|
|
350
|
+
});
|
|
351
|
+
return ref.current;
|
|
352
|
+
}
|
|
212
353
|
export {
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
354
|
+
Sheet,
|
|
355
|
+
SheetController,
|
|
356
|
+
SheetFrame,
|
|
357
|
+
SheetHandle,
|
|
358
|
+
SheetHandleFrame,
|
|
359
|
+
SheetOverlay,
|
|
360
|
+
SheetOverlayFrame,
|
|
361
|
+
createSheetScope
|
|
219
362
|
};
|
|
220
363
|
//# 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 { isSSR, isWeb, styled, themeable, withStaticProperties } from '@tamagui/core'\nimport { ScopedProps, createContextScope } from '@tamagui/create-context'\nimport { XStack, XStackProps, YStack } from '@tamagui/stacks'\nimport { useControllableState } from '@tamagui/use-controllable-state'\nimport React, {\n ReactNode,\n forwardRef,\n isValidElement,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { Animated, LayoutRectangle, PanResponder, View } from 'react-native'\n\ntype PositionChangeHandler =\n | ((position: number) => void)\n | React.Dispatch<React.SetStateAction<number>>\n\nconst DRAWER_NAME = 'Drawer'\nconst DRAWER_HANDLE_NAME = 'DrawerHandle'\n\nexport const DrawerHandleFrame = styled(XStack, {\n name: DRAWER_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\nexport const DrawerHandle = DrawerHandleFrame.extractable(\n ({ __scopeDrawer, ...props }: ScopedProps<XStackProps, 'Drawer'>) => {\n const context = useDrawerContext(DRAWER_HANDLE_NAME, __scopeDrawer)\n\n return (\n <DrawerHandleFrame\n onPress={() => {\n const nextPos = (context.position + 1) % context.snapPoints.length\n context.setPosition(nextPos)\n }}\n {...props}\n />\n )\n }\n)\n\ntype DrawerContextValue = {\n position: number\n snapPoints: number[]\n setPosition: React.Dispatch<React.SetStateAction<number>>\n}\n\nconst [createDrawerContext, createDrawerScope] = createContextScope(DRAWER_NAME)\nconst [DrawerProvider, useDrawerContext] = createDrawerContext<DrawerContextValue>(\n DRAWER_NAME,\n {} as any\n)\n\nexport const DrawerBackdrop = styled(YStack, {\n name: 'DrawerBackdrop',\n backgroundColor: '$color',\n fullscreen: true,\n opacity: 0.2,\n})\n\nexport const DrawerFrame = styled(YStack, {\n name: 'DrawerFrame',\n flex: 1,\n backgroundColor: '$background',\n borderTopLeftRadius: '$4',\n borderTopRightRadius: '$4',\n padding: '$4',\n width: '100%',\n})\n\nexport type DrawerProps = ScopedProps<\n {\n open?: boolean\n defaultOpen?: boolean\n defaultPosition?: number\n snapPoints?: number[]\n position?: number\n onChangePosition?: PositionChangeHandler\n children?: ReactNode\n },\n 'Drawer'\n>\n\nconst useIsSSR = () => {\n const [val, setVal] = useState(isWeb ? isSSR : false)\n useEffect(() => {\n if (isWeb && !isSSR) {\n setVal(false)\n }\n }, [])\n return val\n}\n\nexport const Drawer = withStaticProperties(\n themeable(\n forwardRef<View, DrawerProps>((props, ref) => {\n const {\n __scopeDrawer,\n snapPoints: snapPointsProp = [80, 10],\n children: childrenProp,\n position: positionProp,\n onChangePosition,\n defaultPosition,\n ...rest\n } = props\n const isServerSide = useIsSSR()\n\n const [position, setPosition] = useControllableState({\n prop: positionProp,\n defaultProp: defaultPosition || 0,\n onChange: onChangePosition,\n strategy: 'most-recent-wins',\n })\n\n const [layout, setLayout] = useState<LayoutRectangle>()\n\n const positionValue = useRef<Animated.Value>()\n if (!positionValue.current) {\n positionValue.current = new Animated.Value(position)\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const snapPoints = useMemo(() => snapPointsProp, [JSON.stringify(snapPointsProp)])\n\n // we can put non-server side hooks after conditional because based on env\n if (isServerSide) {\n return null\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const spring = useRef<Animated.CompositeAnimation | null>(null)\n\n function stopSpring() {\n spring.current?.stop()\n spring.current = null\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const positions = useMemo(\n () => snapPoints.map((point) => getYForPosition(point, layout)),\n [layout, snapPoints]\n )\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const animateTo = useCallback(\n (position: number) => {\n if (!positionValue.current) return\n const toValue = positions[position]\n stopSpring()\n spring.current = Animated.spring(positionValue.current, {\n useNativeDriver: !isWeb,\n toValue,\n })\n spring.current.start(({ finished }) => finished && stopSpring())\n },\n [positions]\n )\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useLayoutEffect(() => {\n animateTo(position)\n }, [position, animateTo])\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const panResponder = useMemo(() => {\n if (!layout) return\n console.log('setup pan')\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 return PanResponder.create({\n onMoveShouldSetPanResponder: (_e, { dy }) => {\n // we could do some detection of other touchables and cancel here..\n // console.log('wut is', _e)\n return Math.abs(dy) > 6\n },\n onPanResponderGrant: () => {\n stopSpring()\n startY = pos['_value']\n },\n onPanResponderMove: (_e, { dy }) => {\n const to = dy + startY\n pos.setValue(resisted(to, minY))\n },\n onPanResponderRelease: (_e, { vy, dy }) => {\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 + layout.height * 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 }, [layout, positions, setPosition])\n\n let handleComponent: React.ReactElement | null = null\n let backdropComponent: React.ReactElement | null = null\n let frameComponent: React.ReactElement | null = null\n\n React.Children.forEach(childrenProp, (child) => {\n if (isValidElement(child)) {\n switch (child.type?.['staticConfig'].componentName) {\n case 'DrawerHandle':\n handleComponent = child\n break\n case 'DrawerFrame':\n frameComponent = child\n break\n case 'DrawerBackdrop':\n backdropComponent = child\n break\n default:\n console.warn('Warning: passed invalid child to Drawer', child)\n }\n }\n })\n\n return (\n <DrawerProvider\n scope={__scopeDrawer}\n position={position}\n snapPoints={snapPoints}\n setPosition={setPosition}\n >\n {backdropComponent}\n {handleComponent}\n <Animated.View\n {...panResponder?.panHandlers}\n onLayout={(e) => {\n setLayout(e.nativeEvent.layout)\n }}\n style={{\n width: '100%',\n height: '100%',\n transform: [{ translateY: positionValue.current }],\n }}\n >\n {frameComponent}\n </Animated.View>\n </DrawerProvider>\n )\n }),\n {\n componentName: 'Drawer',\n }\n ),\n {\n Handle: DrawerHandle,\n Frame: DrawerFrame,\n Backdrop: DrawerBackdrop,\n }\n)\n\nfunction getYForPosition(point?: number, layout?: LayoutRectangle) {\n if (!layout) return 0\n if (point === undefined) {\n console.warn(`No snapPoint`)\n return 0\n }\n const pct = point / 100\n const next = layout.height - pct * layout.height\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\nexport { createDrawerScope }\n"],
|
|
5
|
-
"mappings": "AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"sourcesContent": ["import {\n GetProps,\n Theme,\n isClient,\n isWeb,\n mergeEvent,\n styled,\n themeable,\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 { XStack, XStackProps, YStack } from '@tamagui/stacks'\nimport { useControllableState } from '@tamagui/use-controllable-state'\nimport React, {\n ReactNode,\n createContext,\n forwardRef,\n isValidElement,\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\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 animationConfig?: Animated.SpringAnimationConfig\n disableDrag?: boolean\n modal?: boolean\n },\n 'Sheet'\n>\n\ntype PositionChangeHandler =\n | ((position: number) => void)\n | React.Dispatch<React.SetStateAction<number>>\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: React.Dispatch<React.SetStateAction<number>>\n setOpen: React.Dispatch<React.SetStateAction<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 const nextPos = (context.position + 1) % context.snapPoints.length\n context.setPosition(nextPos)\n }}\n {...props}\n />\n )\n }\n)\n\nexport const SheetOverlayFrame = styled(YStack, {\n name: 'SheetOverlay',\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_HANDLE_NAME, __scopeSheet)\n return (\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 )\n }\n)\n\nconst selectionStyleSheet = isClient ? document.createElement('style') : null\nif (selectionStyleSheet) {\n document.head.appendChild(selectionStyleSheet)\n}\n\nexport const SheetFrame = styled(YStack, {\n name: 'SheetFrame',\n flex: 1,\n backgroundColor: '$background',\n borderTopLeftRadius: '$4',\n borderTopRightRadius: '$4',\n padding: '$4',\n width: '100%',\n pointerEvents: 'auto',\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, 10],\n open: openProp,\n defaultOpen,\n children: childrenProp,\n position: positionProp,\n onChangePosition,\n onChangeOpen,\n defaultPosition,\n dismissOnOverlayPress = true,\n animationConfig,\n disableDrag: disableDragProp,\n modal,\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\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 // eslint-disable-next-line react-hooks/exhaustive-deps\n const snapPoints = useMemo(() => snapPointsProp, [JSON.stringify(snapPointsProp)])\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 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 dismissOnOverlayPress={dismissOnOverlayPress}\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>\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\nfunction useLastRenderValue<A>(val: A): A | undefined {\n const ref = useRef<A>(val)\n useIsomorphicLayoutEffect(() => {\n return () => {\n ref.current = val\n }\n })\n return ref.current as A\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.101",
|
|
4
4
|
"sideEffects": [
|
|
5
5
|
"*.css"
|
|
6
6
|
],
|
|
@@ -20,10 +20,10 @@
|
|
|
20
20
|
"watch": "tamagui-build --watch"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@tamagui/core": "^1.0.1-beta.
|
|
24
|
-
"@tamagui/create-context": "^1.0.1-beta.
|
|
25
|
-
"@tamagui/stacks": "^1.0.1-beta.
|
|
26
|
-
"@tamagui/use-controllable-state": "^1.0.1-beta.
|
|
23
|
+
"@tamagui/core": "^1.0.1-beta.101",
|
|
24
|
+
"@tamagui/create-context": "^1.0.1-beta.101",
|
|
25
|
+
"@tamagui/stacks": "^1.0.1-beta.101",
|
|
26
|
+
"@tamagui/use-controllable-state": "^1.0.1-beta.101"
|
|
27
27
|
},
|
|
28
28
|
"peerDependencies": {
|
|
29
29
|
"react": "*",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"react-native": "*"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
|
-
"@tamagui/build": "^1.0.1-beta.
|
|
34
|
+
"@tamagui/build": "^1.0.1-beta.101",
|
|
35
35
|
"react": "*",
|
|
36
36
|
"react-dom": "*",
|
|
37
37
|
"react-native": "*"
|