@sdcx/bottom-sheet 0.15.0 → 0.16.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,11 @@ 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
+ return;
168
+ }
169
+
170
+ if (this.state == SETTLING) {
167
171
  return;
168
172
  }
169
173
 
@@ -282,7 +286,7 @@ public class BottomSheet extends ReactViewGroup implements NestedScrollingParent
282
286
  if (!draggable) {
283
287
  return false;
284
288
  }
285
-
289
+
286
290
  int action = event.getActionMasked();
287
291
  if (state == DRAGGING && action == MotionEvent.ACTION_DOWN) {
288
292
  return true;
@@ -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
+ };
@@ -80,14 +80,14 @@
80
80
  if (gestureRecognizer != self.panGestureRecognizer) {
81
81
  return YES;
82
82
  }
83
-
83
+
84
84
  if (self.target) {
85
85
  [self.target removeObserver:self forKeyPath:@"contentOffset"];
86
86
  }
87
87
  self.target = nil;
88
-
88
+
89
89
  UIView *touchView = touch.view;
90
-
90
+
91
91
  while (touchView != nil && [touchView isDescendantOfView:self]) {
92
92
  if ([touchView isKindOfClass:[UIScrollView class]]) {
93
93
  UIScrollView *scrollView = (UIScrollView *)touchView;
@@ -155,7 +155,7 @@
155
155
  if (!self.contentView) {
156
156
  return;
157
157
  }
158
-
158
+
159
159
  if (!CGRectEqualToRect(self.contentView.frame, CGRectZero)) {
160
160
  [self calculateOffset];
161
161
  if (self.state == RNBottomSheetStateCollapsed) {
@@ -167,12 +167,12 @@
167
167
  }
168
168
  [self dispatchOnSlide:self.contentView.frame.origin.y];
169
169
  }
170
-
170
+
171
171
  dispatch_async(dispatch_get_main_queue(), ^{
172
172
  if (self.finalState == RNBottomSheetStateExpanded && self->_isInitialRender) {
173
173
  [self settleToState:self.finalState withFling:YES];
174
174
  }
175
-
175
+
176
176
  self->_isInitialRender = NO;
177
177
  });
178
178
  }
@@ -187,16 +187,16 @@
187
187
  if (!self.draggable || self.state == RNBottomSheetStateSettling) {
188
188
  return;
189
189
  }
190
-
190
+
191
191
  CGFloat translationY = [pan translationInView:self.contentView].y;
192
192
  [pan setTranslation:CGPointZero inView:self.contentView];
193
-
193
+
194
194
  CGFloat top = self.contentView.frame.origin.y;
195
-
195
+
196
196
  if (pan.state == UIGestureRecognizerStateChanged) {
197
197
  [self setStateInternal:RNBottomSheetStateDragging];
198
198
  }
199
-
199
+
200
200
  // 如果有嵌套滚动
201
201
  if (self.target) {
202
202
  if(translationY > 0 && top < self.maxY && self.target.contentOffset.y <= 0) {
@@ -205,7 +205,7 @@
205
205
  self.contentView.frame = CGRectOffset(self.contentView.frame, 0, y - top);
206
206
  [self dispatchOnSlide:self.contentView.frame.origin.y];
207
207
  }
208
-
208
+
209
209
  if (translationY < 0 && top > self.minY) {
210
210
  //向上拖
211
211
  CGFloat y = fmax(top + translationY, self.minY);
@@ -213,7 +213,7 @@
213
213
  [self dispatchOnSlide:self.contentView.frame.origin.y];
214
214
  }
215
215
  }
216
-
216
+
217
217
  // 没有嵌套滚动
218
218
  if (!self.target) {
219
219
  if(translationY > 0 && top < self.maxY) {
@@ -222,7 +222,7 @@
222
222
  self.contentView.frame = CGRectOffset(self.contentView.frame, 0, y - top);
223
223
  [self dispatchOnSlide:self.contentView.frame.origin.y];
224
224
  }
225
-
225
+
226
226
  if (translationY < 0 && top > self.minY) {
227
227
  //向上拖
228
228
  CGFloat y = fmax(top + translationY, self.minY);
@@ -230,7 +230,7 @@
230
230
  [self dispatchOnSlide:self.contentView.frame.origin.y];
231
231
  }
232
232
  }
233
-
233
+
234
234
  if (pan.state == UIGestureRecognizerStateEnded || pan.state == UIGestureRecognizerStateCancelled) {
235
235
  // RCTLogInfo(@"velocity:%f", [pan velocityInView:self.contentView].y);
236
236
  CGFloat velocity = [pan velocityInView:self.contentView].y;
@@ -239,7 +239,7 @@
239
239
  //如果是类似轻扫的那种
240
240
  [self settleToState:RNBottomSheetStateCollapsed withFling:YES];
241
241
  }
242
-
242
+
243
243
  if (!self.target) {
244
244
  //如果是类似轻扫的那种
245
245
  [self settleToState:RNBottomSheetStateCollapsed withFling:YES];
@@ -263,18 +263,18 @@
263
263
  _nextReturn = false;
264
264
  return;
265
265
  }
266
-
266
+
267
267
  if (![keyPath isEqualToString:@"contentOffset"]) {
268
268
  return;
269
269
  }
270
-
270
+
271
271
  CGFloat new = [change[@"new"] CGPointValue].y;
272
272
  CGFloat old = [change[@"old"] CGPointValue].y;
273
273
 
274
274
  if (new == old) {
275
275
  return;
276
276
  }
277
-
277
+
278
278
  CGFloat dy = old - new;
279
279
 
280
280
  if (dy > 0) {
@@ -284,7 +284,7 @@
284
284
  target.contentOffset = CGPointMake(0, 0);
285
285
  }
286
286
  }
287
-
287
+
288
288
  if (dy < 0) {
289
289
  //向上
290
290
  if (self.contentView.frame.origin.y > self.minY) {
@@ -309,11 +309,15 @@
309
309
  self.finalState = state;
310
310
  return;
311
311
  }
312
-
312
+
313
313
  if (self.finalState == state) {
314
314
  return;
315
315
  }
316
-
316
+
317
+ if (_state == RNBottomSheetStateSettling) {
318
+ return;
319
+ }
320
+
317
321
  self.finalState = state;
318
322
 
319
323
  [self settleToState:state withFling:YES];
@@ -349,19 +353,19 @@
349
353
  return;
350
354
  }
351
355
  _state = state;
352
-
356
+
353
357
  if (state == RNBottomSheetStateExpanded) {
354
358
  [self dispatchOnSlide:self.minY];
355
359
  }
356
-
360
+
357
361
  if (state == RNBottomSheetStateHidden) {
358
362
  [self dispatchOnSlide:self.frame.size.height];
359
363
  }
360
-
364
+
361
365
  if (state == RNBottomSheetStateCollapsed) {
362
366
  [self dispatchOnSlide:self.maxY];
363
367
  }
364
-
368
+
365
369
  if (state == RNBottomSheetStateCollapsed || state == RNBottomSheetStateExpanded || state == RNBottomSheetStateHidden) {
366
370
  [self.eventDispatcher sendEvent:[[RNBottomSheetStateChangedEvent alloc] initWithViewTag:self.reactTag state:state]];
367
371
  }
@@ -393,5 +397,5 @@
393
397
  CGFloat top = [self.contentView.layer presentationLayer].frame.origin.y;
394
398
  [self dispatchOnSlide:top];
395
399
  }
396
-
400
+
397
401
  @end
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.16.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