@hanzogui/sheet 2.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/LICENSE +21 -0
- package/controller/index.cjs +2 -0
- package/controller/index.d.ts +5 -0
- package/controller/index.js +2 -0
- package/controller/index.native.cjs +2 -0
- package/controller/index.native.js +2 -0
- package/dist/cjs/GestureDetectorWrapper.cjs +48 -0
- package/dist/cjs/GestureDetectorWrapper.native.js +53 -0
- package/dist/cjs/GestureDetectorWrapper.native.js.map +1 -0
- package/dist/cjs/GestureSheetContext.cjs +52 -0
- package/dist/cjs/GestureSheetContext.native.js +56 -0
- package/dist/cjs/GestureSheetContext.native.js.map +1 -0
- package/dist/cjs/Sheet.cjs +117 -0
- package/dist/cjs/Sheet.native.js +120 -0
- package/dist/cjs/Sheet.native.js.map +1 -0
- package/dist/cjs/SheetContext.cjs +32 -0
- package/dist/cjs/SheetContext.native.js +35 -0
- package/dist/cjs/SheetContext.native.js.map +1 -0
- package/dist/cjs/SheetController.cjs +65 -0
- package/dist/cjs/SheetController.native.js +71 -0
- package/dist/cjs/SheetController.native.js.map +1 -0
- package/dist/cjs/SheetImplementationCustom.cjs +472 -0
- package/dist/cjs/SheetImplementationCustom.native.js +524 -0
- package/dist/cjs/SheetImplementationCustom.native.js.map +1 -0
- package/dist/cjs/SheetScrollView.cjs +180 -0
- package/dist/cjs/SheetScrollView.native.js +197 -0
- package/dist/cjs/SheetScrollView.native.js.map +1 -0
- package/dist/cjs/constants.cjs +32 -0
- package/dist/cjs/constants.native.js +35 -0
- package/dist/cjs/constants.native.js.map +1 -0
- package/dist/cjs/contexts.cjs +42 -0
- package/dist/cjs/contexts.native.js +45 -0
- package/dist/cjs/contexts.native.js.map +1 -0
- package/dist/cjs/controller.cjs +29 -0
- package/dist/cjs/controller.native.js +32 -0
- package/dist/cjs/controller.native.js.map +1 -0
- package/dist/cjs/createSheet.cjs +191 -0
- package/dist/cjs/createSheet.native.js +208 -0
- package/dist/cjs/createSheet.native.js.map +1 -0
- package/dist/cjs/gestureState.cjs +39 -0
- package/dist/cjs/gestureState.native.js +42 -0
- package/dist/cjs/gestureState.native.js.map +1 -0
- package/dist/cjs/helpers.cjs +31 -0
- package/dist/cjs/helpers.native.js +35 -0
- package/dist/cjs/helpers.native.js.map +1 -0
- package/dist/cjs/index.cjs +28 -0
- package/dist/cjs/index.native.js +31 -0
- package/dist/cjs/index.native.js.map +1 -0
- package/dist/cjs/nativeSheet.cjs +87 -0
- package/dist/cjs/nativeSheet.native.js +101 -0
- package/dist/cjs/nativeSheet.native.js.map +1 -0
- package/dist/cjs/setupGestureHandler.cjs +46 -0
- package/dist/cjs/setupGestureHandler.native.js +50 -0
- package/dist/cjs/setupGestureHandler.native.js.map +1 -0
- package/dist/cjs/types.cjs +16 -0
- package/dist/cjs/types.native.js +19 -0
- package/dist/cjs/types.native.js.map +1 -0
- package/dist/cjs/useGestureHandlerPan.cjs +136 -0
- package/dist/cjs/useGestureHandlerPan.native.js +145 -0
- package/dist/cjs/useGestureHandlerPan.native.js.map +1 -0
- package/dist/cjs/useKeyboardControllerSheet.cjs +38 -0
- package/dist/cjs/useKeyboardControllerSheet.native.js +114 -0
- package/dist/cjs/useKeyboardControllerSheet.native.js.map +1 -0
- package/dist/cjs/useSheet.cjs +27 -0
- package/dist/cjs/useSheet.native.js +32 -0
- package/dist/cjs/useSheet.native.js.map +1 -0
- package/dist/cjs/useSheetController.cjs +50 -0
- package/dist/cjs/useSheetController.native.js +53 -0
- package/dist/cjs/useSheetController.native.js.map +1 -0
- package/dist/cjs/useSheetOffscreenSize.cjs +51 -0
- package/dist/cjs/useSheetOffscreenSize.native.js +61 -0
- package/dist/cjs/useSheetOffscreenSize.native.js.map +1 -0
- package/dist/cjs/useSheetOpenState.cjs +49 -0
- package/dist/cjs/useSheetOpenState.native.js +56 -0
- package/dist/cjs/useSheetOpenState.native.js.map +1 -0
- package/dist/cjs/useSheetProviderProps.cjs +133 -0
- package/dist/cjs/useSheetProviderProps.native.js +153 -0
- package/dist/cjs/useSheetProviderProps.native.js.map +1 -0
- package/dist/cjs/useSheetScrollViewGestures.cjs +123 -0
- package/dist/cjs/useSheetScrollViewGestures.native.js +110 -0
- package/dist/cjs/useSheetScrollViewGestures.native.js.map +1 -0
- package/dist/esm/GestureDetectorWrapper.mjs +25 -0
- package/dist/esm/GestureDetectorWrapper.mjs.map +1 -0
- package/dist/esm/GestureDetectorWrapper.native.js +27 -0
- package/dist/esm/GestureDetectorWrapper.native.js.map +1 -0
- package/dist/esm/GestureSheetContext.mjs +28 -0
- package/dist/esm/GestureSheetContext.mjs.map +1 -0
- package/dist/esm/GestureSheetContext.native.js +29 -0
- package/dist/esm/GestureSheetContext.native.js.map +1 -0
- package/dist/esm/Sheet.mjs +89 -0
- package/dist/esm/Sheet.mjs.map +1 -0
- package/dist/esm/Sheet.native.js +89 -0
- package/dist/esm/Sheet.native.js.map +1 -0
- package/dist/esm/SheetContext.mjs +6 -0
- package/dist/esm/SheetContext.mjs.map +1 -0
- package/dist/esm/SheetContext.native.js +6 -0
- package/dist/esm/SheetContext.native.js.map +1 -0
- package/dist/esm/SheetController.mjs +31 -0
- package/dist/esm/SheetController.mjs.map +1 -0
- package/dist/esm/SheetController.native.js +34 -0
- package/dist/esm/SheetController.native.js.map +1 -0
- package/dist/esm/SheetImplementationCustom.mjs +437 -0
- package/dist/esm/SheetImplementationCustom.mjs.map +1 -0
- package/dist/esm/SheetImplementationCustom.native.js +487 -0
- package/dist/esm/SheetImplementationCustom.native.js.map +1 -0
- package/dist/esm/SheetScrollView.mjs +146 -0
- package/dist/esm/SheetScrollView.mjs.map +1 -0
- package/dist/esm/SheetScrollView.native.js +160 -0
- package/dist/esm/SheetScrollView.native.js.map +1 -0
- package/dist/esm/constants.mjs +6 -0
- package/dist/esm/constants.mjs.map +1 -0
- package/dist/esm/constants.native.js +6 -0
- package/dist/esm/constants.native.js.map +1 -0
- package/dist/esm/contexts.mjs +7 -0
- package/dist/esm/contexts.mjs.map +1 -0
- package/dist/esm/contexts.native.js +7 -0
- package/dist/esm/contexts.native.js.map +1 -0
- package/dist/esm/controller.mjs +4 -0
- package/dist/esm/controller.mjs.map +1 -0
- package/dist/esm/controller.native.js +4 -0
- package/dist/esm/controller.native.js.map +1 -0
- package/dist/esm/createSheet.mjs +168 -0
- package/dist/esm/createSheet.mjs.map +1 -0
- package/dist/esm/createSheet.native.js +182 -0
- package/dist/esm/createSheet.native.js.map +1 -0
- package/dist/esm/gestureState.mjs +13 -0
- package/dist/esm/gestureState.mjs.map +1 -0
- package/dist/esm/gestureState.native.js +13 -0
- package/dist/esm/gestureState.native.js.map +1 -0
- package/dist/esm/helpers.mjs +8 -0
- package/dist/esm/helpers.mjs.map +1 -0
- package/dist/esm/helpers.native.js +9 -0
- package/dist/esm/helpers.native.js.map +1 -0
- package/dist/esm/index.js +12 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/index.mjs +12 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/index.native.js +12 -0
- package/dist/esm/index.native.js.map +1 -0
- package/dist/esm/nativeSheet.mjs +63 -0
- package/dist/esm/nativeSheet.mjs.map +1 -0
- package/dist/esm/nativeSheet.native.js +74 -0
- package/dist/esm/nativeSheet.native.js.map +1 -0
- package/dist/esm/setupGestureHandler.mjs +22 -0
- package/dist/esm/setupGestureHandler.mjs.map +1 -0
- package/dist/esm/setupGestureHandler.native.js +23 -0
- package/dist/esm/setupGestureHandler.native.js.map +1 -0
- package/dist/esm/types.mjs +2 -0
- package/dist/esm/types.mjs.map +1 -0
- package/dist/esm/types.native.js +2 -0
- package/dist/esm/types.native.js.map +1 -0
- package/dist/esm/useGestureHandlerPan.mjs +113 -0
- package/dist/esm/useGestureHandlerPan.mjs.map +1 -0
- package/dist/esm/useGestureHandlerPan.native.js +119 -0
- package/dist/esm/useGestureHandlerPan.native.js.map +1 -0
- package/dist/esm/useKeyboardControllerSheet.mjs +15 -0
- package/dist/esm/useKeyboardControllerSheet.mjs.map +1 -0
- package/dist/esm/useKeyboardControllerSheet.native.js +88 -0
- package/dist/esm/useKeyboardControllerSheet.native.js.map +1 -0
- package/dist/esm/useSheet.mjs +4 -0
- package/dist/esm/useSheet.mjs.map +1 -0
- package/dist/esm/useSheet.native.js +6 -0
- package/dist/esm/useSheet.native.js.map +1 -0
- package/dist/esm/useSheetController.mjs +15 -0
- package/dist/esm/useSheetController.mjs.map +1 -0
- package/dist/esm/useSheetController.native.js +15 -0
- package/dist/esm/useSheetController.native.js.map +1 -0
- package/dist/esm/useSheetOffscreenSize.mjs +28 -0
- package/dist/esm/useSheetOffscreenSize.mjs.map +1 -0
- package/dist/esm/useSheetOffscreenSize.native.js +35 -0
- package/dist/esm/useSheetOffscreenSize.native.js.map +1 -0
- package/dist/esm/useSheetOpenState.mjs +26 -0
- package/dist/esm/useSheetOpenState.mjs.map +1 -0
- package/dist/esm/useSheetOpenState.native.js +30 -0
- package/dist/esm/useSheetOpenState.native.js.map +1 -0
- package/dist/esm/useSheetProviderProps.mjs +99 -0
- package/dist/esm/useSheetProviderProps.mjs.map +1 -0
- package/dist/esm/useSheetProviderProps.native.js +116 -0
- package/dist/esm/useSheetProviderProps.native.js.map +1 -0
- package/dist/esm/useSheetScrollViewGestures.mjs +100 -0
- package/dist/esm/useSheetScrollViewGestures.mjs.map +1 -0
- package/dist/esm/useSheetScrollViewGestures.native.js +84 -0
- package/dist/esm/useSheetScrollViewGestures.native.js.map +1 -0
- package/dist/jsx/GestureDetectorWrapper.mjs +25 -0
- package/dist/jsx/GestureDetectorWrapper.mjs.map +1 -0
- package/dist/jsx/GestureDetectorWrapper.native.js +53 -0
- package/dist/jsx/GestureDetectorWrapper.native.js.map +1 -0
- package/dist/jsx/GestureSheetContext.mjs +28 -0
- package/dist/jsx/GestureSheetContext.mjs.map +1 -0
- package/dist/jsx/GestureSheetContext.native.js +56 -0
- package/dist/jsx/GestureSheetContext.native.js.map +1 -0
- package/dist/jsx/Sheet.mjs +89 -0
- package/dist/jsx/Sheet.mjs.map +1 -0
- package/dist/jsx/Sheet.native.js +120 -0
- package/dist/jsx/Sheet.native.js.map +1 -0
- package/dist/jsx/SheetContext.mjs +6 -0
- package/dist/jsx/SheetContext.mjs.map +1 -0
- package/dist/jsx/SheetContext.native.js +35 -0
- package/dist/jsx/SheetContext.native.js.map +1 -0
- package/dist/jsx/SheetController.mjs +31 -0
- package/dist/jsx/SheetController.mjs.map +1 -0
- package/dist/jsx/SheetController.native.js +71 -0
- package/dist/jsx/SheetController.native.js.map +1 -0
- package/dist/jsx/SheetImplementationCustom.mjs +437 -0
- package/dist/jsx/SheetImplementationCustom.mjs.map +1 -0
- package/dist/jsx/SheetImplementationCustom.native.js +524 -0
- package/dist/jsx/SheetImplementationCustom.native.js.map +1 -0
- package/dist/jsx/SheetScrollView.mjs +146 -0
- package/dist/jsx/SheetScrollView.mjs.map +1 -0
- package/dist/jsx/SheetScrollView.native.js +197 -0
- package/dist/jsx/SheetScrollView.native.js.map +1 -0
- package/dist/jsx/constants.mjs +6 -0
- package/dist/jsx/constants.mjs.map +1 -0
- package/dist/jsx/constants.native.js +35 -0
- package/dist/jsx/constants.native.js.map +1 -0
- package/dist/jsx/contexts.mjs +7 -0
- package/dist/jsx/contexts.mjs.map +1 -0
- package/dist/jsx/contexts.native.js +45 -0
- package/dist/jsx/contexts.native.js.map +1 -0
- package/dist/jsx/controller.mjs +4 -0
- package/dist/jsx/controller.mjs.map +1 -0
- package/dist/jsx/controller.native.js +32 -0
- package/dist/jsx/controller.native.js.map +1 -0
- package/dist/jsx/createSheet.mjs +168 -0
- package/dist/jsx/createSheet.mjs.map +1 -0
- package/dist/jsx/createSheet.native.js +208 -0
- package/dist/jsx/createSheet.native.js.map +1 -0
- package/dist/jsx/gestureState.mjs +13 -0
- package/dist/jsx/gestureState.mjs.map +1 -0
- package/dist/jsx/gestureState.native.js +42 -0
- package/dist/jsx/gestureState.native.js.map +1 -0
- package/dist/jsx/helpers.mjs +8 -0
- package/dist/jsx/helpers.mjs.map +1 -0
- package/dist/jsx/helpers.native.js +35 -0
- package/dist/jsx/helpers.native.js.map +1 -0
- package/dist/jsx/index.js +12 -0
- package/dist/jsx/index.js.map +1 -0
- package/dist/jsx/index.mjs +12 -0
- package/dist/jsx/index.mjs.map +1 -0
- package/dist/jsx/index.native.js +31 -0
- package/dist/jsx/index.native.js.map +1 -0
- package/dist/jsx/nativeSheet.mjs +63 -0
- package/dist/jsx/nativeSheet.mjs.map +1 -0
- package/dist/jsx/nativeSheet.native.js +101 -0
- package/dist/jsx/nativeSheet.native.js.map +1 -0
- package/dist/jsx/setupGestureHandler.mjs +22 -0
- package/dist/jsx/setupGestureHandler.mjs.map +1 -0
- package/dist/jsx/setupGestureHandler.native.js +50 -0
- package/dist/jsx/setupGestureHandler.native.js.map +1 -0
- package/dist/jsx/types.mjs +2 -0
- package/dist/jsx/types.mjs.map +1 -0
- package/dist/jsx/types.native.js +19 -0
- package/dist/jsx/types.native.js.map +1 -0
- package/dist/jsx/useGestureHandlerPan.mjs +113 -0
- package/dist/jsx/useGestureHandlerPan.mjs.map +1 -0
- package/dist/jsx/useGestureHandlerPan.native.js +145 -0
- package/dist/jsx/useGestureHandlerPan.native.js.map +1 -0
- package/dist/jsx/useKeyboardControllerSheet.mjs +15 -0
- package/dist/jsx/useKeyboardControllerSheet.mjs.map +1 -0
- package/dist/jsx/useKeyboardControllerSheet.native.js +114 -0
- package/dist/jsx/useKeyboardControllerSheet.native.js.map +1 -0
- package/dist/jsx/useSheet.mjs +4 -0
- package/dist/jsx/useSheet.mjs.map +1 -0
- package/dist/jsx/useSheet.native.js +32 -0
- package/dist/jsx/useSheet.native.js.map +1 -0
- package/dist/jsx/useSheetController.mjs +15 -0
- package/dist/jsx/useSheetController.mjs.map +1 -0
- package/dist/jsx/useSheetController.native.js +53 -0
- package/dist/jsx/useSheetController.native.js.map +1 -0
- package/dist/jsx/useSheetOffscreenSize.mjs +28 -0
- package/dist/jsx/useSheetOffscreenSize.mjs.map +1 -0
- package/dist/jsx/useSheetOffscreenSize.native.js +61 -0
- package/dist/jsx/useSheetOffscreenSize.native.js.map +1 -0
- package/dist/jsx/useSheetOpenState.mjs +26 -0
- package/dist/jsx/useSheetOpenState.mjs.map +1 -0
- package/dist/jsx/useSheetOpenState.native.js +56 -0
- package/dist/jsx/useSheetOpenState.native.js.map +1 -0
- package/dist/jsx/useSheetProviderProps.mjs +99 -0
- package/dist/jsx/useSheetProviderProps.mjs.map +1 -0
- package/dist/jsx/useSheetProviderProps.native.js +153 -0
- package/dist/jsx/useSheetProviderProps.native.js.map +1 -0
- package/dist/jsx/useSheetScrollViewGestures.mjs +100 -0
- package/dist/jsx/useSheetScrollViewGestures.mjs.map +1 -0
- package/dist/jsx/useSheetScrollViewGestures.native.js +110 -0
- package/dist/jsx/useSheetScrollViewGestures.native.js.map +1 -0
- package/next.md +78 -0
- package/package.json +96 -0
- package/setup-gesture-handler/index.cjs +2 -0
- package/setup-gesture-handler/index.js +2 -0
- package/setup-gesture-handler/index.native.cjs +2 -0
- package/setup-gesture-handler/index.native.js +2 -0
- package/setup-gesture-handler.cjs +1 -0
- package/src/GestureDetectorWrapper.tsx +41 -0
- package/src/GestureSheetContext.tsx +62 -0
- package/src/Sheet.tsx +114 -0
- package/src/SheetContext.tsx +11 -0
- package/src/SheetController.tsx +44 -0
- package/src/SheetImplementationCustom.tsx +868 -0
- package/src/SheetScrollView.tsx +195 -0
- package/src/constants.tsx +5 -0
- package/src/contexts.ts +9 -0
- package/src/controller.ts +9 -0
- package/src/createSheet.tsx +296 -0
- package/src/gestureState.ts +24 -0
- package/src/helpers.tsx +31 -0
- package/src/index.ts +11 -0
- package/src/nativeSheet.tsx +89 -0
- package/src/setupGestureHandler.ts +34 -0
- package/src/types.tsx +181 -0
- package/src/useGestureHandlerPan.tsx +364 -0
- package/src/useKeyboardControllerSheet.native.ts +136 -0
- package/src/useKeyboardControllerSheet.ts +26 -0
- package/src/useSheet.tsx +3 -0
- package/src/useSheetController.tsx +27 -0
- package/src/useSheetOffscreenSize.tsx +49 -0
- package/src/useSheetOpenState.tsx +33 -0
- package/src/useSheetProviderProps.tsx +223 -0
- package/src/useSheetScrollViewGestures.native.ts +163 -0
- package/src/useSheetScrollViewGestures.ts +194 -0
- package/tsconfig.json +56 -0
- package/types/GestureDetectorWrapper.d.ts +14 -0
- package/types/GestureSheetContext.d.ts +36 -0
- package/types/Sheet.d.ts +183 -0
- package/types/SheetContext.d.ts +43 -0
- package/types/SheetController.d.ts +6 -0
- package/types/SheetImplementationCustom.d.ts +36 -0
- package/types/SheetScrollView.d.ts +40 -0
- package/types/constants.d.ts +5 -0
- package/types/contexts.d.ts +6 -0
- package/types/controller.d.ts +3 -0
- package/types/createSheet.d.ts +194 -0
- package/types/gestureState.d.ts +11 -0
- package/types/helpers.d.ts +2 -0
- package/types/index.d.ts +12 -0
- package/types/nativeSheet.d.ts +10 -0
- package/types/setupGestureHandler.d.ts +11 -0
- package/types/types.d.ts +147 -0
- package/types/useGestureHandlerPan.d.ts +44 -0
- package/types/useKeyboardControllerSheet.d.ts +7 -0
- package/types/useKeyboardControllerSheet.native.d.ts +13 -0
- package/types/useSheet.d.ts +2 -0
- package/types/useSheetController.d.ts +17 -0
- package/types/useSheetOffscreenSize.d.ts +3 -0
- package/types/useSheetOpenState.d.ts +9 -0
- package/types/useSheetProviderProps.d.ts +36 -0
- package/types/useSheetScrollViewGestures.d.ts +12 -0
- package/types/useSheetScrollViewGestures.native.d.ts +21 -0
|
@@ -0,0 +1,153 @@
|
|
|
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
|
+
__hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __export = (target, all) => {
|
|
10
|
+
for (var name in all) __defProp(target, name, {
|
|
11
|
+
get: all[name],
|
|
12
|
+
enumerable: !0
|
|
13
|
+
});
|
|
14
|
+
},
|
|
15
|
+
__copyProps = (to, from, except, desc) => {
|
|
16
|
+
if (from && typeof from == "object" || typeof from == "function") for (let key of __getOwnPropNames(from)) !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, {
|
|
17
|
+
get: () => from[key],
|
|
18
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
19
|
+
});
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
22
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
23
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
24
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
25
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
26
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
27
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
28
|
+
value: mod,
|
|
29
|
+
enumerable: !0
|
|
30
|
+
}) : target, mod)),
|
|
31
|
+
__toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
32
|
+
value: !0
|
|
33
|
+
}), mod);
|
|
34
|
+
var useSheetProviderProps_exports = {};
|
|
35
|
+
__export(useSheetProviderProps_exports, {
|
|
36
|
+
useSheetProviderProps: () => useSheetProviderProps
|
|
37
|
+
});
|
|
38
|
+
module.exports = __toCommonJS(useSheetProviderProps_exports);
|
|
39
|
+
var import_react = __toESM(require("react"), 1),
|
|
40
|
+
import_gui_core = require("@hanzo/gui-core"),
|
|
41
|
+
import_gui_use_constant = require("@hanzo/gui-use-constant"),
|
|
42
|
+
import_gui_use_controllable_state = require("@hanzo/gui-use-controllable-state");
|
|
43
|
+
function useSheetProviderProps(props, state) {
|
|
44
|
+
var options = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {},
|
|
45
|
+
handleRef = import_react.default.useRef(null),
|
|
46
|
+
contentRef = import_react.default.useRef(null),
|
|
47
|
+
[frameSize, setFrameSize] = import_react.default.useState(0),
|
|
48
|
+
[maxContentSize, setMaxContentSize] = import_react.default.useState(0),
|
|
49
|
+
_props_snapPointsMode,
|
|
50
|
+
snapPointsMode = (_props_snapPointsMode = props.snapPointsMode) !== null && _props_snapPointsMode !== void 0 ? _props_snapPointsMode : "percent",
|
|
51
|
+
_props_snapPoints,
|
|
52
|
+
snapPointsProp = (_props_snapPoints = props.snapPoints) !== null && _props_snapPoints !== void 0 ? _props_snapPoints : snapPointsMode === "percent" ? [80] : snapPointsMode === "constant" ? [256] : ["fit"],
|
|
53
|
+
hasFit = snapPointsProp[0] === "fit",
|
|
54
|
+
snapPoints = import_react.default.useMemo(function () {
|
|
55
|
+
return props.dismissOnSnapToBottom ? [...snapPointsProp, 0] : snapPointsProp;
|
|
56
|
+
}, [JSON.stringify(snapPointsProp), props.dismissOnSnapToBottom]),
|
|
57
|
+
[position_, setPositionImmediate] = (0, import_gui_use_controllable_state.useControllableState)({
|
|
58
|
+
prop: props.position,
|
|
59
|
+
defaultProp: props.defaultPosition || (state.open ? 0 : -1),
|
|
60
|
+
onChange: props.onPositionChange,
|
|
61
|
+
strategy: "most-recent-wins"
|
|
62
|
+
}),
|
|
63
|
+
position = state.open === !1 ? -1 : position_,
|
|
64
|
+
{
|
|
65
|
+
open
|
|
66
|
+
} = state,
|
|
67
|
+
setPosition = import_react.default.useCallback(function (next) {
|
|
68
|
+
props.dismissOnSnapToBottom && next === snapPoints.length - 1 ? state.setOpen(!1) : setPositionImmediate(next);
|
|
69
|
+
}, [props.dismissOnSnapToBottom, snapPoints.length, setPositionImmediate, state.setOpen]);
|
|
70
|
+
process.env.NODE_ENV === "development" && (snapPointsMode === "mixed" && snapPoints.some(function (p) {
|
|
71
|
+
if (typeof p == "string") {
|
|
72
|
+
if (p === "fit") return !1;
|
|
73
|
+
if (p.endsWith("%")) {
|
|
74
|
+
var n = Number(p.slice(0, -1));
|
|
75
|
+
return n < 0 || n > 100;
|
|
76
|
+
}
|
|
77
|
+
return !0;
|
|
78
|
+
}
|
|
79
|
+
return typeof p != "number" || p < 0;
|
|
80
|
+
}) && console.warn('\u26A0\uFE0F Invalid snapPoint given, snapPoints must be positive numeric values, string percentages between 0-100%, or "fit" when snapPointsMode is mixed'), snapPointsMode === "mixed" && snapPoints.indexOf("fit") > 0 && console.warn('\u26A0\uFE0F Invalid snapPoint given, "fit" must be the first/largest snap point when snapPointsMode is mixed'), snapPointsMode === "fit" && (snapPoints.length !== (props.dismissOnSnapToBottom ? 2 : 1) || snapPoints[0] !== "fit") && console.warn("\u26A0\uFE0F Invalid snapPoint given, there are no snap points when snapPointsMode is fit"), snapPointsMode === "constant" && snapPoints.some(function (p) {
|
|
81
|
+
return typeof p != "number" || p < 0;
|
|
82
|
+
}) && console.warn("\u26A0\uFE0F Invalid snapPoint given, snapPoints must be positive numeric values when snapPointsMode is constant"), snapPointsMode === "percent" && snapPoints.some(function (p) {
|
|
83
|
+
return typeof p != "number" || p < 0 || p > 100;
|
|
84
|
+
}) && console.warn("\u26A0\uFE0F Invalid snapPoint given, snapPoints must be numeric values between 0 and 100 when snapPointsMode is percent")), open && props.dismissOnSnapToBottom && position === snapPoints.length - 1 && setPositionImmediate(0);
|
|
85
|
+
var shouldSetPositionOpen = open && position < 0;
|
|
86
|
+
import_react.default.useEffect(function () {
|
|
87
|
+
shouldSetPositionOpen && setPosition(0);
|
|
88
|
+
}, [setPosition, shouldSetPositionOpen]);
|
|
89
|
+
var {
|
|
90
|
+
animationDriver
|
|
91
|
+
} = (0, import_gui_core.useConfiguration)();
|
|
92
|
+
if (!animationDriver) throw new Error(process.env.NODE_ENV === "production" ? "\u274C 008" : "Must set animations in tamagui.config.ts");
|
|
93
|
+
var scrollBridge = (0, import_gui_use_constant.useConstant)(function () {
|
|
94
|
+
var parentDragListeners = /* @__PURE__ */new Set(),
|
|
95
|
+
bridge = {
|
|
96
|
+
hasScrollableContent: !1,
|
|
97
|
+
enabled: !1,
|
|
98
|
+
y: 0,
|
|
99
|
+
paneY: 0,
|
|
100
|
+
paneMinY: 0,
|
|
101
|
+
scrollStartY: -1,
|
|
102
|
+
drag: function () {},
|
|
103
|
+
release: function () {},
|
|
104
|
+
scrollLock: !1,
|
|
105
|
+
isParentDragging: !1,
|
|
106
|
+
onParentDragging: function (cb) {
|
|
107
|
+
return parentDragListeners.add(cb), function () {
|
|
108
|
+
parentDragListeners.delete(cb);
|
|
109
|
+
};
|
|
110
|
+
},
|
|
111
|
+
setParentDragging: function (val) {
|
|
112
|
+
val !== bridge.isParentDragging && (bridge.isParentDragging = val, parentDragListeners.forEach(function (cb) {
|
|
113
|
+
return cb(val);
|
|
114
|
+
}));
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
return bridge;
|
|
118
|
+
}),
|
|
119
|
+
disableRemoveScroll;
|
|
120
|
+
props.disableRemoveScroll !== void 0 ? disableRemoveScroll = props.disableRemoveScroll || !open || !props.modal : props.forceRemoveScrollEnabled !== void 0 ? (process.env.NODE_ENV === "development" && console.warn("[Sheet] forceRemoveScrollEnabled is deprecated. Use disableRemoveScroll instead."), disableRemoveScroll = !props.forceRemoveScrollEnabled) : disableRemoveScroll = !open || !props.modal;
|
|
121
|
+
var maxSnapPoint = snapPoints[0],
|
|
122
|
+
screenSize = snapPointsMode === "percent" ? frameSize / ((typeof maxSnapPoint == "number" ? maxSnapPoint : 100) / 100) : maxContentSize,
|
|
123
|
+
_props_dismissOnOverlayPress,
|
|
124
|
+
_props_dismissOnSnapToBottom,
|
|
125
|
+
providerProps = {
|
|
126
|
+
screenSize,
|
|
127
|
+
maxSnapPoint,
|
|
128
|
+
disableRemoveScroll,
|
|
129
|
+
scrollBridge,
|
|
130
|
+
modal: !!props.modal,
|
|
131
|
+
open: state.open,
|
|
132
|
+
setOpen: state.setOpen,
|
|
133
|
+
hidden: !!state.isHidden,
|
|
134
|
+
contentRef,
|
|
135
|
+
handleRef,
|
|
136
|
+
frameSize,
|
|
137
|
+
setFrameSize,
|
|
138
|
+
dismissOnOverlayPress: (_props_dismissOnOverlayPress = props.dismissOnOverlayPress) !== null && _props_dismissOnOverlayPress !== void 0 ? _props_dismissOnOverlayPress : !0,
|
|
139
|
+
dismissOnSnapToBottom: (_props_dismissOnSnapToBottom = props.dismissOnSnapToBottom) !== null && _props_dismissOnSnapToBottom !== void 0 ? _props_dismissOnSnapToBottom : !1,
|
|
140
|
+
onOverlayComponent: options.onOverlayComponent,
|
|
141
|
+
scope: props.__scopeSheet,
|
|
142
|
+
hasFit,
|
|
143
|
+
position,
|
|
144
|
+
snapPoints,
|
|
145
|
+
snapPointsMode,
|
|
146
|
+
setMaxContentSize,
|
|
147
|
+
setPosition,
|
|
148
|
+
setPositionImmediate,
|
|
149
|
+
onlyShowFrame: !1
|
|
150
|
+
};
|
|
151
|
+
return providerProps;
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=useSheetProviderProps.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["__create","Object","create","__defProp","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__getProtoOf","getPrototypeOf","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toESM","mod","isNodeMode","__esModule","value","__toCommonJS","useSheetProviderProps_exports","useSheetProviderProps","module","exports","import_react","require","import_gui_core","import_gui_use_constant","import_gui_use_controllable_state","props","state","options","arguments","length","handleRef","default","useRef","contentRef","frameSize","setFrameSize","useState","maxContentSize","setMaxContentSize","_props_snapPointsMode","snapPointsMode","_props_snapPoints","snapPointsProp","snapPoints","hasFit","useMemo","dismissOnSnapToBottom","JSON","stringify","position_","setPositionImmediate","useControllableState","prop","position","defaultProp","defaultPosition","open","onChange","onPositionChange","strategy","setPosition","useCallback","next","setOpen","process","env","NODE_ENV","some","p","endsWith","n","Number","slice","console","warn","indexOf","shouldSetPositionOpen","useEffect","animationDriver","useConfiguration","Error","scrollBridge","useConstant","parentDragListeners","Set","bridge","hasScrollableContent","enabled","y","paneY","paneMinY","scrollStartY","drag","release","scrollLock","isParentDragging","onParentDragging","cb","add","delete","setParentDragging","val","forEach"],"sources":["../../src/useSheetProviderProps.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { useEffect, useRef } from "react";
|
|
2
|
+
function useSheetScrollViewGestures({
|
|
3
|
+
scrollRef,
|
|
4
|
+
scrollBridge,
|
|
5
|
+
hasScrollableContent
|
|
6
|
+
}) {
|
|
7
|
+
const state = useRef({
|
|
8
|
+
startY: 0,
|
|
9
|
+
lastY: 0,
|
|
10
|
+
owner: "none",
|
|
11
|
+
panDragOffset: 0,
|
|
12
|
+
dys: [],
|
|
13
|
+
scrollYAtGestureStart: 0
|
|
14
|
+
});
|
|
15
|
+
return useEffect(() => {
|
|
16
|
+
if (!scrollRef.current) return;
|
|
17
|
+
const controller = new AbortController(),
|
|
18
|
+
node = scrollRef.current?.getScrollableNode();
|
|
19
|
+
if (!node) return;
|
|
20
|
+
node.style.overscrollBehavior = "contain";
|
|
21
|
+
let originalOverflow = "";
|
|
22
|
+
const disableScroll = () => {
|
|
23
|
+
node.style.overflowY !== "hidden" && (originalOverflow = node.style.overflowY, node.style.overflowY = "hidden");
|
|
24
|
+
},
|
|
25
|
+
enableScroll = () => {
|
|
26
|
+
node.style.overflowY = originalOverflow;
|
|
27
|
+
},
|
|
28
|
+
handleTouchStart = e => {
|
|
29
|
+
const touch = e.touches[0];
|
|
30
|
+
if (!touch) return;
|
|
31
|
+
const currentScrollY = node.scrollTop;
|
|
32
|
+
state.current = {
|
|
33
|
+
startY: touch.pageY,
|
|
34
|
+
lastY: touch.pageY,
|
|
35
|
+
owner: "none",
|
|
36
|
+
panDragOffset: 0,
|
|
37
|
+
dys: [],
|
|
38
|
+
scrollYAtGestureStart: currentScrollY
|
|
39
|
+
}, scrollBridge.scrollStartY = touch.pageY;
|
|
40
|
+
},
|
|
41
|
+
handleTouchMove = e => {
|
|
42
|
+
const touch = e.touches[0];
|
|
43
|
+
if (!touch) return;
|
|
44
|
+
const {
|
|
45
|
+
current: s
|
|
46
|
+
} = state,
|
|
47
|
+
pageY = touch.pageY,
|
|
48
|
+
dy = pageY - s.lastY;
|
|
49
|
+
if (s.lastY = pageY, dy === 0) return;
|
|
50
|
+
const isDraggingDown = dy > 0,
|
|
51
|
+
currentScrollY = node.scrollTop,
|
|
52
|
+
isPaneAtTop = scrollBridge.paneY <= scrollBridge.paneMinY + 5;
|
|
53
|
+
scrollBridge.y = currentScrollY;
|
|
54
|
+
let shouldPanOwn = !1;
|
|
55
|
+
isPaneAtTop ? currentScrollY <= 0 && isDraggingDown && (shouldPanOwn = !0) : shouldPanOwn = !0;
|
|
56
|
+
const newOwner = shouldPanOwn ? "pan" : "scroll";
|
|
57
|
+
if (newOwner !== s.owner && (newOwner === "pan" ? (s.panDragOffset = 0, s.dys = [], scrollBridge.setParentDragging(!0), disableScroll()) : (scrollBridge.setParentDragging(!1), scrollBridge.scrollLock = !1, enableScroll()), s.owner = newOwner), s.owner === "pan") e.cancelable && e.preventDefault(), s.panDragOffset += dy, scrollBridge.drag(s.panDragOffset), s.dys.push(dy), s.dys.length > 100 && (s.dys = s.dys.slice(-10));else if (s.owner === "scroll") {
|
|
58
|
+
const scrollDelta = -dy,
|
|
59
|
+
maxScrollY = node.scrollHeight - node.clientHeight,
|
|
60
|
+
newScrollY = Math.max(0, Math.min(maxScrollY, currentScrollY + scrollDelta));
|
|
61
|
+
newScrollY !== currentScrollY && (node.scrollTop = newScrollY, scrollBridge.y = newScrollY);
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
handleTouchEnd = () => {
|
|
65
|
+
const {
|
|
66
|
+
current: s
|
|
67
|
+
} = state;
|
|
68
|
+
if (s.owner === "pan") {
|
|
69
|
+
scrollBridge.setParentDragging(!1);
|
|
70
|
+
let vy = 0;
|
|
71
|
+
if (s.dys.length) {
|
|
72
|
+
const recentDys = s.dys.slice(-10);
|
|
73
|
+
vy = recentDys.reduce((a, b) => a + b, 0) / recentDys.length * 0.04;
|
|
74
|
+
}
|
|
75
|
+
scrollBridge.release({
|
|
76
|
+
dragAt: s.panDragOffset,
|
|
77
|
+
vy
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
enableScroll(), s.owner = "none", s.panDragOffset = 0, s.dys = [];
|
|
81
|
+
};
|
|
82
|
+
return node.addEventListener("touchstart", handleTouchStart, {
|
|
83
|
+
signal: controller.signal,
|
|
84
|
+
passive: !0
|
|
85
|
+
}), node.addEventListener("touchmove", handleTouchMove, {
|
|
86
|
+
signal: controller.signal,
|
|
87
|
+
passive: !1
|
|
88
|
+
}), node.addEventListener("touchend", handleTouchEnd, {
|
|
89
|
+
signal: controller.signal,
|
|
90
|
+
passive: !0
|
|
91
|
+
}), node.addEventListener("touchcancel", handleTouchEnd, {
|
|
92
|
+
signal: controller.signal,
|
|
93
|
+
passive: !0
|
|
94
|
+
}), () => {
|
|
95
|
+
enableScroll(), controller.abort();
|
|
96
|
+
};
|
|
97
|
+
}, [scrollRef, scrollBridge, hasScrollableContent]), {};
|
|
98
|
+
}
|
|
99
|
+
export { useSheetScrollViewGestures };
|
|
100
|
+
//# sourceMappingURL=useSheetScrollViewGestures.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","useSheetScrollViewGestures","scrollRef","scrollBridge","hasScrollableContent","state","startY","lastY","owner","panDragOffset","dys","scrollYAtGestureStart","current","controller","AbortController","node","getScrollableNode","style","overscrollBehavior","originalOverflow","disableScroll","overflowY","enableScroll","handleTouchStart","e","touch","touches","currentScrollY","scrollTop","pageY","scrollStartY","handleTouchMove","s","dy","isDraggingDown","isPaneAtTop","paneY","paneMinY","y","shouldPanOwn","newOwner","setParentDragging","scrollLock","cancelable","preventDefault","drag","push","length","slice","scrollDelta","maxScrollY","scrollHeight","clientHeight","newScrollY","Math","max","min","handleTouchEnd","vy","recentDys","reduce","a","b","release","dragAt","addEventListener","signal","passive","abort"],"sources":["../../src/useSheetScrollViewGestures.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all) __defProp(target, name, {
|
|
9
|
+
get: all[name],
|
|
10
|
+
enumerable: !0
|
|
11
|
+
});
|
|
12
|
+
},
|
|
13
|
+
__copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from == "object" || typeof from == "function") for (let key of __getOwnPropNames(from)) !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, {
|
|
15
|
+
get: () => from[key],
|
|
16
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
17
|
+
});
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
21
|
+
value: !0
|
|
22
|
+
}), mod);
|
|
23
|
+
var useSheetScrollViewGestures_native_exports = {};
|
|
24
|
+
__export(useSheetScrollViewGestures_native_exports, {
|
|
25
|
+
useSheetScrollViewGestures: () => useSheetScrollViewGestures
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(useSheetScrollViewGestures_native_exports);
|
|
28
|
+
var import_react = require("react");
|
|
29
|
+
function useSheetScrollViewGestures(param) {
|
|
30
|
+
var {
|
|
31
|
+
scrollBridge,
|
|
32
|
+
hasScrollableContent,
|
|
33
|
+
scrollEnabled,
|
|
34
|
+
setScrollEnabled
|
|
35
|
+
} = param,
|
|
36
|
+
state = (0, import_react.useRef)({
|
|
37
|
+
lastPageY: 0,
|
|
38
|
+
dragAt: 0,
|
|
39
|
+
dys: [],
|
|
40
|
+
isScrolling: !1,
|
|
41
|
+
isDraggingScrollArea: !1,
|
|
42
|
+
scrollEngaged: !1,
|
|
43
|
+
prevScrollY: 0,
|
|
44
|
+
handoffOccurred: !1,
|
|
45
|
+
handoffDragOffset: 0
|
|
46
|
+
}),
|
|
47
|
+
release = function () {
|
|
48
|
+
var s = state.current;
|
|
49
|
+
if (s.isDraggingScrollArea) {
|
|
50
|
+
s.isDraggingScrollArea = !1, scrollBridge.scrollStartY = -1, scrollBridge.scrollLock = !1, s.isScrolling = !1, s.scrollEngaged = !1, s.prevScrollY = 0, s.handoffOccurred = !1, s.handoffDragOffset = 0, setScrollEnabled(!0);
|
|
51
|
+
var vy = 0;
|
|
52
|
+
if (s.dys.length) {
|
|
53
|
+
var recentDys = s.dys.slice(-10),
|
|
54
|
+
dist = recentDys.reduce(function (a, b) {
|
|
55
|
+
return a + b;
|
|
56
|
+
}, 0);
|
|
57
|
+
vy = dist / recentDys.length * 0.04;
|
|
58
|
+
}
|
|
59
|
+
s.dys = [], scrollBridge.release({
|
|
60
|
+
dragAt: s.dragAt,
|
|
61
|
+
vy
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
onStartShouldSetResponder = function () {
|
|
66
|
+
var s = state.current;
|
|
67
|
+
return scrollBridge.scrollStartY = -1, s.isDraggingScrollArea = !0, s.scrollEngaged = scrollBridge.y > 0, s.prevScrollY = scrollBridge.y, s.handoffOccurred = !1, s.handoffDragOffset = 0, !1;
|
|
68
|
+
},
|
|
69
|
+
onMoveShouldSetResponder = function (e) {
|
|
70
|
+
if (!scrollEnabled) return !1;
|
|
71
|
+
var s = state.current,
|
|
72
|
+
{
|
|
73
|
+
pageY
|
|
74
|
+
} = e.nativeEvent;
|
|
75
|
+
return s.lastPageY === 0 ? (s.lastPageY = pageY, !1) : Math.abs(pageY - s.lastPageY) > 10;
|
|
76
|
+
},
|
|
77
|
+
onResponderMove = function (e) {
|
|
78
|
+
var s = state.current,
|
|
79
|
+
{
|
|
80
|
+
pageY
|
|
81
|
+
} = e.nativeEvent;
|
|
82
|
+
!s.isScrolling && scrollBridge.scrollStartY === -1 && (scrollBridge.scrollStartY = pageY, s.lastPageY = pageY);
|
|
83
|
+
var dragAt = pageY - scrollBridge.scrollStartY,
|
|
84
|
+
dy = pageY - s.lastPageY;
|
|
85
|
+
s.lastPageY = pageY;
|
|
86
|
+
var isDraggingDown = dy > 0,
|
|
87
|
+
isPaneAtTop = scrollBridge.paneY <= scrollBridge.paneMinY + 5,
|
|
88
|
+
currentScrollY = scrollBridge.y;
|
|
89
|
+
currentScrollY > 0 && (s.scrollEngaged = !0);
|
|
90
|
+
var wasScrolledNowAtZero = s.scrollEngaged && s.prevScrollY > 0 && currentScrollY <= 0;
|
|
91
|
+
wasScrolledNowAtZero && !s.handoffOccurred && (s.handoffOccurred = !0, s.handoffDragOffset = 0), s.prevScrollY = currentScrollY;
|
|
92
|
+
var panHandles = !1;
|
|
93
|
+
if (!isPaneAtTop) panHandles = isDraggingDown ? currentScrollY <= 0 || !hasScrollableContent : !0;else if (isDraggingDown) currentScrollY > 0 && hasScrollableContent && !s.handoffOccurred ? panHandles = !1 : panHandles = s.handoffOccurred || wasScrolledNowAtZero || currentScrollY <= 0;else if (panHandles = !hasScrollableContent, !panHandles) {
|
|
94
|
+
s.isScrolling = !0, scrollBridge.scrollLock = !0, setScrollEnabled(!0);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (panHandles) {
|
|
98
|
+
setScrollEnabled(!1);
|
|
99
|
+
var effectiveDragAt = dragAt;
|
|
100
|
+
s.handoffOccurred && (s.handoffDragOffset += dy, effectiveDragAt = s.handoffDragOffset), scrollBridge.drag(effectiveDragAt), s.dragAt = effectiveDragAt, s.dys.push(dy), s.dys.length > 100 && (s.dys = s.dys.slice(-10));
|
|
101
|
+
} else setScrollEnabled(!0);
|
|
102
|
+
};
|
|
103
|
+
return {
|
|
104
|
+
onResponderRelease: release,
|
|
105
|
+
onStartShouldSetResponder,
|
|
106
|
+
onMoveShouldSetResponder,
|
|
107
|
+
onResponderMove
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=useSheetScrollViewGestures.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useSheetScrollViewGestures_native_exports","__export","useSheetScrollViewGestures","module","exports","__toCommonJS","import_react","require","param","scrollBridge","hasScrollableContent","scrollEnabled","setScrollEnabled","state","useRef","lastPageY","dragAt","dys","isScrolling","isDraggingScrollArea","scrollEngaged","prevScrollY","handoffOccurred","handoffDragOffset","release","s","current","scrollStartY","scrollLock","vy","length","recentDys","slice","dist","reduce","a","b","onStartShouldSetResponder","y","onMoveShouldSetResponder","e","pageY","nativeEvent","Math","abs","onResponderMove","dy","isDraggingDown","isPaneAtTop","paneY","paneMinY","currentScrollY","wasScrolledNowAtZero","panHandles","effectiveDragAt","drag","push","onResponderRelease"],"sources":["../../src/useSheetScrollViewGestures.native.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/next.md
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Sheet ScrollView Gesture Handoff - Next Steps
|
|
2
|
+
|
|
3
|
+
## Current Limitation
|
|
4
|
+
|
|
5
|
+
The Sheet + ScrollView gesture coordination on native iOS has limitations because Tamagui uses React Native's built-in `PanResponder`, while iOS's `UIScrollView` gesture recognizers fire BEFORE the RN responder system can claim the gesture.
|
|
6
|
+
|
|
7
|
+
This causes:
|
|
8
|
+
|
|
9
|
+
- Minor scroll "flicker" when starting to drag down from scroll top
|
|
10
|
+
- Imperfect handoff between scroll and sheet drag gestures
|
|
11
|
+
|
|
12
|
+
## Ideal Solution: react-native-gesture-handler Integration
|
|
13
|
+
|
|
14
|
+
Both `gorhom/bottom-sheet` and `react-native-actions-sheet` solve this by using `react-native-gesture-handler` which provides:
|
|
15
|
+
|
|
16
|
+
1. **`simultaneousHandlers`** - allows coordinating multiple gesture recognizers
|
|
17
|
+
2. **`GestureDetector`** with worklets - can check conditions and decide who handles gesture before it starts
|
|
18
|
+
3. **Native gesture coordination** - works at the iOS/Android gesture recognizer level, not the JS responder level
|
|
19
|
+
|
|
20
|
+
## Proposed API
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
import { setupGestureHandler } from '@tamagui/sheet'
|
|
24
|
+
import { GestureHandlerRootView } from 'react-native-gesture-handler'
|
|
25
|
+
|
|
26
|
+
// Call once at app startup (optional - falls back to PanResponder)
|
|
27
|
+
setupGestureHandler({
|
|
28
|
+
// Pass the gesture handler module so we don't add it as a hard dependency
|
|
29
|
+
GestureDetector: require('react-native-gesture-handler').GestureDetector,
|
|
30
|
+
Gesture: require('react-native-gesture-handler').Gesture,
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
// Then wrap app
|
|
34
|
+
export default function App() {
|
|
35
|
+
return (
|
|
36
|
+
<GestureHandlerRootView style={{ flex: 1 }}>
|
|
37
|
+
<YourApp />
|
|
38
|
+
</GestureHandlerRootView>
|
|
39
|
+
)
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Implementation Notes
|
|
44
|
+
|
|
45
|
+
If `setupGestureHandler()` is called:
|
|
46
|
+
|
|
47
|
+
- Use `GestureDetector` with `Gesture.Pan()` instead of `PanResponder`
|
|
48
|
+
- Use `simultaneousHandlers` to coordinate with ScrollView's gesture
|
|
49
|
+
- Implement `blockPan` flag pattern from actions-sheet for smooth handoff
|
|
50
|
+
|
|
51
|
+
If not called:
|
|
52
|
+
|
|
53
|
+
- Fall back to current `PanResponder` implementation
|
|
54
|
+
- Accept the minor limitations on native
|
|
55
|
+
|
|
56
|
+
## References
|
|
57
|
+
|
|
58
|
+
- gorhom/bottom-sheet: Uses Reanimated worklets + gesture handler
|
|
59
|
+
- react-native-actions-sheet: Uses `blockPan` flag pattern with gesture handler
|
|
60
|
+
- Both are MIT licensed and can be used as reference
|
|
61
|
+
|
|
62
|
+
## Files to Modify
|
|
63
|
+
|
|
64
|
+
- `SheetImplementationCustom.tsx` - Replace PanResponder with GestureDetector
|
|
65
|
+
- `SheetScrollView.tsx` - Use `useScrollHandlers()` pattern from actions-sheet
|
|
66
|
+
- Add `setupGestureHandler.ts` for optional gesture handler registration
|
|
67
|
+
|
|
68
|
+
## Test Case
|
|
69
|
+
|
|
70
|
+
There's a test case at `code/kitchen-sink/src/usecases/SheetScrollableDrag.tsx` that demonstrates the bug and can be used to verify fixes. It's not exported in the main navigation but can be accessed directly for testing.
|
|
71
|
+
|
|
72
|
+
## Attempted Fixes
|
|
73
|
+
|
|
74
|
+
1. **Native scroll enable/disable based on pane position** - Tried disabling scroll when sheet is not at top position, but this completely broke scrolling because the initial pane position values aren't set correctly on mount.
|
|
75
|
+
|
|
76
|
+
2. **PaneY change listeners** - Added `onPaneYChange`/`setPaneY` to ScrollBridge to notify ScrollView of position changes during drag, but the fundamental issue remains that iOS UIScrollView gesture recognizers fire before RN's responder system.
|
|
77
|
+
|
|
78
|
+
The core issue is architectural: React Native's PanResponder cannot coordinate with iOS's native UIScrollView gesture recognizers at the right level. The only real solution is `react-native-gesture-handler` integration.
|
package/package.json
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hanzogui/sheet",
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"source": "src/index.ts",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"sideEffects": [
|
|
8
|
+
"*.css"
|
|
9
|
+
],
|
|
10
|
+
"main": "dist/cjs",
|
|
11
|
+
"module": "dist/esm",
|
|
12
|
+
"types": "./types/index.d.ts",
|
|
13
|
+
"typesVersions": {
|
|
14
|
+
"*": {
|
|
15
|
+
"setup-gesture-handler": [
|
|
16
|
+
"./types/setupGestureHandler.d.ts"
|
|
17
|
+
]
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"exports": {
|
|
21
|
+
"./package.json": "./package.json",
|
|
22
|
+
".": {
|
|
23
|
+
"types": "./types/index.d.ts",
|
|
24
|
+
"react-native": "./dist/esm/index.native.js",
|
|
25
|
+
"browser": "./dist/esm/index.mjs",
|
|
26
|
+
"module": "./dist/esm/index.mjs",
|
|
27
|
+
"import": "./dist/esm/index.mjs",
|
|
28
|
+
"require": "./dist/cjs/index.cjs",
|
|
29
|
+
"default": "./dist/esm/index.mjs"
|
|
30
|
+
},
|
|
31
|
+
"./controller": {
|
|
32
|
+
"types": "./types/controller.d.ts",
|
|
33
|
+
"react-native": "./dist/esm/controller.native.js",
|
|
34
|
+
"browser": "./dist/esm/controller.mjs",
|
|
35
|
+
"module": "./dist/esm/controller.mjs",
|
|
36
|
+
"import": "./dist/esm/controller.mjs",
|
|
37
|
+
"require": "./dist/cjs/controller.cjs",
|
|
38
|
+
"default": "./dist/cjs/controller.native.js"
|
|
39
|
+
},
|
|
40
|
+
"./setup-gesture-handler": {
|
|
41
|
+
"types": "./types/setupGestureHandler.d.ts",
|
|
42
|
+
"react-native": "./dist/esm/setupGestureHandler.native.js",
|
|
43
|
+
"browser": "./dist/esm/setupGestureHandler.mjs",
|
|
44
|
+
"module": "./dist/esm/setupGestureHandler.mjs",
|
|
45
|
+
"import": "./dist/esm/setupGestureHandler.mjs",
|
|
46
|
+
"require": "./dist/cjs/setupGestureHandler.cjs",
|
|
47
|
+
"default": "./dist/esm/setupGestureHandler.mjs"
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"publishConfig": {
|
|
51
|
+
"access": "public"
|
|
52
|
+
},
|
|
53
|
+
"scripts": {
|
|
54
|
+
"build": "hanzo-gui-build",
|
|
55
|
+
"watch": "hanzo-gui-build --watch",
|
|
56
|
+
"clean": "hanzo-gui-build clean"
|
|
57
|
+
},
|
|
58
|
+
"dependencies": {
|
|
59
|
+
"@hanzogui/adapt": "2.0.0",
|
|
60
|
+
"@hanzogui/animate-presence": "2.0.0",
|
|
61
|
+
"@hanzogui/animations-react-native": "2.0.0-rc.29",
|
|
62
|
+
"@hanzogui/compose-refs": "2.0.0-rc.29",
|
|
63
|
+
"@hanzogui/constants": "2.0.0-rc.29",
|
|
64
|
+
"@hanzogui/core": "2.0.0-rc.29",
|
|
65
|
+
"@hanzogui/create-context": "2.0.0-rc.29",
|
|
66
|
+
"@hanzogui/helpers": "2.0.0-rc.29",
|
|
67
|
+
"@hanzogui/native": "2.0.0-rc.29",
|
|
68
|
+
"@hanzogui/portal": "2.0.0",
|
|
69
|
+
"@hanzogui/remove-scroll": "2.0.0",
|
|
70
|
+
"@hanzogui/scroll-view": "2.0.0",
|
|
71
|
+
"@hanzogui/stacks": "2.0.0",
|
|
72
|
+
"@hanzogui/use-constant": "2.0.0-rc.29",
|
|
73
|
+
"@hanzogui/use-controllable-state": "2.0.0-rc.29",
|
|
74
|
+
"@hanzogui/use-did-finish-ssr": "2.0.0-rc.29",
|
|
75
|
+
"@hanzogui/use-keyboard-visible": "2.0.0-rc.29",
|
|
76
|
+
"@hanzogui/z-index-stack": "2.0.0"
|
|
77
|
+
},
|
|
78
|
+
"devDependencies": {
|
|
79
|
+
"@hanzogui/build": "2.0.0-rc.29",
|
|
80
|
+
"react": ">=19",
|
|
81
|
+
"react-native": "0.83.2",
|
|
82
|
+
"react-native-gesture-handler": "~2.30.0"
|
|
83
|
+
},
|
|
84
|
+
"peerDependencies": {
|
|
85
|
+
"react": ">=19",
|
|
86
|
+
"react-native": "*",
|
|
87
|
+
"react-native-gesture-handler": ">=2.0.0"
|
|
88
|
+
},
|
|
89
|
+
"peerDependenciesMeta": {
|
|
90
|
+
"react-native-gesture-handler": {
|
|
91
|
+
"optional": true
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
"module:jsx": "dist/jsx",
|
|
95
|
+
"removeSideEffects": true
|
|
96
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.assign(module.exports, require('./dist/cjs/setupGestureHandler.cjs'))
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type React from 'react'
|
|
2
|
+
import { View, type ViewStyle } from 'react-native'
|
|
3
|
+
import { getGestureHandlerState, isGestureHandlerEnabled } from './gestureState'
|
|
4
|
+
|
|
5
|
+
interface GestureDetectorWrapperProps {
|
|
6
|
+
gesture: any
|
|
7
|
+
children: React.ReactNode
|
|
8
|
+
style?: ViewStyle
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Conditionally wraps children with GestureDetector when RNGH is available.
|
|
13
|
+
* Uses a plain View wrapper that GestureDetector can attach gesture handlers to.
|
|
14
|
+
*/
|
|
15
|
+
export function GestureDetectorWrapper({
|
|
16
|
+
gesture,
|
|
17
|
+
children,
|
|
18
|
+
style,
|
|
19
|
+
}: GestureDetectorWrapperProps) {
|
|
20
|
+
const { GestureDetector } = getGestureHandlerState()
|
|
21
|
+
const enabled = isGestureHandlerEnabled()
|
|
22
|
+
|
|
23
|
+
// console.warn('[RNGH-Wrapper] enabled:', enabled, 'hasDetector:', !!GestureDetector, 'hasGesture:', !!gesture)
|
|
24
|
+
|
|
25
|
+
// only wrap if we have RNGH available AND a gesture to attach
|
|
26
|
+
if (enabled && GestureDetector && gesture) {
|
|
27
|
+
// GestureDetector needs a native View to attach handlers to
|
|
28
|
+
// the View wrapper ensures proper gesture propagation
|
|
29
|
+
// console.warn('[RNGH-Wrapper] WRAPPING')
|
|
30
|
+
return (
|
|
31
|
+
<GestureDetector gesture={gesture}>
|
|
32
|
+
<View style={style} collapsable={false}>
|
|
33
|
+
{children}
|
|
34
|
+
</View>
|
|
35
|
+
</GestureDetector>
|
|
36
|
+
)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// pass through children in a consistent View wrapper
|
|
40
|
+
return <View style={style}>{children}</View>
|
|
41
|
+
}
|