@swmansion/react-native-bottom-sheet 0.7.0-next.6 → 0.7.0-next.8
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/ReactNativeBottomSheet.podspec +4 -3
- package/android/src/main/java/com/swmansion/reactnativebottomsheet/BottomSheetView.kt +19 -0
- package/android/src/main/java/com/swmansion/reactnativebottomsheet/BottomSheetViewManager.kt +11 -0
- package/android/src/main/jni/CMakeLists.txt +78 -0
- package/common/cpp/react/renderer/components/ReactNativeBottomSheetSpec/BottomSheetViewShadowNode.cpp +28 -0
- package/common/cpp/react/renderer/components/ReactNativeBottomSheetSpec/BottomSheetViewState.h +36 -0
- package/common/cpp/react/renderer/components/ReactNativeBottomSheetSpec/ComponentDescriptors.h +19 -0
- package/common/cpp/react/renderer/components/ReactNativeBottomSheetSpec/ShadowNodes.h +25 -0
- package/lib/module/BottomSheet.js +1 -10
- package/lib/module/BottomSheet.js.map +1 -1
- package/lib/typescript/src/BottomSheet.d.ts.map +1 -1
- package/package.json +2 -1
- package/react-native.config.js +11 -1
- package/src/BottomSheet.tsx +1 -10
|
@@ -13,11 +13,12 @@ Pod::Spec.new do |s|
|
|
|
13
13
|
s.platforms = { :ios => min_ios_version_supported }
|
|
14
14
|
s.source = { :git => "https://github.com/software-mansion-labs/react-native-bottom-sheet.git", :tag => "#{s.version}" }
|
|
15
15
|
|
|
16
|
-
s.source_files = "ios/**/*.{h,m,mm,cpp,swift}"
|
|
17
|
-
s.private_header_files = "ios/**/*.h"
|
|
16
|
+
s.source_files = ["ios/**/*.{h,m,mm,cpp,swift}", "common/**/*.{h,cpp}"]
|
|
17
|
+
s.private_header_files = ["ios/**/*.h", "common/**/*.h"]
|
|
18
18
|
s.swift_version = "5.0"
|
|
19
19
|
s.pod_target_xcconfig = {
|
|
20
|
-
"DEFINES_MODULE" => "YES"
|
|
20
|
+
"DEFINES_MODULE" => "YES",
|
|
21
|
+
"HEADER_SEARCH_PATHS" => "\"$(PODS_TARGET_SRCROOT)/common/cpp\""
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
install_modules_dependencies(s)
|
|
@@ -11,7 +11,9 @@ import android.widget.FrameLayout
|
|
|
11
11
|
import androidx.dynamicanimation.animation.DynamicAnimation
|
|
12
12
|
import androidx.dynamicanimation.animation.SpringAnimation
|
|
13
13
|
import androidx.dynamicanimation.animation.SpringForce
|
|
14
|
+
import com.facebook.react.bridge.Arguments
|
|
14
15
|
import com.facebook.react.uimanager.PointerEvents
|
|
16
|
+
import com.facebook.react.uimanager.StateWrapper
|
|
15
17
|
import com.facebook.react.views.view.ReactViewGroup
|
|
16
18
|
import kotlin.math.abs
|
|
17
19
|
|
|
@@ -27,6 +29,7 @@ class BottomSheetView(context: Context) : ReactViewGroup(context) {
|
|
|
27
29
|
// MARK: - Listener
|
|
28
30
|
|
|
29
31
|
var listener: BottomSheetViewListener? = null
|
|
32
|
+
var stateWrapper: StateWrapper? = null
|
|
30
33
|
|
|
31
34
|
// MARK: - State
|
|
32
35
|
|
|
@@ -130,6 +133,7 @@ class BottomSheetView(context: Context) : ReactViewGroup(context) {
|
|
|
130
133
|
|
|
131
134
|
if (activeAnimation != null || isPanning) return
|
|
132
135
|
sheetContainer.translationY = translationY(targetIndex)
|
|
136
|
+
updateShadowState(sheetContainer.translationY)
|
|
133
137
|
}
|
|
134
138
|
|
|
135
139
|
private fun layoutSheetChildren() {
|
|
@@ -208,6 +212,19 @@ class BottomSheetView(context: Context) : ReactViewGroup(context) {
|
|
|
208
212
|
val maxHeight = detentSpecs.lastOrNull()?.height ?: height.toFloat()
|
|
209
213
|
val ty = sheetContainer.translationY
|
|
210
214
|
listener?.onPositionChange(((maxHeight - ty) / density).toDouble())
|
|
215
|
+
updateShadowState(ty)
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
private var lastShadowOffsetY = Float.NaN
|
|
219
|
+
|
|
220
|
+
private fun updateShadowState(translationY: Float) {
|
|
221
|
+
val offsetY = (translationY / density).toDouble()
|
|
222
|
+
if (offsetY.toFloat() == lastShadowOffsetY) return
|
|
223
|
+
lastShadowOffsetY = offsetY.toFloat()
|
|
224
|
+
val sw = stateWrapper ?: return
|
|
225
|
+
val map = Arguments.createMap()
|
|
226
|
+
map.putDouble("contentOffsetY", offsetY)
|
|
227
|
+
sw.updateState(map)
|
|
211
228
|
}
|
|
212
229
|
|
|
213
230
|
// MARK: - Choreographer (position tracking during animation)
|
|
@@ -428,5 +445,7 @@ class BottomSheetView(context: Context) : ReactViewGroup(context) {
|
|
|
428
445
|
activePointerId = MotionEvent.INVALID_POINTER_ID
|
|
429
446
|
sheetContainer.translationY = 0f
|
|
430
447
|
sheetContainer.removeAllViews()
|
|
448
|
+
stateWrapper = null
|
|
449
|
+
lastShadowOffsetY = Float.NaN
|
|
431
450
|
}
|
|
432
451
|
}
|
package/android/src/main/java/com/swmansion/reactnativebottomsheet/BottomSheetViewManager.kt
CHANGED
|
@@ -3,6 +3,8 @@ package com.swmansion.reactnativebottomsheet
|
|
|
3
3
|
import android.view.View
|
|
4
4
|
import com.facebook.react.bridge.ReadableArray
|
|
5
5
|
import com.facebook.react.module.annotations.ReactModule
|
|
6
|
+
import com.facebook.react.uimanager.ReactStylesDiffMap
|
|
7
|
+
import com.facebook.react.uimanager.StateWrapper
|
|
6
8
|
import com.facebook.react.uimanager.ThemedReactContext
|
|
7
9
|
import com.facebook.react.uimanager.ViewGroupManager
|
|
8
10
|
import com.facebook.react.uimanager.ViewManagerDelegate
|
|
@@ -63,6 +65,15 @@ class BottomSheetViewManager :
|
|
|
63
65
|
parent.removeSheetChildAt(index)
|
|
64
66
|
}
|
|
65
67
|
|
|
68
|
+
override fun updateState(
|
|
69
|
+
view: BottomSheetView,
|
|
70
|
+
props: ReactStylesDiffMap,
|
|
71
|
+
stateWrapper: StateWrapper?,
|
|
72
|
+
): Any? {
|
|
73
|
+
view.stateWrapper = stateWrapper
|
|
74
|
+
return null
|
|
75
|
+
}
|
|
76
|
+
|
|
66
77
|
override fun needsCustomLayoutForChildren(): Boolean = true
|
|
67
78
|
|
|
68
79
|
override fun getExportedCustomDirectEventTypeConstants(): Map<String, Any> {
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
cmake_minimum_required(VERSION 3.13)
|
|
2
|
+
set(CMAKE_VERBOSE_MAKEFILE ON)
|
|
3
|
+
|
|
4
|
+
set(LIB_LITERAL ReactNativeBottomSheetSpec)
|
|
5
|
+
set(LIB_TARGET_NAME react_codegen_${LIB_LITERAL})
|
|
6
|
+
|
|
7
|
+
set(LIB_ANDROID_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../..)
|
|
8
|
+
set(LIB_COMMON_DIR ${LIB_ANDROID_DIR}/../common/cpp)
|
|
9
|
+
set(LIB_ANDROID_GENERATED_JNI_DIR ${LIB_ANDROID_DIR}/build/generated/source/codegen/jni)
|
|
10
|
+
set(LIB_ANDROID_GENERATED_COMPONENTS_DIR ${LIB_ANDROID_GENERATED_JNI_DIR}/react/renderer/components/${LIB_LITERAL})
|
|
11
|
+
|
|
12
|
+
file(GLOB LIB_CUSTOM_SRCS CONFIGURE_DEPENDS ${LIB_COMMON_DIR}/react/renderer/components/${LIB_LITERAL}/*.cpp)
|
|
13
|
+
file(GLOB LIB_CODEGEN_SRCS CONFIGURE_DEPENDS ${LIB_ANDROID_GENERATED_JNI_DIR}/*.cpp ${LIB_ANDROID_GENERATED_COMPONENTS_DIR}/*.cpp)
|
|
14
|
+
|
|
15
|
+
add_library(
|
|
16
|
+
${LIB_TARGET_NAME}
|
|
17
|
+
SHARED
|
|
18
|
+
${LIB_CUSTOM_SRCS}
|
|
19
|
+
${LIB_CODEGEN_SRCS}
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
# Custom headers must come before generated headers so that our ShadowNodes.h
|
|
23
|
+
# and ComponentDescriptors.h take precedence over the codegen type aliases.
|
|
24
|
+
target_include_directories(
|
|
25
|
+
${LIB_TARGET_NAME}
|
|
26
|
+
PUBLIC
|
|
27
|
+
${LIB_COMMON_DIR}
|
|
28
|
+
${LIB_ANDROID_GENERATED_JNI_DIR}
|
|
29
|
+
${LIB_ANDROID_GENERATED_COMPONENTS_DIR}
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
if (REACTNATIVE_MERGED_SO)
|
|
33
|
+
target_link_libraries(
|
|
34
|
+
${LIB_TARGET_NAME}
|
|
35
|
+
fbjni
|
|
36
|
+
jsi
|
|
37
|
+
reactnative
|
|
38
|
+
)
|
|
39
|
+
else()
|
|
40
|
+
target_link_libraries(
|
|
41
|
+
${LIB_TARGET_NAME}
|
|
42
|
+
fbjni
|
|
43
|
+
folly_runtime
|
|
44
|
+
glog
|
|
45
|
+
jsi
|
|
46
|
+
react_codegen_rncore
|
|
47
|
+
react_debug
|
|
48
|
+
react_nativemodule_core
|
|
49
|
+
react_render_core
|
|
50
|
+
react_render_debug
|
|
51
|
+
react_render_graphics
|
|
52
|
+
react_render_mapbuffer
|
|
53
|
+
react_render_componentregistry
|
|
54
|
+
react_utils
|
|
55
|
+
rrc_view
|
|
56
|
+
turbomodulejsijni
|
|
57
|
+
yoga
|
|
58
|
+
)
|
|
59
|
+
endif()
|
|
60
|
+
|
|
61
|
+
target_include_directories(
|
|
62
|
+
${CMAKE_PROJECT_NAME}
|
|
63
|
+
PUBLIC
|
|
64
|
+
${CMAKE_CURRENT_SOURCE_DIR}
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 80)
|
|
68
|
+
target_compile_reactnative_options(${LIB_TARGET_NAME} PUBLIC)
|
|
69
|
+
else()
|
|
70
|
+
target_compile_options(
|
|
71
|
+
${LIB_TARGET_NAME}
|
|
72
|
+
PRIVATE
|
|
73
|
+
-fexceptions
|
|
74
|
+
-frtti
|
|
75
|
+
-std=c++20
|
|
76
|
+
-Wall
|
|
77
|
+
)
|
|
78
|
+
endif()
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#include "ShadowNodes.h"
|
|
2
|
+
|
|
3
|
+
#include <yoga/Yoga.h>
|
|
4
|
+
|
|
5
|
+
namespace facebook::react {
|
|
6
|
+
|
|
7
|
+
void BottomSheetViewShadowNode::adjustLayoutWithState() {
|
|
8
|
+
#ifdef ANDROID
|
|
9
|
+
ensureUnsealed();
|
|
10
|
+
|
|
11
|
+
auto state =
|
|
12
|
+
std::static_pointer_cast<const BottomSheetViewShadowNode::ConcreteState>(
|
|
13
|
+
getState());
|
|
14
|
+
auto stateData = state->getData();
|
|
15
|
+
|
|
16
|
+
auto adjustedStyle = getConcreteProps().yogaStyle;
|
|
17
|
+
auto newPaddingTop =
|
|
18
|
+
yoga::Style::Length::points(stateData.contentOffsetY);
|
|
19
|
+
|
|
20
|
+
if (adjustedStyle.padding(yoga::Edge::Top) != newPaddingTop) {
|
|
21
|
+
adjustedStyle.setPadding(yoga::Edge::Top, newPaddingTop);
|
|
22
|
+
yogaNode_.setStyle(adjustedStyle);
|
|
23
|
+
yogaNode_.setDirty(true);
|
|
24
|
+
}
|
|
25
|
+
#endif
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
} // namespace facebook::react
|
package/common/cpp/react/renderer/components/ReactNativeBottomSheetSpec/BottomSheetViewState.h
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#ifdef ANDROID
|
|
4
|
+
#include <folly/dynamic.h>
|
|
5
|
+
#include <react/renderer/mapbuffer/MapBuffer.h>
|
|
6
|
+
#include <react/renderer/mapbuffer/MapBufferBuilder.h>
|
|
7
|
+
#endif
|
|
8
|
+
|
|
9
|
+
namespace facebook::react {
|
|
10
|
+
|
|
11
|
+
class BottomSheetViewState final {
|
|
12
|
+
public:
|
|
13
|
+
BottomSheetViewState() = default;
|
|
14
|
+
|
|
15
|
+
#ifdef ANDROID
|
|
16
|
+
BottomSheetViewState(
|
|
17
|
+
const BottomSheetViewState& previousState,
|
|
18
|
+
folly::dynamic data)
|
|
19
|
+
: contentOffsetY(
|
|
20
|
+
static_cast<float>(data["contentOffsetY"].getDouble())) {}
|
|
21
|
+
#endif
|
|
22
|
+
|
|
23
|
+
float contentOffsetY{0};
|
|
24
|
+
|
|
25
|
+
#ifdef ANDROID
|
|
26
|
+
folly::dynamic getDynamic() const {
|
|
27
|
+
return folly::dynamic::object("contentOffsetY", contentOffsetY);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
MapBuffer getMapBuffer() const {
|
|
31
|
+
return MapBufferBuilder::EMPTY();
|
|
32
|
+
}
|
|
33
|
+
#endif
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
} // namespace facebook::react
|
package/common/cpp/react/renderer/components/ReactNativeBottomSheetSpec/ComponentDescriptors.h
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <react/renderer/components/ReactNativeBottomSheetSpec/ShadowNodes.h>
|
|
4
|
+
#include <react/renderer/core/ConcreteComponentDescriptor.h>
|
|
5
|
+
|
|
6
|
+
namespace facebook::react {
|
|
7
|
+
|
|
8
|
+
class BottomSheetViewComponentDescriptor final
|
|
9
|
+
: public ConcreteComponentDescriptor<BottomSheetViewShadowNode> {
|
|
10
|
+
using ConcreteComponentDescriptor::ConcreteComponentDescriptor;
|
|
11
|
+
|
|
12
|
+
void adopt(ShadowNode& shadowNode) const override {
|
|
13
|
+
auto& node = static_cast<BottomSheetViewShadowNode&>(shadowNode);
|
|
14
|
+
node.adjustLayoutWithState();
|
|
15
|
+
ConcreteComponentDescriptor::adopt(shadowNode);
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
} // namespace facebook::react
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <jsi/jsi.h>
|
|
4
|
+
#include <react/renderer/components/ReactNativeBottomSheetSpec/BottomSheetViewState.h>
|
|
5
|
+
#include <react/renderer/components/ReactNativeBottomSheetSpec/EventEmitters.h>
|
|
6
|
+
#include <react/renderer/components/ReactNativeBottomSheetSpec/Props.h>
|
|
7
|
+
#include <react/renderer/components/view/ConcreteViewShadowNode.h>
|
|
8
|
+
|
|
9
|
+
namespace facebook::react {
|
|
10
|
+
|
|
11
|
+
JSI_EXPORT extern const char BottomSheetViewComponentName[];
|
|
12
|
+
|
|
13
|
+
class JSI_EXPORT BottomSheetViewShadowNode final
|
|
14
|
+
: public ConcreteViewShadowNode<
|
|
15
|
+
BottomSheetViewComponentName,
|
|
16
|
+
BottomSheetViewProps,
|
|
17
|
+
BottomSheetViewEventEmitter,
|
|
18
|
+
BottomSheetViewState> {
|
|
19
|
+
using ConcreteViewShadowNode::ConcreteViewShadowNode;
|
|
20
|
+
|
|
21
|
+
public:
|
|
22
|
+
void adjustLayoutWithState();
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
} // namespace facebook::react
|
|
@@ -98,14 +98,6 @@ export const BottomSheet = ({
|
|
|
98
98
|
progress: scrimProgress,
|
|
99
99
|
color: scrimColor
|
|
100
100
|
}) : null;
|
|
101
|
-
|
|
102
|
-
// On Android Fabric, getBoundingClientRect() is computed from the Yoga
|
|
103
|
-
// shadow tree, which doesn't know about the native sheetContainer's layout
|
|
104
|
-
// offset and translationY. This causes Pressability's bounds check to fail
|
|
105
|
-
// (instant pressOut). Setting `top` on the wrapper updates the shadow tree
|
|
106
|
-
// to match the actual visual position without affecting native layout
|
|
107
|
-
// (needsCustomLayoutForChildren is true on the native side).
|
|
108
|
-
const contentOffsetY = maxHeight - (resolvedDetents[clampedIndex]?.height ?? maxHeight);
|
|
109
101
|
const sheet = /*#__PURE__*/_jsxs(Animated.View, {
|
|
110
102
|
style: StyleSheet.absoluteFill,
|
|
111
103
|
pointerEvents: modal ? isCollapsed ? 'none' : 'auto' : 'box-none',
|
|
@@ -133,8 +125,7 @@ export const BottomSheet = ({
|
|
|
133
125
|
children: /*#__PURE__*/_jsxs(View, {
|
|
134
126
|
collapsable: false,
|
|
135
127
|
style: {
|
|
136
|
-
flex: 1
|
|
137
|
-
top: contentOffsetY
|
|
128
|
+
flex: 1
|
|
138
129
|
},
|
|
139
130
|
pointerEvents: "box-none",
|
|
140
131
|
children: [children, /*#__PURE__*/_jsx(View, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useRef","useState","Animated","Pressable","StyleSheet","View","useWindowDimensions","useSafeAreaInsets","BottomSheetNativeComponent","Portal","resolveDetent","jsx","_jsx","jsxs","_jsxs","programmatic","DefaultScrim","progress","color","style","absoluteFill","flex","backgroundColor","opacity","BottomSheet","children","detents","index","animateIn","onIndexChange","onPositionChange","modal","scrimColor","height","screenHeight","insets","maxHeight","top","contentHeight","setContentHeight","currentPositionRef","scrimProgress","Value","current","resolvedDetents","map","detent","value","Math","max","min","isDetentProgrammatic","handleSentinelLayout","event","nativeEvent","layout","y","clampedIndex","length","isCollapsed","sheetPointerEvents","scrimPressEnabledRef","previousIsCollapsedRef","firstNonzeroDetent","find","setValue","undefined","frame","requestAnimationFrame","cancelAnimationFrame","handleIndexChange","handlePositionChange","position","closedIndex","findIndex","handleScrimPress","scrimElement","
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","useState","Animated","Pressable","StyleSheet","View","useWindowDimensions","useSafeAreaInsets","BottomSheetNativeComponent","Portal","resolveDetent","jsx","_jsx","jsxs","_jsxs","programmatic","DefaultScrim","progress","color","style","absoluteFill","flex","backgroundColor","opacity","BottomSheet","children","detents","index","animateIn","onIndexChange","onPositionChange","modal","scrimColor","height","screenHeight","insets","maxHeight","top","contentHeight","setContentHeight","currentPositionRef","scrimProgress","Value","current","resolvedDetents","map","detent","value","Math","max","min","isDetentProgrammatic","handleSentinelLayout","event","nativeEvent","layout","y","clampedIndex","length","isCollapsed","sheetPointerEvents","scrimPressEnabledRef","previousIsCollapsedRef","firstNonzeroDetent","find","setValue","undefined","frame","requestAnimationFrame","cancelAnimationFrame","handleIndexChange","handlePositionChange","position","closedIndex","findIndex","handleScrimPress","scrimElement","sheet","pointerEvents","onPress","left","right","bottom","collapsable","onLayout"],"sourceRoot":"../../src","sources":["BottomSheet.tsx"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAwB,OAAO;AAEnE,SACEC,QAAQ,EACRC,SAAS,EACTC,UAAU,EACVC,IAAI,EACJC,mBAAmB,QACd,cAAc;AACrB,SAASC,iBAAiB,QAAQ,gCAAgC;AAElE,OAAOC,0BAA0B,MAAM,8BAA8B;AACrE,SAASC,MAAM,QAAQ,0BAAuB;AAC9C,SAAsBC,aAAa,QAAQ,uBAAoB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAEhE,SAASC,YAAY,QAAQ,uBAAoB;AAEjD,MAAMC,YAAY,GAAGA,CAAC;EACpBC,QAAQ;EACRC;AAIF,CAAC,KAAK;EACJ,oBACEN,IAAA,CAACV,QAAQ,CAACG,IAAI;IACZc,KAAK,EAAE,CACLf,UAAU,CAACgB,YAAY,EACvB;MAAEC,IAAI,EAAE,CAAC;MAAEC,eAAe,EAAEJ,KAAK;MAAEK,OAAO,EAAEN;IAAS,CAAC;EACtD,CACH,CAAC;AAEN,CAAC;AAcD,OAAO,MAAMO,WAAW,GAAGA,CAAC;EAC1BC,QAAQ;EACRN,KAAK;EACLO,OAAO,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC;EACpBC,KAAK;EACLC,SAAS,GAAG,IAAI;EAChBC,aAAa;EACbC,gBAAgB;EAChBC,KAAK,GAAG,KAAK;EACbC,UAAU,GAAG;AACG,CAAC,KAAK;EACtB,MAAM;IAAEC,MAAM,EAAEC;EAAa,CAAC,GAAG5B,mBAAmB,CAAC,CAAC;EACtD,MAAM6B,MAAM,GAAG5B,iBAAiB,CAAC,CAAC;EAClC,MAAM6B,SAAS,GAAGF,YAAY,GAAGC,MAAM,CAACE,GAAG;EAC3C,MAAM,CAACC,aAAa,EAAEC,gBAAgB,CAAC,GAAGtC,QAAQ,CAAC,CAAC,CAAC;EACrD,MAAMuC,kBAAkB,GAAGxC,MAAM,CAAC,CAAC,CAAC;EACpC,MAAMyC,aAAa,GAAGzC,MAAM,CAAC,IAAIE,QAAQ,CAACwC,KAAK,CAAC,CAAC,CAAC,CAAC,CAACC,OAAO;EAE3D,MAAMC,eAAe,GAAGlB,OAAO,CAACmB,GAAG,CAAEC,MAAM,IAAK;IAC9C,MAAMC,KAAK,GAAGrC,aAAa,CAACoC,MAAM,EAAER,aAAa,EAAEF,SAAS,CAAC;IAC7D,OAAO;MACLH,MAAM,EAAEe,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,GAAG,CAACH,KAAK,EAAEX,SAAS,CAAC,CAAC;MAC/CrB,YAAY,EAAEoC,oBAAoB,CAACL,MAAM;IAC3C,CAAC;EACH,CAAC,CAAC;EAEF,MAAMM,oBAAoB,GAAIC,KAAwB,IAAK;IACzDd,gBAAgB,CAACc,KAAK,CAACC,WAAW,CAACC,MAAM,CAACC,CAAC,CAAC;EAC9C,CAAC;EAED,MAAMC,YAAY,GAAGT,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,GAAG,CAACvB,KAAK,EAAEiB,eAAe,CAACc,MAAM,GAAG,CAAC,CAAC,CAAC;EAC7E,MAAMC,WAAW,GAAG,CAACf,eAAe,CAACa,YAAY,CAAC,EAAExB,MAAM,IAAI,CAAC,MAAM,CAAC;EACtE,MAAM2B,kBAAkB,GAAGD,WAAW,GAAG,MAAM,GAAG,UAAU;EAC5D,MAAME,oBAAoB,GAAG7D,MAAM,CAAC,CAAC+B,KAAK,IAAI4B,WAAW,CAAC;EAC1D,MAAMG,sBAAsB,GAAG9D,MAAM,CAAC2D,WAAW,CAAC;EAClD,MAAMI,kBAAkB,GACtBnB,eAAe,CAACoB,IAAI,CAAElB,MAAM,IAAKA,MAAM,CAACb,MAAM,GAAG,CAAC,CAAC,EAAEA,MAAM,IAAI,CAAC;EAElElC,SAAS,CAAC,MAAM;IACd,MAAMkB,QAAQ,GACZ8C,kBAAkB,IAAI,CAAC,GACnB,CAAC,GACDf,IAAI,CAACE,GAAG,CACN,CAAC,EACDF,IAAI,CAACC,GAAG,CAAC,CAAC,EAAET,kBAAkB,CAACG,OAAO,GAAGoB,kBAAkB,CAC7D,CAAC;IACPtB,aAAa,CAACwB,QAAQ,CAAChD,QAAQ,CAAC;EAClC,CAAC,EAAE,CAAC8C,kBAAkB,EAAEtB,aAAa,CAAC,CAAC;EAEvC1C,SAAS,CAAC,MAAM;IACd,IAAI,CAACgC,KAAK,EAAE;MACV8B,oBAAoB,CAAClB,OAAO,GAAG,IAAI;MACnCmB,sBAAsB,CAACnB,OAAO,GAAGgB,WAAW;MAC5C,OAAOO,SAAS;IAClB;IAEA,IAAIJ,sBAAsB,CAACnB,OAAO,IAAI,CAACgB,WAAW,EAAE;MAClDE,oBAAoB,CAAClB,OAAO,GAAG,KAAK;MACpCmB,sBAAsB,CAACnB,OAAO,GAAGgB,WAAW;MAE5C,MAAMQ,KAAK,GAAGC,qBAAqB,CAAC,MAAM;QACxCP,oBAAoB,CAAClB,OAAO,GAAG,IAAI;MACrC,CAAC,CAAC;MAEF,OAAO,MAAM0B,oBAAoB,CAACF,KAAK,CAAC;IAC1C;IAEAN,oBAAoB,CAAClB,OAAO,GAAG,CAACgB,WAAW;IAC3CG,sBAAsB,CAACnB,OAAO,GAAGgB,WAAW;IAC5C,OAAOO,SAAS;EAClB,CAAC,EAAE,CAACP,WAAW,EAAE5B,KAAK,CAAC,CAAC;EAExB,MAAMuC,iBAAiB,GAAIjB,KAAyC,IAAK;IACvExB,aAAa,GAAGwB,KAAK,CAACC,WAAW,CAAC3B,KAAK,CAAC;EAC1C,CAAC;EAED,MAAM4C,oBAAoB,GAAIlB,KAE7B,IAAK;IACJ,MAAMpB,MAAM,GAAGoB,KAAK,CAACC,WAAW,CAACkB,QAAQ;IACzChC,kBAAkB,CAACG,OAAO,GAAGV,MAAM;IACnC,MAAMhB,QAAQ,GACZ8C,kBAAkB,IAAI,CAAC,GACnB,CAAC,GACDf,IAAI,CAACE,GAAG,CAAC,CAAC,EAAEF,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEhB,MAAM,GAAG8B,kBAAkB,CAAC,CAAC;IAC3DtB,aAAa,CAACwB,QAAQ,CAAChD,QAAQ,CAAC;IAChCa,gBAAgB,GAAGG,MAAM,CAAC;EAC5B,CAAC;EAED,MAAMwC,WAAW,GAAG7B,eAAe,CAAC8B,SAAS,CAC1C5B,MAAM,IAAKA,MAAM,CAACb,MAAM,KAAK,CAChC,CAAC;EACD,MAAM0C,gBAAgB,GAAGA,CAAA,KAAM;IAC7B,IACEF,WAAW,KAAK,CAAC,CAAC,IAClBhB,YAAY,KAAKgB,WAAW,IAC5B,CAACZ,oBAAoB,CAAClB,OAAO,EAC7B;MACA;IACF;IAEAd,aAAa,GAAG4C,WAAW,CAAC;EAC9B,CAAC;EAED,MAAMG,YAAY,GAAG7C,KAAK,gBACxBnB,IAAA,CAACI,YAAY;IAACC,QAAQ,EAAEwB,aAAc;IAACvB,KAAK,EAAEc;EAAW,CAAE,CAAC,GAC1D,IAAI;EAER,MAAM6C,KAAK,gBACT/D,KAAA,CAACZ,QAAQ,CAACG,IAAI;IACZc,KAAK,EAAEf,UAAU,CAACgB,YAAa;IAC/B0D,aAAa,EAAE/C,KAAK,GAAI4B,WAAW,GAAG,MAAM,GAAG,MAAM,GAAI,UAAW;IAAAlC,QAAA,GAEnEM,KAAK,IAAI6C,YAAY,KAAK,IAAI,gBAC7BhE,IAAA,CAACT,SAAS;MAACgB,KAAK,EAAEf,UAAU,CAACgB,YAAa;MAAC2D,OAAO,EAAEJ,gBAAiB;MAAAlD,QAAA,EAClEmD;IAAY,CACJ,CAAC,GACV,IAAI,eACRhE,IAAA,CAACP,IAAI;MAACyE,aAAa,EAAC,UAAU;MAAC3D,KAAK,EAAEf,UAAU,CAACgB,YAAa;MAAAK,QAAA,eAC5Db,IAAA,CAACJ,0BAA0B;QACzBsE,aAAa,EAAElB,kBAAmB;QAClCzC,KAAK,EAAE,CACL;UACEqD,QAAQ,EAAE,UAAU;UACpBQ,IAAI,EAAE,CAAC;UACPC,KAAK,EAAE,CAAC;UACRC,MAAM,EAAE,CAAC;UACTjD,MAAM,EAAEG;QACV,CAAC,EACDjB,KAAK,CACL;QACFO,OAAO,EAAEkB,eAAgB;QACzBjB,KAAK,EAAEA,KAAM;QACbC,SAAS,EAAEA,SAAU;QACrBC,aAAa,EAAEyC,iBAAkB;QACjCxC,gBAAgB,EAAEyC,oBAAqB;QAAA9C,QAAA,eAEvCX,KAAA,CAACT,IAAI;UACH8E,WAAW,EAAE,KAAM;UACnBhE,KAAK,EAAE;YAAEE,IAAI,EAAE;UAAE,CAAE;UACnByD,aAAa,EAAC,UAAU;UAAArD,QAAA,GAEvBA,QAAQ,eACTb,IAAA,CAACP,IAAI;YAAC+E,QAAQ,EAAEhC,oBAAqB;YAAC0B,aAAa,EAAC;UAAM,CAAE,CAAC;QAAA,CACzD;MAAC,CACmB;IAAC,CACzB,CAAC;EAAA,CACM,CAChB;EAED,IAAI/C,KAAK,EAAE;IACT,oBAAOnB,IAAA,CAACH,MAAM;MAAAgB,QAAA,EAAEoD;IAAK,CAAS,CAAC;EACjC;EAEA,OAAOA,KAAK;AACd,CAAC;AAED,SAAS1B,oBAAoBA,CAACL,MAAc,EAAW;EACrD,IAAI,OAAOA,MAAM,KAAK,QAAQ,IAAIA,MAAM,KAAK,IAAI,EAAE;IACjD,OAAOA,MAAM,CAAC/B,YAAY,KAAK,IAAI;EACrC;EACA,OAAO,KAAK;AACd","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BottomSheet.d.ts","sourceRoot":"","sources":["../../../src/BottomSheet.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACpE,OAAO,KAAK,EAAqB,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAY5E,OAAO,EAAE,KAAK,MAAM,EAAiB,MAAM,oBAAoB,CAAC;AAChE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAmBlD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,WAAW,GAAI,qGAUzB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"BottomSheet.d.ts","sourceRoot":"","sources":["../../../src/BottomSheet.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACpE,OAAO,KAAK,EAAqB,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAY5E,OAAO,EAAE,KAAK,MAAM,EAAiB,MAAM,oBAAoB,CAAC;AAChE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAmBlD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,WAAW,GAAI,qGAUzB,gBAAgB,4CAiJlB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@swmansion/react-native-bottom-sheet",
|
|
3
|
-
"version": "0.7.0-next.
|
|
3
|
+
"version": "0.7.0-next.8",
|
|
4
4
|
"description": "Provides bottom-sheet components for React Native.",
|
|
5
5
|
"main": "./lib/module/index.js",
|
|
6
6
|
"types": "./lib/typescript/src/index.d.ts",
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
"lib",
|
|
18
18
|
"android",
|
|
19
19
|
"ios",
|
|
20
|
+
"common",
|
|
20
21
|
"cpp",
|
|
21
22
|
"*.podspec",
|
|
22
23
|
"react-native.config.js",
|
package/react-native.config.js
CHANGED
|
@@ -1 +1,11 @@
|
|
|
1
|
-
module.exports = {
|
|
1
|
+
module.exports = {
|
|
2
|
+
dependency: {
|
|
3
|
+
platforms: {
|
|
4
|
+
android: {
|
|
5
|
+
libraryName: 'ReactNativeBottomSheetSpec',
|
|
6
|
+
componentDescriptors: ['BottomSheetViewComponentDescriptor'],
|
|
7
|
+
cmakeListsPath: 'src/main/jni/CMakeLists.txt',
|
|
8
|
+
},
|
|
9
|
+
},
|
|
10
|
+
},
|
|
11
|
+
};
|
package/src/BottomSheet.tsx
CHANGED
|
@@ -152,15 +152,6 @@ export const BottomSheet = ({
|
|
|
152
152
|
<DefaultScrim progress={scrimProgress} color={scrimColor} />
|
|
153
153
|
) : null;
|
|
154
154
|
|
|
155
|
-
// On Android Fabric, getBoundingClientRect() is computed from the Yoga
|
|
156
|
-
// shadow tree, which doesn't know about the native sheetContainer's layout
|
|
157
|
-
// offset and translationY. This causes Pressability's bounds check to fail
|
|
158
|
-
// (instant pressOut). Setting `top` on the wrapper updates the shadow tree
|
|
159
|
-
// to match the actual visual position without affecting native layout
|
|
160
|
-
// (needsCustomLayoutForChildren is true on the native side).
|
|
161
|
-
const contentOffsetY =
|
|
162
|
-
maxHeight - (resolvedDetents[clampedIndex]?.height ?? maxHeight);
|
|
163
|
-
|
|
164
155
|
const sheet = (
|
|
165
156
|
<Animated.View
|
|
166
157
|
style={StyleSheet.absoluteFill}
|
|
@@ -192,7 +183,7 @@ export const BottomSheet = ({
|
|
|
192
183
|
>
|
|
193
184
|
<View
|
|
194
185
|
collapsable={false}
|
|
195
|
-
style={{ flex: 1
|
|
186
|
+
style={{ flex: 1 }}
|
|
196
187
|
pointerEvents="box-none"
|
|
197
188
|
>
|
|
198
189
|
{children}
|