@sdcx/bottom-sheet 0.15.0 → 0.17.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2023 http://www.sdcx.tech
3
+ Copyright (c) 2025 listenzz@163.com
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -163,7 +163,7 @@ public class BottomSheet extends ReactViewGroup implements NestedScrollingParent
163
163
  }
164
164
 
165
165
  public void setState(BottomSheetState state) {
166
- if (state == this.state) {
166
+ if (this.state == state) {
167
167
  return;
168
168
  }
169
169
 
@@ -182,7 +182,7 @@ public class BottomSheet extends ReactViewGroup implements NestedScrollingParent
182
182
  View findScrollingChild(View view) {
183
183
  if (ViewCompat.isNestedScrollingEnabled(view)) {
184
184
  if (!view.canScrollHorizontally(1) && !view.canScrollHorizontally(-1) &&
185
- (view.canScrollVertically(-1) || view.canScrollVertically(1))) {
185
+ (view.canScrollVertically(-1) || view.canScrollVertically(1))) {
186
186
  return view;
187
187
  }
188
188
  }
@@ -255,7 +255,7 @@ public class BottomSheet extends ReactViewGroup implements NestedScrollingParent
255
255
  }
256
256
 
257
257
  ignoreEvents = activePointerId == MotionEvent.INVALID_POINTER_ID
258
- && !isPointInChildBounds(contentView, initialX, initialY);
258
+ && !isPointInChildBounds(contentView, initialX, initialY);
259
259
  break;
260
260
  default: // fall out
261
261
  }
@@ -269,12 +269,12 @@ public class BottomSheet extends ReactViewGroup implements NestedScrollingParent
269
269
  // happening over the scrolling content as nested scrolling logic handles that case.
270
270
  View scroll = nestedScrollingChildRef != null ? nestedScrollingChildRef.get() : null;
271
271
  return action == MotionEvent.ACTION_MOVE
272
- && scroll != null
273
- && !ignoreEvents
274
- && state != DRAGGING
275
- && !isPointInChildBounds(scroll, (int) event.getX(), (int) event.getY())
276
- && viewDragHelper != null
277
- && Math.abs(initialY - event.getY()) > viewDragHelper.getTouchSlop();
272
+ && scroll != null
273
+ && !ignoreEvents
274
+ && state != DRAGGING
275
+ && !isPointInChildBounds(scroll, (int) event.getX(), (int) event.getY())
276
+ && viewDragHelper != null
277
+ && Math.abs(initialY - event.getY()) > viewDragHelper.getTouchSlop();
278
278
  }
279
279
 
280
280
  @Override
@@ -282,7 +282,7 @@ public class BottomSheet extends ReactViewGroup implements NestedScrollingParent
282
282
  if (!draggable) {
283
283
  return false;
284
284
  }
285
-
285
+
286
286
  int action = event.getActionMasked();
