@tamagui/sheet 1.135.4 → 1.135.5

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.
Files changed (86) hide show
  1. package/dist/cjs/Sheet.native.js +96 -90
  2. package/dist/cjs/Sheet.native.js.map +1 -6
  3. package/dist/cjs/SheetContext.native.js +21 -18
  4. package/dist/cjs/SheetContext.native.js.map +1 -6
  5. package/dist/cjs/SheetController.cjs +1 -1
  6. package/dist/cjs/SheetController.js +1 -1
  7. package/dist/cjs/SheetController.js.map +1 -1
  8. package/dist/cjs/SheetController.native.js +51 -38
  9. package/dist/cjs/SheetController.native.js.map +1 -6
  10. package/dist/cjs/SheetImplementationCustom.cjs +1 -1
  11. package/dist/cjs/SheetImplementationCustom.js +1 -1
  12. package/dist/cjs/SheetImplementationCustom.js.map +1 -1
  13. package/dist/cjs/SheetImplementationCustom.native.js +362 -312
  14. package/dist/cjs/SheetImplementationCustom.native.js.map +1 -6
  15. package/dist/cjs/SheetScrollView.cjs +1 -1
  16. package/dist/cjs/SheetScrollView.js +1 -1
  17. package/dist/cjs/SheetScrollView.js.map +1 -1
  18. package/dist/cjs/SheetScrollView.native.js +137 -107
  19. package/dist/cjs/SheetScrollView.native.js.map +1 -6
  20. package/dist/cjs/constants.native.js +21 -18
  21. package/dist/cjs/constants.native.js.map +1 -6
  22. package/dist/cjs/contexts.cjs +1 -1
  23. package/dist/cjs/contexts.js +1 -1
  24. package/dist/cjs/contexts.native.js +28 -21
  25. package/dist/cjs/contexts.native.js.map +1 -6
  26. package/dist/cjs/createSheet.native.js +148 -101
  27. package/dist/cjs/createSheet.native.js.map +1 -6
  28. package/dist/cjs/helpers.native.js +20 -17
  29. package/dist/cjs/helpers.native.js.map +1 -6
  30. package/dist/cjs/index.native.js +23 -32
  31. package/dist/cjs/index.native.js.map +1 -6
  32. package/dist/cjs/nativeSheet.native.js +65 -53
  33. package/dist/cjs/nativeSheet.native.js.map +1 -6
  34. package/dist/cjs/types.native.js +9 -5
  35. package/dist/cjs/types.native.js.map +1 -6
  36. package/dist/cjs/useSheet.native.js +21 -17
  37. package/dist/cjs/useSheet.native.js.map +1 -6
  38. package/dist/cjs/useSheetController.cjs +1 -1
  39. package/dist/cjs/useSheetController.js +1 -1
  40. package/dist/cjs/useSheetController.native.js +36 -27
  41. package/dist/cjs/useSheetController.native.js.map +1 -6
  42. package/dist/cjs/useSheetOffscreenSize.native.js +41 -23
  43. package/dist/cjs/useSheetOffscreenSize.native.js.map +1 -6
  44. package/dist/cjs/useSheetOpenState.native.js +44 -30
  45. package/dist/cjs/useSheetOpenState.native.js.map +1 -6
  46. package/dist/cjs/useSheetProviderProps.cjs +1 -1
  47. package/dist/cjs/useSheetProviderProps.js +1 -1
  48. package/dist/cjs/useSheetProviderProps.js.map +1 -1
  49. package/dist/cjs/useSheetProviderProps.native.js +119 -108
  50. package/dist/cjs/useSheetProviderProps.native.js.map +1 -6
  51. package/dist/jsx/Sheet.native.js +114 -84
  52. package/dist/jsx/Sheet.native.js.map +1 -6
  53. package/dist/jsx/SheetContext.native.js +35 -10
  54. package/dist/jsx/SheetContext.native.js.map +1 -6
  55. package/dist/jsx/SheetController.native.js +67 -29
  56. package/dist/jsx/SheetController.native.js.map +1 -6
  57. package/dist/jsx/SheetImplementationCustom.native.js +377 -312
  58. package/dist/jsx/SheetImplementationCustom.native.js.map +1 -6
  59. package/dist/jsx/SheetScrollView.native.js +156 -104
  60. package/dist/jsx/SheetScrollView.native.js.map +1 -6
  61. package/dist/jsx/constants.native.js +35 -8
  62. package/dist/jsx/constants.native.js.map +1 -6
  63. package/dist/jsx/contexts.native.js +45 -9
  64. package/dist/jsx/contexts.native.js.map +1 -6
  65. package/dist/jsx/createSheet.native.js +160 -109
  66. package/dist/jsx/createSheet.native.js.map +1 -6
  67. package/dist/jsx/helpers.native.js +31 -7
  68. package/dist/jsx/helpers.native.js.map +1 -6
  69. package/dist/jsx/index.native.js +31 -12
  70. package/dist/jsx/index.native.js.map +1 -6
  71. package/dist/jsx/nativeSheet.native.js +77 -50
  72. package/dist/jsx/nativeSheet.native.js.map +1 -6
  73. package/dist/jsx/types.native.js +19 -1
  74. package/dist/jsx/types.native.js.map +1 -6
  75. package/dist/jsx/useSheet.native.js +32 -8
  76. package/dist/jsx/useSheet.native.js.map +1 -6
  77. package/dist/jsx/useSheetController.native.js +52 -14
  78. package/dist/jsx/useSheetController.native.js.map +1 -6
  79. package/dist/jsx/useSheetOffscreenSize.native.js +52 -13
  80. package/dist/jsx/useSheetOffscreenSize.native.js.map +1 -6
  81. package/dist/jsx/useSheetOpenState.native.js +55 -22
  82. package/dist/jsx/useSheetOpenState.native.js.map +1 -6
  83. package/dist/jsx/useSheetProviderProps.native.js +135 -98
  84. package/dist/jsx/useSheetProviderProps.native.js.map +1 -6
  85. package/package.json +20 -19
  86. package/types/SheetContext.d.ts.map +1 -1
