@tamagui/sheet 3.0.0-beta.924.1 → 3.0.0
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.cjs +48 -16
- package/dist/cjs/Sheet.native.cjs +46 -17
- package/dist/cjs/Sheet.native.js +46 -17
- package/dist/cjs/Sheet.native.js.map +1 -1
- package/dist/cjs/SheetDragSurface.cjs +50 -0
- package/dist/{jsx/GestureDetectorWrapper.native.js → cjs/SheetDragSurface.native.cjs} +24 -12
- package/dist/cjs/{GestureDetectorWrapper.native.js → SheetDragSurface.native.js} +25 -11
- package/dist/cjs/SheetDragSurface.native.js.map +1 -0
- package/dist/cjs/SheetImplementationCustom.cjs +41 -58
- package/dist/cjs/SheetImplementationCustom.native.cjs +43 -59
- package/dist/cjs/SheetImplementationCustom.native.js +43 -59
- package/dist/cjs/SheetImplementationCustom.native.js.map +1 -1
- package/dist/cjs/SheetScrollView.cjs +15 -3
- package/dist/cjs/SheetScrollView.native.cjs +17 -4
- package/dist/cjs/SheetScrollView.native.js +17 -4
- package/dist/cjs/SheetScrollView.native.js.map +1 -1
- package/dist/cjs/nativeSheet.cjs +3 -59
- package/dist/cjs/nativeSheet.native.cjs +70 -58
- package/dist/cjs/nativeSheet.native.js +70 -58
- package/dist/cjs/nativeSheet.native.js.map +1 -1
- package/dist/cjs/stableViewportHeight.cjs +27 -0
- package/dist/cjs/stableViewportHeight.native.cjs +29 -0
- package/dist/cjs/stableViewportHeight.native.js +31 -0
- package/dist/cjs/stableViewportHeight.native.js.map +1 -0
- package/dist/cjs/useSheetOffscreenSize.cjs +3 -1
- package/dist/cjs/useSheetOffscreenSize.native.cjs +3 -2
- package/dist/cjs/useSheetOffscreenSize.native.js +3 -2
- package/dist/cjs/useSheetOffscreenSize.native.js.map +1 -1
- package/dist/cjs/useSheetOpenState.cjs +13 -6
- package/dist/cjs/useSheetOpenState.native.cjs +15 -5
- package/dist/cjs/useSheetOpenState.native.js +15 -5
- package/dist/cjs/useSheetOpenState.native.js.map +1 -1
- package/dist/cjs/useSheetProviderProps.cjs +5 -94
- package/dist/cjs/useSheetProviderProps.native.cjs +5 -103
- package/dist/cjs/useSheetProviderProps.native.js +5 -103
- package/dist/cjs/useSheetProviderProps.native.js.map +1 -1
- package/dist/cjs/useSheetState.cjs +120 -0
- package/dist/cjs/useSheetState.native.cjs +131 -0
- package/dist/cjs/useSheetState.native.js +133 -0
- package/dist/cjs/useSheetState.native.js.map +1 -0
- package/dist/esm/Sheet.mjs +48 -15
- package/dist/esm/Sheet.mjs.map +1 -1
- package/dist/esm/Sheet.native.js +46 -17
- package/dist/esm/Sheet.native.js.map +1 -1
- package/dist/esm/SheetDragSurface.mjs +25 -0
- package/dist/esm/SheetDragSurface.mjs.map +1 -0
- package/dist/esm/SheetDragSurface.native.js +34 -0
- package/dist/esm/SheetDragSurface.native.js.map +1 -0
- package/dist/esm/SheetImplementationCustom.mjs +39 -56
- package/dist/esm/SheetImplementationCustom.mjs.map +1 -1
- package/dist/esm/SheetImplementationCustom.native.js +41 -57
- package/dist/esm/SheetImplementationCustom.native.js.map +1 -1
- package/dist/esm/SheetScrollView.mjs +16 -4
- package/dist/esm/SheetScrollView.mjs.map +1 -1
- package/dist/esm/SheetScrollView.native.js +18 -5
- package/dist/esm/SheetScrollView.native.js.map +1 -1
- package/dist/esm/nativeSheet.mjs +3 -60
- package/dist/esm/nativeSheet.mjs.map +1 -1
- package/dist/esm/nativeSheet.native.js +70 -58
- package/dist/esm/nativeSheet.native.js.map +1 -1
- package/dist/esm/stableViewportHeight.mjs +8 -0
- package/dist/esm/stableViewportHeight.mjs.map +1 -0
- package/dist/esm/stableViewportHeight.native.js +8 -0
- package/dist/esm/stableViewportHeight.native.js.map +1 -0
- package/dist/esm/useKeyboardControllerSheet.native.js +0 -5
- package/dist/esm/useSheetOffscreenSize.mjs +3 -1
- package/dist/esm/useSheetOffscreenSize.mjs.map +1 -1
- package/dist/esm/useSheetOffscreenSize.native.js +3 -2
- package/dist/esm/useSheetOffscreenSize.native.js.map +1 -1
- package/dist/esm/useSheetOpenState.mjs +14 -7
- package/dist/esm/useSheetOpenState.mjs.map +1 -1
- package/dist/esm/useSheetOpenState.native.js +16 -6
- package/dist/esm/useSheetOpenState.native.js.map +1 -1
- package/dist/esm/useSheetProviderProps.mjs +5 -88
- package/dist/esm/useSheetProviderProps.mjs.map +1 -1
- package/dist/esm/useSheetProviderProps.native.js +5 -97
- package/dist/esm/useSheetProviderProps.native.js.map +1 -1
- package/dist/esm/useSheetState.mjs +95 -0
- package/dist/esm/useSheetState.mjs.map +1 -0
- package/dist/esm/useSheetState.native.js +104 -0
- package/dist/esm/useSheetState.native.js.map +1 -0
- package/dist/jsx/Sheet.mjs +48 -15
- package/dist/jsx/Sheet.mjs.map +1 -1
- package/dist/jsx/Sheet.native.cjs +46 -17
- package/dist/jsx/Sheet.native.js +46 -17
- package/dist/jsx/Sheet.native.js.map +1 -1
- package/dist/jsx/SheetDragSurface.mjs +25 -0
- package/dist/jsx/SheetDragSurface.mjs.map +1 -0
- package/dist/{cjs/GestureDetectorWrapper.native.cjs → jsx/SheetDragSurface.native.cjs} +24 -10
- package/dist/jsx/{GestureDetectorWrapper.native.cjs → SheetDragSurface.native.js} +26 -10
- package/dist/jsx/SheetDragSurface.native.js.map +1 -0
- package/dist/jsx/SheetImplementationCustom.mjs +39 -56
- package/dist/jsx/SheetImplementationCustom.mjs.map +1 -1
- package/dist/jsx/SheetImplementationCustom.native.cjs +43 -59
- package/dist/jsx/SheetImplementationCustom.native.js +43 -59
- package/dist/jsx/SheetImplementationCustom.native.js.map +1 -1
- package/dist/jsx/SheetScrollView.mjs +16 -4
- package/dist/jsx/SheetScrollView.mjs.map +1 -1
- package/dist/jsx/SheetScrollView.native.cjs +17 -4
- package/dist/jsx/SheetScrollView.native.js +17 -4
- package/dist/jsx/SheetScrollView.native.js.map +1 -1
- package/dist/jsx/nativeSheet.mjs +3 -60
- package/dist/jsx/nativeSheet.mjs.map +1 -1
- package/dist/jsx/nativeSheet.native.cjs +70 -58
- package/dist/jsx/nativeSheet.native.js +70 -58
- package/dist/jsx/nativeSheet.native.js.map +1 -1
- package/dist/jsx/stableViewportHeight.mjs +8 -0
- package/dist/jsx/stableViewportHeight.mjs.map +1 -0
- package/dist/jsx/stableViewportHeight.native.cjs +29 -0
- package/dist/jsx/stableViewportHeight.native.js +31 -0
- package/dist/jsx/stableViewportHeight.native.js.map +1 -0
- package/dist/jsx/useSheetOffscreenSize.mjs +3 -1
- package/dist/jsx/useSheetOffscreenSize.mjs.map +1 -1
- package/dist/jsx/useSheetOffscreenSize.native.cjs +3 -2
- package/dist/jsx/useSheetOffscreenSize.native.js +3 -2
- package/dist/jsx/useSheetOffscreenSize.native.js.map +1 -1
- package/dist/jsx/useSheetOpenState.mjs +14 -7
- package/dist/jsx/useSheetOpenState.mjs.map +1 -1
- package/dist/jsx/useSheetOpenState.native.cjs +15 -5
- package/dist/jsx/useSheetOpenState.native.js +15 -5
- package/dist/jsx/useSheetOpenState.native.js.map +1 -1
- package/dist/jsx/useSheetProviderProps.mjs +5 -88
- package/dist/jsx/useSheetProviderProps.mjs.map +1 -1
- package/dist/jsx/useSheetProviderProps.native.cjs +5 -103
- package/dist/jsx/useSheetProviderProps.native.js +5 -103
- package/dist/jsx/useSheetProviderProps.native.js.map +1 -1
- package/dist/jsx/useSheetState.mjs +95 -0
- package/dist/jsx/useSheetState.mjs.map +1 -0
- package/dist/jsx/useSheetState.native.cjs +131 -0
- package/dist/jsx/useSheetState.native.js +133 -0
- package/dist/jsx/useSheetState.native.js.map +1 -0
- package/package.json +27 -22
- package/src/Sheet.tsx +45 -18
- package/src/SheetDragSurface.native.tsx +42 -0
- package/src/SheetDragSurface.tsx +40 -0
- package/src/SheetImplementationCustom.tsx +67 -92
- package/src/SheetScrollView.tsx +26 -4
- package/src/nativeSheet.native.tsx +110 -0
- package/src/nativeSheet.ts +16 -0
- package/src/stableViewportHeight.native.ts +9 -0
- package/src/stableViewportHeight.ts +15 -0
- package/src/types.tsx +44 -1
- package/src/useSheetOffscreenSize.tsx +3 -7
- package/src/useSheetOpenState.tsx +18 -8
- package/src/useSheetProviderProps.tsx +18 -149
- package/src/useSheetScrollViewGestures.native.ts +4 -1
- package/src/useSheetState.tsx +139 -0
- package/types/Sheet.d.ts +71 -167
- package/types/Sheet.d.ts.map +1 -1
- package/types/SheetDragSurface.d.ts +11 -0
- package/types/SheetDragSurface.d.ts.map +1 -0
- package/types/SheetDragSurface.native.d.ts +11 -0
- package/types/SheetDragSurface.native.d.ts.map +1 -0
- package/types/SheetImplementationCustom.d.ts +1 -2
- package/types/SheetImplementationCustom.d.ts.map +1 -1
- package/types/SheetScrollView.d.ts +3 -3
- package/types/SheetScrollView.d.ts.map +1 -1
- package/types/nativeSheet.d.ts +8 -9
- package/types/nativeSheet.d.ts.map +1 -1
- package/types/nativeSheet.native.d.ts +4 -0
- package/types/nativeSheet.native.d.ts.map +1 -0
- package/types/stableViewportHeight.d.ts +12 -0
- package/types/stableViewportHeight.d.ts.map +1 -0
- package/types/stableViewportHeight.native.d.ts +6 -0
- package/types/stableViewportHeight.native.d.ts.map +1 -0
- package/types/types.d.ts +34 -1
- package/types/types.d.ts.map +1 -1
- package/types/useSheetOffscreenSize.d.ts +1 -1
- package/types/useSheetOffscreenSize.d.ts.map +1 -1
- package/types/useSheetOpenState.d.ts +3 -1
- package/types/useSheetOpenState.d.ts.map +1 -1
- package/types/useSheetProviderProps.d.ts +15 -13
- package/types/useSheetProviderProps.d.ts.map +1 -1
- package/types/useSheetScrollViewGestures.native.d.ts +1 -1
- package/types/useSheetScrollViewGestures.native.d.ts.map +1 -1
- package/types/useSheetState.d.ts +26 -0
- package/types/useSheetState.d.ts.map +1 -0
- package/dist/cjs/GestureDetectorWrapper.cjs +0 -44
- package/dist/cjs/GestureDetectorWrapper.native.js.map +0 -1
- package/dist/esm/GestureDetectorWrapper.mjs +0 -25
- package/dist/esm/GestureDetectorWrapper.mjs.map +0 -1
- package/dist/esm/GestureDetectorWrapper.native.js +0 -26
- package/dist/esm/GestureDetectorWrapper.native.js.map +0 -1
- package/dist/jsx/GestureDetectorWrapper.mjs +0 -25
- package/dist/jsx/GestureDetectorWrapper.mjs.map +0 -1
- package/dist/jsx/GestureDetectorWrapper.native.js.map +0 -1
- package/src/GestureDetectorWrapper.tsx +0 -38
- package/src/nativeSheet.tsx +0 -86
- package/types/GestureDetectorWrapper.d.ts +0 -14
- package/types/GestureDetectorWrapper.d.ts.map +0 -1
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { useControllableState } from "@tamagui/use-controllable-state";
|
|
3
|
+
|
|
4
|
+
function useSheetState(props, state) {
|
|
5
|
+
const handleRef = React.useRef(null);
|
|
6
|
+
const contentRef = React.useRef(null);
|
|
7
|
+
const [frameSize, setFrameSize] = React.useState(0);
|
|
8
|
+
const [maxContentSize, setMaxContentSize] = React.useState(0);
|
|
9
|
+
const snapPointsMode = props.snapPointsMode ?? "percent";
|
|
10
|
+
const snapPointsProp = props.snapPoints ?? (snapPointsMode === "percent" ? [80] : snapPointsMode === "constant" ? [256] : ["fit"]);
|
|
11
|
+
const hasFit = snapPointsProp[0] === "fit";
|
|
12
|
+
const snapPoints = React.useMemo(() => props.dismissOnSnapToBottom ? [...snapPointsProp, 0] : snapPointsProp, [JSON.stringify(snapPointsProp), props.dismissOnSnapToBottom]);
|
|
13
|
+
const [position_, setPositionImmediate] = useControllableState({
|
|
14
|
+
prop: props.position,
|
|
15
|
+
defaultProp: props.defaultPosition || (state.open ? 0 : -1),
|
|
16
|
+
onChange: props.onPositionChange,
|
|
17
|
+
strategy: state.strategy
|
|
18
|
+
});
|
|
19
|
+
const position = state.open === false ? -1 : position_;
|
|
20
|
+
const { open } = state;
|
|
21
|
+
const setPosition = React.useCallback((next) => {
|
|
22
|
+
if (props.dismissOnSnapToBottom && next === snapPoints.length - 1) {
|
|
23
|
+
state.setOpen(false);
|
|
24
|
+
} else {
|
|
25
|
+
setPositionImmediate(next);
|
|
26
|
+
}
|
|
27
|
+
}, [
|
|
28
|
+
props.dismissOnSnapToBottom,
|
|
29
|
+
snapPoints.length,
|
|
30
|
+
setPositionImmediate,
|
|
31
|
+
state.setOpen
|
|
32
|
+
]);
|
|
33
|
+
if (process.env.NODE_ENV === "development") {
|
|
34
|
+
if (snapPointsMode === "mixed" && snapPoints.some((p) => {
|
|
35
|
+
if (typeof p === "string") {
|
|
36
|
+
if (p === "fit") {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
if (p.endsWith("%")) {
|
|
40
|
+
const n = Number(p.slice(0, -1));
|
|
41
|
+
return n < 0 || n > 100;
|
|
42
|
+
}
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
return typeof p !== "number" || p < 0;
|
|
46
|
+
})) {
|
|
47
|
+
console.warn("⚠️ Invalid snapPoint given, snapPoints must be positive numeric values, string percentages between 0-100%, or \"fit\" when snapPointsMode is mixed");
|
|
48
|
+
}
|
|
49
|
+
if (snapPointsMode === "mixed" && snapPoints.indexOf("fit") > 0) {
|
|
50
|
+
console.warn("⚠️ Invalid snapPoint given, \"fit\" must be the first/largest snap point when snapPointsMode is mixed");
|
|
51
|
+
}
|
|
52
|
+
if (snapPointsMode === "fit" && (snapPoints.length !== (props.dismissOnSnapToBottom ? 2 : 1) || snapPoints[0] !== "fit")) {
|
|
53
|
+
console.warn("⚠️ Invalid snapPoint given, there are no snap points when snapPointsMode is fit");
|
|
54
|
+
}
|
|
55
|
+
if (snapPointsMode === "constant" && snapPoints.some((p) => typeof p !== "number" || p < 0)) {
|
|
56
|
+
console.warn("⚠️ Invalid snapPoint given, snapPoints must be positive numeric values when snapPointsMode is constant");
|
|
57
|
+
}
|
|
58
|
+
if (snapPointsMode === "percent" && snapPoints.some((p) => typeof p !== "number" || p < 0 || p > 100)) {
|
|
59
|
+
console.warn("⚠️ Invalid snapPoint given, snapPoints must be numeric values between 0 and 100 when snapPointsMode is percent");
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (open && props.dismissOnSnapToBottom && position === snapPoints.length - 1) {
|
|
63
|
+
setPositionImmediate(0);
|
|
64
|
+
}
|
|
65
|
+
const shouldSetPositionOpen = open && position < 0;
|
|
66
|
+
React.useEffect(() => {
|
|
67
|
+
if (shouldSetPositionOpen) {
|
|
68
|
+
setPosition(0);
|
|
69
|
+
}
|
|
70
|
+
}, [setPosition, shouldSetPositionOpen]);
|
|
71
|
+
return {
|
|
72
|
+
modal: !!props.modal,
|
|
73
|
+
open: state.open,
|
|
74
|
+
setOpen: state.setOpen,
|
|
75
|
+
hidden: !!state.isHidden,
|
|
76
|
+
contentRef,
|
|
77
|
+
handleRef,
|
|
78
|
+
frameSize,
|
|
79
|
+
setFrameSize,
|
|
80
|
+
maxContentSize,
|
|
81
|
+
dismissOnOverlayPress: props.dismissOnOverlayPress ?? true,
|
|
82
|
+
dismissOnSnapToBottom: props.dismissOnSnapToBottom ?? false,
|
|
83
|
+
scope: props.scope ?? "",
|
|
84
|
+
hasFit,
|
|
85
|
+
position,
|
|
86
|
+
snapPoints,
|
|
87
|
+
snapPointsMode,
|
|
88
|
+
setMaxContentSize,
|
|
89
|
+
setPosition,
|
|
90
|
+
setPositionImmediate
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export { useSheetState };
|
|
95
|
+
//# sourceMappingURL=useSheetState.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSheetState.js","names":[],"sources":["jsx/useSheetState.js"],"sourcesContent":["import React from \"react\";\nimport { useControllableState } from \"@tamagui/use-controllable-state\";\nfunction useSheetState(props, state) {\n const handleRef = React.useRef(null);\n const contentRef = React.useRef(null);\n const [frameSize, setFrameSize] = React.useState(0);\n const [maxContentSize, setMaxContentSize] = React.useState(0);\n const snapPointsMode = props.snapPointsMode ?? \"percent\";\n const snapPointsProp = props.snapPoints ?? (snapPointsMode === \"percent\" ? [80] : snapPointsMode === \"constant\" ? [256] : [\"fit\"]);\n const hasFit = snapPointsProp[0] === \"fit\";\n const snapPoints = React.useMemo(\n () => props.dismissOnSnapToBottom ? [...snapPointsProp, 0] : snapPointsProp,\n [JSON.stringify(snapPointsProp), props.dismissOnSnapToBottom]\n );\n const [position_, setPositionImmediate] = useControllableState({\n prop: props.position,\n defaultProp: props.defaultPosition || (state.open ? 0 : -1),\n onChange: props.onPositionChange,\n strategy: state.strategy\n });\n const position = state.open === false ? -1 : position_;\n const { open } = state;\n const setPosition = React.useCallback(\n (next) => {\n if (props.dismissOnSnapToBottom && next === snapPoints.length - 1) {\n state.setOpen(false);\n } else {\n setPositionImmediate(next);\n }\n },\n [props.dismissOnSnapToBottom, snapPoints.length, setPositionImmediate, state.setOpen]\n );\n if (process.env.NODE_ENV === \"development\") {\n if (snapPointsMode === \"mixed\" && snapPoints.some((p) => {\n if (typeof p === \"string\") {\n if (p === \"fit\") {\n return false;\n }\n if (p.endsWith(\"%\")) {\n const n = Number(p.slice(0, -1));\n return n < 0 || n > 100;\n }\n return true;\n }\n return typeof p !== \"number\" || p < 0;\n })) {\n console.warn(\n '\\u26A0\\uFE0F Invalid snapPoint given, snapPoints must be positive numeric values, string percentages between 0-100%, or \"fit\" when snapPointsMode is mixed'\n );\n }\n if (snapPointsMode === \"mixed\" && snapPoints.indexOf(\"fit\") > 0) {\n console.warn(\n '\\u26A0\\uFE0F Invalid snapPoint given, \"fit\" must be the first/largest snap point when snapPointsMode is mixed'\n );\n }\n if (snapPointsMode === \"fit\" && (snapPoints.length !== (props.dismissOnSnapToBottom ? 2 : 1) || snapPoints[0] !== \"fit\")) {\n console.warn(\n \"\\u26A0\\uFE0F Invalid snapPoint given, there are no snap points when snapPointsMode is fit\"\n );\n }\n if (snapPointsMode === \"constant\" && snapPoints.some((p) => typeof p !== \"number\" || p < 0)) {\n console.warn(\n \"\\u26A0\\uFE0F Invalid snapPoint given, snapPoints must be positive numeric values when snapPointsMode is constant\"\n );\n }\n if (snapPointsMode === \"percent\" && snapPoints.some((p) => typeof p !== \"number\" || p < 0 || p > 100)) {\n console.warn(\n \"\\u26A0\\uFE0F Invalid snapPoint given, snapPoints must be numeric values between 0 and 100 when snapPointsMode is percent\"\n );\n }\n }\n if (open && props.dismissOnSnapToBottom && position === snapPoints.length - 1) {\n setPositionImmediate(0);\n }\n const shouldSetPositionOpen = open && position < 0;\n React.useEffect(() => {\n if (shouldSetPositionOpen) {\n setPosition(0);\n }\n }, [setPosition, shouldSetPositionOpen]);\n return {\n modal: !!props.modal,\n open: state.open,\n setOpen: state.setOpen,\n hidden: !!state.isHidden,\n contentRef,\n handleRef,\n frameSize,\n setFrameSize,\n maxContentSize,\n dismissOnOverlayPress: props.dismissOnOverlayPress ?? true,\n dismissOnSnapToBottom: props.dismissOnSnapToBottom ?? false,\n scope: props.scope ?? \"\",\n hasFit,\n position,\n snapPoints,\n snapPointsMode,\n setMaxContentSize,\n setPosition,\n setPositionImmediate\n };\n}\nexport {\n useSheetState\n};\n//# sourceMappingURL=useSheetState.js.map\n"],"mappings":";;;;AAEA,SAAS,cAAc,OAAO,OAAO;CACnC,MAAM,YAAY,MAAM,OAAO,IAAI;CACnC,MAAM,aAAa,MAAM,OAAO,IAAI;CACpC,MAAM,CAAC,WAAW,gBAAgB,MAAM,SAAS,CAAC;CAClD,MAAM,CAAC,gBAAgB,qBAAqB,MAAM,SAAS,CAAC;CAC5D,MAAM,iBAAiB,MAAM,kBAAkB;CAC/C,MAAM,iBAAiB,MAAM,eAAe,mBAAmB,YAAY,CAAC,EAAE,IAAI,mBAAmB,aAAa,CAAC,GAAG,IAAI,CAAC,KAAK;CAChI,MAAM,SAAS,eAAe,OAAO;CACrC,MAAM,aAAa,MAAM,cACjB,MAAM,wBAAwB,CAAC,GAAG,gBAAgB,CAAC,IAAI,gBAC7D,CAAC,KAAK,UAAU,cAAc,GAAG,MAAM,qBAAqB,CAC9D;CACA,MAAM,CAAC,WAAW,wBAAwB,qBAAqB;EAC7D,MAAM,MAAM;EACZ,aAAa,MAAM,oBAAoB,MAAM,OAAO,IAAI,CAAC;EACzD,UAAU,MAAM;EAChB,UAAU,MAAM;CAClB,CAAC;CACD,MAAM,WAAW,MAAM,SAAS,QAAQ,CAAC,IAAI;CAC7C,MAAM,EAAE,SAAS;CACjB,MAAM,cAAc,MAAM,aACvB,SAAS;EACR,IAAI,MAAM,yBAAyB,SAAS,WAAW,SAAS,GAAG;GACjE,MAAM,QAAQ,KAAK;EACrB,OAAO;GACL,qBAAqB,IAAI;EAC3B;CACF,GACA;EAAC,MAAM;EAAuB,WAAW;EAAQ;EAAsB,MAAM;CAAO,CACtF;CACA,IAAI,QAAQ,IAAI,aAAa,eAAe;EAC1C,IAAI,mBAAmB,WAAW,WAAW,MAAM,MAAM;GACvD,IAAI,OAAO,MAAM,UAAU;IACzB,IAAI,MAAM,OAAO;KACf,OAAO;IACT;IACA,IAAI,EAAE,SAAS,GAAG,GAAG;KACnB,MAAM,IAAI,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;KAC/B,OAAO,IAAI,KAAK,IAAI;IACtB;IACA,OAAO;GACT;GACA,OAAO,OAAO,MAAM,YAAY,IAAI;EACtC,CAAC,GAAG;GACF,QAAQ,KACN,oJACF;EACF;EACA,IAAI,mBAAmB,WAAW,WAAW,QAAQ,KAAK,IAAI,GAAG;GAC/D,QAAQ,KACN,uGACF;EACF;EACA,IAAI,mBAAmB,UAAU,WAAW,YAAY,MAAM,wBAAwB,IAAI,MAAM,WAAW,OAAO,QAAQ;GACxH,QAAQ,KACN,iFACF;EACF;EACA,IAAI,mBAAmB,cAAc,WAAW,MAAM,MAAM,OAAO,MAAM,YAAY,IAAI,CAAC,GAAG;GAC3F,QAAQ,KACN,wGACF;EACF;EACA,IAAI,mBAAmB,aAAa,WAAW,MAAM,MAAM,OAAO,MAAM,YAAY,IAAI,KAAK,IAAI,GAAG,GAAG;GACrG,QAAQ,KACN,gHACF;EACF;CACF;CACA,IAAI,QAAQ,MAAM,yBAAyB,aAAa,WAAW,SAAS,GAAG;EAC7E,qBAAqB,CAAC;CACxB;CACA,MAAM,wBAAwB,QAAQ,WAAW;CACjD,MAAM,gBAAgB;EACpB,IAAI,uBAAuB;GACzB,YAAY,CAAC;EACf;CACF,GAAG,CAAC,aAAa,qBAAqB,CAAC;CACvC,OAAO;EACL,OAAO,CAAC,CAAC,MAAM;EACf,MAAM,MAAM;EACZ,SAAS,MAAM;EACf,QAAQ,CAAC,CAAC,MAAM;EAChB;EACA;EACA;EACA;EACA;EACA,uBAAuB,MAAM,yBAAyB;EACtD,uBAAuB,MAAM,yBAAyB;EACtD,OAAO,MAAM,SAAS;EACtB;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __create = Object.create;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
8
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __export = (target, all) => {
|
|
10
|
+
for (var name in all) __defProp(target, name, {
|
|
11
|
+
get: all[name],
|
|
12
|
+
enumerable: true
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
var __copyProps = (to, from, except, desc) => {
|
|
16
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
17
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
18
|
+
get: () => from[key],
|
|
19
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
return to;
|
|
23
|
+
};
|
|
24
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
25
|
+
value: mod,
|
|
26
|
+
enumerable: true
|
|
27
|
+
}) : target, mod));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var useSheetState_exports = {};
|
|
30
|
+
__export(useSheetState_exports, { useSheetState: () => useSheetState });
|
|
31
|
+
module.exports = __toCommonJS(useSheetState_exports);
|
|
32
|
+
var import_react = __toESM(require("react"), 1);
|
|
33
|
+
var import_use_controllable_state = require("@tamagui/use-controllable-state");
|
|
34
|
+
function useSheetState(props, state) {
|
|
35
|
+
var handleRef = import_react.default.useRef(null);
|
|
36
|
+
var contentRef = import_react.default.useRef(null);
|
|
37
|
+
var [frameSize, setFrameSize] = import_react.default.useState(0);
|
|
38
|
+
var [maxContentSize, setMaxContentSize] = import_react.default.useState(0);
|
|
39
|
+
var _props_snapPointsMode;
|
|
40
|
+
var snapPointsMode = (_props_snapPointsMode = props.snapPointsMode) !== null && _props_snapPointsMode !== void 0 ? _props_snapPointsMode : "percent";
|
|
41
|
+
var _props_snapPoints;
|
|
42
|
+
var snapPointsProp = (_props_snapPoints = props.snapPoints) !== null && _props_snapPoints !== void 0 ? _props_snapPoints : snapPointsMode === "percent" ? [80] : snapPointsMode === "constant" ? [256] : ["fit"];
|
|
43
|
+
var hasFit = snapPointsProp[0] === "fit";
|
|
44
|
+
var snapPoints = import_react.default.useMemo(function() {
|
|
45
|
+
return props.dismissOnSnapToBottom ? [...snapPointsProp, 0] : snapPointsProp;
|
|
46
|
+
}, [JSON.stringify(snapPointsProp), props.dismissOnSnapToBottom]);
|
|
47
|
+
var [position_, setPositionImmediate] = (0, import_use_controllable_state.useControllableState)({
|
|
48
|
+
prop: props.position,
|
|
49
|
+
defaultProp: props.defaultPosition || (state.open ? 0 : -1),
|
|
50
|
+
onChange: props.onPositionChange,
|
|
51
|
+
strategy: state.strategy
|
|
52
|
+
});
|
|
53
|
+
var position = state.open === false ? -1 : position_;
|
|
54
|
+
var { open } = state;
|
|
55
|
+
var setPosition = import_react.default.useCallback(function(next) {
|
|
56
|
+
if (props.dismissOnSnapToBottom && next === snapPoints.length - 1) {
|
|
57
|
+
state.setOpen(false);
|
|
58
|
+
} else {
|
|
59
|
+
setPositionImmediate(next);
|
|
60
|
+
}
|
|
61
|
+
}, [
|
|
62
|
+
props.dismissOnSnapToBottom,
|
|
63
|
+
snapPoints.length,
|
|
64
|
+
setPositionImmediate,
|
|
65
|
+
state.setOpen
|
|
66
|
+
]);
|
|
67
|
+
if (process.env.NODE_ENV === "development") {
|
|
68
|
+
if (snapPointsMode === "mixed" && snapPoints.some(function(p) {
|
|
69
|
+
if (typeof p === "string") {
|
|
70
|
+
if (p === "fit") {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
if (p.endsWith("%")) {
|
|
74
|
+
var n = Number(p.slice(0, -1));
|
|
75
|
+
return n < 0 || n > 100;
|
|
76
|
+
}
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
return typeof p !== "number" || p < 0;
|
|
80
|
+
})) {
|
|
81
|
+
console.warn("⚠️ Invalid snapPoint given, snapPoints must be positive numeric values, string percentages between 0-100%, or \"fit\" when snapPointsMode is mixed");
|
|
82
|
+
}
|
|
83
|
+
if (snapPointsMode === "mixed" && snapPoints.indexOf("fit") > 0) {
|
|
84
|
+
console.warn("⚠️ Invalid snapPoint given, \"fit\" must be the first/largest snap point when snapPointsMode is mixed");
|
|
85
|
+
}
|
|
86
|
+
if (snapPointsMode === "fit" && (snapPoints.length !== (props.dismissOnSnapToBottom ? 2 : 1) || snapPoints[0] !== "fit")) {
|
|
87
|
+
console.warn("⚠️ Invalid snapPoint given, there are no snap points when snapPointsMode is fit");
|
|
88
|
+
}
|
|
89
|
+
if (snapPointsMode === "constant" && snapPoints.some(function(p) {
|
|
90
|
+
return typeof p !== "number" || p < 0;
|
|
91
|
+
})) {
|
|
92
|
+
console.warn("⚠️ Invalid snapPoint given, snapPoints must be positive numeric values when snapPointsMode is constant");
|
|
93
|
+
}
|
|
94
|
+
if (snapPointsMode === "percent" && snapPoints.some(function(p) {
|
|
95
|
+
return typeof p !== "number" || p < 0 || p > 100;
|
|
96
|
+
})) {
|
|
97
|
+
console.warn("⚠️ Invalid snapPoint given, snapPoints must be numeric values between 0 and 100 when snapPointsMode is percent");
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (open && props.dismissOnSnapToBottom && position === snapPoints.length - 1) {
|
|
101
|
+
setPositionImmediate(0);
|
|
102
|
+
}
|
|
103
|
+
var shouldSetPositionOpen = open && position < 0;
|
|
104
|
+
import_react.default.useEffect(function() {
|
|
105
|
+
if (shouldSetPositionOpen) {
|
|
106
|
+
setPosition(0);
|
|
107
|
+
}
|
|
108
|
+
}, [setPosition, shouldSetPositionOpen]);
|
|
109
|
+
var _props_dismissOnOverlayPress, _props_dismissOnSnapToBottom, _props_scope;
|
|
110
|
+
return {
|
|
111
|
+
modal: !!props.modal,
|
|
112
|
+
open: state.open,
|
|
113
|
+
setOpen: state.setOpen,
|
|
114
|
+
hidden: !!state.isHidden,
|
|
115
|
+
contentRef,
|
|
116
|
+
handleRef,
|
|
117
|
+
frameSize,
|
|
118
|
+
setFrameSize,
|
|
119
|
+
maxContentSize,
|
|
120
|
+
dismissOnOverlayPress: (_props_dismissOnOverlayPress = props.dismissOnOverlayPress) !== null && _props_dismissOnOverlayPress !== void 0 ? _props_dismissOnOverlayPress : true,
|
|
121
|
+
dismissOnSnapToBottom: (_props_dismissOnSnapToBottom = props.dismissOnSnapToBottom) !== null && _props_dismissOnSnapToBottom !== void 0 ? _props_dismissOnSnapToBottom : false,
|
|
122
|
+
scope: (_props_scope = props.scope) !== null && _props_scope !== void 0 ? _props_scope : "",
|
|
123
|
+
hasFit,
|
|
124
|
+
position,
|
|
125
|
+
snapPoints,
|
|
126
|
+
snapPointsMode,
|
|
127
|
+
setMaxContentSize,
|
|
128
|
+
setPosition,
|
|
129
|
+
setPositionImmediate
|
|
130
|
+
};
|
|
131
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __create = Object.create;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
8
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __export = (target, all) => {
|
|
10
|
+
for (var name in all) __defProp(target, name, {
|
|
11
|
+
get: all[name],
|
|
12
|
+
enumerable: true
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
var __copyProps = (to, from, except, desc) => {
|
|
16
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
17
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
18
|
+
get: () => from[key],
|
|
19
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
return to;
|
|
23
|
+
};
|
|
24
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
25
|
+
value: mod,
|
|
26
|
+
enumerable: true
|
|
27
|
+
}) : target, mod));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var useSheetState_exports = {};
|
|
30
|
+
__export(useSheetState_exports, { useSheetState: () => useSheetState });
|
|
31
|
+
module.exports = __toCommonJS(useSheetState_exports);
|
|
32
|
+
var import_react = __toESM(require("react"), 1);
|
|
33
|
+
var import_use_controllable_state = require("@tamagui/use-controllable-state");
|
|
34
|
+
function useSheetState(props, state) {
|
|
35
|
+
var handleRef = import_react.default.useRef(null);
|
|
36
|
+
var contentRef = import_react.default.useRef(null);
|
|
37
|
+
var [frameSize, setFrameSize] = import_react.default.useState(0);
|
|
38
|
+
var [maxContentSize, setMaxContentSize] = import_react.default.useState(0);
|
|
39
|
+
var _props_snapPointsMode;
|
|
40
|
+
var snapPointsMode = (_props_snapPointsMode = props.snapPointsMode) !== null && _props_snapPointsMode !== void 0 ? _props_snapPointsMode : "percent";
|
|
41
|
+
var _props_snapPoints;
|
|
42
|
+
var snapPointsProp = (_props_snapPoints = props.snapPoints) !== null && _props_snapPoints !== void 0 ? _props_snapPoints : snapPointsMode === "percent" ? [80] : snapPointsMode === "constant" ? [256] : ["fit"];
|
|
43
|
+
var hasFit = snapPointsProp[0] === "fit";
|
|
44
|
+
var snapPoints = import_react.default.useMemo(function() {
|
|
45
|
+
return props.dismissOnSnapToBottom ? [...snapPointsProp, 0] : snapPointsProp;
|
|
46
|
+
}, [JSON.stringify(snapPointsProp), props.dismissOnSnapToBottom]);
|
|
47
|
+
var [position_, setPositionImmediate] = (0, import_use_controllable_state.useControllableState)({
|
|
48
|
+
prop: props.position,
|
|
49
|
+
defaultProp: props.defaultPosition || (state.open ? 0 : -1),
|
|
50
|
+
onChange: props.onPositionChange,
|
|
51
|
+
strategy: state.strategy
|
|
52
|
+
});
|
|
53
|
+
var position = state.open === false ? -1 : position_;
|
|
54
|
+
var { open } = state;
|
|
55
|
+
var setPosition = import_react.default.useCallback(function(next) {
|
|
56
|
+
if (props.dismissOnSnapToBottom && next === snapPoints.length - 1) {
|
|
57
|
+
state.setOpen(false);
|
|
58
|
+
} else {
|
|
59
|
+
setPositionImmediate(next);
|
|
60
|
+
}
|
|
61
|
+
}, [
|
|
62
|
+
props.dismissOnSnapToBottom,
|
|
63
|
+
snapPoints.length,
|
|
64
|
+
setPositionImmediate,
|
|
65
|
+
state.setOpen
|
|
66
|
+
]);
|
|
67
|
+
if (process.env.NODE_ENV === "development") {
|
|
68
|
+
if (snapPointsMode === "mixed" && snapPoints.some(function(p) {
|
|
69
|
+
if (typeof p === "string") {
|
|
70
|
+
if (p === "fit") {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
if (p.endsWith("%")) {
|
|
74
|
+
var n = Number(p.slice(0, -1));
|
|
75
|
+
return n < 0 || n > 100;
|
|
76
|
+
}
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
return typeof p !== "number" || p < 0;
|
|
80
|
+
})) {
|
|
81
|
+
console.warn("⚠️ Invalid snapPoint given, snapPoints must be positive numeric values, string percentages between 0-100%, or \"fit\" when snapPointsMode is mixed");
|
|
82
|
+
}
|
|
83
|
+
if (snapPointsMode === "mixed" && snapPoints.indexOf("fit") > 0) {
|
|
84
|
+
console.warn("⚠️ Invalid snapPoint given, \"fit\" must be the first/largest snap point when snapPointsMode is mixed");
|
|
85
|
+
}
|
|
86
|
+
if (snapPointsMode === "fit" && (snapPoints.length !== (props.dismissOnSnapToBottom ? 2 : 1) || snapPoints[0] !== "fit")) {
|
|
87
|
+
console.warn("⚠️ Invalid snapPoint given, there are no snap points when snapPointsMode is fit");
|
|
88
|
+
}
|
|
89
|
+
if (snapPointsMode === "constant" && snapPoints.some(function(p) {
|
|
90
|
+
return typeof p !== "number" || p < 0;
|
|
91
|
+
})) {
|
|
92
|
+
console.warn("⚠️ Invalid snapPoint given, snapPoints must be positive numeric values when snapPointsMode is constant");
|
|
93
|
+
}
|
|
94
|
+
if (snapPointsMode === "percent" && snapPoints.some(function(p) {
|
|
95
|
+
return typeof p !== "number" || p < 0 || p > 100;
|
|
96
|
+
})) {
|
|
97
|
+
console.warn("⚠️ Invalid snapPoint given, snapPoints must be numeric values between 0 and 100 when snapPointsMode is percent");
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (open && props.dismissOnSnapToBottom && position === snapPoints.length - 1) {
|
|
101
|
+
setPositionImmediate(0);
|
|
102
|
+
}
|
|
103
|
+
var shouldSetPositionOpen = open && position < 0;
|
|
104
|
+
import_react.default.useEffect(function() {
|
|
105
|
+
if (shouldSetPositionOpen) {
|
|
106
|
+
setPosition(0);
|
|
107
|
+
}
|
|
108
|
+
}, [setPosition, shouldSetPositionOpen]);
|
|
109
|
+
var _props_dismissOnOverlayPress, _props_dismissOnSnapToBottom, _props_scope;
|
|
110
|
+
return {
|
|
111
|
+
modal: !!props.modal,
|
|
112
|
+
open: state.open,
|
|
113
|
+
setOpen: state.setOpen,
|
|
114
|
+
hidden: !!state.isHidden,
|
|
115
|
+
contentRef,
|
|
116
|
+
handleRef,
|
|
117
|
+
frameSize,
|
|
118
|
+
setFrameSize,
|
|
119
|
+
maxContentSize,
|
|
120
|
+
dismissOnOverlayPress: (_props_dismissOnOverlayPress = props.dismissOnOverlayPress) !== null && _props_dismissOnOverlayPress !== void 0 ? _props_dismissOnOverlayPress : true,
|
|
121
|
+
dismissOnSnapToBottom: (_props_dismissOnSnapToBottom = props.dismissOnSnapToBottom) !== null && _props_dismissOnSnapToBottom !== void 0 ? _props_dismissOnSnapToBottom : false,
|
|
122
|
+
scope: (_props_scope = props.scope) !== null && _props_scope !== void 0 ? _props_scope : "",
|
|
123
|
+
hasFit,
|
|
124
|
+
position,
|
|
125
|
+
snapPoints,
|
|
126
|
+
snapPointsMode,
|
|
127
|
+
setMaxContentSize,
|
|
128
|
+
setPosition,
|
|
129
|
+
setPositionImmediate
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
//# sourceMappingURL=useSheetState.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSheetState.native.js","names":[],"sources":["jsx/useSheetState.native.js"],"sourcesContent":["\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar useSheetState_exports = {};\n__export(useSheetState_exports, {\n useSheetState: () => useSheetState\n});\nmodule.exports = __toCommonJS(useSheetState_exports);\nvar import_react = __toESM(require(\"react\"), 1);\nvar import_use_controllable_state = require(\"@tamagui/use-controllable-state\");\nfunction useSheetState(props, state) {\n var handleRef = import_react.default.useRef(null);\n var contentRef = import_react.default.useRef(null);\n var [frameSize, setFrameSize] = import_react.default.useState(0);\n var [maxContentSize, setMaxContentSize] = import_react.default.useState(0);\n var _props_snapPointsMode;\n var snapPointsMode = (_props_snapPointsMode = props.snapPointsMode) !== null && _props_snapPointsMode !== void 0 ? _props_snapPointsMode : \"percent\";\n var _props_snapPoints;\n var snapPointsProp = (_props_snapPoints = props.snapPoints) !== null && _props_snapPoints !== void 0 ? _props_snapPoints : snapPointsMode === \"percent\" ? [\n 80\n ] : snapPointsMode === \"constant\" ? [\n 256\n ] : [\n \"fit\"\n ];\n var hasFit = snapPointsProp[0] === \"fit\";\n var snapPoints = import_react.default.useMemo(function() {\n return props.dismissOnSnapToBottom ? [\n ...snapPointsProp,\n 0\n ] : snapPointsProp;\n }, [\n JSON.stringify(snapPointsProp),\n props.dismissOnSnapToBottom\n ]);\n var [position_, setPositionImmediate] = (0, import_use_controllable_state.useControllableState)({\n prop: props.position,\n defaultProp: props.defaultPosition || (state.open ? 0 : -1),\n onChange: props.onPositionChange,\n strategy: state.strategy\n });\n var position = state.open === false ? -1 : position_;\n var { open } = state;\n var setPosition = import_react.default.useCallback(function(next) {\n if (props.dismissOnSnapToBottom && next === snapPoints.length - 1) {\n state.setOpen(false);\n } else {\n setPositionImmediate(next);\n }\n }, [\n props.dismissOnSnapToBottom,\n snapPoints.length,\n setPositionImmediate,\n state.setOpen\n ]);\n if (process.env.NODE_ENV === \"development\") {\n if (snapPointsMode === \"mixed\" && snapPoints.some(function(p) {\n if (typeof p === \"string\") {\n if (p === \"fit\") {\n return false;\n }\n if (p.endsWith(\"%\")) {\n var n = Number(p.slice(0, -1));\n return n < 0 || n > 100;\n }\n return true;\n }\n return typeof p !== \"number\" || p < 0;\n })) {\n console.warn('\\u26A0\\uFE0F Invalid snapPoint given, snapPoints must be positive numeric values, string percentages between 0-100%, or \"fit\" when snapPointsMode is mixed');\n }\n if (snapPointsMode === \"mixed\" && snapPoints.indexOf(\"fit\") > 0) {\n console.warn('\\u26A0\\uFE0F Invalid snapPoint given, \"fit\" must be the first/largest snap point when snapPointsMode is mixed');\n }\n if (snapPointsMode === \"fit\" && (snapPoints.length !== (props.dismissOnSnapToBottom ? 2 : 1) || snapPoints[0] !== \"fit\")) {\n console.warn(\"\\u26A0\\uFE0F Invalid snapPoint given, there are no snap points when snapPointsMode is fit\");\n }\n if (snapPointsMode === \"constant\" && snapPoints.some(function(p) {\n return typeof p !== \"number\" || p < 0;\n })) {\n console.warn(\"\\u26A0\\uFE0F Invalid snapPoint given, snapPoints must be positive numeric values when snapPointsMode is constant\");\n }\n if (snapPointsMode === \"percent\" && snapPoints.some(function(p) {\n return typeof p !== \"number\" || p < 0 || p > 100;\n })) {\n console.warn(\"\\u26A0\\uFE0F Invalid snapPoint given, snapPoints must be numeric values between 0 and 100 when snapPointsMode is percent\");\n }\n }\n if (open && props.dismissOnSnapToBottom && position === snapPoints.length - 1) {\n setPositionImmediate(0);\n }\n var shouldSetPositionOpen = open && position < 0;\n import_react.default.useEffect(function() {\n if (shouldSetPositionOpen) {\n setPosition(0);\n }\n }, [\n setPosition,\n shouldSetPositionOpen\n ]);\n var _props_dismissOnOverlayPress, _props_dismissOnSnapToBottom, _props_scope;\n return {\n modal: !!props.modal,\n open: state.open,\n setOpen: state.setOpen,\n hidden: !!state.isHidden,\n contentRef,\n handleRef,\n frameSize,\n setFrameSize,\n maxContentSize,\n dismissOnOverlayPress: (_props_dismissOnOverlayPress = props.dismissOnOverlayPress) !== null && _props_dismissOnOverlayPress !== void 0 ? _props_dismissOnOverlayPress : true,\n dismissOnSnapToBottom: (_props_dismissOnSnapToBottom = props.dismissOnSnapToBottom) !== null && _props_dismissOnSnapToBottom !== void 0 ? _props_dismissOnSnapToBottom : false,\n scope: (_props_scope = props.scope) !== null && _props_scope !== void 0 ? _props_scope : \"\",\n hasFit,\n position,\n snapPoints,\n snapPointsMode,\n setMaxContentSize,\n setPosition,\n setPositionImmediate\n };\n}\n//# sourceMappingURL=useSheetState.js.map\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tamagui/sheet",
|
|
3
|
-
"version": "3.0.0
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"source": "src/index.ts",
|
|
6
6
|
"type": "module",
|
|
@@ -43,29 +43,33 @@
|
|
|
43
43
|
"clean": "tamagui-build clean"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@tamagui/adapt": "3.0.0
|
|
47
|
-
"@tamagui/animate-presence": "3.0.0
|
|
48
|
-
"@tamagui/
|
|
49
|
-
"@tamagui/
|
|
50
|
-
"@tamagui/
|
|
51
|
-
"@tamagui/
|
|
52
|
-
"@tamagui/
|
|
53
|
-
"@tamagui/
|
|
54
|
-
"@tamagui/
|
|
55
|
-
"@tamagui/
|
|
56
|
-
"@tamagui/
|
|
57
|
-
"@tamagui/
|
|
58
|
-
"@tamagui/use-
|
|
59
|
-
"@tamagui/
|
|
60
|
-
"@tamagui/
|
|
61
|
-
"@tamagui/
|
|
46
|
+
"@tamagui/adapt": "3.0.0",
|
|
47
|
+
"@tamagui/animate-presence": "3.0.0",
|
|
48
|
+
"@tamagui/animation-helpers": "3.0.0",
|
|
49
|
+
"@tamagui/animations-react-native": "3.0.0",
|
|
50
|
+
"@tamagui/compose-refs": "3.0.0",
|
|
51
|
+
"@tamagui/constants": "3.0.0",
|
|
52
|
+
"@tamagui/core": "3.0.0",
|
|
53
|
+
"@tamagui/helpers": "3.0.0",
|
|
54
|
+
"@tamagui/native": "3.0.0",
|
|
55
|
+
"@tamagui/portal": "3.0.0",
|
|
56
|
+
"@tamagui/react-native-pan-responder": "3.0.0",
|
|
57
|
+
"@tamagui/react-native-types": "3.0.0",
|
|
58
|
+
"@tamagui/react-native-use-responder-events": "3.0.0",
|
|
59
|
+
"@tamagui/remove-scroll": "3.0.0",
|
|
60
|
+
"@tamagui/scroll-view": "3.0.0",
|
|
61
|
+
"@tamagui/stacks": "3.0.0",
|
|
62
|
+
"@tamagui/use-constant": "3.0.0",
|
|
63
|
+
"@tamagui/use-controllable-state": "3.0.0",
|
|
64
|
+
"@tamagui/use-did-finish-ssr": "3.0.0",
|
|
65
|
+
"@tamagui/z-index-stack": "3.0.0"
|
|
62
66
|
},
|
|
63
67
|
"devDependencies": {
|
|
64
|
-
"@tamagui/build": "3.0.0
|
|
68
|
+
"@tamagui/build": "3.0.0",
|
|
65
69
|
"react": "19.2.3",
|
|
66
|
-
"react-native": "0.
|
|
67
|
-
"react-native-gesture-handler": "
|
|
68
|
-
"react-native-safe-area-context": "
|
|
70
|
+
"react-native": "0.87.1",
|
|
71
|
+
"react-native-gesture-handler": "3.3.0",
|
|
72
|
+
"react-native-safe-area-context": "5.10.1"
|
|
69
73
|
},
|
|
70
74
|
"peerDependencies": {
|
|
71
75
|
"react": ">=19",
|
|
@@ -83,5 +87,6 @@
|
|
|
83
87
|
"type": "git",
|
|
84
88
|
"url": "git+https://github.com/tamagui/tamagui.git",
|
|
85
89
|
"directory": "code/ui/sheet"
|
|
86
|
-
}
|
|
90
|
+
},
|
|
91
|
+
"releaseSourceCommit": "15fbca480b143f876f6975601e23a17d3f90d2ee"
|
|
87
92
|
}
|
package/src/Sheet.tsx
CHANGED
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
createStyledHOC,
|
|
7
7
|
styled,
|
|
8
8
|
View,
|
|
9
|
+
type GetProps,
|
|
9
10
|
type TamaguiElement,
|
|
10
11
|
type ViewProps,
|
|
11
12
|
} from '@tamagui/core'
|
|
@@ -17,8 +18,7 @@ import { useDidFinishSSR } from '@tamagui/use-did-finish-ssr'
|
|
|
17
18
|
import { StackZIndexContext } from '@tamagui/z-index-stack'
|
|
18
19
|
import type { FunctionComponent, Ref } from 'react'
|
|
19
20
|
import { useContext, useEffect, useMemo, useRef } from 'react'
|
|
20
|
-
import type {
|
|
21
|
-
import { Platform } from 'react-native'
|
|
21
|
+
import type { ViewInstance as RNView } from '@tamagui/react-native-types'
|
|
22
22
|
import {
|
|
23
23
|
SHEET_BACKGROUND_NAME,
|
|
24
24
|
SHEET_CONTAINER_NAME,
|
|
@@ -48,7 +48,7 @@ type SheetStyleShorthandProps = {
|
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
type SheetViewProps<ExtraProps extends object = {}> = SheetScopedProps<
|
|
51
|
-
|
|
51
|
+
GetProps<typeof View> & SheetStyleShorthandProps & ExtraProps
|
|
52
52
|
>
|
|
53
53
|
|
|
54
54
|
const SheetHandleFrame = styled(XStack, {
|
|
@@ -95,7 +95,6 @@ const SheetContainerFrame = styled(YStack, {
|
|
|
95
95
|
position: 'relative',
|
|
96
96
|
zIndex: 0,
|
|
97
97
|
width: '100%',
|
|
98
|
-
maxHeight: '100%',
|
|
99
98
|
})
|
|
100
99
|
|
|
101
100
|
const SheetBackgroundFrame = styled(YStack, {
|
|
@@ -211,7 +210,7 @@ export const SheetContainer = createStyledHOC(
|
|
|
211
210
|
forwardedRef
|
|
212
211
|
) => {
|
|
213
212
|
const context = useSheetContext(scope)
|
|
214
|
-
const { hasFit,
|
|
213
|
+
const { hasFit, frameSize, contentRef, open } = context
|
|
215
214
|
const composedContentRef = useComposedRefs(forwardedRef, contentRef)
|
|
216
215
|
const offscreenSize = useSheetOffscreenSize(context)
|
|
217
216
|
const stableFrameSize = useRef(frameSize)
|
|
@@ -223,6 +222,26 @@ export const SheetContainer = createStyledHOC(
|
|
|
223
222
|
}, [open, frameSize])
|
|
224
223
|
|
|
225
224
|
const sheetContents = useMemo(() => {
|
|
225
|
+
if (context.onlyShowContainer) {
|
|
226
|
+
return (
|
|
227
|
+
<SheetContainerFrame
|
|
228
|
+
ref={composedContentRef}
|
|
229
|
+
flex={hasFit ? 0 : 1}
|
|
230
|
+
flexBasis={hasFit ? 'auto' : undefined}
|
|
231
|
+
maxHeight={hasFit ? undefined : '100%'}
|
|
232
|
+
pointerEvents={open ? 'auto' : 'none'}
|
|
233
|
+
data-state={open ? 'open' : 'closed'}
|
|
234
|
+
{...props}
|
|
235
|
+
onLayout={composeEventHandlers(props.onLayout, (event) => {
|
|
236
|
+
context.setFrameSize(event.nativeEvent.layout.height)
|
|
237
|
+
})}
|
|
238
|
+
>
|
|
239
|
+
<StackZIndexContext zIndex={resolveViewZIndex(props.zIndex)}>
|
|
240
|
+
{children}
|
|
241
|
+
</StackZIndexContext>
|
|
242
|
+
</SheetContainerFrame>
|
|
243
|
+
)
|
|
244
|
+
}
|
|
226
245
|
const shouldUseFixedHeight = hasFit && !open && stableFrameSize.current
|
|
227
246
|
|
|
228
247
|
return (
|
|
@@ -230,6 +249,7 @@ export const SheetContainer = createStyledHOC(
|
|
|
230
249
|
ref={composedContentRef}
|
|
231
250
|
flex={hasFit && open ? 0 : 1}
|
|
232
251
|
flexBasis={hasFit ? 'auto' : undefined}
|
|
252
|
+
maxHeight="100%"
|
|
233
253
|
height={
|
|
234
254
|
shouldUseFixedHeight
|
|
235
255
|
? stableFrameSize.current
|
|
@@ -250,10 +270,21 @@ export const SheetContainer = createStyledHOC(
|
|
|
250
270
|
)}
|
|
251
271
|
</SheetContainerFrame>
|
|
252
272
|
)
|
|
253
|
-
}, [
|
|
273
|
+
}, [
|
|
274
|
+
open,
|
|
275
|
+
props,
|
|
276
|
+
frameSize,
|
|
277
|
+
offscreenSize,
|
|
278
|
+
adjustPaddingForOffscreenContent,
|
|
279
|
+
hasFit,
|
|
280
|
+
context.onlyShowContainer,
|
|
281
|
+
context.setFrameSize,
|
|
282
|
+
])
|
|
283
|
+
|
|
284
|
+
if (context.onlyShowContainer) return sheetContents
|
|
254
285
|
|
|
255
286
|
return (
|
|
256
|
-
<RemoveScroll enabled={!disableRemoveScroll && context.open}>
|
|
287
|
+
<RemoveScroll enabled={!context.disableRemoveScroll && context.open}>
|
|
257
288
|
{sheetContents}
|
|
258
289
|
</RemoveScroll>
|
|
259
290
|
)
|
|
@@ -275,6 +306,7 @@ export const SheetBackground = createStyledHOC(
|
|
|
275
306
|
forwardedRef
|
|
276
307
|
) => {
|
|
277
308
|
const context = useSheetContext(scope)
|
|
309
|
+
if (context.onlyShowContainer) return null
|
|
278
310
|
const bottomOverflow = isWeb
|
|
279
311
|
? Math.max(context.frameSize, getMaxViewportHeight())
|
|
280
312
|
: context.frameSize
|
|
@@ -302,17 +334,12 @@ export const SheetRoot = createRefComponent<RNView, SheetProps>(
|
|
|
302
334
|
const isShowingAdaptNonSheet =
|
|
303
335
|
shouldUseAdapt && !adaptContext.active && adaptContext.open
|
|
304
336
|
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
// @ts-expect-error accepting external sheet implementation
|
|
312
|
-
SheetImplementation = impl
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
}
|
|
337
|
+
const nativeImplementation =
|
|
338
|
+
props.native === true ||
|
|
339
|
+
(Array.isArray(props.native) && props.native.includes('ios'))
|
|
340
|
+
? getNativeSheet('ios')
|
|
341
|
+
: null
|
|
342
|
+
const SheetImplementation = nativeImplementation ?? SheetImplementationCustom
|
|
316
343
|
|
|
317
344
|
if (isShowingAdaptNonSheet || isShowingNonSheet || !hydrated) {
|
|
318
345
|
return null
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import * as React from 'react'
|
|
2
|
+
import { PanResponder, View } from 'react-native'
|
|
3
|
+
|
|
4
|
+
import { getGestureHandlerState } from './gestureState'
|
|
5
|
+
import type { SheetDragSurfaceProps } from './types'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* The surface the sheet is dragged by.
|
|
9
|
+
*
|
|
10
|
+
* With react-native-gesture-handler set up the drag is a `Gesture.Pan`, which
|
|
11
|
+
* needs a native View of its own to attach to. Without it the drag runs on
|
|
12
|
+
* PanResponder, the same as web.
|
|
13
|
+
*/
|
|
14
|
+
export function SheetDragSurface({
|
|
15
|
+
gestureHandlerEnabled,
|
|
16
|
+
panGesture,
|
|
17
|
+
panConfig,
|
|
18
|
+
children,
|
|
19
|
+
}: SheetDragSurfaceProps) {
|
|
20
|
+
const { GestureDetector } = getGestureHandlerState()
|
|
21
|
+
|
|
22
|
+
const panHandlers = React.useMemo(
|
|
23
|
+
() => (panConfig ? PanResponder.create(panConfig).panHandlers : undefined),
|
|
24
|
+
[panConfig]
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
if (gestureHandlerEnabled && panGesture && GestureDetector) {
|
|
28
|
+
return (
|
|
29
|
+
<GestureDetector gesture={panGesture}>
|
|
30
|
+
<View style={{ flex: 1 }} collapsable={false}>
|
|
31
|
+
{children}
|
|
32
|
+
</View>
|
|
33
|
+
</GestureDetector>
|
|
34
|
+
)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return (
|
|
38
|
+
<View {...panHandlers} style={{ flex: 1, width: '100%', height: '100%' }}>
|
|
39
|
+
{children}
|
|
40
|
+
</View>
|
|
41
|
+
)
|
|
42
|
+
}
|