287
287
  if (state == DRAGGING && action == MotionEvent.ACTION_DOWN) {
288
288
  return true;
@@ -547,10 +547,10 @@ public class BottomSheet extends ReactViewGroup implements NestedScrollingParent
547
547
 
548
548
  void startSettlingAnimation(View child, BottomSheetState state, int top, boolean settleFromViewDragHelper) {
549
549
  boolean startedSettling =
550
- viewDragHelper != null
551
- && (settleFromViewDragHelper
552
- ? viewDragHelper.settleCapturedViewAt(child.getLeft(), top)
553
- : viewDragHelper.smoothSlideViewTo(child, child.getLeft(), top));
550
+ viewDragHelper != null
551
+ && (settleFromViewDragHelper
552
+ ? viewDragHelper.settleCapturedViewAt(child.getLeft(), top)
553
+ : viewDragHelper.smoothSlideViewTo(child, child.getLeft(), top));
554
554
  if (startedSettling) {
555
555
  setStateInternal(SETTLING);
556
556
  // STATE_SETTLING won't animate the material shape, so do that here with the target state.
@@ -20,5 +20,5 @@ interface NativeBottomSheetProps extends ViewProps {
20
20
  }
21
21
  declare const BottomSheet: React.ForwardRefExoticComponent<NativeBottomSheetProps & {
22
22
  fitToContents?: boolean | undefined;
23
- } & React.RefAttributes<React.Component<NativeBottomSheetProps, {}, any> & Readonly<import("react-native").NativeMethods>>>;
23
+ } & React.RefAttributes<React.Component<NativeBottomSheetProps, {}, any> & import("react-native").NativeMethods>>;
24
24
  export default BottomSheet;
@@ -1,12 +1,16 @@
1
1
  import React from 'react';
2
- import { requireNativeComponent, StyleSheet, View } from 'react-native';
2
+ import { requireNativeComponent, StyleSheet, View, } from 'react-native';
3
3
  import splitLayoutProps from './splitLayoutProps';
4
4
  const NativeBottomSheet = requireNativeComponent('BottomSheet');
5
5
  const BottomSheet = React.forwardRef((props, ref) => {
6
6
  const { style, contentContainerStyle, children, peekHeight = 200, draggable = true, state = 'collapsed', fitToContents, ...rest } = props;
7
7
  const { outer, inner } = splitLayoutProps(StyleSheet.flatten(style));
8
8
  return (<NativeBottomSheet style={[StyleSheet.absoluteFill, outer]} peekHeight={peekHeight} draggable={draggable} state={state} {...rest} ref={ref}>
9
- <View style={[fitToContents ? styles.fitToContents : StyleSheet.absoluteFill, inner, contentContainerStyle]} collapsable={false}>
9
+ <View style={[
10
+ fitToContents ? styles.fitToContents : StyleSheet.absoluteFill,
11
+ inner,
12
+ contentContainerStyle,
13
+ ]} collapsable={false}>
10
14
  {children}
11
15
  </View>
12
16
  </NativeBottomSheet>);
@@ -0,0 +1,405 @@
1
+ import { ViewStyle } from 'react-native';
2
+ export default function splitLayoutProps(props?: ViewStyle): {
3
+ outer: {
4
+ [key: string]: string | number | import("react-native").OpaqueColorValue | import("react-native").Animated.AnimatedNode | readonly import("react-native").BoxShadowValue[] | readonly import("react-native").FilterFunction[] | readonly import("react-native").GradientValue[] | Readonly<{
5
+ width: number;
6
+ height: number;
7
+ }> | readonly (({
8
+ scaleX: import("react-native").AnimatableNumericValue;
9
+ } & {
10
+ scaleY?: undefined;
11
+ translateX?: undefined;
12
+ translateY?: undefined;
13
+ perspective?: undefined;
14
+ rotate?: undefined;
15
+ rotateX?: undefined;
16
+ rotateY?: undefined;
17
+ rotateZ?: undefined;
18
+ scale?: undefined;
19
+ skewX?: undefined;
20
+ skewY?: undefined;
21
+ matrix?: undefined;
22
+ }) | ({
23
+ scaleY: import("react-native").AnimatableNumericValue;
24
+ } & {
25
+ scaleX?: undefined;
26
+ translateX?: undefined;
27
+ translateY?: undefined;
28
+ perspective?: undefined;
29
+ rotate?: undefined;
30
+ rotateX?: undefined;
31
+ rotateY?: undefined;
32
+ rotateZ?: undefined;
33
+ scale?: undefined;
34
+ skewX?: undefined;
35
+ skewY?: undefined;
36
+ matrix?: undefined;
37
+ }) | ({
38
+ translateX: import("react-native").AnimatableNumericValue | `${number}%`;
39
+ } & {
40
+ scaleX?: undefined;
41
+ scaleY?: undefined;
42
+ translateY?: undefined;
43
+ perspective?: undefined;
44
+ rotate?: undefined;
45
+ rotateX?: undefined;
46
+ rotateY?: undefined;
47
+ rotateZ?: undefined;
48
+ scale?: undefined;
49
+ skewX?: undefined;
50
+ skewY?: undefined;
51
+ matrix?: undefined;
52
+ }) | ({
53
+ translateY: import("react-native").AnimatableNumericValue | `${number}%`;
54
+ } & {
55
+ scaleX?: undefined;
56
+ scaleY?: undefined;
57
+ translateX?: undefined;
58
+ perspective?: undefined;
59
+ rotate?: undefined;
60
+ rotateX?: undefined;
61
+ rotateY?: undefined;
62
+ rotateZ?: undefined;
63
+ scale?: undefined;
64
+ skewX?: undefined;
65
+ skewY?: undefined;
66
+ matrix?: undefined;
67
+ }) | ({
68
+ perspective: import("react-native").AnimatableNumericValue;
69
+ } & {
70
+ scaleX?: undefined;
71
+ scaleY?: undefined;
72
+ translateX?: undefined;
73
+ translateY?: undefined;
74
+ rotate?: undefined;
75
+ rotateX?: undefined;
76
+ rotateY?: undefined;
77
+ rotateZ?: undefined;
78
+ scale?: undefined;
79
+ skewX?: undefined;
80
+ skewY?: undefined;
81
+ matrix?: undefined;
82
+ }) | ({
83
+ rotate: import("react-native").AnimatableStringValue;
84
+ } & {
85
+ scaleX?: undefined;
86
+ scaleY?: undefined;
87
+ translateX?: undefined;
88
+ translateY?: undefined;
89
+ perspective?: undefined;
90
+ rotateX?: undefined;
91
+ rotateY?: undefined;
92
+ rotateZ?: undefined;
93
+ scale?: undefined;
94
+ skewX?: undefined;
95
+ skewY?: undefined;
96
+ matrix?: undefined;
97
+ }) | ({
98
+ rotateX: import("react-native").AnimatableStringValue;
99
+ } & {
100
+ scaleX?: undefined;
101
+ scaleY?: undefined;
102
+ translateX?: undefined;
103
+ translateY?: undefined;
104
+ perspective?: undefined;
105
+ rotate?: undefined;
106
+ rotateY?: undefined;
107
+ rotateZ?: undefined;
108
+ scale?: undefined;
109
+ skewX?: undefined;
110
+ skewY?: undefined;
111
+ matrix?: undefined;
112
+ }) | ({
113
+ rotateY: import("react-native").AnimatableStringValue;
114
+ } & {
115
+ scaleX?: undefined;
116
+ scaleY?: undefined;
117
+ translateX?: undefined;
118
+ translateY?: undefined;
119
+ perspective?: undefined;
120
+ rotate?: undefined;
121
+ rotateX?: undefined;
122
+ rotateZ?: undefined;
123
+ scale?: undefined;
124
+ skewX?: undefined;
125
+ skewY?: undefined;
126
+ matrix?: undefined;
127
+ }) | ({
128
+ rotateZ: import("react-native").AnimatableStringValue;
129
+ } & {
130
+ scaleX?: undefined;
131
+ scaleY?: undefined;
132
+ translateX?: undefined;
133
+ translateY?: undefined;
134
+ perspective?: undefined;
135
+ rotate?: undefined;
136
+ rotateX?: undefined;
137
+ rotateY?: undefined;
138
+ scale?: undefined;
139
+ skewX?: undefined;
140
+ skewY?: undefined;
141
+ matrix?: undefined;
142
+ }) | ({
143
+ scale: import("react-native").AnimatableNumericValue;
144
+ } & {
145
+ scaleX?: undefined;
146
+ scaleY?: undefined;
147
+ translateX?: undefined;
148
+ translateY?: undefined;
149
+ perspective?: undefined;
150
+ rotate?: undefined;
151
+ rotateX?: undefined;
152
+ rotateY?: undefined;
153
+ rotateZ?: undefined;
154
+ skewX?: undefined;
155
+ skewY?: undefined;
156
+ matrix?: undefined;
157
+ }) | ({
158
+ skewX: import("react-native").AnimatableStringValue;
159
+ } & {
160
+ scaleX?: undefined;
161
+ scaleY?: undefined;
162
+ translateX?: undefined;
163
+ translateY?: undefined;
164
+ perspective?: undefined;
165
+ rotate?: undefined;
166
+ rotateX?: undefined;
167
+ rotateY?: undefined;
168
+ rotateZ?: undefined;
169
+ scale?: undefined;
170
+ skewY?: undefined;
171
+ matrix?: undefined;
172
+ }) | ({
173
+ skewY: import("react-native").AnimatableStringValue;
174
+ } & {
175
+ scaleX?: undefined;
176
+ scaleY?: undefined;
177
+ translateX?: undefined;
178
+ translateY?: undefined;
179
+ perspective?: undefined;
180
+ rotate?: undefined;
181
+ rotateX?: undefined;
182
+ rotateY?: undefined;
183
+ rotateZ?: undefined;
184
+ scale?: undefined;
185
+ skewX?: undefined;
186
+ matrix?: undefined;
187
+ }) | ({
188
+ matrix: import("react-native").AnimatableNumericValue[];
189
+ } & {
190
+ scaleX?: undefined;
191
+ scaleY?: undefined;
192
+ translateX?: undefined;
193
+ translateY?: undefined;
194
+ perspective?: undefined;
195
+ rotate?: undefined;
196
+ rotateX?: undefined;
197
+ rotateY?: undefined;
198
+ rotateZ?: undefined;
199
+ scale?: undefined;
200
+ skewX?: undefined;
201
+ skewY?: undefined;
202
+ }))[] | (string | number)[] | number[] | null | undefined;
203
+ };
204
+ inner: {
205
+ [key: string]: string | number | import("react-native").OpaqueColorValue | import("react-native").Animated.AnimatedNode | readonly import("react-native").BoxShadowValue[] | readonly import("react-native").FilterFunction[] | readonly import("react-native").GradientValue[] | Readonly<{
206
+ width: number;
207
+ height: number;
208
+ }> | readonly (({
209
+ scaleX: import("react-native").AnimatableNumericValue;
210
+ } & {
211
+ scaleY?: undefined;
212
+ translateX?: undefined;
213
+ translateY?: undefined;
214
+ perspective?: undefined;
215
+ rotate?: undefined;
216
+ rotateX?: undefined;
217
+ rotateY?: undefined;
218
+ rotateZ?: undefined;
219
+ scale?: undefined;
220
+ skewX?: undefined;
221
+ skewY?: undefined;
222
+ matrix?: undefined;
223
+ }) | ({
224
+ scaleY: import("react-native").AnimatableNumericValue;
225
+ } & {
226
+ scaleX?: undefined;
227
+ translateX?: undefined;
228
+ translateY?: undefined;
229
+ perspective?: undefined;
230
+ rotate?: undefined;
231
+ rotateX?: undefined;
232
+ rotateY?: undefined;
233
+ rotateZ?: undefined;
234
+ scale?: undefined;
235
+ skewX?: undefined;
236
+ skewY?: undefined;
237
+ matrix?: undefined;
238
+ }) | ({
239
+ translateX: import("react-native").AnimatableNumericValue | `${number}%`;
240
+ } & {
241
+ scaleX?: undefined;
242
+ scaleY?: undefined;
243
+ translateY?: undefined;
244
+ perspective?: undefined;
245
+ rotate?: undefined;
246
+ rotateX?: undefined;
247
+ rotateY?: undefined;
248
+ rotateZ?: undefined;
249
+ scale?: undefined;
250
+ skewX?: undefined;
251
+ skewY?: undefined;
252
+ matrix?: undefined;
253
+ }) | ({
254
+ translateY: import("react-native").AnimatableNumericValue | `${number}%`;
255
+ } & {
256
+ scaleX?: undefined;
257
+ scaleY?: undefined;
258
+ translateX?: undefined;
259
+ perspective?: undefined;
260
+ rotate?: undefined;
261
+ rotateX?: undefined;
262
+ rotateY?: undefined;
263
+ rotateZ?: undefined;
264
+ scale?: undefined;
265
+ skewX?: undefined;
266
+ skewY?: undefined;
267
+ matrix?: undefined;
268
+ }) | ({
269
+ perspective: import("react-native").AnimatableNumericValue;
270
+ } & {
271
+ scaleX?: undefined;
272
+ scaleY?: undefined;
273
+ translateX?: undefined;
274
+ translateY?: undefined;
275
+ rotate?: undefined;
276
+ rotateX?: undefined;
277
+ rotateY?: undefined;
278
+ rotateZ?: undefined;
279
+ scale?: undefined;
280
+ skewX?: undefined;
281
+ skewY?: undefined;
282
+ matrix?: undefined;
283
+ }) | ({
284
+ rotate: import("react-native").AnimatableStringValue;
285
+ } & {
286
+ scaleX?: undefined;
287
+ scaleY?: undefined;
288
+ translateX?: undefined;
289
+ translateY?: undefined;
290
+ perspective?: undefined;
291
+ rotateX?: undefined;
292
+ rotateY?: undefined;
293
+ rotateZ?: undefined;
294
+ scale?: undefined;
295
+ skewX?: undefined;
296
+ skewY?: undefined;
297
+ matrix?: undefined;
298
+ }) | ({
299
+ rotateX: import("react-native").AnimatableStringValue;
300
+ } & {
301
+ scaleX?: undefined;
302
+ scaleY?: undefined;
303
+ translateX?: undefined;
304
+ translateY?: undefined;
305
+ perspective?: undefined;
306
+ rotate?: undefined;
307
+ rotateY?: undefined;
308
+ rotateZ?: undefined;
309
+ scale?: undefined;
310
+ skewX?: undefined;
311
+ skewY?: undefined;
312
+ matrix?: undefined;
313
+ }) | ({
314
+ rotateY: import("react-native").AnimatableStringValue;
315
+ } & {
316
+ scaleX?: undefined;
317
+ scaleY?: undefined;
318
+ translateX?: undefined;
319
+ translateY?: undefined;
320
+ perspective?: undefined;
321
+ rotate?: undefined;
322
+ rotateX?: undefined;
323
+ rotateZ?: undefined;
324
+ scale?: undefined;
325
+ skewX?: undefined;
326
+ skewY?: undefined;
327
+ matrix?: undefined;
328
+ }) | ({
329
+ rotateZ: import("react-native").AnimatableStringValue;
330
+ } & {
331
+ scaleX?: undefined;
332
+ scaleY?: undefined;
333
+ translateX?: undefined;
334
+ translateY?: undefined;
335
+ perspective?: undefined;
336
+ rotate?: undefined;
337
+ rotateX?: undefined;
338
+ rotateY?: undefined;
339
+ scale?: undefined;
340
+ skewX?: undefined;
341
+ skewY?: undefined;
342
+ matrix?: undefined;
343
+ }) | ({
344
+ scale: import("react-native").AnimatableNumericValue;
345
+ } & {
346
+ scaleX?: undefined;
347
+ scaleY?: undefined;
348
+ translateX?: undefined;
349
+ translateY?: undefined;
350
+ perspective?: undefined;
351
+ rotate?: undefined;
352
+ rotateX?: undefined;
353
+ rotateY?: undefined;
354
+ rotateZ?: undefined;
355
+ skewX?: undefined;
356
+ skewY?: undefined;
357
+ matrix?: undefined;
358
+ }) | ({
359
+ skewX: import("react-native").AnimatableStringValue;
360
+ } & {
361
+ scaleX?: undefined;
362
+ scaleY?: undefined;
363
+ translateX?: undefined;
364
+ translateY?: undefined;
365
+ perspective?: undefined;
366
+ rotate?: undefined;
367
+ rotateX?: undefined;
368
+ rotateY?: undefined;
369
+ rotateZ?: undefined;
370
+ scale?: undefined;
371
+ skewY?: undefined;
372
+ matrix?: undefined;
373
+ }) | ({
374
+ skewY: import("react-native").AnimatableStringValue;
375
+ } & {
376
+ scaleX?: undefined;
377
+ scaleY?: undefined;
378
+ translateX?: undefined;
379
+ translateY?: undefined;
380
+ perspective?: undefined;
381
+ rotate?: undefined;
382
+ rotateX?: undefined;
383
+ rotateY?: undefined;
384
+ rotateZ?: undefined;
385
+ scale?: undefined;
386
+ skewX?: undefined;
387
+ matrix?: undefined;
388
+ }) | ({
389
+ matrix: import("react-native").AnimatableNumericValue[];
390
+ } & {
391
+ scaleX?: undefined;
392
+ scaleY?: undefined;
393
+ translateX?: undefined;
394
+ translateY?: undefined;
395
+ perspective?: undefined;
396
+ rotate?: undefined;
397
+ rotateX?: undefined;
398
+ rotateY?: undefined;
399
+ rotateZ?: undefined;
400
+ scale?: undefined;
401
+ skewX?: undefined;
402
+ skewY?: undefined;
403
+ }))[] | (string | number)[] | number[] | null | undefined;
404
+ };
405
+ };
@@ -24,10 +24,12 @@
24
24
 
25
25
  @property(nonatomic, assign) RNBottomSheetState finalState;
26
26
 
27
+ @property(nonatomic, strong) UIViewPropertyAnimator *animator;
28
+
27
29
  @end
28
30
 
29
31
  @implementation RNBottomSheet {
30
- __weak RCTRootContentView *_rootView;
32
+ __weak UIView *_rootView;
31
33
  BOOL _isInitialRender;
32
34
  }
33
35
 
@@ -315,7 +317,7 @@
315
317
  }
316
318
 
317
319
  self.finalState = state;
318
-
320
+
319
321
  [self settleToState:state withFling:YES];
320
322
  }
321
323
 
@@ -333,14 +335,22 @@
333
335
  self.target.pagingEnabled = YES;
334
336
  [self setStateInternal:RNBottomSheetStateSettling];
335
337
  [self startWatchBottomSheetTransition];
336
- [self.layer removeAllAnimations];
337
- // CGFloat duration = fmin(fabs(self.contentView.frame.origin.y - top) / (self.maxY - self.minY) * 0.3, 0.3);
338
- [UIView animateWithDuration:fling ? 0.5 : 0.25 delay:0 usingSpringWithDamping:1 initialSpringVelocity:1 options:UIViewAnimationOptionTransitionNone animations:^{
338
+
339
+ if (self.animator) {
340
+ [self.animator stopAnimation:YES];
341
+ }
342
+
343
+ UIViewAnimationOptions options = UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseOut;
344
+
345
+ self.animator = [UIViewPropertyAnimator runningPropertyAnimatorWithDuration:0.3 delay:0 options:options animations:^{
339
346
  self.contentView.frame = CGRectOffset(self.contentView.frame, 0, top - self.contentView.frame.origin.y);
340
- } completion:^(BOOL finished) {
347
+ } completion:^(UIViewAnimatingPosition finalPosition) {
341
348
  self.target.pagingEnabled = NO;
349
+ self.animator = nil;
342
350
  [self stopWatchBottomSheetTransition];
343
- [self setStateInternal:state];
351
+ if (self.finalState == state) {
352
+ [self setStateInternal:state];
353
+ }
344
354
  }];
345
355
  }
346
356
 
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@sdcx/bottom-sheet",
3
3
  "description": "A react-native BottomSheet component.",
4
- "version": "0.15.0",
5
- "main": "./lib/index.js",
6
- "typings": "./lib/index.d.ts",
4
+ "version": "0.17.0",
5
+ "main": "./dist/index.js",
6
+ "typings": "./dist/index.d.ts",
7
7
  "react-native": "src/index",
8
8
  "nativePackage": true,
9
9
  "files": [
10
10
  "src",
11
- "lib",
11
+ "dist",
12
12
  "android",
13
13
  "ios",
14
14
  "docs",
@@ -26,7 +26,7 @@
26
26
  "bottom-sheet"
27
27
  ],
28
28
  "scripts": {
29
- "build": "rm -rf ./lib && tsc -p tsconfig.build.json",
29
+ "build": "rm -rf ./dist && tsc -p tsconfig.json",
30
30
  "prepare": "npm run build",
31
31
  "tsc": "tsc",
32
32
  "test": "jest",
@@ -36,32 +36,5 @@
36
36
  "react": ">=16.8",
37
37
  "react-native": ">=0.60"
38
38
  },
39
- "devDependencies": {
40
- "@babel/core": "^7.13.10",
41
- "@babel/runtime": "^7.13.10",
42
- "@react-native-community/eslint-config": "^3.0.0",
43
- "@types/jest": "^27.0.1",
44
- "@types/react": "^17.0.2",
45
- "@types/react-native": "^0.67.0",
46
- "@types/react-test-renderer": "17.0.2",
47
- "babel-jest": "^27.0.6",
48
- "jest": "^27.0.6",
49
- "metro-react-native-babel-preset": "^0.66.2",
50
- "react": "17.0.2",
51
- "react-native": "^0.67.4",
52
- "react-test-renderer": "17.0.2",
53
- "eslint": "^7.32.0",
54
- "typescript": "^4.6.4"
55
- },
56
- "jest": {
57
- "preset": "react-native",
58
- "moduleFileExtensions": [
59
- "ts",
60
- "tsx",
61
- "js",
62
- "jsx",
63
- "json",
64
- "node"
65
- ]
66
- }
39
+ "devDependencies": {}
67
40
  }
package/src/index.tsx CHANGED
@@ -1,36 +1,42 @@
1
- import React from 'react'
2
- import { NativeSyntheticEvent, requireNativeComponent, StyleSheet, View, ViewProps } from 'react-native'
3
- import splitLayoutProps from './splitLayoutProps'
1
+ import React from 'react';
2
+ import {
3
+ NativeSyntheticEvent,
4
+ requireNativeComponent,
5
+ StyleSheet,
6
+ View,
7
+ ViewProps,
8
+ } from 'react-native';
9
+ import splitLayoutProps from './splitLayoutProps';
4
10
 
5
11
  export interface OffsetChangedEventData {
6
- progress: number
7
- offset: number
8
- expandedOffset: number
9
- collapsedOffset: number
12
+ progress: number;
13
+ offset: number;
14
+ expandedOffset: number;
15
+ collapsedOffset: number;
10
16
  }
11
17
 
12
- export type BottomSheetState = 'collapsed' | 'expanded' | 'hidden'
18
+ export type BottomSheetState = 'collapsed' | 'expanded' | 'hidden';
13
19
 
14
20
  export interface StateChangedEventData {
15
- state: BottomSheetState
21
+ state: BottomSheetState;
16
22
  }
17
23
 
18
24
  interface NativeBottomSheetProps extends ViewProps {
19
- onSlide?: (event: NativeSyntheticEvent<OffsetChangedEventData>) => void
20
- onStateChanged?: (event: NativeSyntheticEvent<StateChangedEventData>) => void
21
- peekHeight?: number
22
- draggable?: boolean
23
- state?: BottomSheetState
24
- contentContainerStyle?: ViewProps['style']
25
+ onSlide?: (event: NativeSyntheticEvent<OffsetChangedEventData>) => void;
26
+ onStateChanged?: (event: NativeSyntheticEvent<StateChangedEventData>) => void;
27
+ peekHeight?: number;
28
+ draggable?: boolean;
29
+ state?: BottomSheetState;
30
+ contentContainerStyle?: ViewProps['style'];
25
31
  }
26
32
 
27
33
  type BottomSheetProps = NativeBottomSheetProps & {
28
- fitToContents?: boolean
29
- }
34
+ fitToContents?: boolean;
35
+ };
30
36
 
31
- const NativeBottomSheet = requireNativeComponent<NativeBottomSheetProps>('BottomSheet')
37
+ const NativeBottomSheet = requireNativeComponent<NativeBottomSheetProps>('BottomSheet');
32
38
 
33
- type NativeBottomSheetInstance = InstanceType<typeof NativeBottomSheet>
39
+ type NativeBottomSheetInstance = InstanceType<typeof NativeBottomSheet>;
34
40
 
35
41
  const BottomSheet = React.forwardRef<NativeBottomSheetInstance, BottomSheetProps>((props, ref) => {
36
42
  const {
@@ -42,8 +48,8 @@ const BottomSheet = React.forwardRef<NativeBottomSheetInstance, BottomSheetProps
42
48
  state = 'collapsed',
43
49
  fitToContents,
44
50
  ...rest
45
- } = props
46
- const { outer, inner } = splitLayoutProps(StyleSheet.flatten(style))
51
+ } = props;
52
+ const {outer, inner} = splitLayoutProps(StyleSheet.flatten(style));
47
53
  return (
48
54
  <NativeBottomSheet
49
55
  style={[StyleSheet.absoluteFill, outer]}
@@ -53,13 +59,17 @@ const BottomSheet = React.forwardRef<NativeBottomSheetInstance, BottomSheetProps
53
59
  {...rest}
54
60
  ref={ref}>
55
61
  <View
56
- style={[fitToContents ? styles.fitToContents : StyleSheet.absoluteFill, inner, contentContainerStyle]}
62
+ style={[
63
+ fitToContents ? styles.fitToContents : StyleSheet.absoluteFill,
64
+ inner,
65
+ contentContainerStyle,
66
+ ]}
57
67
  collapsable={false}>
58
68
  {children}
59
69
  </View>
60
70
  </NativeBottomSheet>
61
- )
62
- })
71
+ );
72
+ });
63
73
 