@@ -1,357 +1,407 @@
1
1
  "use strict";
2
+
2
3
  var __create = Object.create;
3
4
  var __defProp = Object.defineProperty;
4
5
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
6
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf, __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __getProtoOf = Object.getPrototypeOf,
8
+ __hasOwnProp = Object.prototype.hasOwnProperty;
7
9
  var __export = (target, all) => {
8
- for (var name in all)
9
- __defProp(target, name, { get: all[name], enumerable: !0 });
10
- }, __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from == "object" || typeof from == "function")
12
- for (let key of __getOwnPropNames(from))
13
- !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
- return to;
15
- };
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
+ };
16
22
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
23
  // If the importer is in node compatibility mode or this is not an ESM
18
24
  // file that has been converted to a CommonJS file using a Babel-
19
25
  // compatible transform (i.e. "__esModule" has not been set), then set
20
26
  // "default" to the CommonJS "module.exports" for node compatibility.
21
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: !0 }) : target,
22
- mod
23
- )), __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
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);
24
34
  var SheetImplementationCustom_exports = {};
25
35
  __export(SheetImplementationCustom_exports, {
26
36
  SheetImplementationCustom: () => SheetImplementationCustom
27
37
  });
28
38
  module.exports = __toCommonJS(SheetImplementationCustom_exports);
