react-native-ui-lib 7.45.0-snapshot.7266 → 7.46.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/babel.config.js +0 -12
- package/index.js +0 -1
- package/lib/android/build.gradle +5 -5
- package/lib/android/src/main/java/com/wix/reactnativeuilib/UiLibPackageList.java +2 -0
- package/lib/android/src/main/java/com/wix/reactnativeuilib/highlighterview/HighlighterViewManager.java +23 -31
- package/lib/android/src/main/java/com/wix/reactnativeuilib/highlighterview/ReactHacks.java +30 -0
- package/lib/android/src/main/java/com/wix/reactnativeuilib/highlighterview/ReflectionUtils.java +34 -0
- package/lib/android/src/main/java/com/wix/reactnativeuilib/keyboardinput/utils/RuntimeUtils.java +1 -1
- package/lib/android/src/main/java/com/wix/reactnativeuilib/textinput/DefaultKeyListener.java +33 -0
- package/lib/android/src/main/java/com/wix/reactnativeuilib/textinput/KeyListenerProxy.java +53 -0
- package/lib/android/src/main/java/com/wix/reactnativeuilib/textinput/TextInputDelKeyHandlerModule.java +54 -0
- package/lib/android/src/main/java/com/wix/reactnativeuilib/textinput/TextInputDelKeyHandlerPackage.java +28 -0
- package/lib/android/src/main/java/com/wix/reactnativeuilib/textinput/ViewUtils.java +36 -0
- package/lib/components/{HighlighterOverlayView/index.d.ts → HighlighterOverlayView.d.ts} +1 -1
- package/lib/components/HighlighterOverlayView.js +40 -0
- package/lib/components/{HighlighterOverlayView/index.web.d.ts → HighlighterOverlayView.web.d.ts} +1 -1
- package/lib/components/Keyboard/{KeyboardAccessoryView → KeyboardInput}/CustomKeyboardView/CustomKeyboardView.android.d.ts +2 -5
- package/lib/components/Keyboard/KeyboardInput/CustomKeyboardView/CustomKeyboardView.android.js +28 -0
- package/lib/components/Keyboard/{KeyboardAccessoryView → KeyboardInput}/CustomKeyboardView/CustomKeyboardView.ios.d.ts +1 -1
- package/lib/components/Keyboard/{KeyboardAccessoryView → KeyboardInput}/CustomKeyboardView/CustomKeyboardView.ios.js +3 -3
- package/lib/components/Keyboard/{KeyboardAccessoryView/CustomKeyboardView → KeyboardInput}/CustomKeyboardViewBase.d.ts +0 -3
- package/lib/components/Keyboard/{KeyboardAccessoryView/CustomKeyboardView → KeyboardInput}/CustomKeyboardViewBase.js +1 -1
- package/lib/components/Keyboard/{KeyboardAccessoryView/index.d.ts → KeyboardInput/KeyboardAccessoryView.d.ts} +1 -11
- package/lib/components/Keyboard/{KeyboardAccessoryView/index.js → KeyboardInput/KeyboardAccessoryView.js} +5 -31
- package/lib/components/Keyboard/{KeyboardAccessoryView/KeyboardRegistry/index.d.ts → KeyboardInput/KeyboardRegistry.d.ts} +1 -1
- package/lib/components/Keyboard/{KeyboardAccessoryView/KeyboardRegistry/index.js → KeyboardInput/KeyboardRegistry.js} +1 -1
- package/lib/components/Keyboard/{KeyboardAccessoryView/KeyboardRegistry → KeyboardInput}/__tests__/KeyboardRegistry.spec.js +1 -1
- package/lib/components/Keyboard/{KeyboardAccessoryView → KeyboardInput}/keyboardAccessoryView.api.json +5 -5
- package/lib/components/Keyboard/{KeyboardAccessoryView/KeyboardRegistry → KeyboardInput}/keyboardRegistry.api.json +9 -9
- package/lib/components/Keyboard/KeyboardInput/utils/KeyboardUtils.d.ts +11 -0
- package/lib/components/Keyboard/KeyboardInput/utils/KeyboardUtils.js +17 -0
- package/lib/components/Keyboard/{KeyboardAccessoryView/KeyboardRegistry/EventEmitterManager → KeyboardInput/utils}/__tests__/EventEmitterManager.spec.js +1 -1
- package/lib/components/Keyboard/{KeyboardAwareInsetsView/index.d.ts → KeyboardTracking/KeyboardAwareInsetsView.d.ts} +1 -1
- package/lib/components/Keyboard/{KeyboardAwareInsetsView/index.js → KeyboardTracking/KeyboardAwareInsetsView.js} +1 -1
- package/lib/components/Keyboard/{KeyboardTrackingView → KeyboardTracking/KeyboardTrackingView}/KeyboardTrackingView.ios.d.ts +4 -1
- package/lib/components/Keyboard/{KeyboardTrackingView → KeyboardTracking/KeyboardTrackingView}/KeyboardTrackingView.ios.js +8 -5
- package/lib/components/Keyboard/{KeyboardTrackingView → KeyboardTracking/KeyboardTrackingView}/index.d.ts +2 -2
- package/lib/components/Keyboard/{KeyboardTrackingView → KeyboardTracking/KeyboardTrackingView}/keyboardTrackingView.api.json +20 -11
- package/lib/components/Keyboard/index.d.ts +6 -6
- package/lib/components/Keyboard/index.js +6 -6
- package/lib/components/SafeArea/SafeAreaInsetsManager.d.ts +7 -21
- package/lib/components/SafeArea/SafeAreaInsetsManager.js +31 -95
- package/lib/components/SafeArea/SafeAreaSpacerView.d.ts +2 -2
- package/lib/components/SafeArea/SafeAreaSpacerView.js +9 -63
- package/lib/components/index.d.ts +1 -1
- package/lib/components/index.js +1 -1
- package/lib/ios/reactnativeuilib/keyboardinput/rctcustomInputcontroller/RCTCustomInputControllerTemp.m +8 -52
- package/lib/ios/reactnativeuilib/keyboardinput/rctcustomInputcontroller/RCTCustomKeyboardViewControllerTemp.h +7 -1
- package/lib/ios/reactnativeuilib/keyboardinput/rctcustomInputcontroller/RCTCustomKeyboardViewControllerTemp.m +1 -1
- package/lib/ios/reactnativeuilib/keyboardtrackingview/KeyboardTrackingViewTempManager.m +41 -109
- package/lib/package.json +1 -1
- package/lib/react-native.config.js +3 -1
- package/metro.config.js +2 -2
- package/package.json +24 -24
- package/panningViews.d.ts +2 -0
- package/panningViews.js +1 -0
- package/react-native.config.js +3 -1
- package/sharedTransition.d.ts +2 -0
- package/sharedTransition.js +1 -0
- package/src/commons/Constants.js +5 -2
- package/src/components/KeyboardAwareScrollView/KeyboardAwareBase.js +1 -5
- package/src/components/actionSheet/index.d.ts +12 -2
- package/src/components/actionSheet/index.js +42 -3
- package/src/components/badge/index.d.ts +47 -107
- package/src/components/button/Button.driver.new.d.ts +1 -0
- package/src/components/button/Button.driver.new.js +4 -0
- package/src/components/button/button.api.json +1 -1
- package/src/components/button/index.d.ts +23 -53
- package/src/components/button/types.d.ts +1 -0
- package/src/components/colorPicker/ColorPickerDialog.d.ts +1 -1
- package/src/components/colorPicker/ColorPickerDialog.js +1 -1
- package/src/components/dateTimePicker/index.d.ts +5 -186
- package/src/components/dateTimePicker/index.js +4 -3
- package/src/components/dialog/DialogDismissibleView.d.ts +34 -0
- package/src/components/dialog/DialogDismissibleView.js +184 -0
- package/src/components/dialog/OverlayFadingBackground.d.ts +14 -0
- package/src/components/dialog/OverlayFadingBackground.js +45 -0
- package/src/components/dialog/dialog.api.json +37 -31
- package/src/components/dialog/index.d.ts +105 -13
- package/src/components/dialog/index.js +212 -204
- package/src/components/drawer/Swipeable.js +2 -1
- package/src/components/drawer/index.js +25 -31
- package/src/components/fadedScrollView/index.js +2 -7
- package/src/components/featureHighlight/index.d.ts +1 -1
- package/src/components/index.js +19 -0
- package/src/components/modal/index.d.ts +0 -5
- package/src/components/modal/index.js +10 -14
- package/src/components/modal/modal.api.json +0 -5
- package/src/components/panningViews/asPanViewConsumer.d.ts +3 -0
- package/src/components/panningViews/asPanViewConsumer.js +16 -0
- package/src/components/panningViews/panDismissibleView.d.ts +51 -0
- package/src/components/panningViews/panDismissibleView.js +350 -0
- package/src/components/panningViews/panGestureView.d.ts +23 -0
- package/src/components/panningViews/panGestureView.js +156 -0
- package/src/components/panningViews/panListenerView.d.ts +66 -0
- package/src/components/panningViews/panListenerView.js +155 -0
- package/src/components/panningViews/panResponderView.d.ts +19 -0
- package/src/components/panningViews/panResponderView.js +79 -0
- package/src/components/panningViews/panningContext.d.ts +3 -0
- package/src/components/panningViews/panningContext.js +4 -0
- package/src/components/panningViews/panningProvider.d.ts +73 -0
- package/src/components/panningViews/panningProvider.js +101 -0
- package/src/components/picker/Picker.driver.new.d.ts +3 -2
- package/src/components/picker/Picker.driver.new.js +3 -3
- package/src/components/picker/PickerItem.js +20 -6
- package/src/components/picker/PickerPresenter.d.ts +1 -0
- package/src/components/picker/PickerPresenter.js +23 -1
- package/src/components/picker/api/picker.api.json +1 -0
- package/src/components/picker/api/pickerItem.api.json +5 -0
- package/src/components/picker/helpers/useFieldType.d.ts +23 -53
- package/src/components/picker/helpers/usePickerLabel.d.ts +1 -1
- package/src/components/picker/helpers/usePickerLabel.js +3 -2
- package/src/components/picker/helpers/usePickerMigrationWarnings.d.ts +1 -1
- package/src/components/picker/helpers/usePickerMigrationWarnings.js +12 -0
- package/src/components/picker/helpers/usePickerSearch.d.ts +1 -1
- package/src/components/picker/helpers/usePickerSearch.js +8 -4
- package/src/components/picker/helpers/usePickerSelection.d.ts +1 -1
- package/src/components/picker/helpers/usePickerSelection.js +10 -2
- package/src/components/picker/index.js +22 -4
- package/src/components/picker/types.d.ts +24 -1
- package/src/components/segmentedControl/index.js +3 -3
- package/src/components/sharedTransition/ShareTransitionContext.js +3 -0
- package/src/components/sharedTransition/SharedArea.js +153 -0
- package/src/components/sharedTransition/SourceElement.js +44 -0
- package/src/components/sharedTransition/TargetElement.js +38 -0
- package/src/components/sharedTransition/index.js +9 -0
- package/src/components/slider/GradientSlider.d.ts +1 -1
- package/src/components/sortableGridList/SortableItem.js +4 -13
- package/src/components/sortableList/SortableListItem.js +4 -13
- package/src/components/stackAggregator/index.js +11 -16
- package/src/components/text/Text.driver.new.d.ts +2 -2
- package/src/components/text/Text.driver.new.js +2 -2
- package/src/components/textField/Input.js +1 -0
- package/src/components/textField/TextField.driver.new.d.ts +3 -2
- package/src/components/textField/TextField.driver.new.js +2 -2
- package/src/components/textField/presets/outline.d.ts +46 -106
- package/src/components/textField/presets/underline.d.ts +46 -106
- package/src/components/textField/usePreset.d.ts +44 -72
- package/src/incubator/dialog/dialog.api.json +54 -0
- package/src/{components → incubator}/dialog/dialogHeader.api.json +2 -2
- package/src/incubator/dialog/index.d.ts +15 -0
- package/src/incubator/dialog/index.js +218 -0
- package/src/{components → incubator}/dialog/types.d.ts +19 -0
- package/src/{components → incubator}/dialog/types.js +3 -1
- package/src/{components → incubator}/dialog/useDialogContent.d.ts +1 -1
- package/src/incubator/expandableOverlay/ExpandableOverlay.driver.js +1 -1
- package/src/incubator/expandableOverlay/index.d.ts +3 -42
- package/src/incubator/expandableOverlay/index.js +4 -1
- package/src/{hooks/useHiddenLocation/index.d.ts → incubator/hooks/useHiddenLocation.d.ts} +1 -1
- package/src/{hooks/useHiddenLocation/index.web.d.ts → incubator/hooks/useHiddenLocation.web.d.ts} +1 -1
- package/src/incubator/index.d.ts +2 -0
- package/src/incubator/index.js +2 -0
- package/src/{components → incubator}/panView/index.d.ts +3 -3
- package/src/{components → incubator}/panView/index.js +4 -4
- package/src/{components → incubator}/panView/usePanGesture.d.ts +1 -1
- package/src/incubator/toast/Toast.driver.new.d.ts +1 -0
- package/src/incubator/toast/index.js +1 -1
- package/src/index.d.ts +10 -3
- package/src/index.js +160 -41
- package/src/testkit/index.d.ts +1 -1
- package/src/testkit/index.js +1 -1
- package/src/testkit/new/Component.driver.d.ts +1 -4
- package/src/testkit/new/Component.driver.js +3 -3
- package/lib/components/HighlighterOverlayView/index.js +0 -49
- package/lib/components/Keyboard/KeyboardAccessoryView/CustomKeyboardView/CustomKeyboardView.android.js +0 -51
- package/lib/components/Keyboard/KeyboardAccessoryView/KeyboardUtils/index.d.ts +0 -26
- package/lib/components/Keyboard/KeyboardAccessoryView/KeyboardUtils/index.js +0 -91
- package/lib/components/SafeArea/__tests__/SafeAreaInsetsManager.spec.js +0 -274
- package/lib/components/SafeArea/index.d.ts +0 -10
- package/lib/components/SafeArea/index.js +0 -11
- package/panView.d.ts +0 -2
- package/panView.js +0 -1
- /package/lib/components/{HighlighterOverlayView/index.web.js → HighlighterOverlayView.web.js} +0 -0
- /package/lib/components/Keyboard/{KeyboardAccessoryView → KeyboardInput}/CustomKeyboardView/index.d.ts +0 -0
- /package/lib/components/Keyboard/{KeyboardAccessoryView → KeyboardInput}/CustomKeyboardView/index.js +0 -0
- /package/lib/components/Keyboard/{KeyboardAccessoryView → KeyboardInput}/CustomKeyboardView/index.web.d.ts +0 -0
- /package/lib/components/Keyboard/{KeyboardAccessoryView → KeyboardInput}/CustomKeyboardView/index.web.js +0 -0
- /package/lib/components/Keyboard/{KeyboardAccessoryView → KeyboardInput}/TextInputKeyboardManager/TextInputKeyboardManager.android.d.ts +0 -0
- /package/lib/components/Keyboard/{KeyboardAccessoryView → KeyboardInput}/TextInputKeyboardManager/TextInputKeyboardManager.android.js +0 -0
- /package/lib/components/Keyboard/{KeyboardAccessoryView → KeyboardInput}/TextInputKeyboardManager/TextInputKeyboardManager.ios.d.ts +0 -0
- /package/lib/components/Keyboard/{KeyboardAccessoryView → KeyboardInput}/TextInputKeyboardManager/TextInputKeyboardManager.ios.js +0 -0
- /package/lib/components/Keyboard/{KeyboardAccessoryView → KeyboardInput}/TextInputKeyboardManager/index.d.ts +0 -0
- /package/lib/components/Keyboard/{KeyboardAccessoryView → KeyboardInput}/TextInputKeyboardManager/index.js +0 -0
- /package/lib/components/Keyboard/{KeyboardAccessoryView/KeyboardRegistry/EventEmitterManager/index.d.ts → KeyboardInput/utils/EventEmitterManager.d.ts} +0 -0
- /package/lib/components/Keyboard/{KeyboardAccessoryView/KeyboardRegistry/EventEmitterManager/index.js → KeyboardInput/utils/EventEmitterManager.js} +0 -0
- /package/lib/components/Keyboard/{KeyboardTrackingView → KeyboardTracking/KeyboardTrackingView}/KeyboardTrackingView.android.d.ts +0 -0
- /package/lib/components/Keyboard/{KeyboardTrackingView → KeyboardTracking/KeyboardTrackingView}/KeyboardTrackingView.android.js +0 -0
- /package/lib/components/Keyboard/{KeyboardTrackingView → KeyboardTracking/KeyboardTrackingView}/index.js +0 -0
- /package/lib/components/Keyboard/{KeyboardTrackingView → KeyboardTracking/KeyboardTrackingView}/index.web.d.ts +0 -0
- /package/lib/components/Keyboard/{KeyboardTrackingView → KeyboardTracking/KeyboardTrackingView}/index.web.js +0 -0
- /package/lib/components/Keyboard/{KeyboardAwareInsetsView → KeyboardTracking}/keyboardAwareInsetsView.api.json +0 -0
- /package/src/{components → incubator}/dialog/Dialog.driver.new.d.ts +0 -0
- /package/src/{components → incubator}/dialog/Dialog.driver.new.js +0 -0
- /package/src/{components → incubator}/dialog/DialogHeader.d.ts +0 -0
- /package/src/{components → incubator}/dialog/DialogHeader.js +0 -0
- /package/src/{components → incubator}/dialog/useDialogContent.js +0 -0
- /package/src/{hooks/useHiddenLocation/index.js → incubator/hooks/useHiddenLocation.js} +0 -0
- /package/src/{hooks/useHiddenLocation/index.web.js → incubator/hooks/useHiddenLocation.web.js} +0 -0
- /package/src/{components → incubator}/panView/panningUtil.d.ts +0 -0
- /package/src/{components → incubator}/panView/panningUtil.js +0 -0
- /package/src/{components → incubator}/panView/usePanGesture.js +0 -0
|
@@ -1,218 +1,226 @@
|
|
|
1
|
-
import
|
|
1
|
+
import _isEmpty from "lodash/isEmpty";
|
|
2
|
+
import React, { Component } from 'react';
|
|
2
3
|
import { StyleSheet } from 'react-native';
|
|
3
|
-
import
|
|
4
|
-
import { Extrapolation, interpolate, runOnJS, useAnimatedStyle, useSharedValue, withSpring, withTiming } from 'react-native-reanimated';
|
|
5
|
-
import { Gesture, GestureDetector } from 'react-native-gesture-handler';
|
|
6
|
-
import { Spacings, Colors, BorderRadiuses } from "../../style";
|
|
7
|
-
import { useDidUpdate } from "../../hooks";
|
|
8
|
-
import { asBaseComponent, Constants } from "../../commons/new";
|
|
9
|
-
import View from "../../components/view";
|
|
10
|
-
import Modal from "../../components/modal";
|
|
4
|
+
import { Colors } from "../../style";
|
|
11
5
|
import { extractAlignmentsValues } from "../../commons/modifiers";
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
import
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
visible = false,
|
|
21
|
-
headerProps,
|
|
22
|
-
showCloseButton,
|
|
23
|
-
closeButtonProps,
|
|
24
|
-
containerStyle: propsContainerStyle,
|
|
25
|
-
containerProps: propsContainerProps,
|
|
26
|
-
width,
|
|
27
|
-
height,
|
|
28
|
-
onDismiss,
|
|
29
|
-
direction = DialogDirectionsEnum.DOWN,
|
|
30
|
-
ignoreBackgroundPress,
|
|
31
|
-
modalProps = {},
|
|
32
|
-
useSafeArea,
|
|
33
|
-
testID,
|
|
34
|
-
children
|
|
35
|
-
} = props;
|
|
36
|
-
const {
|
|
37
|
-
overlayBackgroundColor = Colors.rgba(Colors.grey10, 0.65),
|
|
38
|
-
...otherModalProps
|
|
39
|
-
} = modalProps;
|
|
40
|
-
const visibility = useSharedValue(0); // value between 0 (closed) and 1 (open)
|
|
41
|
-
const initialTranslation = useSharedValue(0);
|
|
42
|
-
const [modalVisibility, setModalVisibility] = useState(visible); // unfortunately this is needed when changing visibility by the user (clicking on an option etc)
|
|
43
|
-
|
|
44
|
-
const {
|
|
45
|
-
setRef,
|
|
46
|
-
onLayout,
|
|
47
|
-
hiddenLocation: _hiddenLocation
|
|
48
|
-
} = useHiddenLocation();
|
|
49
|
-
const hiddenLocation = _hiddenLocation[direction];
|
|
50
|
-
const wasMeasured = _hiddenLocation.wasMeasured;
|
|
51
|
-
const isVertical = useMemo(() => {
|
|
52
|
-
'worklet';
|
|
6
|
+
import { Constants, asBaseComponent } from "../../commons/new";
|
|
7
|
+
import Modal from "../modal";
|
|
8
|
+
import View from "../view";
|
|
9
|
+
import PanListenerView from "../panningViews/panListenerView";
|
|
10
|
+
import DialogDismissibleView from "./DialogDismissibleView";
|
|
11
|
+
import OverlayFadingBackground from "./OverlayFadingBackground";
|
|
12
|
+
import PanningProvider, { PanningDirections, PanningDirectionsEnum } from "../panningViews/panningProvider";
|
|
13
|
+
export { PanningDirections as DialogDirections, PanningDirectionsEnum as DialogDirectionsEnum };
|
|
53
14
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
15
|
+
// TODO: KNOWN ISSUES
|
|
16
|
+
// 1. iOS pressing on the background while enter animation is happening will not call onDismiss
|
|
17
|
+
// Touch events are not registered?
|
|
18
|
+
// 2. SafeArea is transparent
|
|
19
|
+
// 3. Check why we need the state change in DialogDismissibleView -> onLayout -> animateTo
|
|
58
20
|
|
|
59
|
-
|
|
60
|
-
}, [hiddenLocation]);
|
|
61
|
-
const getTranslationReverseInterpolation = useCallback(value => {
|
|
62
|
-
'worklet';
|
|
21
|
+
const DEFAULT_OVERLAY_BACKGROUND_COLOR = Colors.rgba(Colors.$backgroundInverted, 0.3);
|
|
63
22
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
if (visible) {
|
|
85
|
-
setModalVisibility(true);
|
|
86
|
-
} else if (wasMeasured && modalVisibility) {
|
|
87
|
-
// Close when sending visible = false
|
|
88
|
-
close();
|
|
89
|
-
}
|
|
90
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
91
|
-
}, [visible, wasMeasured]);
|
|
92
|
-
useDidUpdate(() => {
|
|
93
|
-
if (wasMeasured) {
|
|
94
|
-
if (modalVisibility) {
|
|
95
|
-
open();
|
|
96
|
-
} else if (Constants.isAndroid) {
|
|
97
|
-
onDismiss?.();
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
101
|
-
}, [modalVisibility, wasMeasured]);
|
|
102
|
-
const alignmentStyle = useMemo(() => {
|
|
103
|
-
return {
|
|
104
|
-
flex: 1,
|
|
105
|
-
alignItems: 'center',
|
|
106
|
-
...extractAlignmentsValues(props)
|
|
23
|
+
/**
|
|
24
|
+
* @description: Dialog component for displaying custom content inside a popup dialog
|
|
25
|
+
* @notes: Use alignment modifiers to control the dialog position
|
|
26
|
+
* (top, bottom, centerV, centerH, etc... by default the dialog is aligned to center)
|
|
27
|
+
* @modifiers: alignment
|
|
28
|
+
* @example: https://github.com/wix/react-native-ui-lib/blob/master/demo/src/screens/componentScreens/DialogScreen.js
|
|
29
|
+
* @gif: https://github.com/wix/react-native-ui-lib/blob/master/demo/showcase/Dialog/Dialog.gif?raw=true
|
|
30
|
+
*/
|
|
31
|
+
class Dialog extends Component {
|
|
32
|
+
static displayName = 'Dialog';
|
|
33
|
+
static directions = PanningDirectionsEnum;
|
|
34
|
+
static defaultProps = {
|
|
35
|
+
overlayBackgroundColor: DEFAULT_OVERLAY_BACKGROUND_COLOR
|
|
36
|
+
};
|
|
37
|
+
constructor(props) {
|
|
38
|
+
super(props);
|
|
39
|
+
this.state = {
|
|
40
|
+
alignments: extractAlignmentsValues(props),
|
|
41
|
+
modalVisibility: props.visible,
|
|
42
|
+
dialogVisibility: props.visible
|
|
107
43
|
};
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
44
|
+
this.styles = createStyles(this.props);
|
|
45
|
+
this.setAlignment();
|
|
46
|
+
}
|
|
47
|
+
UNSAFE_componentWillReceiveProps(nextProps) {
|
|
48
|
+
const {
|
|
49
|
+
visible: nexVisible
|
|
50
|
+
} = nextProps;
|
|
51
|
+
const {
|
|
52
|
+
visible
|
|
53
|
+
} = this.props;
|
|
54
|
+
if (nexVisible && !visible) {
|
|
55
|
+
this.setState({
|
|
56
|
+
modalVisibility: true,
|
|
57
|
+
dialogVisibility: true
|
|
58
|
+
});
|
|
59
|
+
} else if (visible && !nexVisible) {
|
|
60
|
+
this.hideDialogView();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
setAlignment() {
|
|
64
|
+
const {
|
|
65
|
+
alignments
|
|
66
|
+
} = this.state;
|
|
67
|
+
if (_isEmpty(alignments)) {
|
|
68
|
+
this.styles.alignments = this.styles.centerContent;
|
|
130
69
|
} else {
|
|
131
|
-
|
|
132
|
-
transform: [{
|
|
133
|
-
translateX: getTranslationInterpolation(visibility.value)
|
|
134
|
-
}]
|
|
135
|
-
};
|
|
70
|
+
this.styles.alignments = alignments;
|
|
136
71
|
}
|
|
137
|
-
}
|
|
138
|
-
const style = useMemo(() => {
|
|
139
|
-
return [styles.defaultDialogStyle, {
|
|
140
|
-
backgroundColor: Colors.$backgroundDefault
|
|
141
|
-
}, containerStyle, animatedStyle, width ? {
|
|
142
|
-
width
|
|
143
|
-
} : undefined, height ? {
|
|
144
|
-
height
|
|
145
|
-
} : undefined];
|
|
146
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
147
|
-
}, [containerStyle, width, height]);
|
|
148
|
-
const shouldClose = event => {
|
|
149
|
-
'worklet';
|
|
72
|
+
}
|
|
150
73
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
case DialogDirectionsEnum.UP:
|
|
159
|
-
velocity = -event.velocityY;
|
|
160
|
-
break;
|
|
161
|
-
case DialogDirectionsEnum.LEFT:
|
|
162
|
-
velocity = -event.velocityX;
|
|
163
|
-
break;
|
|
164
|
-
case DialogDirectionsEnum.RIGHT:
|
|
165
|
-
velocity = event.velocityX;
|
|
166
|
-
break;
|
|
74
|
+
// TODO: revert adding this workaround once RN fixes https://github.com/facebook/react-native/issues/29455
|
|
75
|
+
onFadeDone = () => {
|
|
76
|
+
if (!this.state.modalVisibility) {
|
|
77
|
+
setTimeout(() => {
|
|
78
|
+
// unfortunately this is needed if a modal needs to open on iOS
|
|
79
|
+
this.props.onDialogDismissed?.(this.props);
|
|
80
|
+
}, 100);
|
|
167
81
|
}
|
|
168
|
-
const wasFlung = velocity >= THRESHOLD_VELOCITY;
|
|
169
|
-
return wasPannedOverThreshold || wasFlung;
|
|
170
82
|
};
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
83
|
+
_onDismiss = () => {
|
|
84
|
+
this.setState({
|
|
85
|
+
modalVisibility: false,
|
|
86
|
+
fadeOut: false
|
|
87
|
+
}, () => {
|
|
88
|
+
const props = this.props;
|
|
89
|
+
if (props.visible) {
|
|
90
|
+
props.onDismiss?.(props);
|
|
91
|
+
}
|
|
92
|
+
// Parity with iOS Modal's onDismiss
|
|
93
|
+
if (Constants.isAndroid) {
|
|
94
|
+
props.onDialogDismissed?.(props);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
};
|
|
98
|
+
onDismiss = () => {
|
|
99
|
+
const fadeOut = Constants.isIOS && this.props.visible;
|
|
100
|
+
if (fadeOut) {
|
|
101
|
+
this.setState({
|
|
102
|
+
fadeOut
|
|
103
|
+
}, this._onDismiss);
|
|
178
104
|
} else {
|
|
179
|
-
|
|
105
|
+
this._onDismiss();
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
hideDialogView = () => {
|
|
109
|
+
this.setState({
|
|
110
|
+
dialogVisibility: false
|
|
111
|
+
});
|
|
112
|
+
};
|
|
113
|
+
renderPannableHeader = directions => {
|
|
114
|
+
const {
|
|
115
|
+
renderPannableHeader,
|
|
116
|
+
pannableHeaderProps
|
|
117
|
+
} = this.props;
|
|
118
|
+
if (renderPannableHeader) {
|
|
119
|
+
return <PanListenerView directions={directions}>{renderPannableHeader(pannableHeaderProps)}</PanListenerView>;
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
getContainerType = () => {
|
|
123
|
+
const {
|
|
124
|
+
panDirection,
|
|
125
|
+
renderPannableHeader
|
|
126
|
+
} = this.props;
|
|
127
|
+
if (!panDirection || renderPannableHeader) {
|
|
128
|
+
return View;
|
|
129
|
+
}
|
|
130
|
+
return PanListenerView;
|
|
131
|
+
};
|
|
132
|
+
renderDialogView = () => {
|
|
133
|
+
const {
|
|
134
|
+
children,
|
|
135
|
+
panDirection = PanningProvider.Directions.DOWN,
|
|
136
|
+
containerStyle,
|
|
137
|
+
testID
|
|
138
|
+
} = this.props;
|
|
139
|
+
const {
|
|
140
|
+
dialogVisibility
|
|
141
|
+
} = this.state;
|
|
142
|
+
const Container = this.getContainerType();
|
|
143
|
+
return <View testID={testID} style={[this.styles.dialogViewSize]} pointerEvents="box-none">
|
|
144
|
+
<PanningProvider>
|
|
145
|
+
<DialogDismissibleView direction={panDirection} visible={dialogVisibility} onDismiss={this.onDismiss} containerStyle={this.styles.flexType} style={this.styles.flexType}>
|
|
146
|
+
<Container directions={[panDirection]} style={[this.styles.overflow, !Constants.isWeb && this.styles.flexType, containerStyle]}>
|
|
147
|
+
{this.renderPannableHeader([panDirection])}
|
|
148
|
+
{children}
|
|
149
|
+
</Container>
|
|
150
|
+
</DialogDismissibleView>
|
|
151
|
+
</PanningProvider>
|
|
152
|
+
</View>;
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
// TODO: renderOverlay {_.invoke(this.props, 'renderOverlay')}
|
|
156
|
+
renderDialogContainer = () => {
|
|
157
|
+
const {
|
|
158
|
+
modalVisibility,
|
|
159
|
+
dialogVisibility,
|
|
160
|
+
fadeOut
|
|
161
|
+
} = this.state;
|
|
162
|
+
const {
|
|
163
|
+
useSafeArea,
|
|
164
|
+
bottom,
|
|
165
|
+
overlayBackgroundColor,
|
|
166
|
+
testID
|
|
167
|
+
} = this.props;
|
|
168
|
+
const addBottomSafeArea = Constants.isIphoneX && useSafeArea && bottom;
|
|
169
|
+
const bottomInsets = Constants.getSafeAreaInsets().bottom - 8; // TODO: should this be here or in the input style?
|
|
170
|
+
const onFadeDone = Constants.isIOS ? this.onFadeDone : undefined;
|
|
171
|
+
return <View useSafeArea={useSafeArea} style={[this.styles.centerHorizontal, this.styles.alignments, this.styles.container]} pointerEvents="box-none">
|
|
172
|
+
<OverlayFadingBackground testID={`${testID}.overlayFadingBackground`} modalVisibility={modalVisibility} dialogVisibility={dialogVisibility} overlayBackgroundColor={overlayBackgroundColor} onFadeDone={onFadeDone} fadeOut={fadeOut} />
|
|
173
|
+
{this.renderDialogView()}
|
|
174
|
+
{addBottomSafeArea && <View style={{
|
|
175
|
+
marginTop: bottomInsets
|
|
176
|
+
}} />}
|
|
177
|
+
</View>;
|
|
178
|
+
};
|
|
179
|
+
render = () => {
|
|
180
|
+
const {
|
|
181
|
+
modalVisibility
|
|
182
|
+
} = this.state;
|
|
183
|
+
const {
|
|
184
|
+
testID,
|
|
185
|
+
supportedOrientations,
|
|
186
|
+
accessibilityLabel,
|
|
187
|
+
ignoreBackgroundPress,
|
|
188
|
+
modalProps
|
|
189
|
+
} = this.props;
|
|
190
|
+
const onBackgroundPress = !ignoreBackgroundPress ? this.hideDialogView : undefined;
|
|
191
|
+
return <Modal testID={`${testID}.modal`} transparent visible={modalVisibility} animationType={'none'} onBackgroundPress={onBackgroundPress} onRequestClose={onBackgroundPress} supportedOrientations={supportedOrientations} accessibilityLabel={accessibilityLabel} {...modalProps}>
|
|
192
|
+
{this.renderDialogContainer()}
|
|
193
|
+
</Modal>;
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
function createStyles(props) {
|
|
197
|
+
const {
|
|
198
|
+
width = '90%',
|
|
199
|
+
height
|
|
200
|
+
} = props;
|
|
201
|
+
const flexType = height ? {
|
|
202
|
+
flex: 1
|
|
203
|
+
} : {
|
|
204
|
+
flex: 0
|
|
205
|
+
};
|
|
206
|
+
return StyleSheet.create({
|
|
207
|
+
dialogViewSize: {
|
|
208
|
+
width,
|
|
209
|
+
height: height ?? undefined
|
|
210
|
+
},
|
|
211
|
+
flexType,
|
|
212
|
+
container: {
|
|
213
|
+
flex: 1
|
|
214
|
+
},
|
|
215
|
+
centerHorizontal: {
|
|
216
|
+
alignItems: 'center'
|
|
217
|
+
},
|
|
218
|
+
centerContent: {
|
|
219
|
+
justifyContent: 'center'
|
|
220
|
+
},
|
|
221
|
+
overflow: {
|
|
222
|
+
overflow: 'hidden'
|
|
180
223
|
}
|
|
181
224
|
});
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
}));
|
|
185
|
-
const renderDialog = () => <GestureDetector gesture={panGesture}>
|
|
186
|
-
<View {...containerProps} reanimated={!Constants.accessibility.isReduceMotionEnabled} style={style} onLayout={onLayout} ref={setRef} testID={testID}>
|
|
187
|
-
{renderDialogContent()}
|
|
188
|
-
</View>
|
|
189
|
-
</GestureDetector>;
|
|
190
|
-
const overlayStyle = useAnimatedStyle(() => {
|
|
191
|
-
return {
|
|
192
|
-
opacity: visibility.value,
|
|
193
|
-
backgroundColor: overlayBackgroundColor
|
|
194
|
-
};
|
|
195
|
-
}, [overlayBackgroundColor]);
|
|
196
|
-
const renderOverlayView = () => <View testID={`${testID}.overlayFadingBackground`} absF reanimated style={overlayStyle} pointerEvents="none" />;
|
|
197
|
-
return <Modal transparent animationType={'none'} {...otherModalProps} testID={`${testID}.modal`} useGestureHandlerRootView visible={modalVisibility} onBackgroundPress={ignoreBackgroundPress ? undefined : close} onRequestClose={ignoreBackgroundPress ? undefined : close} onDismiss={onDismiss}>
|
|
198
|
-
{renderOverlayView()}
|
|
199
|
-
<View useSafeArea={useSafeArea} pointerEvents={'box-none'} style={alignmentStyle}>
|
|
200
|
-
{renderDialog()}
|
|
201
|
-
</View>
|
|
202
|
-
</Modal>;
|
|
203
|
-
};
|
|
204
|
-
Dialog.displayName = 'Dialog';
|
|
205
|
-
Dialog.directions = DialogDirectionsEnum;
|
|
206
|
-
Dialog.Header = DialogHeader;
|
|
207
|
-
const _Dialog = forwardRef(Dialog);
|
|
208
|
-
hoistStatics(_Dialog, Dialog);
|
|
209
|
-
export default asBaseComponent(_Dialog);
|
|
210
|
-
const styles = StyleSheet.create({
|
|
211
|
-
defaultDialogStyle: {
|
|
212
|
-
marginBottom: Spacings.s5,
|
|
213
|
-
maxHeight: '60%',
|
|
214
|
-
width: 250,
|
|
215
|
-
borderRadius: BorderRadiuses.br20,
|
|
216
|
-
overflow: 'hidden'
|
|
217
|
-
}
|
|
218
|
-
});
|
|
225
|
+
}
|
|
226
|
+
export default asBaseComponent(Dialog);
|
|
@@ -220,33 +220,30 @@ class Drawer extends PureComponent {
|
|
|
220
220
|
outputRange,
|
|
221
221
|
extrapolate: 'clamp'
|
|
222
222
|
});
|
|
223
|
-
return <RectButton key={index} testID={item.testID}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
{item.text}
|
|
248
|
-
</Animated.Text>}
|
|
249
|
-
</View>
|
|
223
|
+
return <RectButton key={index} testID={item.testID} style={[styles.action, item.style, {
|
|
224
|
+
backgroundColor: item.background || DEFAULT_BG,
|
|
225
|
+
width: item.width,
|
|
226
|
+
minWidth: itemsMinWidth
|
|
227
|
+
}]} onPress={() => this.onActionPress(item)}>
|
|
228
|
+
{item.customElement}
|
|
229
|
+
{!item.customElement && item.icon && <Animated.Image source={item.icon} style={[styles.actionIcon, {
|
|
230
|
+
width: itemsIconSize,
|
|
231
|
+
height: itemsIconSize,
|
|
232
|
+
tintColor: item.iconColor || itemsTintColor,
|
|
233
|
+
opacity,
|
|
234
|
+
transform: [{
|
|
235
|
+
scale
|
|
236
|
+
}]
|
|
237
|
+
}]} />}
|
|
238
|
+
{!item.customElement && item.text && <Animated.Text style={[styles.actionText, {
|
|
239
|
+
color: item.textColor || itemsTintColor,
|
|
240
|
+
opacity,
|
|
241
|
+
transform: [{
|
|
242
|
+
scale
|
|
243
|
+
}]
|
|
244
|
+
}, itemsTextStyle]} accessibilityElementsHidden importantForAccessibility="no-hide-descendants" accessible={false}>
|
|
245
|
+
{item.text}
|
|
246
|
+
</Animated.Text>}
|
|
250
247
|
</RectButton>;
|
|
251
248
|
};
|
|
252
249
|
render() {
|
|
@@ -258,7 +255,7 @@ class Drawer extends PureComponent {
|
|
|
258
255
|
onToggleSwipeLeft,
|
|
259
256
|
...others
|
|
260
257
|
} = this.props;
|
|
261
|
-
return <GestureHandlerRootView
|
|
258
|
+
return <GestureHandlerRootView>
|
|
262
259
|
<Swipeable {...others} ref={this._swipeableRow} friction={1} containerStyle={style} animationOptions={this.animationOptions} renderLeftActions={this.leftRender} renderRightActions={this.rightRender} rightActionsContainerStyle={this.getRightActionsContainerStyle(rightItems, leftItem)} leftActionsContainerStyle={this.getLeftActionsContainerStyle(leftItem, rightItems)} onSwipeableWillOpen={this.onSwipeableWillOpen} onSwipeableWillClose={this.onSwipeableWillClose} onToggleSwipeLeft={onToggleSwipeLeft && this.onToggleSwipeLeft}>
|
|
263
260
|
<View accessible accessibilityActions={this.getAccessibilityActions()} onAccessibilityAction={this.onAccessibilityAction} {...extractAccessibilityProps(this.props)}>
|
|
264
261
|
{children}
|
|
@@ -269,9 +266,6 @@ class Drawer extends PureComponent {
|
|
|
269
266
|
}
|
|
270
267
|
export default asBaseComponent(Drawer);
|
|
271
268
|
const styles = StyleSheet.create({
|
|
272
|
-
container: {
|
|
273
|
-
flex: 0
|
|
274
|
-
},
|
|
275
269
|
leftAction: {
|
|
276
270
|
flex: 1,
|
|
277
271
|
justifyContent: 'center',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useCallback, useRef, useImperativeHandle } from 'react';
|
|
2
|
-
import { ScrollView as RNScrollView
|
|
2
|
+
import { ScrollView as RNScrollView } from 'react-native';
|
|
3
3
|
import { ScrollView as GestureScrollView, GestureHandlerRootView } from 'react-native-gesture-handler';
|
|
4
4
|
import Fader from "../fader";
|
|
5
5
|
import useScrollEnabler from "../../hooks/useScrollEnabler";
|
|
@@ -60,7 +60,7 @@ const FadedScrollView = props => {
|
|
|
60
60
|
isScrollEnabled
|
|
61
61
|
}));
|
|
62
62
|
if (children) {
|
|
63
|
-
return <GestureHandlerRootView
|
|
63
|
+
return <GestureHandlerRootView>
|
|
64
64
|
<ScrollView scrollEventThrottle={16} decelerationRate={'fast'} {...others} horizontal={horizontal} scrollEnabled={scrollEnabled} onContentSizeChange={_onContentSizeChange} onLayout={_onLayout} onScroll={onScroll}
|
|
65
65
|
// @ts-expect-error
|
|
66
66
|
ref={scrollViewRef}>
|
|
@@ -72,10 +72,5 @@ const FadedScrollView = props => {
|
|
|
72
72
|
}
|
|
73
73
|
return null;
|
|
74
74
|
};
|
|
75
|
-
const styles = StyleSheet.create({
|
|
76
|
-
container: {
|
|
77
|
-
flex: 0
|
|
78
|
-
}
|
|
79
|
-
});
|
|
80
75
|
FadedScrollView.displayName = 'IGNORE';
|
|
81
76
|
export default forwardRef(FadedScrollView);
|
package/src/components/index.js
CHANGED
|
@@ -110,6 +110,21 @@ export default {
|
|
|
110
110
|
get PageControl() {
|
|
111
111
|
return require('./pageControl').default;
|
|
112
112
|
},
|
|
113
|
+
get PanningProvider() {
|
|
114
|
+
return require('./panningViews/panningProvider').default;
|
|
115
|
+
},
|
|
116
|
+
get PanGestureView() {
|
|
117
|
+
return require('./panningViews/panGestureView').default;
|
|
118
|
+
},
|
|
119
|
+
get PanListenerView() {
|
|
120
|
+
return require('./panningViews/panListenerView').default;
|
|
121
|
+
},
|
|
122
|
+
get PanDismissibleView() {
|
|
123
|
+
return require('./panningViews/panDismissibleView').default;
|
|
124
|
+
},
|
|
125
|
+
get PanResponderView() {
|
|
126
|
+
return require('./panningViews/panResponderView').default;
|
|
127
|
+
},
|
|
113
128
|
get Picker() {
|
|
114
129
|
return require('./picker').default;
|
|
115
130
|
},
|
|
@@ -143,6 +158,10 @@ export default {
|
|
|
143
158
|
get RadioGroup() {
|
|
144
159
|
return require('./radioButton').RadioGroup;
|
|
145
160
|
},
|
|
161
|
+
|
|
162
|
+
get SharedTransition() {
|
|
163
|
+
return require('./sharedTransition').default;
|
|
164
|
+
},
|
|
146
165
|
get StackAggregator() {
|
|
147
166
|
return require('./stackAggregator').default;
|
|
148
167
|
},
|
|
@@ -40,11 +40,6 @@ export interface ModalProps extends RNModalProps {
|
|
|
40
40
|
* Send additional props to the KeyboardAvoidingView (iOS only)
|
|
41
41
|
*/
|
|
42
42
|
keyboardAvoidingViewProps?: KeyboardAvoidingViewProps;
|
|
43
|
-
/**
|
|
44
|
-
* Fix RNModal's interaction with react-native-reanimated (Android only, default: true)
|
|
45
|
-
* See this https://github.com/software-mansion/react-native-reanimated/issues/6659#issuecomment-2704931585
|
|
46
|
-
*/
|
|
47
|
-
fixReanimatedInteraction?: boolean;
|
|
48
43
|
}
|
|
49
44
|
/**
|
|
50
45
|
* @description: Component that present content on top of the invoking screen
|
|
@@ -55,7 +55,6 @@ class Modal extends Component {
|
|
|
55
55
|
}
|
|
56
56
|
render() {
|
|
57
57
|
const {
|
|
58
|
-
fixReanimatedInteraction = true,
|
|
59
58
|
blurView,
|
|
60
59
|
enableModalBlur,
|
|
61
60
|
visible,
|
|
@@ -77,19 +76,16 @@ class Modal extends Component {
|
|
|
77
76
|
style: [styles.fill, keyboardAvoidingViewProps?.style]
|
|
78
77
|
} : {};
|
|
79
78
|
const Container = blurView ? blurView : defaultContainer;
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
</GestureContainer>
|
|
91
|
-
</RNModal>
|
|
92
|
-
</HackContainer>;
|
|
79
|
+
return <RNModal visible={Boolean(visible)} {...others}>
|
|
80
|
+
<GestureContainer {...gestureContainerProps}>
|
|
81
|
+
<KeyboardAvoidingContainer {...keyboardAvoidingContainerProps}>
|
|
82
|
+
<Container style={styles.fill} blurType="light">
|
|
83
|
+
{this.renderTouchableOverlay()}
|
|
84
|
+
{this.props.children}
|
|
85
|
+
</Container>
|
|
86
|
+
</KeyboardAvoidingContainer>
|
|
87
|
+
</GestureContainer>
|
|
88
|
+
</RNModal>;
|
|
93
89
|
}
|
|
94
90
|
}
|
|
95
91
|
const styles = StyleSheet.create({
|
|
@@ -38,11 +38,6 @@
|
|
|
38
38
|
"name": "keyboardAvoidingViewProps",
|
|
39
39
|
"type": "object",
|
|
40
40
|
"description": "Send additional props to the KeyboardAvoidingView (iOS only)"
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"name": "fixReanimatedInteraction",
|
|
44
|
-
"type": "boolean",
|
|
45
|
-
"description": "Fix RNModal's interaction with react-native-reanimated (Android only, default: true)"
|
|
46
41
|
}
|
|
47
42
|
],
|
|
48
43
|
"snippet": [
|