64
74
  const styles = StyleSheet.create({
65
75
  fitToContents: {
@@ -68,6 +78,6 @@ const styles = StyleSheet.create({
68
78
  right: 0,
69
79
  bottom: 0,
70
80
  },
71
- })
81
+ });
72
82
 
73
- export default BottomSheet
83
+ export default BottomSheet;
@@ -1,10 +1,10 @@
1
- import { ViewStyle } from 'react-native'
1
+ import {ViewStyle} from 'react-native';
2
2
 
3
- type StyleKey = keyof ViewStyle
3
+ type StyleKey = keyof ViewStyle;
4
4
 
5
5
  export default function splitLayoutProps(props?: ViewStyle) {
6
- let outer: { [key: string]: ViewStyle[StyleKey] } = {}
7
- let inner: { [key: string]: ViewStyle[StyleKey] } = {}
6
+ let outer: {[key: string]: ViewStyle[StyleKey]} = {};
7
+ let inner: {[key: string]: ViewStyle[StyleKey]} = {};
8
8
 
9
9
  if (props != null) {
10
10
  for (const prop of Object.keys(props) as StyleKey[]) {
@@ -34,14 +34,14 @@ export default function splitLayoutProps(props?: ViewStyle) {
34
34
  case 'top':
35
35
  case 'transform':
36
36
  case 'zIndex':
37
- outer[prop] = props[prop]
38
- break
37
+ outer[prop] = props[prop];
38
+ break;
39
39
  default:
40
- inner[prop] = props[prop]
41
- break
40
+ inner[prop] = props[prop];
41
+ break;
42
42
  }
43
43
  }
44
44
  }
45
45
 
46
- return { outer, inner }
46
+ return {outer, inner};
47
47
  }