29
- var import_jsx_runtime = require("react/jsx-runtime"), import_adapt = require("@tamagui/adapt"), import_animate_presence = require("@tamagui/animate-presence"), import_compose_refs = require("@tamagui/compose-refs"), import_constants = require("@tamagui/constants"), import_core = require("@tamagui/core"), import_portal = require("@tamagui/portal"), import_react = __toESM(require("react")), import_react_native = require("react-native"), import_contexts = require("./contexts"), import_helpers = require("./helpers"), import_SheetContext = require("./SheetContext"), import_useSheetOpenState = require("./useSheetOpenState"), import_useSheetProviderProps = require("./useSheetProviderProps"), hiddenSize = 10000.1, sheetHiddenStyleSheet = null, relativeDimensionTo = import_constants.isWeb ? "window" : "screen", SheetImplementationCustom = /* @__PURE__ */ import_react.default.forwardRef(function(props, forwardedRef) {
30
- var parentSheet = import_react.default.useContext(import_contexts.ParentSheetContext), { animation, animationConfig: animationConfigProp, modal = !1, zIndex = parentSheet.zIndex + 1, moveOnKeyboardChange = !1, unmountChildrenWhenHidden = !1, portalProps, containerComponent: ContainerComponent = import_react.default.Fragment } = props, state = (0, import_useSheetOpenState.useSheetOpenState)(props), [overlayComponent, setOverlayComponent] = import_react.default.useState(null), providerProps = (0, import_useSheetProviderProps.useSheetProviderProps)(props, state, {
31
- onOverlayComponent: setOverlayComponent
32
- }), { frameSize, setFrameSize, snapPoints, snapPointsMode, hasFit, position, setPosition, scrollBridge, screenSize, setMaxContentSize, maxSnapPoint } = providerProps, { open, controller, isHidden } = state, sheetRef = import_react.default.useRef(void 0), ref = (0, import_compose_refs.useComposedRefs)(forwardedRef, sheetRef, providerProps.contentRef), { animationDriver } = (0, import_core.useConfiguration)();
33
- if (!animationDriver)
34
- throw new Error("Sheet reqiures an animation driver to be set");
35
- var animationConfig = function() {
36
- if (animationDriver.supportsCSS)
37
- return {};
38
- var [animationProp, animationPropConfig] = animation ? Array.isArray(animation) ? animation : [
39
- animation
40
- ] : [];
41
- return animationConfigProp ?? (animationProp ? {
42
- ...animationDriver.animations[animationProp],
43
- ...animationPropConfig
44
- } : null);
45
- }(), [isShowingInnerSheet, setIsShowingInnerSheet] = import_react.default.useState(!1), shouldHideParentSheet = !import_constants.isWeb && modal && isShowingInnerSheet && // if not using weird portal limitation we dont need to hide parent sheet
46
- import_portal.USE_NATIVE_PORTAL, sheetInsideSheet = import_react.default.useContext(import_contexts.SheetInsideSheetContext), onInnerSheet = import_react.default.useCallback(function(hasChild) {
47
- setIsShowingInnerSheet(hasChild);
48
- }, []), positions = import_react.default.useMemo(function() {
49
- return snapPoints.map(function(point) {
50
- return getYPositions(snapPointsMode, point, screenSize, frameSize);
51
- });
52
- }, [
53
- screenSize,
54
- frameSize,
55
- snapPoints,
56
- snapPointsMode
57
- ]), { useAnimatedNumber, useAnimatedNumberStyle, useAnimatedNumberReaction } = animationDriver, _animationDriver_View, AnimatedView = (_animationDriver_View = animationDriver.View) !== null && _animationDriver_View !== void 0 ? _animationDriver_View : import_core.Stack;
58
- (0, import_constants.useIsomorphicLayoutEffect)(function() {
59
- if (sheetInsideSheet && open)
60
- return sheetInsideSheet(!0), function() {
39
+ var import_jsx_runtime = require("react/jsx-runtime"),
40
+ import_adapt = require("@tamagui/adapt"),
41
+ import_animate_presence = require("@tamagui/animate-presence"),
42
+ import_compose_refs = require("@tamagui/compose-refs"),
43
+ import_constants = require("@tamagui/constants"),
44
+ import_core = require("@tamagui/core"),
45
+ import_portal = require("@tamagui/portal"),
46
+ import_react = __toESM(require("react"), 1),
47
+ import_react_native = require("react-native"),
48
+ import_contexts = require("./contexts.native.js"),
49
+ import_helpers = require("./helpers.native.js"),
50
+ import_SheetContext = require("./SheetContext.native.js"),
51
+ import_useSheetOpenState = require("./useSheetOpenState.native.js"),
52
+ import_useSheetProviderProps = require("./useSheetProviderProps.native.js"),
53
+ hiddenSize = 10000.1,
54
+ sheetHiddenStyleSheet = null,
55
+ relativeDimensionTo = import_constants.isWeb ? "window" : "screen",
56
+ SheetImplementationCustom = /* @__PURE__ */import_react.default.forwardRef(function (props, forwardedRef) {
57
+ var parentSheet = import_react.default.useContext(import_contexts.ParentSheetContext),
58
+ {
59
+ animation,
60
+ animationConfig: animationConfigProp,
61
+ modal = !1,
62
+ zIndex = parentSheet.zIndex + 1,
63
+ moveOnKeyboardChange = !1,
64
+ unmountChildrenWhenHidden = !1,
65
+ portalProps,
66
+ containerComponent: ContainerComponent = import_react.default.Fragment
67
+ } = props,
68
+ state = (0, import_useSheetOpenState.useSheetOpenState)(props),
69
+ [overlayComponent, setOverlayComponent] = import_react.default.useState(null),
70
+ providerProps = (0, import_useSheetProviderProps.useSheetProviderProps)(props, state, {
71
+ onOverlayComponent: setOverlayComponent
72
+ }),
73
+ {
74
+ frameSize,
75
+ setFrameSize,
76
+ snapPoints,
77
+ snapPointsMode,
78
+ hasFit,
79
+ position,
80
+ setPosition,
81
+ scrollBridge,
82
+ screenSize,
83
+ setMaxContentSize,
84
+ maxSnapPoint
85
+ } = providerProps,
86
+ {
87
+ open,
88
+ controller,
89
+ isHidden
90
+ } = state,
91
+ sheetRef = import_react.default.useRef(void 0),
92
+ ref = (0, import_compose_refs.useComposedRefs)(forwardedRef, sheetRef, providerProps.contentRef),
93
+ {
94
+ animationDriver
95
+ } = (0, import_core.useConfiguration)();
96
+ if (!animationDriver) throw new Error("Sheet reqiures an animation driver to be set");
97
+ var animationConfig = function () {
98
+ if (animationDriver.supportsCSS) return {};
99
+ var [animationProp, animationPropConfig] = animation ? Array.isArray(animation) ? animation : [animation] : [];
100
+ return animationConfigProp ?? (animationProp ? {
101
+ ...animationDriver.animations[animationProp],
102
+ ...animationPropConfig
103
+ } : null);
104
+ }(),
105
+ [isShowingInnerSheet, setIsShowingInnerSheet] = import_react.default.useState(!1),
106
+ shouldHideParentSheet = !import_constants.isWeb && modal && isShowingInnerSheet &&
107
+ // if not using weird portal limitation we dont need to hide parent sheet
108
+ import_portal.USE_NATIVE_PORTAL,
109
+ sheetInsideSheet = import_react.default.useContext(import_contexts.SheetInsideSheetContext),
110
+ onInnerSheet = import_react.default.useCallback(function (hasChild) {
111
+ setIsShowingInnerSheet(hasChild);
112
+ }, []),
113
+ positions = import_react.default.useMemo(function () {
114
+ return snapPoints.map(function (point) {
115
+ return getYPositions(snapPointsMode, point, screenSize, frameSize);
116
+ });
117
+ }, [screenSize, frameSize, snapPoints, snapPointsMode]),
118
+ {
119
+ useAnimatedNumber,
120
+ useAnimatedNumberStyle,
121
+ useAnimatedNumberReaction
122
+ } = animationDriver,
123
+ _animationDriver_View,
124
+ AnimatedView = (_animationDriver_View = animationDriver.View) !== null && _animationDriver_View !== void 0 ? _animationDriver_View : import_core.Stack;
125
+ (0, import_constants.useIsomorphicLayoutEffect)(function () {
126
+ if (sheetInsideSheet && open) return sheetInsideSheet(!0), function () {
61
127
  sheetInsideSheet(!1);
62
128
  };
63
- }, [
64
- sheetInsideSheet,
65
- open
66
- ]);
67
- var nextParentContext = import_react.default.useMemo(function() {
68
- return {
69
- zIndex
70
- };
71
- }, [
72
- zIndex
73
- ]), isMounted = (0, import_core.useDidFinishSSR)(), startPosition = isMounted && screenSize ? screenSize : hiddenSize, animatedNumber = useAnimatedNumber(startPosition), at = import_react.default.useRef(startPosition), hasntMeasured = at.current === hiddenSize, [disableAnimation, setDisableAnimation] = (0, import_react.useState)(hasntMeasured), hasScrollView = import_react.default.useRef(!1);
74
- useAnimatedNumberReaction({
75
- value: animatedNumber,
76
- hostRef: sheetRef
77
- }, import_react.default.useCallback(function(value) {
78
- at.current = value, scrollBridge.paneY = value;
79
- }, [
80
- animationDriver
81
- ]));
82
- function stopSpring() {
83
- animatedNumber.stop(), scrollBridge.onFinishAnimate && (scrollBridge.onFinishAnimate(), scrollBridge.onFinishAnimate = void 0);
84
- }
85
- var animateTo = (0, import_core.useEvent)(function(position2) {
86
- if (frameSize !== 0) {
87
- var toValue = isHidden || position2 === -1 ? screenSize : positions[position2];
88
- at.current !== toValue && (at.current = toValue, stopSpring(), animatedNumber.setValue(toValue, {
89
- type: "spring",
90
- ...animationConfig
91
- }));
129
+ }, [sheetInsideSheet, open]);
130
+ var nextParentContext = import_react.default.useMemo(function () {
131
+ return {
132
+ zIndex
133
+ };
134
+ }, [zIndex]),
135
+ isMounted = (0, import_core.useDidFinishSSR)(),
136
+ startPosition = isMounted && screenSize ? screenSize : hiddenSize,
137
+ animatedNumber = useAnimatedNumber(startPosition),
138
+ at = import_react.default.useRef(startPosition),
139
+ hasntMeasured = at.current === hiddenSize,
140
+ [disableAnimation, setDisableAnimation] = (0, import_react.useState)(hasntMeasured),
141
+ hasScrollView = import_react.default.useRef(!1);
142
+ useAnimatedNumberReaction({
143
+ value: animatedNumber,
144
+ hostRef: sheetRef
145
+ }, import_react.default.useCallback(function (value) {
146
+ at.current = value, scrollBridge.paneY = value;
147
+ }, [animationDriver]));
148
+ function stopSpring() {
149
+ animatedNumber.stop(), scrollBridge.onFinishAnimate && (scrollBridge.onFinishAnimate(), scrollBridge.onFinishAnimate = void 0);
92
150
  }
93
- });
94
- (0, import_constants.useIsomorphicLayoutEffect)(function() {
95
- if (hasntMeasured && screenSize && frameSize) {
96
- at.current = screenSize, animatedNumber.setValue(screenSize, {
97
- type: "timing",
98
- duration: 0
99
- }, function() {
100
- setTimeout(function() {
101
- setDisableAnimation(!1);
102
- }, 10);
103
- });
104
- return;
105
- }
106
- disableAnimation || !frameSize || !screenSize || isHidden || hasntMeasured && !open || (animateTo(position), position === -1 && (scrollBridge.scrollLock = !1, scrollBridge.scrollStartY = -1));
107
- }, [
108
- hasntMeasured,
109
- disableAnimation,
110
- isHidden,
111
- frameSize,
112
- screenSize,
113
- open,
114
- position
115
- ]);
116
- var _props_disableDrag, disableDrag = (_props_disableDrag = props.disableDrag) !== null && _props_disableDrag !== void 0 ? _props_disableDrag : controller == null ? void 0 : controller.disableDrag, themeName = (0, import_core.useThemeName)(), [isDragging, setIsDragging] = import_react.default.useState(!1), panResponder = import_react.default.useMemo(function() {
117
- if (disableDrag || !frameSize || isShowingInnerSheet) return;
118
- var minY = positions[0];
119
- scrollBridge.paneMinY = minY;
120
- var startY = at.current;
121
- function setPanning(val) {
122
- setIsDragging(val), import_constants.isClient && (sheetHiddenStyleSheet || (sheetHiddenStyleSheet = document.createElement("style"), typeof document.head < "u" && document.head.appendChild(sheetHiddenStyleSheet)), val ? sheetHiddenStyleSheet.innerText = ":root * { user-select: none !important; -webkit-user-select: none !important; }" : sheetHiddenStyleSheet.innerText = "");
123
- }
124
- var release = function(param) {
125
- var { vy, dragAt } = param;
126
- if (scrollBridge.setParentDragging(!1), !scrollBridge.scrollLock) {
127
- isExternalDrag = !1, previouslyScrolling = !1, setPanning(!1);
128
- for (var at2 = dragAt + startY, end = at2 + frameSize * vy * 0.2, closestPoint = 0, dist = Number.POSITIVE_INFINITY, i = 0; i < positions.length; i++) {
129
- var position2 = positions[i], curDist = end > position2 ? end - position2 : position2 - end;
130
- curDist < dist && (dist = curDist, closestPoint = i);
131
- }
132
- setPosition(closestPoint), animateTo(closestPoint);
133
- }
134
- }, finish = function(_e, state2) {
135
- release({
136
- vy: state2.vy,
137
- dragAt: state2.dy
138
- });
139
- }, previouslyScrolling = !1, onMoveShouldSet = function(e, param) {
140
- var { dy } = param;
141
- function getShouldSet() {
142
- if (e.target === providerProps.handleRef.current)
143
- return !0;
144
- if (scrollBridge.hasScrollableContent === !0) {
145
- if (scrollBridge.scrollLock)
146
- return !1;
147
- var isScrolled = scrollBridge.y !== 0, isDraggingUp = dy < 0, isNearTop = scrollBridge.paneY - 5 <= scrollBridge.paneMinY;
148
- if (isScrolled)
149
- return previouslyScrolling = !0, !1;
150
- if (isNearTop && hasScrollView.current && isDraggingUp)
151
- return !1;
152
- }
153
- return Math.abs(dy) > 10;
151
+ var animateTo = (0, import_core.useEvent)(function (position2) {
152
+ if (frameSize !== 0) {
153
+ var toValue = isHidden || position2 === -1 ? screenSize : positions[position2];
154
+ at.current !== toValue && (at.current = toValue, stopSpring(), animatedNumber.setValue(toValue, {
155
+ type: "spring",
156
+ ...animationConfig
157
+ }));
154
158
  }
155
- var granted = getShouldSet();
156
- return granted && scrollBridge.setParentDragging(!0), granted;
157
- }, grant = function() {
158
- setPanning(!0), stopSpring(), startY = at.current;
159
- }, isExternalDrag = !1;
160
- return scrollBridge.drag = function(dy) {
161
- isExternalDrag || (isExternalDrag = !0, grant());
162
- var to = dy + startY;
163
- animatedNumber.setValue((0, import_helpers.resisted)(to, minY), {
164
- type: "direct"
165
- });
166
- }, scrollBridge.release = release, import_react_native.PanResponder.create({
167
- onMoveShouldSetPanResponder: onMoveShouldSet,
168
- onPanResponderGrant: grant,
169
- onPanResponderMove: function(_e, param) {
170
- var { dy } = param, toFull = dy + startY, to = (0, import_helpers.resisted)(toFull, minY), isAtTop = to <= minY;
171
- isAtTop ? scrollBridge.setParentDragging(!1) : scrollBridge.setParentDragging(!0), animatedNumber.setValue(to, {
172
- type: "direct"
173
- });
174
- },
175
- onPanResponderEnd: finish,
176
- onPanResponderTerminate: finish,
177
- onPanResponderRelease: finish
178
159
  });
179
- }, [
180
- disableDrag,
181
- isShowingInnerSheet,
182
- animateTo,
183
- frameSize,
184
- positions,
185
- setPosition
186
- ]), handleAnimationViewLayout = import_react.default.useCallback(function(e) {
187
- var _e_nativeEvent, next = Math.min((_e_nativeEvent = e.nativeEvent) === null || _e_nativeEvent === void 0 ? void 0 : _e_nativeEvent.layout.height, import_react_native.Dimensions.get(relativeDimensionTo).height);
188
- next && setFrameSize(next);
189
- }, []), handleMaxContentViewLayout = import_react.default.useCallback(function(e) {
190
- var _e_nativeEvent, next = Math.min((_e_nativeEvent = e.nativeEvent) === null || _e_nativeEvent === void 0 ? void 0 : _e_nativeEvent.layout.height, import_react_native.Dimensions.get(relativeDimensionTo).height);
191
- next && setMaxContentSize(next);
192
- }, []), animatedStyle = useAnimatedNumberStyle(animatedNumber, function(val) {
193
- "worklet";
194
- var translateY = frameSize === 0 ? hiddenSize : val;
195
- return {
196
- transform: [
197
- {
198
- translateY
199
- }
200
- ]
201
- };
202
- }), sizeBeforeKeyboard = import_react.default.useRef(null);
203
- import_react.default.useEffect(function() {
204
- if (!(import_constants.isWeb || !moveOnKeyboardChange)) {
205
- var keyboardShowListener = import_react_native.Keyboard.addListener(import_constants.currentPlatform === "ios" ? "keyboardWillShow" : "keyboardDidShow", function(e) {
206
- sizeBeforeKeyboard.current === null && (sizeBeforeKeyboard.current = isHidden || position === -1 ? screenSize : positions[position], animatedNumber.setValue(Math.max(sizeBeforeKeyboard.current - e.endCoordinates.height, 0), {
160
+ (0, import_constants.useIsomorphicLayoutEffect)(function () {
161
+ if (hasntMeasured && screenSize && frameSize) {
162
+ at.current = screenSize, animatedNumber.setValue(screenSize, {
207
163
  type: "timing",
208
- duration: 250
209
- }));
210
- }), keyboardDidHideListener = import_react_native.Keyboard.addListener("keyboardDidHide", function() {
211
- sizeBeforeKeyboard.current !== null && (animatedNumber.setValue(sizeBeforeKeyboard.current, {
212
- type: "timing",
213
- duration: 250
214
- }), sizeBeforeKeyboard.current = null);
215
- });
216
- return function() {
217
- keyboardDidHideListener.remove(), keyboardShowListener.remove();
218
- };
219
- }
220
- }, [
221
- moveOnKeyboardChange,
222
- positions,
223
- position,
224
- isHidden
225
- ]);
226
- var [opacity, setOpacity] = import_react.default.useState(open ? 1 : 0);
227
- open && opacity === 0 && setOpacity(1), import_react.default.useEffect(function() {
228
- if (!open) {
229
- var tm = setTimeout(function() {
230
- setOpacity(0);
231
- }, 400);
232
- return function() {
233
- clearTimeout(tm);
234
- };
235
- }
236
- }, [
237
- open
238
- ]);
239
- var forcedContentHeight = hasFit ? void 0 : snapPointsMode === "percent" ? `${maxSnapPoint}${import_constants.isWeb ? "dvh" : "%"}` : maxSnapPoint, setHasScrollView = import_react.default.useCallback(function(val) {
240
- hasScrollView.current = val;
241
- }, []), contents = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_core.LayoutMeasurementController, {
242
- disable: !open,
243
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_contexts.ParentSheetContext.Provider, {
244
- value: nextParentContext,
245
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_SheetContext.SheetProvider, {
246
- ...providerProps,
247
- setHasScrollView,
248
- children: [
249
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_animate_presence.AnimatePresence, {
250
- custom: {
251
- open
252
- },
253
- children: shouldHideParentSheet || !open ? null : overlayComponent
254
- }),
255
- snapPointsMode !== "percent" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_native.View, {
256
- style: {
257
- opacity: 0,
258
- position: "absolute",
259
- top: 0,
260
- left: 0,
261
- right: 0,
262
- bottom: 0,
263
- pointerEvents: "none"
264
- },
265
- onLayout: handleMaxContentViewLayout
164
+ duration: 0
165
+ }, function () {
166
+ setTimeout(function () {
167
+ setDisableAnimation(!1);
168
+ }, 10);
169
+ });
170
+ return;
171
+ }
172
+ disableAnimation || !frameSize || !screenSize || isHidden || hasntMeasured && !open || (animateTo(position), position === -1 && (scrollBridge.scrollLock = !1, scrollBridge.scrollStartY = -1));
173
+ }, [hasntMeasured, disableAnimation, isHidden, frameSize, screenSize, open, position]);
174
+ var _props_disableDrag,
175
+ disableDrag = (_props_disableDrag = props.disableDrag) !== null && _props_disableDrag !== void 0 ? _props_disableDrag : controller?.disableDrag,
176
+ themeName = (0, import_core.useThemeName)(),
177
+ [isDragging, setIsDragging] = import_react.default.useState(!1),
178
+ panResponder = import_react.default.useMemo(function () {
179
+ if (disableDrag || !frameSize || isShowingInnerSheet) return;
180
+ var minY = positions[0];
181
+ scrollBridge.paneMinY = minY;
182
+ var startY = at.current;
183
+ function setPanning(val) {
184
+ setIsDragging(val), import_constants.isClient && (sheetHiddenStyleSheet || (sheetHiddenStyleSheet = document.createElement("style"), typeof document.head < "u" && document.head.appendChild(sheetHiddenStyleSheet)), val ? sheetHiddenStyleSheet.innerText = ":root * { user-select: none !important; -webkit-user-select: none !important; }" : sheetHiddenStyleSheet.innerText = "");
185
+ }
186
+ var release = function (param) {
187
+ var {
188
+ vy,
189
+ dragAt
190
+ } = param;
191
+ if (scrollBridge.setParentDragging(!1), !scrollBridge.scrollLock) {
192
+ isExternalDrag = !1, previouslyScrolling = !1, setPanning(!1);
193
+ for (var at2 = dragAt + startY, end = at2 + frameSize * vy * 0.2, closestPoint = 0, dist = Number.POSITIVE_INFINITY, i = 0; i < positions.length; i++) {
194
+ var position2 = positions[i],
195
+ curDist = end > position2 ? end - position2 : position2 - end;
196
+ curDist < dist && (dist = curDist, closestPoint = i);
197
+ }
198
+ setPosition(closestPoint), animateTo(closestPoint);
199
+ }
200
+ },
201
+ finish = function (_e, state2) {
202
+ release({
203
+ vy: state2.vy,
204
+ dragAt: state2.dy
205
+ });
206
+ },
207
+ previouslyScrolling = !1,
208
+ onMoveShouldSet = function (e, param) {
209
+ var {
210
+ dy
211
+ } = param;
212
+ function getShouldSet() {
213
+ if (e.target === providerProps.handleRef.current) return !0;
214
+ if (scrollBridge.hasScrollableContent === !0) {
215
+ if (scrollBridge.scrollLock) return !1;
216
+ var isScrolled = scrollBridge.y !== 0,
217
+ isDraggingUp = dy < 0,
218
+ isNearTop = scrollBridge.paneY - 5 <= scrollBridge.paneMinY;
219
+ if (isScrolled) return previouslyScrolling = !0, !1;
220
+ if (isNearTop && hasScrollView.current && isDraggingUp) return !1;
221
+ }
222
+ return Math.abs(dy) > 10;
223
+ }
224
+ var granted = getShouldSet();
225
+ return granted && scrollBridge.setParentDragging(!0), granted;
226
+ },
227
+ grant = function () {
228
+ setPanning(!0), stopSpring(), startY = at.current;
229
+ },
230
+ isExternalDrag = !1;
231
+ return scrollBridge.drag = function (dy) {
232
+ isExternalDrag || (isExternalDrag = !0, grant());
233
+ var to = dy + startY;
234
+ animatedNumber.setValue((0, import_helpers.resisted)(to, minY), {
235
+ type: "direct"
236
+ });
237
+ }, scrollBridge.release = release, import_react_native.PanResponder.create({
238
+ onMoveShouldSetPanResponder: onMoveShouldSet,
239
+ onPanResponderGrant: grant,
240
+ onPanResponderMove: function (_e, param) {
241
+ var {
242
+ dy
243
+ } = param,
244
+ toFull = dy + startY,
245
+ to = (0, import_helpers.resisted)(toFull, minY),
246
+ isAtTop = to <= minY;
247
+ isAtTop ? scrollBridge.setParentDragging(!1) : scrollBridge.setParentDragging(!0), animatedNumber.setValue(to, {
248
+ type: "direct"
249
+ });
250
+ },
251
+ onPanResponderEnd: finish,
252
+ onPanResponderTerminate: finish,
253
+ onPanResponderRelease: finish
254
+ });
255
+ }, [disableDrag, isShowingInnerSheet, animateTo, frameSize, positions, setPosition]),
256
+ handleAnimationViewLayout = import_react.default.useCallback(function (e) {
257
+ var _e_nativeEvent,
258
+ next = Math.min((_e_nativeEvent = e.nativeEvent) === null || _e_nativeEvent === void 0 ? void 0 : _e_nativeEvent.layout.height, import_react_native.Dimensions.get(relativeDimensionTo).height);
259
+ next && setFrameSize(next);
260
+ }, []),
261
+ handleMaxContentViewLayout = import_react.default.useCallback(function (e) {
262
+ var _e_nativeEvent,
263
+ next = Math.min((_e_nativeEvent = e.nativeEvent) === null || _e_nativeEvent === void 0 ? void 0 : _e_nativeEvent.layout.height, import_react_native.Dimensions.get(relativeDimensionTo).height);
264
+ next && setMaxContentSize(next);
265
+ }, []),
266
+ animatedStyle = useAnimatedNumberStyle(animatedNumber, function (val) {
267
+ "worklet";
268
+
269
+ var translateY = frameSize === 0 ? hiddenSize : val;
270
+ return {
271
+ transform: [{
272
+ translateY
273
+ }]
274
+ };
275
+ }),
276
+ sizeBeforeKeyboard = import_react.default.useRef(null);
277
+ import_react.default.useEffect(function () {
278
+ if (!(import_constants.isWeb || !moveOnKeyboardChange)) {
279
+ var keyboardShowListener = import_react_native.Keyboard.addListener(import_constants.currentPlatform === "ios" ? "keyboardWillShow" : "keyboardDidShow", function (e) {
280
+ sizeBeforeKeyboard.current === null && (sizeBeforeKeyboard.current = isHidden || position === -1 ? screenSize : positions[position], animatedNumber.setValue(Math.max(sizeBeforeKeyboard.current - e.endCoordinates.height, 0), {
281
+ type: "timing",
282
+ duration: 250
283
+ }));
266
284
  }),
267
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AnimatedView, {
268
- ref,
269
- ...panResponder == null ? void 0 : panResponder.panHandlers,
270
- onLayout: handleAnimationViewLayout,
271
- // @ts-ignore for CSS driver this is necessary to attach the transition
272
- // also motion driver at least though i suspect all drivers?
273
- animation: isDragging || disableAnimation ? null : animation,
274
- // @ts-ignore
275
- disableClassName: !0,
276
- style: [
277
- {
285
+ keyboardDidHideListener = import_react_native.Keyboard.addListener("keyboardDidHide", function () {
286
+ sizeBeforeKeyboard.current !== null && (animatedNumber.setValue(sizeBeforeKeyboard.current, {
287
+ type: "timing",
288
+ duration: 250
289
+ }), sizeBeforeKeyboard.current = null);
290
+ });
291
+ return function () {
292
+ keyboardDidHideListener.remove(), keyboardShowListener.remove();
293
+ };
294
+ }
295
+ }, [moveOnKeyboardChange, positions, position, isHidden]);
296
+ var [opacity, setOpacity] = import_react.default.useState(open ? 1 : 0);
297
+ open && opacity === 0 && setOpacity(1), import_react.default.useEffect(function () {
298
+ if (!open) {
299
+ var tm = setTimeout(function () {
300
+ setOpacity(0);
301
+ }, 400);
302
+ return function () {
303
+ clearTimeout(tm);
304
+ };
305
+ }
306
+ }, [open]);
307
+ var forcedContentHeight = hasFit ? void 0 : snapPointsMode === "percent" ? `${maxSnapPoint}${import_constants.isWeb ? "dvh" : "%"}` : maxSnapPoint,
308
+ setHasScrollView = import_react.default.useCallback(function (val) {
309
+ hasScrollView.current = val;
310
+ }, []),
311
+ contents = /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_core.LayoutMeasurementController, {
312
+ disable: !open,
313
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_contexts.ParentSheetContext.Provider, {
314
+ value: nextParentContext,
315
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_SheetContext.SheetProvider, {
316
+ ...providerProps,
317
+ setHasScrollView,
318
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_animate_presence.AnimatePresence, {
319
+ custom: {
320
+ open
321
+ },
322
+ children: shouldHideParentSheet || !open ? null : overlayComponent
323
+ }), snapPointsMode !== "percent" && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react_native.View, {
324
+ style: {
325
+ opacity: 0,
326
+ position: "absolute",
327
+ top: 0,
328
+ left: 0,
329
+ right: 0,
330
+ bottom: 0,
331
+ pointerEvents: "none"
332
+ },
333
+ onLayout: handleMaxContentViewLayout
334
+ }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(AnimatedView, {
335
+ ref,
336
+ ...panResponder?.panHandlers,
337
+ onLayout: handleAnimationViewLayout,
338
+ // @ts-ignore for CSS driver this is necessary to attach the transition
339
+ // also motion driver at least though i suspect all drivers?
340
+ animation: isDragging || disableAnimation ? null : animation,
341
+ // @ts-ignore
342
+ disableClassName: !0,
343
+ style: [{
278
344
  position: "absolute",
279
345
  zIndex,
280
346
  width: "100%",
281
347
  height: forcedContentHeight,
282
348
  minHeight: forcedContentHeight,
283
349
  opacity: shouldHideParentSheet ? 0 : opacity,
284
- ...(shouldHideParentSheet || !open) && {
350
+ ...((shouldHideParentSheet || !open) && {
285
351
  pointerEvents: "none"
286
- }
287
- },
288
- animatedStyle
289
- ],
290
- children: (
291
- /* <AdaptProvider>{props.children}</AdaptProvider> */
292
- props.children
293
- )
352
+ })
353
+ }, animatedStyle],
354
+ children: (/* <AdaptProvider>{props.children}</AdaptProvider> */
355
+ props.children)
356
+ })]
294
357
  })
295
- ]
296
- })
297
- })
298
- });
299
- if (!import_portal.USE_NATIVE_PORTAL) {
300
- var adaptContext = (0, import_adapt.useAdaptContext)();
301
- contents = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_adapt.ProvideAdaptContext, {
302
- ...adaptContext,
303
- children: (
304
- /* @ts-ignore */
305
- contents
306
- )
307
- });
308
- }
309
- var shouldMountChildren = unmountChildrenWhenHidden ? !!opacity : !0;
310
- if (modal) {
311
- var modalContents = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_portal.Portal, {
312
- stackZIndex: zIndex,
313
- ...portalProps,
314
- children: shouldMountChildren && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ContainerComponent, {
315
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_core.Theme, {
316
- contain: !0,
317
- forceClassName: !0,
318
- name: themeName,
319
- children: contents
320
358
  })
321
- })
322
- });
323
- return import_constants.isWeb ? modalContents : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_contexts.SheetInsideSheetContext.Provider, {
324
- value: onInnerSheet,
325
- children: modalContents
326
- });
327
- }
328
- return contents;
329
- });
359
+ });
360
+ if (!import_portal.USE_NATIVE_PORTAL) {
361
+ var adaptContext = (0, import_adapt.useAdaptContext)();
362
+ contents = /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_adapt.ProvideAdaptContext, {
363
+ ...adaptContext,
364
+ children: (/* @ts-ignore */
365
+ contents)
366
+ });
367
+ }
368
+ var shouldMountChildren = unmountChildrenWhenHidden ? !!opacity : !0;
369
+ if (modal) {
370
+ var modalContents = /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_portal.Portal, {
371
+ stackZIndex: zIndex,
372
+ ...portalProps,
373
+ children: shouldMountChildren && /* @__PURE__ */(0, import_jsx_runtime.jsx)(ContainerComponent, {
374
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_core.Theme, {
375
+ contain: !0,
376
+ forceClassName: !0,
377
+ name: themeName,
378
+ children: contents
379
+ })
380
+ })
381
+ });
382
+ return import_constants.isWeb ? modalContents : /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_contexts.SheetInsideSheetContext.Provider, {
383
+ value: onInnerSheet,
384
+ children: modalContents
385
+ });
386
+ }
387
+ return contents;
388
+ });
330
389
  function getYPositions(mode, point, screenSize, frameSize) {
331
390
  if (!screenSize || !frameSize) return 0;
332
391
  if (mode === "mixed") {
333
- if (typeof point == "number")
334
- return screenSize - Math.min(screenSize, Math.max(0, point));
335
- if (point === "fit")
336
- return screenSize - Math.min(screenSize, frameSize);
392
+ if (typeof point == "number") return screenSize - Math.min(screenSize, Math.max(0, point));
393
+ if (point === "fit") return screenSize - Math.min(screenSize, frameSize);
337
394
  if (point.endsWith("%")) {
338
395
  var pct = Math.min(100, Math.max(0, Number(point.slice(0, -1)))) / 100;
339
- if (Number.isNaN(pct))
340
- return console.warn("Invalid snapPoint percentage string"), 0;
396
+ if (Number.isNaN(pct)) return console.warn("Invalid snapPoint percentage string"), 0;
341
397
  var next = Math.round(screenSize - pct * screenSize);
342
398
  return next;
343
399
  }
344
400
  return console.warn("Invalid snapPoint unknown value"), 0;
345
401
  }
346
- if (mode === "fit")
347
- return point === 0 ? screenSize : screenSize - Math.min(screenSize, frameSize);
348
- if (mode === "constant" && typeof point == "number")
349
- return screenSize - Math.min(screenSize, Math.max(0, point));
402
+ if (mode === "fit") return point === 0 ? screenSize : screenSize - Math.min(screenSize, frameSize);
403
+ if (mode === "constant" && typeof point == "number") return screenSize - Math.min(screenSize, Math.max(0, point));
350
404
  var pct1 = Math.min(100, Math.max(0, Number(point))) / 100;
351
405
  return Number.isNaN(pct1) ? (console.warn("Invalid snapPoint percentage"), 0) : Math.round(screenSize - pct1 * screenSize);
352
406
  }
353
- // Annotate the CommonJS export names for ESM import in node:
354
- 0 && (module.exports = {
355
- SheetImplementationCustom
356
- });
357
- //# sourceMappingURL=SheetImplementationCustom.js.map
407
+ //# sourceMappingURL=SheetImplementationCustom.native.js.map