@lodev09/react-native-true-sheet 3.9.0-beta.3 → 3.9.0-beta.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.
- package/README.md +2 -2
- package/android/build.gradle +2 -1
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetContainerView.kt +5 -0
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetContentView.kt +21 -2
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetView.kt +61 -28
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetViewController.kt +53 -38
- package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetCoordinatorLayout.kt +30 -2
- package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetKeyboardObserver.kt +16 -9
- package/android/src/main/java/com/lodev09/truesheet/utils/ViewUtils.kt +1 -0
- package/ios/TrueSheetView.mm +1 -1
- package/ios/TrueSheetViewController.mm +26 -14
- package/ios/core/RNScreensEventObserver.mm +5 -1
- package/lib/module/TrueSheet.js +17 -7
- package/lib/module/TrueSheet.js.map +1 -1
- package/lib/module/TrueSheet.web.js +34 -28
- package/lib/module/TrueSheet.web.js.map +1 -1
- package/lib/module/navigation/screen/ReanimatedTrueSheetScreen.js +1 -1
- package/lib/module/navigation/screen/ReanimatedTrueSheetScreen.js.map +1 -1
- package/lib/module/navigation/screen/TrueSheetScreen.js +1 -1
- package/lib/module/navigation/screen/TrueSheetScreen.js.map +1 -1
- package/lib/module/navigation/screen/useSheetScreenState.js +21 -21
- package/lib/module/navigation/screen/useSheetScreenState.js.map +1 -1
- package/lib/module/reanimated/ReanimatedTrueSheetProvider.js +3 -3
- package/lib/module/reanimated/ReanimatedTrueSheetProvider.js.map +1 -1
- package/lib/typescript/src/TrueSheet.d.ts +2 -0
- package/lib/typescript/src/TrueSheet.d.ts.map +1 -1
- package/lib/typescript/src/TrueSheet.types.d.ts +14 -0
- package/lib/typescript/src/TrueSheet.types.d.ts.map +1 -1
- package/lib/typescript/src/TrueSheet.web.d.ts.map +1 -1
- package/lib/typescript/src/navigation/screen/types.d.ts +3 -5
- package/lib/typescript/src/navigation/screen/types.d.ts.map +1 -1
- package/lib/typescript/src/navigation/screen/useSheetScreenState.d.ts.map +1 -1
- package/lib/typescript/src/navigation/types.d.ts +3 -2
- package/lib/typescript/src/navigation/types.d.ts.map +1 -1
- package/lib/typescript/src/reanimated/ReanimatedTrueSheetProvider.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/TrueSheet.tsx +22 -7
- package/src/TrueSheet.types.ts +16 -0
- package/src/TrueSheet.web.tsx +40 -31
- package/src/navigation/screen/ReanimatedTrueSheetScreen.tsx +1 -1
- package/src/navigation/screen/TrueSheetScreen.tsx +1 -1
- package/src/navigation/screen/types.ts +8 -6
- package/src/navigation/screen/useSheetScreenState.ts +27 -20
- package/src/navigation/types.ts +17 -6
- package/src/reanimated/ReanimatedTrueSheetProvider.tsx +5 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSheetScreenState.d.ts","sourceRoot":"","sources":["../../../../../src/navigation/screen/useSheetScreenState.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EACV,iBAAiB,EACjB,sBAAsB,EACtB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,cAAc,EACd,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,0BAA0B,EAC1B,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACxB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,KAAK,MAAM,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;AAEjD,UAAU,wBAAwB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,uBAAuB,CAAC,aAAa,CAAC,CAAC;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,mBAAmB,GAAI,OAAO,wBAAwB;;;
|
|
1
|
+
{"version":3,"file":"useSheetScreenState.d.ts","sourceRoot":"","sources":["../../../../../src/navigation/screen/useSheetScreenState.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EACV,iBAAiB,EACjB,sBAAsB,EACtB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,cAAc,EACd,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,0BAA0B,EAC1B,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACxB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,KAAK,MAAM,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;AAEjD,UAAU,wBAAwB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,uBAAuB,CAAC,aAAa,CAAC,CAAC;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,mBAAmB,GAAI,OAAO,wBAAwB;;;sBAyBvD,MAAM,2BAA2B,QACjC,sBAAsB,GAAG,0BAA0B,GAAG,SAAS;;2BAmBlD,gBAAgB;0BACjB,eAAe;4BACb,gBAAgB;;4BAEhB,iBAAiB;yBACpB,cAAc;0BACb,eAAe;uBAClB,YAAY;8BACL,mBAAmB;0BACvB,cAAc;yBACf,aAAa;yBACb,aAAa;wBACd,YAAY;;CAWjC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { DefaultNavigatorOptions, Descriptor, NavigationHelpers, NavigationProp, NavigationState, ParamListBase, RouteProp, StackActionHelpers } from '@react-navigation/native';
|
|
2
2
|
import type { DetentInfoEventPayload, PositionChangeEventPayload, TrueSheetProps } from '../TrueSheet.types';
|
|
3
|
-
|
|
3
|
+
export type PositionChangeHandler = (payload: PositionChangeEventPayload) => void;
|
|
4
4
|
export type TrueSheetNavigationEventMap = {
|
|
5
5
|
/**
|
|
6
6
|
* Event fired when the sheet is about to be presented.
|
|
@@ -101,10 +101,11 @@ export type TrueSheetScreenProps<ParamList extends ParamListBase, RouteName exte
|
|
|
101
101
|
route: RouteProp<ParamList, RouteName>;
|
|
102
102
|
};
|
|
103
103
|
export type TrueSheetNavigationHelpers = NavigationHelpers<ParamListBase, TrueSheetNavigationEventMap>;
|
|
104
|
+
export type TrueSheetNavigationSheetProps = Pick<TrueSheetProps, 'detents' | 'backgroundColor' | 'cornerRadius' | 'dismissible' | 'draggable' | 'grabber' | 'grabberOptions' | 'dimmed' | 'dimmedDetentIndex' | 'backgroundBlur' | 'blurOptions' | 'maxContentHeight' | 'maxContentWidth' | 'scrollable' | 'pageSizing' | 'header' | 'headerStyle' | 'footer' | 'footerStyle' | 'scrollableOptions' | 'insetAdjustment' | 'anchor' | 'anchorOffset' | 'elevation' | 'detached' | 'detachedOffset' | 'stackBehavior'>;
|
|
104
105
|
/**
|
|
105
106
|
* Screen options for TrueSheet navigator screens.
|
|
106
107
|
*/
|
|
107
|
-
export type TrueSheetNavigationOptions =
|
|
108
|
+
export type TrueSheetNavigationOptions = TrueSheetNavigationSheetProps & {
|
|
108
109
|
/**
|
|
109
110
|
* The detent index to present at.
|
|
110
111
|
* @default 0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/navigation/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,aAAa,EACb,SAAS,EACT,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EACV,sBAAsB,EACtB,0BAA0B,EAC1B,cAAc,EACf,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/navigation/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,aAAa,EACb,SAAS,EACT,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EACV,sBAAsB,EACtB,0BAA0B,EAC1B,cAAc,EACf,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,EAAE,0BAA0B,KAAK,IAAI,CAAC;AAElF,MAAM,MAAM,2BAA2B,GAAG;IACxC;;OAEG;IACH,gBAAgB,EAAE;QAAE,IAAI,EAAE,sBAAsB,CAAA;KAAE,CAAC;IACnD;;OAEG;IACH,eAAe,EAAE;QAAE,IAAI,EAAE,sBAAsB,CAAA;KAAE,CAAC;IAClD;;OAEG;IACH,gBAAgB,EAAE;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC;IACtC;;OAEG;IACH,eAAe,EAAE;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC;IACrC;;OAEG;IACH,iBAAiB,EAAE;QAAE,IAAI,EAAE,sBAAsB,CAAA;KAAE,CAAC;IACpD;;OAEG;IACH,cAAc,EAAE;QAAE,IAAI,EAAE,sBAAsB,CAAA;KAAE,CAAC;IACjD;;OAEG;IACH,eAAe,EAAE;QAAE,IAAI,EAAE,sBAAsB,CAAA;KAAE,CAAC;IAClD;;OAEG;IACH,YAAY,EAAE;QAAE,IAAI,EAAE,sBAAsB,CAAA;KAAE,CAAC;IAC/C;;OAEG;IACH,mBAAmB,EAAE;QAAE,IAAI,EAAE,0BAA0B,CAAA;KAAE,CAAC;IAC1D;;OAEG;IACH,cAAc,EAAE;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC;IACpC;;OAEG;IACH,aAAa,EAAE;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC;IACnC;;OAEG;IACH,aAAa,EAAE;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC;IACnC;;OAEG;IACH,YAAY,EAAE;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,wBAAwB,CAAC,SAAS,SAAS,aAAa,IAAI,IAAI,CAC1E,eAAe,CAAC,SAAS,CAAC,EAC1B,QAAQ,CACT,GAAG;IACF,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG;QACtD,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC,EAAE,CAAC;CACN,CAAC;AAEF,MAAM,MAAM,sBAAsB,CAAC,SAAS,SAAS,aAAa,IAChE,kBAAkB,CAAC,SAAS,CAAC,GAAG;IAC9B;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEJ,MAAM,MAAM,uBAAuB,CACjC,SAAS,SAAS,aAAa,EAC/B,SAAS,SAAS,MAAM,SAAS,GAAG,MAAM,EAC1C,WAAW,SAAS,MAAM,GAAG,SAAS,GAAG,SAAS,IAChD,cAAc,CAChB,SAAS,EACT,SAAS,EACT,WAAW,EACX,wBAAwB,CAAC,SAAS,CAAC,EACnC,0BAA0B,EAC1B,2BAA2B,CAC5B,GACC,sBAAsB,CAAC,SAAS,CAAC,CAAC;AAEpC,MAAM,MAAM,oBAAoB,CAC9B,SAAS,SAAS,aAAa,EAC/B,SAAS,SAAS,MAAM,SAAS,GAAG,MAAM,EAC1C,WAAW,SAAS,MAAM,GAAG,SAAS,GAAG,SAAS,IAChD;IACF,UAAU,EAAE,uBAAuB,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IACvE,KAAK,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,iBAAiB,CACxD,aAAa,EACb,2BAA2B,CAC5B,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,IAAI,CAC9C,cAAc,EACZ,SAAS,GACT,iBAAiB,GACjB,cAAc,GACd,aAAa,GACb,WAAW,GACX,SAAS,GACT,gBAAgB,GAChB,QAAQ,GACR,mBAAmB,GACnB,gBAAgB,GAChB,aAAa,GACb,kBAAkB,GAClB,iBAAiB,GACjB,YAAY,GACZ,YAAY,GACZ,QAAQ,GACR,aAAa,GACb,QAAQ,GACR,aAAa,GACb,mBAAmB,GACnB,iBAAiB,GACjB,QAAQ,GACR,cAAc,GACd,WAAW,GACX,UAAU,GACV,gBAAgB,GAChB,eAAe,CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG,6BAA6B,GAAG;IACvE;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;;;;;;;;;;;;;;OAiBG;IACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,uBAAuB,CAC3D,aAAa,EACb,MAAM,GAAG,SAAS,EAClB,wBAAwB,CAAC,aAAa,CAAC,EACvC,0BAA0B,EAC1B,2BAA2B,EAC3B,OAAO,CACR,GAAG;IACF;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAC1C,0BAA0B,EAC1B,uBAAuB,CAAC,aAAa,CAAC,EACtC,SAAS,CAAC,aAAa,CAAC,CACzB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAAC;CACpC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReanimatedTrueSheetProvider.d.ts","sourceRoot":"","sources":["../../../../src/reanimated/ReanimatedTrueSheetProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"ReanimatedTrueSheetProvider.d.ts","sourceRoot":"","sources":["../../../../src/reanimated/ReanimatedTrueSheetProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE3E,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3E,MAAM,WAAW,+BAA+B;IAC9C;;OAEG;IACH,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC;;;OAGG;IACH,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC;;;OAGG;IACH,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACrC;AAID,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,2BAA2B,GAAI,cAAc,gCAAgC,4CAgBzF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,sBAAsB,QAAO,+BAWzC,CAAC"}
|
package/package.json
CHANGED
package/src/TrueSheet.tsx
CHANGED
|
@@ -58,6 +58,9 @@ export class TrueSheet extends PureComponent<TrueSheetProps, TrueSheetState> {
|
|
|
58
58
|
|
|
59
59
|
private readonly nativeRef: RefObject<NativeRef | null>;
|
|
60
60
|
|
|
61
|
+
private cachedGrabberOptions: TrueSheetProps['grabberOptions'] | undefined;
|
|
62
|
+
private resolvedGrabberOptions: Record<string, unknown> | undefined;
|
|
63
|
+
|
|
61
64
|
/**
|
|
62
65
|
* Map of sheet names against their instances.
|
|
63
66
|
*/
|
|
@@ -436,21 +439,27 @@ export class TrueSheet extends PureComponent<TrueSheetProps, TrueSheetState> {
|
|
|
436
439
|
return Math.min(1, detent);
|
|
437
440
|
});
|
|
438
441
|
|
|
442
|
+
// Cache grabberOptions to avoid creating a new object every render
|
|
443
|
+
if (grabberOptions !== this.cachedGrabberOptions) {
|
|
444
|
+
this.cachedGrabberOptions = grabberOptions;
|
|
445
|
+
this.resolvedGrabberOptions = {
|
|
446
|
+
...grabberOptions,
|
|
447
|
+
color: processColor(grabberOptions?.color),
|
|
448
|
+
};
|
|
449
|
+
}
|
|
450
|
+
|
|
439
451
|
return (
|
|
440
452
|
<TrueSheetViewNativeComponent
|
|
441
453
|
{...rest}
|
|
442
454
|
ref={this.nativeRef}
|
|
443
|
-
style={
|
|
455
|
+
style={styles.sheetView}
|
|
444
456
|
detents={resolvedDetents}
|
|
445
457
|
backgroundBlur={backgroundBlur}
|
|
446
458
|
blurOptions={blurOptions}
|
|
447
459
|
backgroundColor={backgroundColor}
|
|
448
460
|
cornerRadius={cornerRadius}
|
|
449
461
|
grabber={grabber}
|
|
450
|
-
grabberOptions={
|
|
451
|
-
...grabberOptions,
|
|
452
|
-
color: processColor(grabberOptions?.color),
|
|
453
|
-
}}
|
|
462
|
+
grabberOptions={this.resolvedGrabberOptions}
|
|
454
463
|
dimmed={dimmed}
|
|
455
464
|
dimmedDetentIndex={dimmedDetentIndex}
|
|
456
465
|
initialDetentIndex={initialDetentIndex}
|
|
@@ -482,14 +491,16 @@ export class TrueSheet extends PureComponent<TrueSheetProps, TrueSheetState> {
|
|
|
482
491
|
onBackPress={this.onBackPress}
|
|
483
492
|
>
|
|
484
493
|
{this.state.shouldRenderNativeView && (
|
|
485
|
-
<TrueSheetContainerViewNativeComponent
|
|
494
|
+
<TrueSheetContainerViewNativeComponent
|
|
495
|
+
style={scrollable ? styles.scrollableContainer : undefined}
|
|
496
|
+
>
|
|
486
497
|
{header && (
|
|
487
498
|
<TrueSheetHeaderViewNativeComponent style={[styles.header, headerStyle]}>
|
|
488
499
|
{isValidElement(header) ? header : createElement(header)}
|
|
489
500
|
</TrueSheetHeaderViewNativeComponent>
|
|
490
501
|
)}
|
|
491
502
|
<TrueSheetContentViewNativeComponent
|
|
492
|
-
style={[style,
|
|
503
|
+
style={scrollable ? [style, styles.scrollableContent] : style}
|
|
493
504
|
>
|
|
494
505
|
{children}
|
|
495
506
|
</TrueSheetContentViewNativeComponent>
|
|
@@ -507,9 +518,13 @@ export class TrueSheet extends PureComponent<TrueSheetProps, TrueSheetState> {
|
|
|
507
518
|
|
|
508
519
|
const styles = StyleSheet.create({
|
|
509
520
|
sheetView: {
|
|
521
|
+
...StyleSheet.absoluteFill,
|
|
510
522
|
zIndex: -9999,
|
|
511
523
|
pointerEvents: 'box-none',
|
|
512
524
|
},
|
|
525
|
+
scrollableContainer: {
|
|
526
|
+
...StyleSheet.absoluteFill,
|
|
527
|
+
},
|
|
513
528
|
scrollableContent: {
|
|
514
529
|
flex: 1,
|
|
515
530
|
},
|
package/src/TrueSheet.types.ts
CHANGED
|
@@ -442,6 +442,22 @@ export interface TrueSheetProps extends ViewProps {
|
|
|
442
442
|
*/
|
|
443
443
|
scrollableOptions?: ScrollableOptions;
|
|
444
444
|
|
|
445
|
+
/**
|
|
446
|
+
* Renders the sheet as a detached floating card, not attached to the bottom edge.
|
|
447
|
+
*
|
|
448
|
+
* @platform web
|
|
449
|
+
* @default false
|
|
450
|
+
*/
|
|
451
|
+
detached?: boolean;
|
|
452
|
+
|
|
453
|
+
/**
|
|
454
|
+
* The offset from the bottom edge when [`detached`](#detached) is enabled.
|
|
455
|
+
*
|
|
456
|
+
* @platform web
|
|
457
|
+
* @default 16
|
|
458
|
+
*/
|
|
459
|
+
detachedOffset?: number;
|
|
460
|
+
|
|
445
461
|
/**
|
|
446
462
|
* Defines the stack behavior when a modal is presented.
|
|
447
463
|
* - `push`: Mount the modal on top of the current one.
|
package/src/TrueSheet.web.tsx
CHANGED
|
@@ -19,9 +19,8 @@ import BottomSheet, {
|
|
|
19
19
|
type BottomSheetBackdropProps,
|
|
20
20
|
BottomSheetFooter,
|
|
21
21
|
type BottomSheetFooterProps,
|
|
22
|
-
BottomSheetHandle,
|
|
23
|
-
type BottomSheetHandleProps,
|
|
24
22
|
BottomSheetModal,
|
|
23
|
+
type BottomSheetProps,
|
|
25
24
|
BottomSheetView,
|
|
26
25
|
type SNAP_POINT_TYPE,
|
|
27
26
|
} from '@gorhom/bottom-sheet';
|
|
@@ -54,7 +53,10 @@ const DEFAULT_MAX_WIDTH = 640;
|
|
|
54
53
|
const COLOR_SURFACE_CONTAINER_LOW_LIGHT = '#F7F2FA';
|
|
55
54
|
const COLOR_SURFACE_CONTAINER_LOW_DARK = '#1D1B20';
|
|
56
55
|
|
|
57
|
-
const
|
|
56
|
+
const DEFAULT_ANCHOR_OFFSET = 16;
|
|
57
|
+
const DEFAULT_DETACHED_OFFSET = 16;
|
|
58
|
+
const DEFAULT_GRABBER_COLOR_LIGHT = 'rgba(0, 0, 0, 0.3)';
|
|
59
|
+
const DEFAULT_GRABBER_COLOR_DARK = 'rgba(255, 255, 255, 0.3)';
|
|
58
60
|
const DEFAULT_GRABBER_WIDTH = 32;
|
|
59
61
|
const DEFAULT_GRABBER_HEIGHT = 4;
|
|
60
62
|
|
|
@@ -101,7 +103,7 @@ const TrueSheetComponent = forwardRef<TrueSheetRefMethods, TrueSheetProps>((prop
|
|
|
101
103
|
maxContentHeight,
|
|
102
104
|
maxContentWidth,
|
|
103
105
|
anchor = 'center',
|
|
104
|
-
anchorOffset =
|
|
106
|
+
anchorOffset = DEFAULT_ANCHOR_OFFSET,
|
|
105
107
|
header,
|
|
106
108
|
headerStyle,
|
|
107
109
|
footer,
|
|
@@ -120,6 +122,8 @@ const TrueSheetComponent = forwardRef<TrueSheetRefMethods, TrueSheetProps>((prop
|
|
|
120
122
|
onDidFocus,
|
|
121
123
|
onWillBlur,
|
|
122
124
|
onDidBlur,
|
|
125
|
+
detached,
|
|
126
|
+
detachedOffset = DEFAULT_DETACHED_OFFSET,
|
|
123
127
|
stackBehavior = 'switch',
|
|
124
128
|
style,
|
|
125
129
|
} = props;
|
|
@@ -344,29 +348,27 @@ const TrueSheetComponent = forwardRef<TrueSheetRefMethods, TrueSheetProps>((prop
|
|
|
344
348
|
[dimmed, dimmedDetentIndex, dismissible]
|
|
345
349
|
);
|
|
346
350
|
|
|
347
|
-
const
|
|
348
|
-
(handleProps: BottomSheetHandleProps) => {
|
|
349
|
-
if (!grabber) {
|
|
350
|
-
return null;
|
|
351
|
-
}
|
|
351
|
+
const indicatorHeight = grabberOptions?.height ?? DEFAULT_GRABBER_HEIGHT;
|
|
352
352
|
|
|
353
|
-
|
|
354
|
-
|
|
353
|
+
const handleStyle = useMemo(
|
|
354
|
+
() =>
|
|
355
|
+
grabber
|
|
356
|
+
? [styles.handle, { paddingTop: grabberOptions?.topMargin }]
|
|
357
|
+
: { display: 'none' as const },
|
|
358
|
+
[grabber, grabberOptions?.topMargin]
|
|
359
|
+
);
|
|
355
360
|
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
);
|
|
368
|
-
},
|
|
369
|
-
[grabber, grabberOptions]
|
|
361
|
+
const defaultGrabberColor =
|
|
362
|
+
colorScheme === 'dark' ? DEFAULT_GRABBER_COLOR_DARK : DEFAULT_GRABBER_COLOR_LIGHT;
|
|
363
|
+
|
|
364
|
+
const handleIndicatorStyle = useMemo(
|
|
365
|
+
() => ({
|
|
366
|
+
height: indicatorHeight,
|
|
367
|
+
borderRadius: grabberOptions?.cornerRadius ?? indicatorHeight / 2,
|
|
368
|
+
width: grabberOptions?.width ?? DEFAULT_GRABBER_WIDTH,
|
|
369
|
+
backgroundColor: grabberOptions?.color ?? defaultGrabberColor,
|
|
370
|
+
}),
|
|
371
|
+
[grabberOptions, indicatorHeight, defaultGrabberColor]
|
|
370
372
|
);
|
|
371
373
|
|
|
372
374
|
const footerComponent = useMemo(
|
|
@@ -459,33 +461,40 @@ const TrueSheetComponent = forwardRef<TrueSheetRefMethods, TrueSheetProps>((prop
|
|
|
459
461
|
</ContainerComponent>
|
|
460
462
|
);
|
|
461
463
|
|
|
462
|
-
const sharedProps = {
|
|
464
|
+
const sharedProps: Omit<BottomSheetProps, 'children'> = {
|
|
463
465
|
style: [
|
|
464
466
|
styles.root,
|
|
465
467
|
{
|
|
466
|
-
backgroundColor,
|
|
467
|
-
borderTopLeftRadius: cornerRadius,
|
|
468
|
-
borderTopRightRadius: cornerRadius,
|
|
469
468
|
boxShadow: getElevationShadow(elevation),
|
|
470
469
|
maxWidth: isLandscapeOrTablet ? (maxContentWidth ?? DEFAULT_MAX_WIDTH) : undefined,
|
|
471
470
|
marginLeft: isLandscapeOrTablet ? (anchor === 'left' ? anchorOffset : 'auto') : undefined,
|
|
472
471
|
marginRight: isLandscapeOrTablet ? (anchor === 'right' ? anchorOffset : 'auto') : undefined,
|
|
472
|
+
marginHorizontal: detached ? anchorOffset : undefined,
|
|
473
473
|
},
|
|
474
474
|
],
|
|
475
|
+
backgroundStyle: {
|
|
476
|
+
backgroundColor,
|
|
477
|
+
borderTopLeftRadius: cornerRadius,
|
|
478
|
+
borderTopRightRadius: cornerRadius,
|
|
479
|
+
borderBottomLeftRadius: detached ? cornerRadius : 0,
|
|
480
|
+
borderBottomRightRadius: detached ? cornerRadius : 0,
|
|
481
|
+
},
|
|
475
482
|
index: snapIndex,
|
|
476
483
|
enablePanDownToClose: dismissible,
|
|
477
484
|
enableContentPanningGesture: draggable,
|
|
478
485
|
enableHandlePanningGesture: draggable,
|
|
479
486
|
animatedPosition,
|
|
480
487
|
animatedIndex,
|
|
481
|
-
|
|
488
|
+
handleStyle,
|
|
489
|
+
handleIndicatorStyle,
|
|
482
490
|
onChange: handleChange,
|
|
483
491
|
onAnimate: handleAnimate,
|
|
484
492
|
enableDynamicSizing: hasAutoDetent,
|
|
485
493
|
maxDynamicContentSize: maxContentHeight,
|
|
486
494
|
snapPoints: snapPoints.length > 0 ? snapPoints : undefined,
|
|
495
|
+
detached,
|
|
496
|
+
bottomInset: detached ? detachedOffset : undefined,
|
|
487
497
|
backdropComponent,
|
|
488
|
-
backgroundComponent: null,
|
|
489
498
|
footerComponent,
|
|
490
499
|
};
|
|
491
500
|
|
|
@@ -52,8 +52,8 @@ export const ReanimatedTrueSheetScreen = ({
|
|
|
52
52
|
initialDetentIndex={initialDetentIndex}
|
|
53
53
|
detents={detents}
|
|
54
54
|
onPositionChange={reanimatedPositionChangeHandler}
|
|
55
|
-
{...eventHandlers}
|
|
56
55
|
{...sheetProps}
|
|
56
|
+
{...eventHandlers}
|
|
57
57
|
>
|
|
58
58
|
{children}
|
|
59
59
|
</AnimatedTrueSheet>
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import type { ParamListBase } from '@react-navigation/native';
|
|
2
2
|
|
|
3
|
-
import type {
|
|
4
|
-
import type {
|
|
3
|
+
import type { TrueSheetProps } from '../../TrueSheet.types';
|
|
4
|
+
import type {
|
|
5
|
+
PositionChangeHandler,
|
|
6
|
+
TrueSheetNavigationHelpers,
|
|
7
|
+
TrueSheetNavigationProp,
|
|
8
|
+
TrueSheetNavigationSheetProps,
|
|
9
|
+
} from '../types';
|
|
5
10
|
|
|
6
|
-
export
|
|
7
|
-
|
|
8
|
-
export interface TrueSheetScreenProps {
|
|
11
|
+
export interface TrueSheetScreenProps extends TrueSheetNavigationSheetProps {
|
|
9
12
|
detentIndex: number;
|
|
10
13
|
resizeKey?: number;
|
|
11
14
|
navigation: TrueSheetNavigationProp<ParamListBase>;
|
|
@@ -15,5 +18,4 @@ export interface TrueSheetScreenProps {
|
|
|
15
18
|
detents: TrueSheetProps['detents'];
|
|
16
19
|
children: React.ReactNode;
|
|
17
20
|
positionChangeHandler?: PositionChangeHandler;
|
|
18
|
-
[key: string]: unknown;
|
|
19
21
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useEffect, useRef } from 'react';
|
|
1
|
+
import { useCallback, useEffect, useMemo, useRef } from 'react';
|
|
2
2
|
|
|
3
3
|
import { TrueSheet } from '../../TrueSheet';
|
|
4
4
|
import type {
|
|
@@ -59,29 +59,28 @@ export const useSheetScreenState = (props: UseSheetScreenStateProps) => {
|
|
|
59
59
|
ref.current?.resize(detentIndex);
|
|
60
60
|
}, [detentIndex, resizeKey]);
|
|
61
61
|
|
|
62
|
-
const emitEvent = (
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
62
|
+
const emitEvent = useCallback(
|
|
63
|
+
(
|
|
64
|
+
type: keyof TrueSheetNavigationEventMap,
|
|
65
|
+
data: DetentInfoEventPayload | PositionChangeEventPayload | undefined
|
|
66
|
+
) => {
|
|
67
|
+
emit({
|
|
68
|
+
type,
|
|
69
|
+
target: routeKey,
|
|
70
|
+
data,
|
|
71
|
+
} as Parameters<EmitFn>[0]);
|
|
72
|
+
},
|
|
73
|
+
[emit, routeKey]
|
|
74
|
+
);
|
|
72
75
|
|
|
73
|
-
const onDidDismiss = () => {
|
|
76
|
+
const onDidDismiss = useCallback(() => {
|
|
74
77
|
emitEvent('sheetDidDismiss', undefined);
|
|
75
78
|
isDismissedRef.current = true;
|
|
76
|
-
// Remove route from state (works for both programmatic and user-initiated dismiss)
|
|
77
79
|
navigation.dispatch({ ...TrueSheetActions.remove(), source: routeKey });
|
|
78
|
-
};
|
|
80
|
+
}, [emitEvent, navigation, routeKey]);
|
|
79
81
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
initialDetentIndex: initialDetentIndexRef.current,
|
|
83
|
-
emitEvent,
|
|
84
|
-
eventHandlers: {
|
|
82
|
+
const eventHandlers = useMemo(
|
|
83
|
+
() => ({
|
|
85
84
|
onWillPresent: (e: WillPresentEvent) => emitEvent('sheetWillPresent', e.nativeEvent),
|
|
86
85
|
onDidPresent: (e: DidPresentEvent) => emitEvent('sheetDidPresent', e.nativeEvent),
|
|
87
86
|
onWillDismiss: (_e: WillDismissEvent) => emitEvent('sheetWillDismiss', undefined),
|
|
@@ -95,6 +94,14 @@ export const useSheetScreenState = (props: UseSheetScreenStateProps) => {
|
|
|
95
94
|
onDidFocus: (_e: DidFocusEvent) => emitEvent('sheetDidFocus', undefined),
|
|
96
95
|
onWillBlur: (_e: WillBlurEvent) => emitEvent('sheetWillBlur', undefined),
|
|
97
96
|
onDidBlur: (_e: DidBlurEvent) => emitEvent('sheetDidBlur', undefined),
|
|
98
|
-
},
|
|
97
|
+
}),
|
|
98
|
+
[emitEvent, onDidDismiss]
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
return {
|
|
102
|
+
ref,
|
|
103
|
+
initialDetentIndex: initialDetentIndexRef.current,
|
|
104
|
+
emitEvent,
|
|
105
|
+
eventHandlers,
|
|
99
106
|
};
|
|
100
107
|
};
|
package/src/navigation/types.ts
CHANGED
|
@@ -14,7 +14,8 @@ import type {
|
|
|
14
14
|
PositionChangeEventPayload,
|
|
15
15
|
TrueSheetProps,
|
|
16
16
|
} from '../TrueSheet.types';
|
|
17
|
-
|
|
17
|
+
|
|
18
|
+
export type PositionChangeHandler = (payload: PositionChangeEventPayload) => void;
|
|
18
19
|
|
|
19
20
|
export type TrueSheetNavigationEventMap = {
|
|
20
21
|
/**
|
|
@@ -119,10 +120,7 @@ export type TrueSheetNavigationHelpers = NavigationHelpers<
|
|
|
119
120
|
TrueSheetNavigationEventMap
|
|
120
121
|
>;
|
|
121
122
|
|
|
122
|
-
|
|
123
|
-
* Screen options for TrueSheet navigator screens.
|
|
124
|
-
*/
|
|
125
|
-
export type TrueSheetNavigationOptions = Pick<
|
|
123
|
+
export type TrueSheetNavigationSheetProps = Pick<
|
|
126
124
|
TrueSheetProps,
|
|
127
125
|
| 'detents'
|
|
128
126
|
| 'backgroundColor'
|
|
@@ -140,10 +138,23 @@ export type TrueSheetNavigationOptions = Pick<
|
|
|
140
138
|
| 'scrollable'
|
|
141
139
|
| 'pageSizing'
|
|
142
140
|
| 'header'
|
|
141
|
+
| 'headerStyle'
|
|
143
142
|
| 'footer'
|
|
143
|
+
| 'footerStyle'
|
|
144
|
+
| 'scrollableOptions'
|
|
144
145
|
| 'insetAdjustment'
|
|
146
|
+
| 'anchor'
|
|
147
|
+
| 'anchorOffset'
|
|
148
|
+
| 'elevation'
|
|
149
|
+
| 'detached'
|
|
150
|
+
| 'detachedOffset'
|
|
145
151
|
| 'stackBehavior'
|
|
146
|
-
|
|
152
|
+
>;
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Screen options for TrueSheet navigator screens.
|
|
156
|
+
*/
|
|
157
|
+
export type TrueSheetNavigationOptions = TrueSheetNavigationSheetProps & {
|
|
147
158
|
/**
|
|
148
159
|
* The detent index to present at.
|
|
149
160
|
* @default 0
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createContext, useContext, type ReactNode } from 'react';
|
|
1
|
+
import { createContext, useContext, useMemo, type ReactNode } from 'react';
|
|
2
2
|
import { useWindowDimensions } from 'react-native';
|
|
3
3
|
import { useSharedValue, type SharedValue } from 'react-native-reanimated';
|
|
4
4
|
|
|
@@ -48,11 +48,10 @@ export const ReanimatedTrueSheetProvider = ({ children }: ReanimatedTrueSheetPro
|
|
|
48
48
|
const animatedIndex = useSharedValue(-1);
|
|
49
49
|
const animatedDetent = useSharedValue(0);
|
|
50
50
|
|
|
51
|
-
const value
|
|
52
|
-
animatedPosition,
|
|
53
|
-
animatedIndex,
|
|
54
|
-
|
|
55
|
-
};
|
|
51
|
+
const value = useMemo<ReanimatedTrueSheetContextValue>(
|
|
52
|
+
() => ({ animatedPosition, animatedIndex, animatedDetent }),
|
|
53
|
+
[animatedPosition, animatedIndex, animatedDetent]
|
|
54
|
+
);
|
|
56
55
|
|
|
57
56
|
return (
|
|
58
57
|
<ReanimatedTrueSheetContext.Provider value={value}>
|