@@ -1,15 +0,0 @@
1
- import { ViewStyle } from 'react-native';
2
- export default function splitLayoutProps(props?: ViewStyle): {
3
- outer: {
4
- [key: string]: string | number | import("react-native").OpaqueColorValue | {
5
- width: number;
6
- height: number;
7
- } | (import("react-native").PerpectiveTransform | import("react-native").RotateTransform | import("react-native").RotateXTransform | import("react-native").RotateYTransform | import("react-native").RotateZTransform | import("react-native").ScaleTransform | import("react-native").ScaleXTransform | import("react-native").ScaleYTransform | import("react-native").TranslateXTransform | import("react-native").TranslateYTransform | import("react-native").SkewXTransform | import("react-native").SkewYTransform | import("react-native").MatrixTransform)[] | number[] | undefined;
8
- };
9
- inner: {
10
- [key: string]: string | number | import("react-native").OpaqueColorValue | {
11
- width: number;
12
- height: number;
13
- } | (import("react-native").PerpectiveTransform | import("react-native").RotateTransform | import("react-native").RotateXTransform | import("react-native").RotateYTransform | import("react-native").RotateZTransform | import("react-native").ScaleTransform | import("react-native").ScaleXTransform | import("react-native").ScaleYTransform | import("react-native").TranslateXTransform | import("react-native").TranslateYTransform | import("react-native").SkewXTransform | import("react-native").SkewYTransform | import("react-native").MatrixTransform)[] | number[] | undefined;
14
- };
15
- };
File without changes