@tamagui/sheet 1.0.1-beta.133 → 1.0.1-beta.136
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/RemoveScrollProps.js +17 -0
- package/dist/cjs/RemoveScrollProps.js.map +7 -0
- package/dist/cjs/SHEET_HANDLE_NAME.js +35 -0
- package/dist/cjs/SHEET_HANDLE_NAME.js.map +7 -0
- package/dist/cjs/Sheet.js +61 -118
- package/dist/cjs/Sheet.js.map +2 -2
- package/dist/cjs/SheetContext.js +38 -0
- package/dist/cjs/SheetContext.js.map +7 -0
- package/dist/cjs/SheetScrollView.js +115 -0
- package/dist/cjs/SheetScrollView.js.map +7 -0
- package/dist/cjs/types.js +17 -0
- package/dist/cjs/types.js.map +7 -0
- package/dist/esm/RemoveScrollProps.js +1 -0
- package/dist/esm/RemoveScrollProps.js.map +7 -0
- package/dist/esm/SHEET_HANDLE_NAME.js +9 -0
- package/dist/esm/SHEET_HANDLE_NAME.js.map +7 -0
- package/dist/esm/Sheet.js +54 -113
- package/dist/esm/Sheet.js.map +2 -2
- package/dist/esm/SheetContext.js +11 -0
- package/dist/esm/SheetContext.js.map +7 -0
- package/dist/esm/SheetScrollView.js +88 -0
- package/dist/esm/SheetScrollView.js.map +7 -0
- package/dist/esm/types.js +1 -0
- package/dist/esm/types.js.map +7 -0
- package/dist/jsx/RemoveScrollProps.js +1 -0
- package/dist/jsx/RemoveScrollProps.js.map +7 -0
- package/dist/jsx/SHEET_HANDLE_NAME.js +9 -0
- package/dist/jsx/SHEET_HANDLE_NAME.js.map +7 -0
- package/dist/jsx/Sheet.js +58 -101
- package/dist/jsx/Sheet.js.map +2 -2
- package/dist/jsx/SheetContext.js +11 -0
- package/dist/jsx/SheetContext.js.map +7 -0
- package/dist/jsx/SheetScrollView.js +77 -0
- package/dist/jsx/SheetScrollView.js.map +7 -0
- package/dist/jsx/types.js +1 -0
- package/dist/jsx/types.js.map +7 -0
- package/package.json +9 -8
- package/src/SHEET_HANDLE_NAME.tsx +4 -0
- package/src/Sheet.tsx +82 -203
- package/src/SheetContext.tsx +25 -0
- package/src/SheetScrollView.tsx +109 -0
- package/src/types.tsx +44 -0
- package/types/SHEET_HANDLE_NAME.d.ts +4 -0
- package/types/Sheet.d.ts +21 -56
- package/types/SheetContext.d.ts +36 -0
- package/types/SheetScrollView.d.ts +4 -0
- package/types/types.d.ts +40 -0
|
@@ -0,0 +1,17 @@
|
|
|
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 __copyProps = (to, from, except, desc) => {
|
|
7
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
+
for (let key of __getOwnPropNames(from))
|
|
9
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
+
}
|
|
12
|
+
return to;
|
|
13
|
+
};
|
|
14
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
|
+
var RemoveScrollProps_exports = {};
|
|
16
|
+
module.exports = __toCommonJS(RemoveScrollProps_exports);
|
|
17
|
+
//# sourceMappingURL=RemoveScrollProps.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/RemoveScrollProps.tsx"],
|
|
4
|
+
"sourcesContent": ["import { ScopedProps } from '@tamagui/create-context'\nimport { RemoveScroll } from '@tamagui/remove-scroll'\nimport React from 'react'\n\nexport type types = {}\nexport type RemoveScrollProps = React.ComponentProps<typeof RemoveScroll>\nexport type SheetScopedProps<A> = ScopedProps<A, 'Sheet'>\n\nexport type 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"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;AAAA;AAAA;",
|
|
6
|
+
"names": []
|
|
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 SHEET_HANDLE_NAME_exports = {};
|
|
20
|
+
__export(SHEET_HANDLE_NAME_exports, {
|
|
21
|
+
SHEET_HANDLE_NAME: () => SHEET_HANDLE_NAME,
|
|
22
|
+
SHEET_NAME: () => SHEET_NAME,
|
|
23
|
+
constants: () => constants
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(SHEET_HANDLE_NAME_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=SHEET_HANDLE_NAME.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/SHEET_HANDLE_NAME.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/cjs/Sheet.js
CHANGED
|
@@ -29,51 +29,53 @@ __export(Sheet_exports, {
|
|
|
29
29
|
SheetHandleFrame: () => SheetHandleFrame,
|
|
30
30
|
SheetOverlay: () => SheetOverlay,
|
|
31
31
|
SheetOverlayFrame: () => SheetOverlayFrame,
|
|
32
|
-
|
|
33
|
-
createSheetScope: () => createSheetScope
|
|
32
|
+
createSheetScope: () => import_SheetContext2.createSheetScope
|
|
34
33
|
});
|
|
35
34
|
module.exports = __toCommonJS(Sheet_exports);
|
|
36
35
|
var import_compose_refs = require("@tamagui/compose-refs");
|
|
37
36
|
var import_core = require("@tamagui/core");
|
|
38
|
-
var import_create_context = require("@tamagui/create-context");
|
|
39
37
|
var import_portal = require("@tamagui/portal");
|
|
40
|
-
var import_remove_scroll = require("@tamagui/remove-scroll");
|
|
41
38
|
var import_stacks = require("@tamagui/stacks");
|
|
42
39
|
var import_use_controllable_state = require("@tamagui/use-controllable-state");
|
|
43
40
|
var import_react = __toESM(require("react"));
|
|
44
41
|
var import_react_native = require("react-native");
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
42
|
+
var import_SHEET_HANDLE_NAME = require("./SHEET_HANDLE_NAME");
|
|
43
|
+
var import_SheetContext = require("./SheetContext");
|
|
44
|
+
var import_SheetScrollView = require("./SheetScrollView");
|
|
45
|
+
var import_SheetContext2 = require("./SheetContext");
|
|
49
46
|
const SheetHandleFrame = (0, import_core.styled)(import_stacks.XStack, {
|
|
50
|
-
name: SHEET_HANDLE_NAME,
|
|
47
|
+
name: import_SHEET_HANDLE_NAME.SHEET_HANDLE_NAME,
|
|
51
48
|
height: 10,
|
|
52
49
|
borderRadius: 100,
|
|
53
50
|
backgroundColor: "$background",
|
|
54
|
-
position: "absolute",
|
|
55
|
-
pointerEvents: "auto",
|
|
56
51
|
zIndex: 10,
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
left: "35%",
|
|
60
|
-
right: "35%",
|
|
52
|
+
marginHorizontal: "35%",
|
|
53
|
+
marginBottom: "$2",
|
|
61
54
|
opacity: 0.5,
|
|
62
55
|
hoverStyle: {
|
|
63
56
|
opacity: 0.7
|
|
57
|
+
},
|
|
58
|
+
variants: {
|
|
59
|
+
open: {
|
|
60
|
+
true: {
|
|
61
|
+
pointerEvents: "auto"
|
|
62
|
+
},
|
|
63
|
+
false: {
|
|
64
|
+
opacity: 0,
|
|
65
|
+
pointerEvents: "none"
|
|
66
|
+
}
|
|
67
|
+
}
|
|
64
68
|
}
|
|
65
69
|
});
|
|
66
70
|
const SheetHandle = SheetHandleFrame.extractable(({ __scopeSheet, ...props }) => {
|
|
67
|
-
const context = useSheetContext(SHEET_HANDLE_NAME, __scopeSheet);
|
|
68
|
-
if (context.open === false) {
|
|
69
|
-
return null;
|
|
70
|
-
}
|
|
71
|
+
const context = (0, import_SheetContext.useSheetContext)(import_SHEET_HANDLE_NAME.SHEET_HANDLE_NAME, __scopeSheet);
|
|
71
72
|
return /* @__PURE__ */ import_react.default.createElement(SheetHandleFrame, {
|
|
72
73
|
onPress: () => {
|
|
73
74
|
const max = context.snapPoints.length + (context.dismissOnSnapToBottom ? -1 : 0);
|
|
74
75
|
const nextPos = (context.position + 1) % max;
|
|
75
76
|
context.setPosition(nextPos);
|
|
76
77
|
},
|
|
78
|
+
open: context.open,
|
|
77
79
|
...props
|
|
78
80
|
});
|
|
79
81
|
});
|
|
@@ -97,82 +99,13 @@ const SheetOverlayFrame = (0, import_core.styled)(import_stacks.YStack, {
|
|
|
97
99
|
}
|
|
98
100
|
});
|
|
99
101
|
const SheetOverlay = SheetOverlayFrame.extractable(({ __scopeSheet, ...props }) => {
|
|
100
|
-
const context = useSheetContext(SHEET_OVERLAY_NAME, __scopeSheet);
|
|
101
|
-
return /* @__PURE__ */ import_react.default.createElement(
|
|
102
|
-
enabled: context.open && context.modal,
|
|
103
|
-
as: import_core.Slot,
|
|
104
|
-
allowPinchZoom: context.allowPinchZoom,
|
|
105
|
-
shards: [context.contentRef],
|
|
106
|
-
removeScrollBar: false
|
|
107
|
-
}, /* @__PURE__ */ import_react.default.createElement(SheetOverlayFrame, {
|
|
102
|
+
const context = (0, import_SheetContext.useSheetContext)(SHEET_OVERLAY_NAME, __scopeSheet);
|
|
103
|
+
return /* @__PURE__ */ import_react.default.createElement(SheetOverlayFrame, {
|
|
108
104
|
closed: !context.open || context.hidden,
|
|
109
105
|
...props,
|
|
110
106
|
onPress: (0, import_core.mergeEvent)(props.onPress, context.dismissOnOverlayPress ? () => {
|
|
111
107
|
context.setOpen(false);
|
|
112
108
|
} : void 0)
|
|
113
|
-
}));
|
|
114
|
-
});
|
|
115
|
-
const SHEET_SCROLL_VIEW_NAME = "SheetScrollView";
|
|
116
|
-
const SheetScrollView = (0, import_react.forwardRef)(({ __scopeSheet, ...props }, ref) => {
|
|
117
|
-
const { scrollBridge } = useSheetContext(SHEET_SCROLL_VIEW_NAME, __scopeSheet);
|
|
118
|
-
const [scrollEnabled, setScrollEnabled] = (0, import_react.useState)(true);
|
|
119
|
-
const state = (0, import_react.useRef)({
|
|
120
|
-
dy: 0,
|
|
121
|
-
dys: []
|
|
122
|
-
});
|
|
123
|
-
const release = () => {
|
|
124
|
-
setScrollEnabled(true);
|
|
125
|
-
const recentDys = state.current.dys.slice(-10);
|
|
126
|
-
const dist = recentDys.length ? recentDys.reduce((a, b, i) => a + b - (recentDys[i - 1] ?? recentDys[0]), 0) : 0;
|
|
127
|
-
const avgDy = dist / recentDys.length;
|
|
128
|
-
const vy = avgDy * 0.075;
|
|
129
|
-
state.current.dys = [];
|
|
130
|
-
scrollBridge.release({
|
|
131
|
-
dy: state.current.dy,
|
|
132
|
-
vy
|
|
133
|
-
});
|
|
134
|
-
};
|
|
135
|
-
return /* @__PURE__ */ import_react.default.createElement(import_react_native.ScrollView, {
|
|
136
|
-
ref,
|
|
137
|
-
scrollEventThrottle: 16,
|
|
138
|
-
...props,
|
|
139
|
-
scrollEnabled: props.scrollEnabled || scrollEnabled,
|
|
140
|
-
onScroll: (0, import_core.composeEventHandlers)(props.onScroll, (e) => {
|
|
141
|
-
const { y } = e.nativeEvent.contentOffset;
|
|
142
|
-
scrollBridge.y = y;
|
|
143
|
-
if (y > 0) {
|
|
144
|
-
scrollBridge.scrollStartY = -1;
|
|
145
|
-
}
|
|
146
|
-
}),
|
|
147
|
-
onResponderMove: (0, import_core.composeEventHandlers)(props.onResponderMove, (e) => {
|
|
148
|
-
const { pageY } = e.nativeEvent;
|
|
149
|
-
if (scrollBridge.y <= 0) {
|
|
150
|
-
if (scrollBridge.scrollStartY === -1) {
|
|
151
|
-
scrollBridge.scrollStartY = pageY;
|
|
152
|
-
}
|
|
153
|
-
const dy = pageY - scrollBridge.scrollStartY;
|
|
154
|
-
if (dy <= 0) {
|
|
155
|
-
setScrollEnabled(true);
|
|
156
|
-
return;
|
|
157
|
-
}
|
|
158
|
-
setScrollEnabled(false);
|
|
159
|
-
scrollBridge.drag(dy);
|
|
160
|
-
state.current.dy = dy;
|
|
161
|
-
state.current.dys.push(dy);
|
|
162
|
-
if (state.current.dys.length > 100) {
|
|
163
|
-
state.current.dys = state.current.dys.slice(-10);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
}),
|
|
167
|
-
onResponderReject: (0, import_core.composeEventHandlers)(props.onResponderReject, release),
|
|
168
|
-
onResponderTerminate: (0, import_core.composeEventHandlers)(props.onResponderTerminate, release),
|
|
169
|
-
onResponderRelease: (0, import_core.composeEventHandlers)(props.onResponderRelease, release),
|
|
170
|
-
style: [
|
|
171
|
-
{
|
|
172
|
-
flex: 1
|
|
173
|
-
},
|
|
174
|
-
props.style
|
|
175
|
-
]
|
|
176
109
|
});
|
|
177
110
|
});
|
|
178
111
|
const selectionStyleSheet = import_core.isClient ? document.createElement("style") : null;
|
|
@@ -180,7 +113,7 @@ if (selectionStyleSheet) {
|
|
|
180
113
|
document.head.appendChild(selectionStyleSheet);
|
|
181
114
|
}
|
|
182
115
|
const SheetFrameFrame = (0, import_core.styled)(import_stacks.YStack, {
|
|
183
|
-
name: SHEET_NAME,
|
|
116
|
+
name: import_SHEET_HANDLE_NAME.SHEET_NAME,
|
|
184
117
|
flex: 1,
|
|
185
118
|
backgroundColor: "$background",
|
|
186
119
|
borderTopLeftRadius: "$4",
|
|
@@ -191,7 +124,7 @@ const SheetFrameFrame = (0, import_core.styled)(import_stacks.YStack, {
|
|
|
191
124
|
pointerEvents: "auto"
|
|
192
125
|
});
|
|
193
126
|
const SheetFrame = SheetFrameFrame.extractable((0, import_react.forwardRef)(({ __scopeSheet, ...props }, forwardedRef) => {
|
|
194
|
-
const context = useSheetContext(SHEET_NAME, __scopeSheet);
|
|
127
|
+
const context = (0, import_SheetContext.useSheetContext)(import_SHEET_HANDLE_NAME.SHEET_NAME, __scopeSheet);
|
|
195
128
|
const composedContentRef = (0, import_compose_refs.useComposedRefs)(forwardedRef, context.contentRef);
|
|
196
129
|
return /* @__PURE__ */ import_react.default.createElement(SheetFrameFrame, {
|
|
197
130
|
ref: composedContentRef,
|
|
@@ -215,7 +148,7 @@ const Sheet = (0, import_core.withStaticProperties)((0, import_core.themeable)((
|
|
|
215
148
|
dismissOnSnapToBottom = false,
|
|
216
149
|
disableDrag: disableDragProp,
|
|
217
150
|
modal = false,
|
|
218
|
-
|
|
151
|
+
handleDisableScroll = true
|
|
219
152
|
} = props;
|
|
220
153
|
if (process.env.NODE_ENV === "development") {
|
|
221
154
|
if (snapPointsProp.some((p) => p < 0 || p > 100)) {
|
|
@@ -230,11 +163,14 @@ const Sheet = (0, import_core.withStaticProperties)((0, import_core.themeable)((
|
|
|
230
163
|
const scrollBridge = (0, import_core.useConstant)(() => ({
|
|
231
164
|
enabled: false,
|
|
232
165
|
y: 0,
|
|
166
|
+
paneY: 0,
|
|
167
|
+
paneMinY: 0,
|
|
233
168
|
scrollStartY: -1,
|
|
234
169
|
drag: () => {
|
|
235
170
|
},
|
|
236
171
|
release: () => {
|
|
237
|
-
}
|
|
172
|
+
},
|
|
173
|
+
scrollLock: false
|
|
238
174
|
}));
|
|
239
175
|
const onChangeOpenInternal = (val) => {
|
|
240
176
|
var _a;
|
|
@@ -281,6 +217,10 @@ const Sheet = (0, import_core.withStaticProperties)((0, import_core.themeable)((
|
|
|
281
217
|
var _a;
|
|
282
218
|
(_a = spring.current) == null ? void 0 : _a.stop();
|
|
283
219
|
spring.current = null;
|
|
220
|
+
if (scrollBridge.onFinishAnimate) {
|
|
221
|
+
scrollBridge.onFinishAnimate();
|
|
222
|
+
scrollBridge.onFinishAnimate = void 0;
|
|
223
|
+
}
|
|
284
224
|
}
|
|
285
225
|
const shouldSetPositionOpen = open && position < 0;
|
|
286
226
|
(0, import_react.useEffect)(() => {
|
|
@@ -334,6 +274,7 @@ const Sheet = (0, import_core.withStaticProperties)((0, import_core.themeable)((
|
|
|
334
274
|
(0, import_react.useEffect)(() => {
|
|
335
275
|
positionValue.current.addListener(({ value }) => {
|
|
336
276
|
at.current = value;
|
|
277
|
+
scrollBridge.paneY = value;
|
|
337
278
|
});
|
|
338
279
|
return () => {
|
|
339
280
|
positionValue.current.removeAllListeners();
|
|
@@ -346,6 +287,7 @@ const Sheet = (0, import_core.withStaticProperties)((0, import_core.themeable)((
|
|
|
346
287
|
return;
|
|
347
288
|
const pos = positionValue.current;
|
|
348
289
|
const minY = positions[0];
|
|
290
|
+
scrollBridge.paneMinY = minY;
|
|
349
291
|
let startY = at.current;
|
|
350
292
|
function makeUnselectable(val) {
|
|
351
293
|
if (!selectionStyleSheet)
|
|
@@ -356,12 +298,12 @@ const Sheet = (0, import_core.withStaticProperties)((0, import_core.themeable)((
|
|
|
356
298
|
selectionStyleSheet.innerText = `:root * { user-select: none !important; -webkit-user-select: none !important; }`;
|
|
357
299
|
}
|
|
358
300
|
}
|
|
359
|
-
const release = ({ vy,
|
|
301
|
+
const release = ({ vy, dragAt }) => {
|
|
360
302
|
isExternalDrag = false;
|
|
361
303
|
previouslyScrolling = false;
|
|
362
304
|
makeUnselectable(false);
|
|
363
|
-
const at2 =
|
|
364
|
-
const end = at2 + frameSize * vy * 0.
|
|
305
|
+
const at2 = dragAt + startY;
|
|
306
|
+
const end = at2 + frameSize * vy * 0.2;
|
|
365
307
|
let closestPoint = 0;
|
|
366
308
|
let dist = Infinity;
|
|
367
309
|
for (let i = 0; i < positions.length; i++) {
|
|
@@ -376,23 +318,26 @@ const Sheet = (0, import_core.withStaticProperties)((0, import_core.themeable)((
|
|
|
376
318
|
animateTo(closestPoint);
|
|
377
319
|
};
|
|
378
320
|
const finish = (_e, state) => {
|
|
379
|
-
release(
|
|
321
|
+
release({
|
|
322
|
+
vy: state.vy,
|
|
323
|
+
dragAt: state.dy
|
|
324
|
+
});
|
|
380
325
|
};
|
|
381
326
|
let previouslyScrolling = false;
|
|
382
327
|
const onMoveShouldSet = (_e, { dy }) => {
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
}
|
|
388
|
-
if (scrollBridge.y === 0 && dy < 0) {
|
|
389
|
-
return false;
|
|
390
|
-
}
|
|
328
|
+
const isScrolled = scrollBridge.y !== 0;
|
|
329
|
+
if (isScrolled) {
|
|
330
|
+
previouslyScrolling = true;
|
|
331
|
+
return false;
|
|
391
332
|
}
|
|
392
333
|
if (previouslyScrolling) {
|
|
393
334
|
previouslyScrolling = false;
|
|
394
335
|
return true;
|
|
395
336
|
}
|
|
337
|
+
const isDraggingUp = dy < 0;
|
|
338
|
+
if (!isScrolled && isDraggingUp) {
|
|
339
|
+
return false;
|
|
340
|
+
}
|
|
396
341
|
return Math.abs(dy) > 8;
|
|
397
342
|
};
|
|
398
343
|
const grant = () => {
|
|
@@ -401,24 +346,24 @@ const Sheet = (0, import_core.withStaticProperties)((0, import_core.themeable)((
|
|
|
401
346
|
startY = at.current;
|
|
402
347
|
};
|
|
403
348
|
let isExternalDrag = false;
|
|
349
|
+
function setPositionValue(next) {
|
|
350
|
+
pos.setValue(next);
|
|
351
|
+
}
|
|
404
352
|
scrollBridge.drag = (dy) => {
|
|
405
353
|
if (!isExternalDrag) {
|
|
406
354
|
isExternalDrag = true;
|
|
407
355
|
grant();
|
|
408
356
|
}
|
|
409
357
|
const to = dy + startY;
|
|
410
|
-
|
|
358
|
+
setPositionValue(resisted(to, minY));
|
|
411
359
|
};
|
|
412
360
|
scrollBridge.release = release;
|
|
413
361
|
return import_react_native.PanResponder.create({
|
|
414
|
-
onMoveShouldSetPanResponder:
|
|
415
|
-
const res = onMoveShouldSet(...args);
|
|
416
|
-
return res;
|
|
417
|
-
},
|
|
362
|
+
onMoveShouldSetPanResponder: onMoveShouldSet,
|
|
418
363
|
onPanResponderGrant: grant,
|
|
419
364
|
onPanResponderMove: (_e, { dy }) => {
|
|
420
365
|
const to = dy + startY;
|
|
421
|
-
|
|
366
|
+
setPositionValue(resisted(to, minY));
|
|
422
367
|
},
|
|
423
368
|
onPanResponderEnd: finish,
|
|
424
369
|
onPanResponderTerminate: finish,
|
|
@@ -452,12 +397,11 @@ const Sheet = (0, import_core.withStaticProperties)((0, import_core.themeable)((
|
|
|
452
397
|
return null;
|
|
453
398
|
}
|
|
454
399
|
const translateY = frameSize === 0 ? HIDDEN_SIZE : positionValue.current;
|
|
455
|
-
const contents = /* @__PURE__ */ import_react.default.createElement(SheetProvider, {
|
|
400
|
+
const contents = /* @__PURE__ */ import_react.default.createElement(import_SheetContext.SheetProvider, {
|
|
456
401
|
modal,
|
|
457
402
|
contentRef,
|
|
458
403
|
dismissOnOverlayPress,
|
|
459
404
|
dismissOnSnapToBottom,
|
|
460
|
-
allowPinchZoom,
|
|
461
405
|
open,
|
|
462
406
|
hidden: isHidden,
|
|
463
407
|
scope: __scopeSheet,
|
|
@@ -466,7 +410,7 @@ const Sheet = (0, import_core.withStaticProperties)((0, import_core.themeable)((
|
|
|
466
410
|
setPosition,
|
|
467
411
|
setOpen,
|
|
468
412
|
scrollBridge
|
|
469
|
-
}, isResizing ? null : overlayComponent,
|
|
413
|
+
}, isResizing ? null : overlayComponent, /* @__PURE__ */ import_react.default.createElement(import_react_native.Animated.View, {
|
|
470
414
|
ref,
|
|
471
415
|
...panResponder == null ? void 0 : panResponder.panHandlers,
|
|
472
416
|
onLayout: (e) => {
|
|
@@ -485,7 +429,7 @@ const Sheet = (0, import_core.withStaticProperties)((0, import_core.themeable)((
|
|
|
485
429
|
height: "100%",
|
|
486
430
|
transform: [{ translateY }]
|
|
487
431
|
}
|
|
488
|
-
}, isResizing ? null : frameComponent));
|
|
432
|
+
}, handleComponent, isResizing ? null : frameComponent));
|
|
489
433
|
if (modal) {
|
|
490
434
|
return /* @__PURE__ */ import_react.default.createElement(import_portal.Portal, null, /* @__PURE__ */ import_react.default.createElement(import_core.Theme, {
|
|
491
435
|
name: themeName
|
|
@@ -496,7 +440,7 @@ const Sheet = (0, import_core.withStaticProperties)((0, import_core.themeable)((
|
|
|
496
440
|
Handle: SheetHandle,
|
|
497
441
|
Frame: SheetFrame,
|
|
498
442
|
Overlay: SheetOverlay,
|
|
499
|
-
ScrollView: SheetScrollView
|
|
443
|
+
ScrollView: import_SheetScrollView.SheetScrollView
|
|
500
444
|
});
|
|
501
445
|
function getPercentSize(point, frameSize) {
|
|
502
446
|
if (!frameSize)
|
|
@@ -546,7 +490,6 @@ const SheetController = ({
|
|
|
546
490
|
SheetHandleFrame,
|
|
547
491
|
SheetOverlay,
|
|
548
492
|
SheetOverlayFrame,
|
|
549
|
-
SheetScrollView,
|
|
550
493
|
createSheetScope
|
|
551
494
|
});
|
|
552
495
|
//# sourceMappingURL=Sheet.js.map
|
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 composeEventHandlers,\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 NativeScrollEvent,\n NativeSyntheticEvent,\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 modal: boolean\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 && context.modal}\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.075\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 scrollEventThrottle={16} // todo release we can just grab the last dY and estimate vY using a sample of last dYs\n {...props}\n scrollEnabled={props.scrollEnabled || scrollEnabled}\n onScroll={composeEventHandlers<NativeSyntheticEvent<NativeScrollEvent>>(\n props.onScroll,\n (e) => {\n const { y } = e.nativeEvent.contentOffset\n scrollBridge.y = y\n if (y > 0) {\n scrollBridge.scrollStartY = -1\n }\n }\n )}\n onResponderMove={composeEventHandlers(props.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 onResponderReject={composeEventHandlers(props.onResponderReject, release)}\n onResponderTerminate={composeEventHandlers(props.onResponderTerminate, release)}\n onResponderRelease={composeEventHandlers(props.onResponderRelease, release)}\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>(function Sheet(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 = false,\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: 'most-recent-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 strategy: 'most-recent-wins',\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 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.enabled) {\n if (scrollBridge.y !== 0) {\n previouslyScrolling = true\n return false\n }\n if (scrollBridge.y === 0 && dy < 0) {\n return false\n }\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 translateY = frameSize === 0 ? HIDDEN_SIZE : positionValue.current\n\n const contents = (\n <SheetProvider\n modal={modal}\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 }],\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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",
|
|
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 { 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 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 StyleSheet,\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 = 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 // 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 <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\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>(function Sheet(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 = false,\n handleDisableScroll = true,\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 paneY: 0,\n paneMinY: 0,\n scrollStartY: -1,\n drag: () => {},\n release: () => {},\n scrollLock: false,\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: 'most-recent-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 strategy: 'most-recent-wins',\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 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 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 = 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 scrollBridge.paneY = 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 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 = `: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 = (_e: GestureResponderEvent, { dy }: PanResponderGestureState) => {\n const isScrolled = scrollBridge.y !== 0\n if (isScrolled) {\n previouslyScrolling = true\n return false\n }\n if (previouslyScrolling) {\n previouslyScrolling = false\n return true\n }\n const isDraggingUp = dy < 0\n if (!isScrolled && isDraggingUp) {\n return false\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 function setPositionValue(next: number) {\n // useful to debug any \"jumping\"\n // if (process.env.NODE_ENV === 'development') {\n // const moveAmt = Math.abs(pos['_value'] - next)\n // if (moveAmt > 50) {\n // console.warn('!!!!!!!!!!!!jump!', moveAmt)\n // // debugger\n // }\n // }\n pos.setValue(next)\n }\n\n scrollBridge.drag = (dy) => {\n if (!isExternalDrag) {\n isExternalDrag = true\n grant()\n }\n const to = dy + startY\n setPositionValue(resisted(to, minY))\n }\n\n scrollBridge.release = release\n\n return PanResponder.create({\n onMoveShouldSetPanResponder: onMoveShouldSet,\n onPanResponderGrant: grant,\n onPanResponderMove: (_e, { dy }) => {\n const to = dy + startY\n setPositionValue(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 translateY = frameSize === 0 ? HIDDEN_SIZE : positionValue.current\n\n const contents = (\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 ? null : overlayComponent}\n\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 }],\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 </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"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,38 @@
|
|
|
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 SheetContext_exports = {};
|
|
20
|
+
__export(SheetContext_exports, {
|
|
21
|
+
SheetProvider: () => SheetProvider,
|
|
22
|
+
createSheetContext: () => createSheetContext,
|
|
23
|
+
createSheetScope: () => createSheetScope,
|
|
24
|
+
useSheetContext: () => useSheetContext
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(SheetContext_exports);
|
|
27
|
+
var import_create_context = require("@tamagui/create-context");
|
|
28
|
+
var import_SHEET_HANDLE_NAME = require("./SHEET_HANDLE_NAME");
|
|
29
|
+
const [createSheetContext, createSheetScope] = (0, import_create_context.createContextScope)(import_SHEET_HANDLE_NAME.SHEET_NAME);
|
|
30
|
+
const [SheetProvider, useSheetContext] = createSheetContext(import_SHEET_HANDLE_NAME.SHEET_NAME, {});
|
|
31
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
32
|
+
0 && (module.exports = {
|
|
33
|
+
SheetProvider,
|
|
34
|
+
createSheetContext,
|
|
35
|
+
createSheetScope,
|
|
36
|
+
useSheetContext
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=SheetContext.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 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 './SHEET_HANDLE_NAME'\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 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,+BAA2B;AAepB,MAAM,CAAC,oBAAoB,oBAAoB,8CAAmB,mCAAU;AAE5E,MAAM,CAAC,eAAe,mBAAmB,mBAC9C,qCACA,CAAC,CACH;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|