@react-navigation/drawer 6.1.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.
Files changed (186) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +5 -0
  3. package/lib/commonjs/index.js +104 -0
  4. package/lib/commonjs/index.js.map +1 -0
  5. package/lib/commonjs/navigators/createDrawerNavigator.js +95 -0
  6. package/lib/commonjs/navigators/createDrawerNavigator.js.map +1 -0
  7. package/lib/commonjs/types.js +6 -0
  8. package/lib/commonjs/types.js.map +1 -0
  9. package/lib/commonjs/utils/DrawerGestureContext.js +17 -0
  10. package/lib/commonjs/utils/DrawerGestureContext.js.map +1 -0
  11. package/lib/commonjs/utils/DrawerPositionContext.js +17 -0
  12. package/lib/commonjs/utils/DrawerPositionContext.js.map +1 -0
  13. package/lib/commonjs/utils/DrawerProgressContext.js +17 -0
  14. package/lib/commonjs/utils/DrawerProgressContext.js.map +1 -0
  15. package/lib/commonjs/utils/DrawerStatusContext.js +17 -0
  16. package/lib/commonjs/utils/DrawerStatusContext.js.map +1 -0
  17. package/lib/commonjs/utils/getDrawerStatusFromState.js +18 -0
  18. package/lib/commonjs/utils/getDrawerStatusFromState.js.map +1 -0
  19. package/lib/commonjs/utils/useDrawerProgress.js +27 -0
  20. package/lib/commonjs/utils/useDrawerProgress.js.map +1 -0
  21. package/lib/commonjs/utils/useDrawerStatus.js +31 -0
  22. package/lib/commonjs/utils/useDrawerStatus.js.map +1 -0
  23. package/lib/commonjs/views/DrawerContent.js +42 -0
  24. package/lib/commonjs/views/DrawerContent.js.map +1 -0
  25. package/lib/commonjs/views/DrawerContentScrollView.js +53 -0
  26. package/lib/commonjs/views/DrawerContentScrollView.js.map +1 -0
  27. package/lib/commonjs/views/DrawerItem.js +152 -0
  28. package/lib/commonjs/views/DrawerItem.js.map +1 -0
  29. package/lib/commonjs/views/DrawerItemList.js +70 -0
  30. package/lib/commonjs/views/DrawerItemList.js.map +1 -0
  31. package/lib/commonjs/views/DrawerToggleButton.js +64 -0
  32. package/lib/commonjs/views/DrawerToggleButton.js.map +1 -0
  33. package/lib/commonjs/views/DrawerView.js +282 -0
  34. package/lib/commonjs/views/DrawerView.js.map +1 -0
  35. package/lib/commonjs/views/GestureHandler.android.js +19 -0
  36. package/lib/commonjs/views/GestureHandler.android.js.map +1 -0
  37. package/lib/commonjs/views/GestureHandler.ios.js +19 -0
  38. package/lib/commonjs/views/GestureHandler.ios.js.map +1 -0
  39. package/lib/commonjs/views/GestureHandler.js +35 -0
  40. package/lib/commonjs/views/GestureHandler.js.map +1 -0
  41. package/lib/commonjs/views/GestureHandlerNative.js +50 -0
  42. package/lib/commonjs/views/GestureHandlerNative.js.map +1 -0
  43. package/lib/commonjs/views/ScreenFallback.js +62 -0
  44. package/lib/commonjs/views/ScreenFallback.js.map +1 -0
  45. package/lib/commonjs/views/assets/toggle-drawer-icon.png +0 -0
  46. package/lib/commonjs/views/assets/toggle-drawer-icon@1.5x.android.png +0 -0
  47. package/lib/commonjs/views/assets/toggle-drawer-icon@1.5x.ios.png +0 -0
  48. package/lib/commonjs/views/assets/toggle-drawer-icon@1x.android.png +0 -0
  49. package/lib/commonjs/views/assets/toggle-drawer-icon@1x.ios.png +0 -0
  50. package/lib/commonjs/views/assets/toggle-drawer-icon@2x.android.png +0 -0
  51. package/lib/commonjs/views/assets/toggle-drawer-icon@2x.ios.png +0 -0
  52. package/lib/commonjs/views/assets/toggle-drawer-icon@3x.android.png +0 -0
  53. package/lib/commonjs/views/assets/toggle-drawer-icon@3x.ios.png +0 -0
  54. package/lib/commonjs/views/assets/toggle-drawer-icon@4x.android.png +0 -0
  55. package/lib/commonjs/views/assets/toggle-drawer-icon@4x.ios.png +0 -0
  56. package/lib/commonjs/views/legacy/Drawer.js +455 -0
  57. package/lib/commonjs/views/legacy/Drawer.js.map +1 -0
  58. package/lib/commonjs/views/legacy/Overlay.js +79 -0
  59. package/lib/commonjs/views/legacy/Overlay.js.map +1 -0
  60. package/lib/commonjs/views/modern/Drawer.js +293 -0
  61. package/lib/commonjs/views/modern/Drawer.js.map +1 -0
  62. package/lib/commonjs/views/modern/Overlay.js +65 -0
  63. package/lib/commonjs/views/modern/Overlay.js.map +1 -0
  64. package/lib/module/index.js +27 -0
  65. package/lib/module/index.js.map +1 -0
  66. package/lib/module/navigators/createDrawerNavigator.js +77 -0
  67. package/lib/module/navigators/createDrawerNavigator.js.map +1 -0
  68. package/lib/module/types.js +2 -0
  69. package/lib/module/types.js.map +1 -0
  70. package/lib/module/utils/DrawerGestureContext.js +3 -0
  71. package/lib/module/utils/DrawerGestureContext.js.map +1 -0
  72. package/lib/module/utils/DrawerPositionContext.js +3 -0
  73. package/lib/module/utils/DrawerPositionContext.js.map +1 -0
  74. package/lib/module/utils/DrawerProgressContext.js +3 -0
  75. package/lib/module/utils/DrawerProgressContext.js.map +1 -0
  76. package/lib/module/utils/DrawerStatusContext.js +4 -0
  77. package/lib/module/utils/DrawerStatusContext.js.map +1 -0
  78. package/lib/module/utils/getDrawerStatusFromState.js +11 -0
  79. package/lib/module/utils/getDrawerStatusFromState.js.map +1 -0
  80. package/lib/module/utils/useDrawerProgress.js +12 -0
  81. package/lib/module/utils/useDrawerProgress.js.map +1 -0
  82. package/lib/module/utils/useDrawerStatus.js +17 -0
  83. package/lib/module/utils/useDrawerStatus.js.map +1 -0
  84. package/lib/module/views/DrawerContent.js +26 -0
  85. package/lib/module/views/DrawerContent.js.map +1 -0
  86. package/lib/module/views/DrawerContentScrollView.js +34 -0
  87. package/lib/module/views/DrawerContentScrollView.js.map +1 -0
  88. package/lib/module/views/DrawerItem.js +132 -0
  89. package/lib/module/views/DrawerItem.js.map +1 -0
  90. package/lib/module/views/DrawerItemList.js +55 -0
  91. package/lib/module/views/DrawerItemList.js.map +1 -0
  92. package/lib/module/views/DrawerToggleButton.js +48 -0
  93. package/lib/module/views/DrawerToggleButton.js.map +1 -0
  94. package/lib/module/views/DrawerView.js +256 -0
  95. package/lib/module/views/DrawerView.js.map +1 -0
  96. package/lib/module/views/GestureHandler.android.js +2 -0
  97. package/lib/module/views/GestureHandler.android.js.map +1 -0
  98. package/lib/module/views/GestureHandler.ios.js +2 -0
  99. package/lib/module/views/GestureHandler.ios.js.map +1 -0
  100. package/lib/module/views/GestureHandler.js +19 -0
  101. package/lib/module/views/GestureHandler.js.map +1 -0
  102. package/lib/module/views/GestureHandlerNative.js +11 -0
  103. package/lib/module/views/GestureHandlerNative.js.map +1 -0
  104. package/lib/module/views/ScreenFallback.js +44 -0
  105. package/lib/module/views/ScreenFallback.js.map +1 -0
  106. package/lib/module/views/assets/toggle-drawer-icon.png +0 -0
  107. package/lib/module/views/assets/toggle-drawer-icon@1.5x.android.png +0 -0
  108. package/lib/module/views/assets/toggle-drawer-icon@1.5x.ios.png +0 -0
  109. package/lib/module/views/assets/toggle-drawer-icon@1x.android.png +0 -0
  110. package/lib/module/views/assets/toggle-drawer-icon@1x.ios.png +0 -0
  111. package/lib/module/views/assets/toggle-drawer-icon@2x.android.png +0 -0
  112. package/lib/module/views/assets/toggle-drawer-icon@2x.ios.png +0 -0
  113. package/lib/module/views/assets/toggle-drawer-icon@3x.android.png +0 -0
  114. package/lib/module/views/assets/toggle-drawer-icon@3x.ios.png +0 -0
  115. package/lib/module/views/assets/toggle-drawer-icon@4x.android.png +0 -0
  116. package/lib/module/views/assets/toggle-drawer-icon@4x.ios.png +0 -0
  117. package/lib/module/views/legacy/Drawer.js +430 -0
  118. package/lib/module/views/legacy/Drawer.js.map +1 -0
  119. package/lib/module/views/legacy/Overlay.js +59 -0
  120. package/lib/module/views/legacy/Overlay.js.map +1 -0
  121. package/lib/module/views/modern/Drawer.js +272 -0
  122. package/lib/module/views/modern/Drawer.js.map +1 -0
  123. package/lib/module/views/modern/Overlay.js +47 -0
  124. package/lib/module/views/modern/Overlay.js.map +1 -0
  125. package/lib/typescript/src/index.d.ts +25 -0
  126. package/lib/typescript/src/navigators/createDrawerNavigator.d.ts +7 -0
  127. package/lib/typescript/src/types.d.ts +235 -0
  128. package/lib/typescript/src/utils/DrawerGestureContext.d.ts +3 -0
  129. package/lib/typescript/src/utils/DrawerPositionContext.d.ts +3 -0
  130. package/lib/typescript/src/utils/DrawerProgressContext.d.ts +4 -0
  131. package/lib/typescript/src/utils/DrawerStatusContext.d.ts +3 -0
  132. package/lib/typescript/src/utils/getDrawerStatusFromState.d.ts +2 -0
  133. package/lib/typescript/src/utils/useDrawerProgress.d.ts +2 -0
  134. package/lib/typescript/src/utils/useDrawerStatus.d.ts +5 -0
  135. package/lib/typescript/src/views/DrawerContent.d.ts +3 -0
  136. package/lib/typescript/src/views/DrawerContentScrollView.d.ts +6 -0
  137. package/lib/typescript/src/views/DrawerItem.d.ts +74 -0
  138. package/lib/typescript/src/views/DrawerItemList.d.ts +13 -0
  139. package/lib/typescript/src/views/DrawerToggleButton.d.ts +9 -0
  140. package/lib/typescript/src/views/DrawerView.d.ts +10 -0
  141. package/lib/typescript/src/views/GestureHandler.android.d.ts +1 -0
  142. package/lib/typescript/src/views/GestureHandler.d.ts +14 -0
  143. package/lib/typescript/src/views/GestureHandler.ios.d.ts +1 -0
  144. package/lib/typescript/src/views/GestureHandlerNative.d.ts +4 -0
  145. package/lib/typescript/src/views/ScreenFallback.d.ts +14 -0
  146. package/lib/typescript/src/views/legacy/Drawer.d.ts +44 -0
  147. package/lib/typescript/src/views/legacy/Overlay.d.ts +68 -0
  148. package/lib/typescript/src/views/modern/Drawer.d.ts +3 -0
  149. package/lib/typescript/src/views/modern/Overlay.d.ts +68 -0
  150. package/package.json +87 -0
  151. package/src/index.tsx +34 -0
  152. package/src/navigators/createDrawerNavigator.tsx +134 -0
  153. package/src/types.tsx +300 -0
  154. package/src/utils/DrawerGestureContext.tsx +3 -0
  155. package/src/utils/DrawerPositionContext.tsx +3 -0
  156. package/src/utils/DrawerProgressContext.tsx +6 -0
  157. package/src/utils/DrawerStatusContext.tsx +6 -0
  158. package/src/utils/getDrawerStatusFromState.tsx +20 -0
  159. package/src/utils/useDrawerProgress.tsx +18 -0
  160. package/src/utils/useDrawerStatus.tsx +19 -0
  161. package/src/views/DrawerContent.tsx +27 -0
  162. package/src/views/DrawerContentScrollView.tsx +52 -0
  163. package/src/views/DrawerItem.tsx +227 -0
  164. package/src/views/DrawerItemList.tsx +80 -0
  165. package/src/views/DrawerToggleButton.tsx +54 -0
  166. package/src/views/DrawerView.tsx +313 -0
  167. package/src/views/GestureHandler.android.tsx +1 -0
  168. package/src/views/GestureHandler.ios.tsx +1 -0
  169. package/src/views/GestureHandler.tsx +29 -0
  170. package/src/views/GestureHandlerNative.tsx +24 -0
  171. package/src/views/ScreenFallback.tsx +48 -0
  172. package/src/views/assets/toggle-drawer-icon.png +0 -0
  173. package/src/views/assets/toggle-drawer-icon@1.5x.android.png +0 -0
  174. package/src/views/assets/toggle-drawer-icon@1.5x.ios.png +0 -0
  175. package/src/views/assets/toggle-drawer-icon@1x.android.png +0 -0
  176. package/src/views/assets/toggle-drawer-icon@1x.ios.png +0 -0
  177. package/src/views/assets/toggle-drawer-icon@2x.android.png +0 -0
  178. package/src/views/assets/toggle-drawer-icon@2x.ios.png +0 -0
  179. package/src/views/assets/toggle-drawer-icon@3x.android.png +0 -0
  180. package/src/views/assets/toggle-drawer-icon@3x.ios.png +0 -0
  181. package/src/views/assets/toggle-drawer-icon@4x.android.png +0 -0
  182. package/src/views/assets/toggle-drawer-icon@4x.ios.png +0 -0
  183. package/src/views/legacy/Drawer.tsx +659 -0
  184. package/src/views/legacy/Overlay.tsx +74 -0
  185. package/src/views/modern/Drawer.tsx +385 -0
  186. package/src/views/modern/Overlay.tsx +56 -0
@@ -0,0 +1,293 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = Drawer;
7
+
8
+ var React = _interopRequireWildcard(require("react"));
9
+
10
+ var _reactNative = require("react-native");
11
+
12
+ var _reactNativeGestureHandler = require("react-native-gesture-handler");
13
+
14
+ var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
15
+
16
+ var _DrawerProgressContext = _interopRequireDefault(require("../../utils/DrawerProgressContext"));
17
+
18
+ var _Overlay = _interopRequireDefault(require("./Overlay"));
19
+
20
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
+
22
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
+
24
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
+
26
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
27
+
28
+ const SWIPE_DISTANCE_MINIMUM = 5;
29
+ const DEFAULT_DRAWER_WIDTH = '80%';
30
+
31
+ const minmax = (value, start, end) => {
32
+ 'worklet';
33
+
34
+ return Math.min(Math.max(value, start), end);
35
+ };
36
+
37
+ function Drawer({
38
+ dimensions,
39
+ drawerPosition,
40
+ drawerStyle,
41
+ drawerType,
42
+ gestureHandlerProps,
43
+ hideStatusBarOnOpen,
44
+ keyboardDismissMode,
45
+ onClose,
46
+ onOpen,
47
+ open,
48
+ overlayStyle,
49
+ renderDrawerContent,
50
+ renderSceneContent,
51
+ statusBarAnimation,
52
+ swipeDistanceThreshold,
53
+ swipeEdgeWidth,
54
+ swipeEnabled,
55
+ swipeVelocityThreshold
56
+ }) {
57
+ const getDrawerWidth = () => {
58
+ const {
59
+ width = DEFAULT_DRAWER_WIDTH
60
+ } = _reactNative.StyleSheet.flatten(drawerStyle) || {};
61
+
62
+ if (typeof width === 'string' && width.endsWith('%')) {
63
+ // Try to calculate width if a percentage is given
64
+ const percentage = Number(width.replace(/%$/, ''));
65
+
66
+ if (Number.isFinite(percentage)) {
67
+ return dimensions.width * (percentage / 100);
68
+ }
69
+ }
70
+
71
+ return typeof width === 'number' ? width : 0;
72
+ };
73
+
74
+ const drawerWidth = getDrawerWidth();
75
+ const isOpen = drawerType === 'permanent' ? true : open;
76
+ const isRight = drawerPosition === 'right';
77
+ const getDrawerTranslationX = React.useCallback(open => {
78
+ 'worklet';
79
+
80
+ if (drawerPosition === 'left') {
81
+ return open ? 0 : -drawerWidth;
82
+ }
83
+
84
+ return open ? 0 : drawerWidth;
85
+ }, [drawerPosition, drawerWidth]);
86
+ const hideStatusBar = React.useCallback(hide => {
87
+ if (hideStatusBarOnOpen) {
88
+ _reactNative.StatusBar.setHidden(hide, statusBarAnimation);
89
+ }
90
+ }, [hideStatusBarOnOpen, statusBarAnimation]);
91
+ React.useEffect(() => {
92
+ hideStatusBar(isOpen);
93
+ return () => hideStatusBar(false);
94
+ }, [isOpen, hideStatusBarOnOpen, statusBarAnimation, hideStatusBar]);
95
+ const interactionHandleRef = React.useRef(null);
96
+
97
+ const startInteraction = () => {
98
+ interactionHandleRef.current = _reactNative.InteractionManager.createInteractionHandle();
99
+ };
100
+
101
+ const endInteraction = () => {
102
+ if (interactionHandleRef.current != null) {
103
+ _reactNative.InteractionManager.clearInteractionHandle(interactionHandleRef.current);
104
+
105
+ interactionHandleRef.current = null;
106
+ }
107
+ };
108
+
109
+ const hideKeyboard = () => {
110
+ if (keyboardDismissMode === 'on-drag') {
111
+ _reactNative.Keyboard.dismiss();
112
+ }
113
+ };
114
+
115
+ const onGestureStart = () => {
116
+ startInteraction();
117
+ hideKeyboard();
118
+ hideStatusBar(true);
119
+ };
120
+
121
+ const onGestureEnd = () => {
122
+ endInteraction();
123
+ }; // FIXME: Currently hitSlop is broken when on Android when drawer is on right
124
+ // https://github.com/software-mansion/react-native-gesture-handler/issues/569
125
+
126
+
127
+ const hitSlop = isRight ? // Extend hitSlop to the side of the screen when drawer is closed
128
+ // This lets the user drag the drawer from the side of the screen
129
+ {
130
+ right: 0,
131
+ width: isOpen ? undefined : swipeEdgeWidth
132
+ } : {
133
+ left: 0,
134
+ width: isOpen ? undefined : swipeEdgeWidth
135
+ };
136
+ const touchStartX = (0, _reactNativeReanimated.useSharedValue)(0);
137
+ const touchX = (0, _reactNativeReanimated.useSharedValue)(0);
138
+ const translationX = (0, _reactNativeReanimated.useSharedValue)(getDrawerTranslationX(open));
139
+ const gestureState = (0, _reactNativeReanimated.useSharedValue)(_reactNativeGestureHandler.State.UNDETERMINED);
140
+ const toggleDrawer = React.useCallback((open, velocity) => {
141
+ 'worklet';
142
+
143
+ const translateX = getDrawerTranslationX(open);
144
+ touchStartX.value = 0;
145
+ touchX.value = 0;
146
+ translationX.value = (0, _reactNativeReanimated.withSpring)(translateX, {
147
+ velocity,
148
+ stiffness: 1000,
149
+ damping: 500,
150
+ mass: 3,
151
+ overshootClamping: true,
152
+ restDisplacementThreshold: 0.01,
153
+ restSpeedThreshold: 0.01
154
+ }, () => {
155
+ if (translationX.value === getDrawerTranslationX(true)) {
156
+ (0, _reactNativeReanimated.runOnJS)(onOpen)();
157
+ } else if (translationX.value === getDrawerTranslationX(false)) {
158
+ (0, _reactNativeReanimated.runOnJS)(onClose)();
159
+ }
160
+ });
161
+ }, [getDrawerTranslationX, onClose, onOpen, touchStartX, touchX, translationX]);
162
+ React.useEffect(() => toggleDrawer(open), [open, toggleDrawer]);
163
+ const onGestureEvent = (0, _reactNativeReanimated.useAnimatedGestureHandler)({
164
+ onStart: (event, ctx) => {
165
+ ctx.startX = translationX.value;
166
+ gestureState.value = event.state;
167
+ touchStartX.value = event.x;
168
+ (0, _reactNativeReanimated.runOnJS)(onGestureStart)();
169
+ },
170
+ onActive: (event, ctx) => {
171
+ touchX.value = event.x;
172
+ translationX.value = ctx.startX + event.translationX;
173
+ gestureState.value = event.state;
174
+ },
175
+ onEnd: event => {
176
+ gestureState.value = event.state;
177
+ const nextOpen = Math.abs(event.translationX) > SWIPE_DISTANCE_MINIMUM && Math.abs(event.translationX) > swipeVelocityThreshold || Math.abs(event.translationX) > swipeDistanceThreshold ? drawerPosition === 'left' ? // If swiped to right, open the drawer, otherwise close it
178
+ (event.velocityX === 0 ? event.translationX : event.velocityX) > 0 : // If swiped to left, open the drawer, otherwise close it
179
+ (event.velocityX === 0 ? event.translationX : event.velocityX) < 0 : open;
180
+ toggleDrawer(nextOpen, event.velocityX);
181
+ (0, _reactNativeReanimated.runOnJS)(onGestureEnd)();
182
+ }
183
+ });
184
+ const translateX = (0, _reactNativeReanimated.useDerivedValue)(() => {
185
+ // Comment stolen from react-native-gesture-handler/DrawerLayout
186
+ //
187
+ // While closing the drawer when user starts gesture outside of its area (in greyed
188
+ // out part of the window), we want the drawer to follow only once finger reaches the
189
+ // edge of the drawer.
190
+ // E.g. on the diagram below drawer is illustrate by X signs and the greyed out area by
191
+ // dots. The touch gesture starts at '*' and moves left, touch path is indicated by
192
+ // an arrow pointing left
193
+ // 1) +---------------+ 2) +---------------+ 3) +---------------+ 4) +---------------+
194
+ // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|
195
+ // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|
196
+ // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|
197
+ // |XXXXXXXX|......| |XXXXXXXX|.<-*..| |XXXXXXXX|<--*..| |XXXXX|<-----*..|
198
+ // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|
199
+ // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|
200
+ // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|
201
+ // +---------------+ +---------------+ +---------------+ +---------------+
202
+ //
203
+ // For the above to work properly we define animated value that will keep start position
204
+ // of the gesture. Then we use that value to calculate how much we need to subtract from
205
+ // the translationX. If the gesture started on the greyed out area we take the distance from the
206
+ // edge of the drawer to the start position. Otherwise we don't subtract at all and the
207
+ // drawer be pulled back as soon as you start the pan.
208
+ //
209
+ // This is used only when drawerType is "front"
210
+ const touchDistance = drawerType === 'front' && gestureState.value === _reactNativeGestureHandler.State.ACTIVE ? minmax(drawerPosition === 'left' ? touchStartX.value - drawerWidth : dimensions.width - drawerWidth - touchStartX.value, 0, dimensions.width) : 0;
211
+ const translateX = drawerPosition === 'left' ? minmax(translationX.value + touchDistance, -drawerWidth, 0) : minmax(translationX.value - touchDistance, 0, drawerWidth);
212
+ return translateX;
213
+ });
214
+ const drawerAnimatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
215
+ if (drawerType === 'permanent') {
216
+ return {};
217
+ }
218
+
219
+ return {
220
+ transform: [{
221
+ translateX: drawerType === 'back' ? 0 : translateX.value
222
+ }]
223
+ };
224
+ });
225
+ const contentAnimatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
226
+ if (drawerType === 'permanent') {
227
+ return {};
228
+ }
229
+
230
+ return {
231
+ transform: [{
232
+ translateX: drawerType === 'front' ? 0 : drawerPosition === 'left' ? drawerWidth + translateX.value : translateX.value - drawerWidth
233
+ }]
234
+ };
235
+ });
236
+ const progress = (0, _reactNativeReanimated.useDerivedValue)(() => {
237
+ return drawerType === 'permanent' ? 1 : (0, _reactNativeReanimated.interpolate)(translateX.value, [getDrawerTranslationX(false), getDrawerTranslationX(true)], [0, 1]);
238
+ });
239
+ return /*#__PURE__*/React.createElement(_DrawerProgressContext.default.Provider, {
240
+ value: progress
241
+ }, /*#__PURE__*/React.createElement(_reactNativeGestureHandler.PanGestureHandler, _extends({
242
+ activeOffsetX: [-SWIPE_DISTANCE_MINIMUM, SWIPE_DISTANCE_MINIMUM],
243
+ failOffsetY: [-SWIPE_DISTANCE_MINIMUM, SWIPE_DISTANCE_MINIMUM],
244
+ hitSlop: hitSlop,
245
+ enabled: drawerType !== 'permanent' && swipeEnabled,
246
+ onGestureEvent: onGestureEvent
247
+ }, gestureHandlerProps), /*#__PURE__*/React.createElement(_reactNativeReanimated.default.View, {
248
+ style: [styles.main, {
249
+ flexDirection: drawerType === 'permanent' && !isRight ? 'row-reverse' : 'row'
250
+ }]
251
+ }, /*#__PURE__*/React.createElement(_reactNativeReanimated.default.View, {
252
+ style: [styles.content, contentAnimatedStyle]
253
+ }, /*#__PURE__*/React.createElement(_reactNative.View, {
254
+ accessibilityElementsHidden: isOpen && drawerType !== 'permanent',
255
+ importantForAccessibility: isOpen && drawerType !== 'permanent' ? 'no-hide-descendants' : 'auto',
256
+ style: styles.content
257
+ }, renderSceneContent()), drawerType !== 'permanent' ? /*#__PURE__*/React.createElement(_Overlay.default, {
258
+ progress: progress,
259
+ onPress: () => toggleDrawer(false),
260
+ style: overlayStyle
261
+ }) : null), /*#__PURE__*/React.createElement(_reactNativeReanimated.default.View, {
262
+ accessibilityViewIsModal: isOpen && drawerType !== 'permanent',
263
+ removeClippedSubviews: _reactNative.Platform.OS !== 'ios',
264
+ style: [styles.container, {
265
+ position: drawerType === 'permanent' ? 'relative' : 'absolute',
266
+ zIndex: drawerType === 'back' ? -1 : 0
267
+ }, drawerAnimatedStyle, drawerStyle]
268
+ }, renderDrawerContent()))));
269
+ }
270
+
271
+ const styles = _reactNative.StyleSheet.create({
272
+ container: {
273
+ top: 0,
274
+ bottom: 0,
275
+ maxWidth: '100%',
276
+ width: DEFAULT_DRAWER_WIDTH
277
+ },
278
+ content: {
279
+ flex: 1
280
+ },
281
+ main: {
282
+ flex: 1,
283
+ ..._reactNative.Platform.select({
284
+ // FIXME: We need to hide `overflowX` on Web so the translated content doesn't show offscreen.
285
+ // But adding `overflowX: 'hidden'` prevents content from collapsing the URL bar.
286
+ web: null,
287
+ default: {
288
+ overflow: 'hidden'
289
+ }
290
+ })
291
+ }
292
+ });
293
+ //# sourceMappingURL=Drawer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["Drawer.tsx"],"names":["SWIPE_DISTANCE_MINIMUM","DEFAULT_DRAWER_WIDTH","minmax","value","start","end","Math","min","max","Drawer","dimensions","drawerPosition","drawerStyle","drawerType","gestureHandlerProps","hideStatusBarOnOpen","keyboardDismissMode","onClose","onOpen","open","overlayStyle","renderDrawerContent","renderSceneContent","statusBarAnimation","swipeDistanceThreshold","swipeEdgeWidth","swipeEnabled","swipeVelocityThreshold","getDrawerWidth","width","StyleSheet","flatten","endsWith","percentage","Number","replace","isFinite","drawerWidth","isOpen","isRight","getDrawerTranslationX","React","useCallback","hideStatusBar","hide","StatusBar","setHidden","useEffect","interactionHandleRef","useRef","startInteraction","current","InteractionManager","createInteractionHandle","endInteraction","clearInteractionHandle","hideKeyboard","Keyboard","dismiss","onGestureStart","onGestureEnd","hitSlop","right","undefined","left","touchStartX","touchX","translationX","gestureState","GestureState","UNDETERMINED","toggleDrawer","velocity","translateX","stiffness","damping","mass","overshootClamping","restDisplacementThreshold","restSpeedThreshold","onGestureEvent","onStart","event","ctx","startX","state","x","onActive","onEnd","nextOpen","abs","velocityX","touchDistance","ACTIVE","drawerAnimatedStyle","transform","contentAnimatedStyle","progress","styles","main","flexDirection","content","Platform","OS","container","position","zIndex","create","top","bottom","maxWidth","flex","select","web","default","overflow"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport {\n InteractionManager,\n Keyboard,\n Platform,\n StatusBar,\n StyleSheet,\n View,\n} from 'react-native';\nimport {\n PanGestureHandler,\n PanGestureHandlerGestureEvent,\n State as GestureState,\n} from 'react-native-gesture-handler';\nimport Animated, {\n interpolate,\n runOnJS,\n useAnimatedGestureHandler,\n useAnimatedStyle,\n useDerivedValue,\n useSharedValue,\n withSpring,\n} from 'react-native-reanimated';\n\nimport type { DrawerProps } from '../../types';\nimport DrawerProgressContext from '../../utils/DrawerProgressContext';\nimport Overlay from './Overlay';\n\nconst SWIPE_DISTANCE_MINIMUM = 5;\nconst DEFAULT_DRAWER_WIDTH = '80%';\n\nconst minmax = (value: number, start: number, end: number) => {\n 'worklet';\n\n return Math.min(Math.max(value, start), end);\n};\n\nexport default function Drawer({\n dimensions,\n drawerPosition,\n drawerStyle,\n drawerType,\n gestureHandlerProps,\n hideStatusBarOnOpen,\n keyboardDismissMode,\n onClose,\n onOpen,\n open,\n overlayStyle,\n renderDrawerContent,\n renderSceneContent,\n statusBarAnimation,\n swipeDistanceThreshold,\n swipeEdgeWidth,\n swipeEnabled,\n swipeVelocityThreshold,\n}: DrawerProps) {\n const getDrawerWidth = (): number => {\n const { width = DEFAULT_DRAWER_WIDTH } =\n StyleSheet.flatten(drawerStyle) || {};\n\n if (typeof width === 'string' && width.endsWith('%')) {\n // Try to calculate width if a percentage is given\n const percentage = Number(width.replace(/%$/, ''));\n\n if (Number.isFinite(percentage)) {\n return dimensions.width * (percentage / 100);\n }\n }\n\n return typeof width === 'number' ? width : 0;\n };\n\n const drawerWidth = getDrawerWidth();\n\n const isOpen = drawerType === 'permanent' ? true : open;\n const isRight = drawerPosition === 'right';\n\n const getDrawerTranslationX = React.useCallback(\n (open: boolean) => {\n 'worklet';\n\n if (drawerPosition === 'left') {\n return open ? 0 : -drawerWidth;\n }\n\n return open ? 0 : drawerWidth;\n },\n [drawerPosition, drawerWidth]\n );\n\n const hideStatusBar = React.useCallback(\n (hide: boolean) => {\n if (hideStatusBarOnOpen) {\n StatusBar.setHidden(hide, statusBarAnimation);\n }\n },\n [hideStatusBarOnOpen, statusBarAnimation]\n );\n\n React.useEffect(() => {\n hideStatusBar(isOpen);\n\n return () => hideStatusBar(false);\n }, [isOpen, hideStatusBarOnOpen, statusBarAnimation, hideStatusBar]);\n\n const interactionHandleRef = React.useRef<number | null>(null);\n\n const startInteraction = () => {\n interactionHandleRef.current = InteractionManager.createInteractionHandle();\n };\n\n const endInteraction = () => {\n if (interactionHandleRef.current != null) {\n InteractionManager.clearInteractionHandle(interactionHandleRef.current);\n interactionHandleRef.current = null;\n }\n };\n\n const hideKeyboard = () => {\n if (keyboardDismissMode === 'on-drag') {\n Keyboard.dismiss();\n }\n };\n\n const onGestureStart = () => {\n startInteraction();\n hideKeyboard();\n hideStatusBar(true);\n };\n\n const onGestureEnd = () => {\n endInteraction();\n };\n\n // FIXME: Currently hitSlop is broken when on Android when drawer is on right\n // https://github.com/software-mansion/react-native-gesture-handler/issues/569\n const hitSlop = isRight\n ? // Extend hitSlop to the side of the screen when drawer is closed\n // This lets the user drag the drawer from the side of the screen\n { right: 0, width: isOpen ? undefined : swipeEdgeWidth }\n : { left: 0, width: isOpen ? undefined : swipeEdgeWidth };\n\n const touchStartX = useSharedValue(0);\n const touchX = useSharedValue(0);\n const translationX = useSharedValue(getDrawerTranslationX(open));\n const gestureState = useSharedValue<GestureState>(GestureState.UNDETERMINED);\n\n const toggleDrawer = React.useCallback(\n (open: boolean, velocity?: number) => {\n 'worklet';\n\n const translateX = getDrawerTranslationX(open);\n\n touchStartX.value = 0;\n touchX.value = 0;\n translationX.value = withSpring(\n translateX,\n {\n velocity,\n stiffness: 1000,\n damping: 500,\n mass: 3,\n overshootClamping: true,\n restDisplacementThreshold: 0.01,\n restSpeedThreshold: 0.01,\n },\n () => {\n if (translationX.value === getDrawerTranslationX(true)) {\n runOnJS(onOpen)();\n } else if (translationX.value === getDrawerTranslationX(false)) {\n runOnJS(onClose)();\n }\n }\n );\n },\n [getDrawerTranslationX, onClose, onOpen, touchStartX, touchX, translationX]\n );\n\n React.useEffect(() => toggleDrawer(open), [open, toggleDrawer]);\n\n const onGestureEvent = useAnimatedGestureHandler<\n PanGestureHandlerGestureEvent,\n { startX: number }\n >({\n onStart: (event, ctx) => {\n ctx.startX = translationX.value;\n gestureState.value = event.state;\n touchStartX.value = event.x;\n\n runOnJS(onGestureStart)();\n },\n onActive: (event, ctx) => {\n touchX.value = event.x;\n translationX.value = ctx.startX + event.translationX;\n gestureState.value = event.state;\n },\n onEnd: (event) => {\n gestureState.value = event.state;\n\n const nextOpen =\n (Math.abs(event.translationX) > SWIPE_DISTANCE_MINIMUM &&\n Math.abs(event.translationX) > swipeVelocityThreshold) ||\n Math.abs(event.translationX) > swipeDistanceThreshold\n ? drawerPosition === 'left'\n ? // If swiped to right, open the drawer, otherwise close it\n (event.velocityX === 0 ? event.translationX : event.velocityX) > 0\n : // If swiped to left, open the drawer, otherwise close it\n (event.velocityX === 0 ? event.translationX : event.velocityX) < 0\n : open;\n\n toggleDrawer(nextOpen, event.velocityX);\n runOnJS(onGestureEnd)();\n },\n });\n\n const translateX = useDerivedValue(() => {\n // Comment stolen from react-native-gesture-handler/DrawerLayout\n //\n // While closing the drawer when user starts gesture outside of its area (in greyed\n // out part of the window), we want the drawer to follow only once finger reaches the\n // edge of the drawer.\n // E.g. on the diagram below drawer is illustrate by X signs and the greyed out area by\n // dots. The touch gesture starts at '*' and moves left, touch path is indicated by\n // an arrow pointing left\n // 1) +---------------+ 2) +---------------+ 3) +---------------+ 4) +---------------+\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // |XXXXXXXX|......| |XXXXXXXX|.<-*..| |XXXXXXXX|<--*..| |XXXXX|<-----*..|\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // +---------------+ +---------------+ +---------------+ +---------------+\n //\n // For the above to work properly we define animated value that will keep start position\n // of the gesture. Then we use that value to calculate how much we need to subtract from\n // the translationX. If the gesture started on the greyed out area we take the distance from the\n // edge of the drawer to the start position. Otherwise we don't subtract at all and the\n // drawer be pulled back as soon as you start the pan.\n //\n // This is used only when drawerType is \"front\"\n const touchDistance =\n drawerType === 'front' && gestureState.value === GestureState.ACTIVE\n ? minmax(\n drawerPosition === 'left'\n ? touchStartX.value - drawerWidth\n : dimensions.width - drawerWidth - touchStartX.value,\n 0,\n dimensions.width\n )\n : 0;\n\n const translateX =\n drawerPosition === 'left'\n ? minmax(translationX.value + touchDistance, -drawerWidth, 0)\n : minmax(translationX.value - touchDistance, 0, drawerWidth);\n\n return translateX;\n });\n\n const drawerAnimatedStyle = useAnimatedStyle(() => {\n if (drawerType === 'permanent') {\n return {};\n }\n\n return {\n transform: [\n {\n translateX: drawerType === 'back' ? 0 : translateX.value,\n },\n ],\n };\n });\n\n const contentAnimatedStyle = useAnimatedStyle(() => {\n if (drawerType === 'permanent') {\n return {};\n }\n\n return {\n transform: [\n {\n translateX:\n drawerType === 'front'\n ? 0\n : drawerPosition === 'left'\n ? drawerWidth + translateX.value\n : translateX.value - drawerWidth,\n },\n ],\n };\n });\n\n const progress = useDerivedValue(() => {\n return drawerType === 'permanent'\n ? 1\n : interpolate(\n translateX.value,\n [getDrawerTranslationX(false), getDrawerTranslationX(true)],\n [0, 1]\n );\n });\n\n return (\n <DrawerProgressContext.Provider value={progress}>\n <PanGestureHandler\n activeOffsetX={[-SWIPE_DISTANCE_MINIMUM, SWIPE_DISTANCE_MINIMUM]}\n failOffsetY={[-SWIPE_DISTANCE_MINIMUM, SWIPE_DISTANCE_MINIMUM]}\n hitSlop={hitSlop}\n enabled={drawerType !== 'permanent' && swipeEnabled}\n onGestureEvent={onGestureEvent}\n {...gestureHandlerProps}\n >\n {/* Immediate child of gesture handler needs to be an Animated.View */}\n <Animated.View\n style={[\n styles.main,\n {\n flexDirection:\n drawerType === 'permanent' && !isRight ? 'row-reverse' : 'row',\n },\n ]}\n >\n <Animated.View style={[styles.content, contentAnimatedStyle]}>\n <View\n accessibilityElementsHidden={isOpen && drawerType !== 'permanent'}\n importantForAccessibility={\n isOpen && drawerType !== 'permanent'\n ? 'no-hide-descendants'\n : 'auto'\n }\n style={styles.content}\n >\n {renderSceneContent()}\n </View>\n {drawerType !== 'permanent' ? (\n <Overlay\n progress={progress}\n onPress={() => toggleDrawer(false)}\n style={overlayStyle}\n />\n ) : null}\n </Animated.View>\n <Animated.View\n accessibilityViewIsModal={isOpen && drawerType !== 'permanent'}\n removeClippedSubviews={Platform.OS !== 'ios'}\n style={[\n styles.container,\n {\n position: drawerType === 'permanent' ? 'relative' : 'absolute',\n zIndex: drawerType === 'back' ? -1 : 0,\n },\n drawerAnimatedStyle,\n drawerStyle as any,\n ]}\n >\n {renderDrawerContent()}\n </Animated.View>\n </Animated.View>\n </PanGestureHandler>\n </DrawerProgressContext.Provider>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n top: 0,\n bottom: 0,\n maxWidth: '100%',\n width: DEFAULT_DRAWER_WIDTH,\n },\n content: {\n flex: 1,\n },\n main: {\n flex: 1,\n ...Platform.select({\n // FIXME: We need to hide `overflowX` on Web so the translated content doesn't show offscreen.\n // But adding `overflowX: 'hidden'` prevents content from collapsing the URL bar.\n web: null,\n default: { overflow: 'hidden' },\n }),\n },\n});\n"]}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var React = _interopRequireWildcard(require("react"));
9
+
10
+ var _reactNative = require("react-native");
11
+
12
+ var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
13
+
14
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
+
16
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
+
18
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
19
+
20
+ const PROGRESS_EPSILON = 0.05;
21
+ const Overlay = /*#__PURE__*/React.forwardRef(function Overlay({
22
+ progress,
23
+ onPress,
24
+ style,
25
+ ...props
26
+ }, ref) {
27
+ const animatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
28
+ return {
29
+ opacity: progress.value,
30
+ // We don't want the user to be able to press through the overlay when drawer is open
31
+ // One approach is to adjust the pointerEvents based on the progress
32
+ // But we can also send the overlay behind the screen
33
+ zIndex: progress.value > PROGRESS_EPSILON ? 0 : -1
34
+ };
35
+ });
36
+ return /*#__PURE__*/React.createElement(_reactNativeReanimated.default.View, _extends({}, props, {
37
+ ref: ref,
38
+ style: [styles.overlay, overlayStyle, animatedStyle, style]
39
+ }), /*#__PURE__*/React.createElement(_reactNative.Pressable, {
40
+ onPress: onPress,
41
+ style: styles.pressable
42
+ }));
43
+ });
44
+
45
+ const overlayStyle = _reactNative.Platform.select({
46
+ web: {
47
+ // Disable touch highlight on mobile Safari.
48
+ // WebkitTapHighlightColor must be used outside of StyleSheet.create because react-native-web will omit the property.
49
+ WebkitTapHighlightColor: 'transparent'
50
+ },
51
+ default: {}
52
+ });
53
+
54
+ const styles = _reactNative.StyleSheet.create({
55
+ overlay: { ..._reactNative.StyleSheet.absoluteFillObject,
56
+ backgroundColor: 'rgba(0, 0, 0, 0.5)'
57
+ },
58
+ pressable: {
59
+ flex: 1
60
+ }
61
+ });
62
+
63
+ var _default = Overlay;
64
+ exports.default = _default;
65
+ //# sourceMappingURL=Overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["Overlay.tsx"],"names":["PROGRESS_EPSILON","Overlay","React","forwardRef","progress","onPress","style","props","ref","animatedStyle","opacity","value","zIndex","styles","overlay","overlayStyle","pressable","Platform","select","web","WebkitTapHighlightColor","default","StyleSheet","create","absoluteFillObject","backgroundColor","flex"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;;;;;AAEA,MAAMA,gBAAgB,GAAG,IAAzB;AAOA,MAAMC,OAAO,gBAAGC,KAAK,CAACC,UAAN,CAAiB,SAASF,OAAT,CAC/B;AAAEG,EAAAA,QAAF;AAAYC,EAAAA,OAAZ;AAAqBC,EAAAA,KAArB;AAA4B,KAAGC;AAA/B,CAD+B,EAE/BC,GAF+B,EAG/B;AACA,QAAMC,aAAa,GAAG,6CAAiB,MAAM;AAC3C,WAAO;AACLC,MAAAA,OAAO,EAAEN,QAAQ,CAACO,KADb;AAEL;AACA;AACA;AACAC,MAAAA,MAAM,EAAER,QAAQ,CAACO,KAAT,GAAiBX,gBAAjB,GAAoC,CAApC,GAAwC,CAAC;AAL5C,KAAP;AAOD,GARqB,CAAtB;AAUA,sBACE,oBAAC,8BAAD,CAAU,IAAV,eACMO,KADN;AAEE,IAAA,GAAG,EAAEC,GAFP;AAGE,IAAA,KAAK,EAAE,CAACK,MAAM,CAACC,OAAR,EAAiBC,YAAjB,EAA+BN,aAA/B,EAA8CH,KAA9C;AAHT,mBAKE,oBAAC,sBAAD;AAAW,IAAA,OAAO,EAAED,OAApB;AAA6B,IAAA,KAAK,EAAEQ,MAAM,CAACG;AAA3C,IALF,CADF;AASD,CAvBe,CAAhB;;AAyBA,MAAMD,YAAY,GAAGE,sBAASC,MAAT,CAAwC;AAC3DC,EAAAA,GAAG,EAAE;AACH;AACA;AACAC,IAAAA,uBAAuB,EAAE;AAHtB,GADsD;AAM3DC,EAAAA,OAAO,EAAE;AANkD,CAAxC,CAArB;;AASA,MAAMR,MAAM,GAAGS,wBAAWC,MAAX,CAAkB;AAC/BT,EAAAA,OAAO,EAAE,EACP,GAAGQ,wBAAWE,kBADP;AAEPC,IAAAA,eAAe,EAAE;AAFV,GADsB;AAK/BT,EAAAA,SAAS,EAAE;AACTU,IAAAA,IAAI,EAAE;AADG;AALoB,CAAlB,CAAf;;eAUezB,O","sourcesContent":["import * as React from 'react';\nimport { Platform, Pressable, StyleSheet } from 'react-native';\nimport Animated, { useAnimatedStyle } from 'react-native-reanimated';\n\nconst PROGRESS_EPSILON = 0.05;\n\ntype Props = React.ComponentProps<typeof Animated.View> & {\n progress: Animated.SharedValue<number>;\n onPress: () => void;\n};\n\nconst Overlay = React.forwardRef(function Overlay(\n { progress, onPress, style, ...props }: Props,\n ref: React.Ref<Animated.View>\n) {\n const animatedStyle = useAnimatedStyle(() => {\n return {\n opacity: progress.value,\n // We don't want the user to be able to press through the overlay when drawer is open\n // One approach is to adjust the pointerEvents based on the progress\n // But we can also send the overlay behind the screen\n zIndex: progress.value > PROGRESS_EPSILON ? 0 : -1,\n };\n });\n\n return (\n <Animated.View\n {...props}\n ref={ref}\n style={[styles.overlay, overlayStyle, animatedStyle, style]}\n >\n <Pressable onPress={onPress} style={styles.pressable} />\n </Animated.View>\n );\n});\n\nconst overlayStyle = Platform.select<Record<string, string>>({\n web: {\n // Disable touch highlight on mobile Safari.\n // WebkitTapHighlightColor must be used outside of StyleSheet.create because react-native-web will omit the property.\n WebkitTapHighlightColor: 'transparent',\n },\n default: {},\n});\n\nconst styles = StyleSheet.create({\n overlay: {\n ...StyleSheet.absoluteFillObject,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n },\n pressable: {\n flex: 1,\n },\n});\n\nexport default Overlay;\n"]}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Navigators
3
+ */
4
+ export { default as createDrawerNavigator } from './navigators/createDrawerNavigator';
5
+ /**
6
+ * Views
7
+ */
8
+
9
+ export { default as DrawerContent } from './views/DrawerContent';
10
+ export { default as DrawerContentScrollView } from './views/DrawerContentScrollView';
11
+ export { default as DrawerItem } from './views/DrawerItem';
12
+ export { default as DrawerItemList } from './views/DrawerItemList';
13
+ export { default as DrawerToggleButton } from './views/DrawerToggleButton';
14
+ export { default as DrawerView } from './views/DrawerView';
15
+ /**
16
+ * Utilities
17
+ */
18
+
19
+ export { default as DrawerGestureContext } from './utils/DrawerGestureContext';
20
+ export { default as DrawerProgressContext } from './utils/DrawerProgressContext';
21
+ export { default as getDrawerStatusFromState } from './utils/getDrawerStatusFromState';
22
+ export { default as useDrawerProgress } from './utils/useDrawerProgress';
23
+ export { default as useDrawerStatus } from './utils/useDrawerStatus';
24
+ /**
25
+ * Types
26
+ */
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["index.tsx"],"names":["default","createDrawerNavigator","DrawerContent","DrawerContentScrollView","DrawerItem","DrawerItemList","DrawerToggleButton","DrawerView","DrawerGestureContext","DrawerProgressContext","getDrawerStatusFromState","useDrawerProgress","useDrawerStatus"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,OAAO,IAAIC,qBAApB,QAAiD,oCAAjD;AAEA;AACA;AACA;;AACA,SAASD,OAAO,IAAIE,aAApB,QAAyC,uBAAzC;AACA,SAASF,OAAO,IAAIG,uBAApB,QAAmD,iCAAnD;AACA,SAASH,OAAO,IAAII,UAApB,QAAsC,oBAAtC;AACA,SAASJ,OAAO,IAAIK,cAApB,QAA0C,wBAA1C;AACA,SAASL,OAAO,IAAIM,kBAApB,QAA8C,4BAA9C;AACA,SAASN,OAAO,IAAIO,UAApB,QAAsC,oBAAtC;AAEA;AACA;AACA;;AACA,SAASP,OAAO,IAAIQ,oBAApB,QAAgD,8BAAhD;AACA,SAASR,OAAO,IAAIS,qBAApB,QAAiD,+BAAjD;AACA,SAAST,OAAO,IAAIU,wBAApB,QAAoD,kCAApD;AACA,SAASV,OAAO,IAAIW,iBAApB,QAA6C,2BAA7C;AACA,SAASX,OAAO,IAAIY,eAApB,QAA2C,yBAA3C;AAEA;AACA;AACA","sourcesContent":["/**\n * Navigators\n */\nexport { default as createDrawerNavigator } from './navigators/createDrawerNavigator';\n\n/**\n * Views\n */\nexport { default as DrawerContent } from './views/DrawerContent';\nexport { default as DrawerContentScrollView } from './views/DrawerContentScrollView';\nexport { default as DrawerItem } from './views/DrawerItem';\nexport { default as DrawerItemList } from './views/DrawerItemList';\nexport { default as DrawerToggleButton } from './views/DrawerToggleButton';\nexport { default as DrawerView } from './views/DrawerView';\n\n/**\n * Utilities\n */\nexport { default as DrawerGestureContext } from './utils/DrawerGestureContext';\nexport { default as DrawerProgressContext } from './utils/DrawerProgressContext';\nexport { default as getDrawerStatusFromState } from './utils/getDrawerStatusFromState';\nexport { default as useDrawerProgress } from './utils/useDrawerProgress';\nexport { default as useDrawerStatus } from './utils/useDrawerStatus';\n\n/**\n * Types\n */\nexport type {\n DrawerContentComponentProps,\n DrawerHeaderProps,\n DrawerNavigationOptions,\n DrawerNavigationProp,\n DrawerScreenProps,\n} from './types';\n"]}
@@ -0,0 +1,77 @@
1
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+
3
+ import { createNavigatorFactory, DrawerRouter, useNavigationBuilder } from '@react-navigation/native';
4
+ import * as React from 'react';
5
+ import warnOnce from 'warn-once';
6
+ import DrawerView from '../views/DrawerView';
7
+
8
+ function DrawerNavigator({
9
+ initialRouteName,
10
+ defaultStatus,
11
+ backBehavior,
12
+ children,
13
+ screenListeners,
14
+ screenOptions,
15
+ // @ts-expect-error: openByDefault is deprecated
16
+ openByDefault,
17
+ // @ts-expect-error: lazy is deprecated
18
+ lazy,
19
+ // @ts-expect-error: drawerContentOptions is deprecated
20
+ drawerContentOptions,
21
+ ...rest
22
+ }) {
23
+ let defaultScreenOptions = {};
24
+
25
+ if (drawerContentOptions) {
26
+ Object.assign(defaultScreenOptions, {
27
+ drawerPosition: drawerContentOptions.drawerPosition,
28
+ drawerType: drawerContentOptions.drawerType,
29
+ swipeEdgeWidth: drawerContentOptions.edgeWidth,
30
+ drawerHideStatusBarOnOpen: drawerContentOptions.hideStatusBar,
31
+ keyboardDismissMode: drawerContentOptions.keyboardDismissMode,
32
+ swipeMinDistance: drawerContentOptions.minSwipeDistance,
33
+ overlayColor: drawerContentOptions.overlayColor,
34
+ drawerStatusBarAnimation: drawerContentOptions.statusBarAnimation,
35
+ gestureHandlerProps: drawerContentOptions.gestureHandlerProps
36
+ });
37
+ Object.keys(defaultScreenOptions).forEach(key => {
38
+ if (defaultScreenOptions[key] === undefined) {
39
+ // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
40
+ delete defaultScreenOptions[key];
41
+ }
42
+ });
43
+ warnOnce(drawerContentOptions, `Drawer Navigator: 'drawerContentOptions' is deprecated. Migrate the options to 'screenOptions' instead.\n\nPlace the following in 'screenOptions' in your code to keep current behavior:\n\n${JSON.stringify(defaultScreenOptions, null, 2)}\n\nSee https://reactnavigation.org/docs/drawer-navigator#options for more details.`);
44
+ }
45
+
46
+ if (typeof lazy === 'boolean') {
47
+ defaultScreenOptions.lazy = lazy;
48
+ warnOnce(true, `Drawer Navigator: 'lazy' in props is deprecated. Move it to 'screenOptions' instead.\n\nSee https://reactnavigation.org/docs/drawer-navigator/#lazy for more details.`);
49
+ }
50
+
51
+ if (typeof openByDefault === 'boolean') {
52
+ warnOnce(true, `Drawer Navigator: 'openByDefault' is deprecated. Use 'defaultStatus' and set it to 'open' or 'closed' instead.\n\nSee https://reactnavigation.org/docs/drawer-navigator/#defaultstatus for more details.`);
53
+ }
54
+
55
+ const {
56
+ state,
57
+ descriptors,
58
+ navigation,
59
+ NavigationContent
60
+ } = useNavigationBuilder(DrawerRouter, {
61
+ initialRouteName,
62
+ defaultStatus: defaultStatus !== undefined ? defaultStatus : openByDefault ? 'open' : 'closed',
63
+ backBehavior,
64
+ children,
65
+ screenListeners,
66
+ screenOptions,
67
+ defaultScreenOptions
68
+ });
69
+ return /*#__PURE__*/React.createElement(NavigationContent, null, /*#__PURE__*/React.createElement(DrawerView, _extends({}, rest, {
70
+ state: state,
71
+ descriptors: descriptors,
72
+ navigation: navigation
73
+ })));
74
+ }
75
+
76
+ export default createNavigatorFactory(DrawerNavigator);
77
+ //# sourceMappingURL=createDrawerNavigator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["createDrawerNavigator.tsx"],"names":["createNavigatorFactory","DrawerRouter","useNavigationBuilder","React","warnOnce","DrawerView","DrawerNavigator","initialRouteName","defaultStatus","backBehavior","children","screenListeners","screenOptions","openByDefault","lazy","drawerContentOptions","rest","defaultScreenOptions","Object","assign","drawerPosition","drawerType","swipeEdgeWidth","edgeWidth","drawerHideStatusBarOnOpen","hideStatusBar","keyboardDismissMode","swipeMinDistance","minSwipeDistance","overlayColor","drawerStatusBarAnimation","statusBarAnimation","gestureHandlerProps","keys","forEach","key","undefined","JSON","stringify","state","descriptors","navigation","NavigationContent"],"mappings":";;AAAA,SACEA,sBADF,EAKEC,YALF,EAQEC,oBARF,QASO,0BATP;AAUA,OAAO,KAAKC,KAAZ,MAAuB,OAAvB;AACA,OAAOC,QAAP,MAAqB,WAArB;AAOA,OAAOC,UAAP,MAAuB,qBAAvB;;AAWA,SAASC,eAAT,CAAyB;AACvBC,EAAAA,gBADuB;AAEvBC,EAAAA,aAFuB;AAGvBC,EAAAA,YAHuB;AAIvBC,EAAAA,QAJuB;AAKvBC,EAAAA,eALuB;AAMvBC,EAAAA,aANuB;AAOvB;AACAC,EAAAA,aARuB;AASvB;AACAC,EAAAA,IAVuB;AAWvB;AACAC,EAAAA,oBAZuB;AAavB,KAAGC;AAboB,CAAzB,EAcU;AACR,MAAIC,oBAA6C,GAAG,EAApD;;AAEA,MAAIF,oBAAJ,EAA0B;AACxBG,IAAAA,MAAM,CAACC,MAAP,CAAcF,oBAAd,EAAoC;AAClCG,MAAAA,cAAc,EAAEL,oBAAoB,CAACK,cADH;AAElCC,MAAAA,UAAU,EAAEN,oBAAoB,CAACM,UAFC;AAGlCC,MAAAA,cAAc,EAAEP,oBAAoB,CAACQ,SAHH;AAIlCC,MAAAA,yBAAyB,EAAET,oBAAoB,CAACU,aAJd;AAKlCC,MAAAA,mBAAmB,EAAEX,oBAAoB,CAACW,mBALR;AAMlCC,MAAAA,gBAAgB,EAAEZ,oBAAoB,CAACa,gBANL;AAOlCC,MAAAA,YAAY,EAAEd,oBAAoB,CAACc,YAPD;AAQlCC,MAAAA,wBAAwB,EAAEf,oBAAoB,CAACgB,kBARb;AASlCC,MAAAA,mBAAmB,EAAEjB,oBAAoB,CAACiB;AATR,KAApC;AAaEd,IAAAA,MAAM,CAACe,IAAP,CAAYhB,oBAAZ,CADF,CAEEiB,OAFF,CAEWC,GAAD,IAAS;AACjB,UAAIlB,oBAAoB,CAACkB,GAAD,CAApB,KAA8BC,SAAlC,EAA6C;AAC3C;AACA,eAAOnB,oBAAoB,CAACkB,GAAD,CAA3B;AACD;AACF,KAPD;AASA/B,IAAAA,QAAQ,CACNW,oBADM,EAEL,+LAA8LsB,IAAI,CAACC,SAAL,CAC7LrB,oBAD6L,EAE7L,IAF6L,EAG7L,CAH6L,CAI7L,qFANI,CAAR;AAQD;;AAED,MAAI,OAAOH,IAAP,KAAgB,SAApB,EAA+B;AAC7BG,IAAAA,oBAAoB,CAACH,IAArB,GAA4BA,IAA5B;AAEAV,IAAAA,QAAQ,CACN,IADM,EAEL,uKAFK,CAAR;AAID;;AAED,MAAI,OAAOS,aAAP,KAAyB,SAA7B,EAAwC;AACtCT,IAAAA,QAAQ,CACN,IADM,EAEL,0MAFK,CAAR;AAID;;AAED,QAAM;AAAEmC,IAAAA,KAAF;AAASC,IAAAA,WAAT;AAAsBC,IAAAA,UAAtB;AAAkCC,IAAAA;AAAlC,MACJxC,oBAAoB,CAMlBD,YANkB,EAMJ;AACdM,IAAAA,gBADc;AAEdC,IAAAA,aAAa,EACXA,aAAa,KAAK4B,SAAlB,GACI5B,aADJ,GAEIK,aAAa,GACb,MADa,GAEb,QAPQ;AAQdJ,IAAAA,YARc;AASdC,IAAAA,QATc;AAUdC,IAAAA,eAVc;AAWdC,IAAAA,aAXc;AAYdK,IAAAA;AAZc,GANI,CADtB;AAsBA,sBACE,oBAAC,iBAAD,qBACE,oBAAC,UAAD,eACMD,IADN;AAEE,IAAA,KAAK,EAAEuB,KAFT;AAGE,IAAA,WAAW,EAAEC,WAHf;AAIE,IAAA,UAAU,EAAEC;AAJd,KADF,CADF;AAUD;;AAED,eAAezC,sBAAsB,CAKnCM,eALmC,CAArC","sourcesContent":["import {\n createNavigatorFactory,\n DefaultNavigatorOptions,\n DrawerActionHelpers,\n DrawerNavigationState,\n DrawerRouter,\n DrawerRouterOptions,\n ParamListBase,\n useNavigationBuilder,\n} from '@react-navigation/native';\nimport * as React from 'react';\nimport warnOnce from 'warn-once';\n\nimport type {\n DrawerNavigationConfig,\n DrawerNavigationEventMap,\n DrawerNavigationOptions,\n} from '../types';\nimport DrawerView from '../views/DrawerView';\n\ntype Props = DefaultNavigatorOptions<\n ParamListBase,\n DrawerNavigationState<ParamListBase>,\n DrawerNavigationOptions,\n DrawerNavigationEventMap\n> &\n DrawerRouterOptions &\n DrawerNavigationConfig;\n\nfunction DrawerNavigator({\n initialRouteName,\n defaultStatus,\n backBehavior,\n children,\n screenListeners,\n screenOptions,\n // @ts-expect-error: openByDefault is deprecated\n openByDefault,\n // @ts-expect-error: lazy is deprecated\n lazy,\n // @ts-expect-error: drawerContentOptions is deprecated\n drawerContentOptions,\n ...rest\n}: Props) {\n let defaultScreenOptions: DrawerNavigationOptions = {};\n\n if (drawerContentOptions) {\n Object.assign(defaultScreenOptions, {\n drawerPosition: drawerContentOptions.drawerPosition,\n drawerType: drawerContentOptions.drawerType,\n swipeEdgeWidth: drawerContentOptions.edgeWidth,\n drawerHideStatusBarOnOpen: drawerContentOptions.hideStatusBar,\n keyboardDismissMode: drawerContentOptions.keyboardDismissMode,\n swipeMinDistance: drawerContentOptions.minSwipeDistance,\n overlayColor: drawerContentOptions.overlayColor,\n drawerStatusBarAnimation: drawerContentOptions.statusBarAnimation,\n gestureHandlerProps: drawerContentOptions.gestureHandlerProps,\n });\n\n (\n Object.keys(defaultScreenOptions) as (keyof DrawerNavigationOptions)[]\n ).forEach((key) => {\n if (defaultScreenOptions[key] === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete defaultScreenOptions[key];\n }\n });\n\n warnOnce(\n drawerContentOptions,\n `Drawer Navigator: 'drawerContentOptions' is deprecated. Migrate the options to 'screenOptions' instead.\\n\\nPlace the following in 'screenOptions' in your code to keep current behavior:\\n\\n${JSON.stringify(\n defaultScreenOptions,\n null,\n 2\n )}\\n\\nSee https://reactnavigation.org/docs/drawer-navigator#options for more details.`\n );\n }\n\n if (typeof lazy === 'boolean') {\n defaultScreenOptions.lazy = lazy;\n\n warnOnce(\n true,\n `Drawer Navigator: 'lazy' in props is deprecated. Move it to 'screenOptions' instead.\\n\\nSee https://reactnavigation.org/docs/drawer-navigator/#lazy for more details.`\n );\n }\n\n if (typeof openByDefault === 'boolean') {\n warnOnce(\n true,\n `Drawer Navigator: 'openByDefault' is deprecated. Use 'defaultStatus' and set it to 'open' or 'closed' instead.\\n\\nSee https://reactnavigation.org/docs/drawer-navigator/#defaultstatus for more details.`\n );\n }\n\n const { state, descriptors, navigation, NavigationContent } =\n useNavigationBuilder<\n DrawerNavigationState<ParamListBase>,\n DrawerRouterOptions,\n DrawerActionHelpers<ParamListBase>,\n DrawerNavigationOptions,\n DrawerNavigationEventMap\n >(DrawerRouter, {\n initialRouteName,\n defaultStatus:\n defaultStatus !== undefined\n ? defaultStatus\n : openByDefault\n ? 'open'\n : 'closed',\n backBehavior,\n children,\n screenListeners,\n screenOptions,\n defaultScreenOptions,\n });\n\n return (\n <NavigationContent>\n <DrawerView\n {...rest}\n state={state}\n descriptors={descriptors}\n navigation={navigation}\n />\n </NavigationContent>\n );\n}\n\nexport default createNavigatorFactory<\n DrawerNavigationState<ParamListBase>,\n DrawerNavigationOptions,\n DrawerNavigationEventMap,\n typeof DrawerNavigator\n>(DrawerNavigator);\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[]}
@@ -0,0 +1,3 @@
1
+ import * as React from 'react';
2
+ export default /*#__PURE__*/React.createContext(null);
3
+ //# sourceMappingURL=DrawerGestureContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["DrawerGestureContext.tsx"],"names":["React","createContext"],"mappings":"AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAEA,4BAAeA,KAAK,CAACC,aAAN,CAAiD,IAAjD,CAAf","sourcesContent":["import * as React from 'react';\n\nexport default React.createContext<React.RefObject<any> | null>(null);\n"]}
@@ -0,0 +1,3 @@
1
+ import * as React from 'react';
2
+ export default /*#__PURE__*/React.createContext(undefined);
3
+ //# sourceMappingURL=DrawerPositionContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["DrawerPositionContext.tsx"],"names":["React","createContext","undefined"],"mappings":"AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAEA,4BAAeA,KAAK,CAACC,aAAN,CAAkDC,SAAlD,CAAf","sourcesContent":["import * as React from 'react';\n\nexport default React.createContext<'left' | 'right' | undefined>(undefined);\n"]}
@@ -0,0 +1,3 @@
1
+ import * as React from 'react';
2
+ export default /*#__PURE__*/React.createContext(undefined);
3
+ //# sourceMappingURL=DrawerProgressContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["DrawerProgressContext.tsx"],"names":["React","createContext","undefined"],"mappings":"AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAGA,4BAAeA,KAAK,CAACC,aAAN,CAEbC,SAFa,CAAf","sourcesContent":["import * as React from 'react';\nimport type Animated from 'react-native-reanimated';\n\nexport default React.createContext<\n Readonly<Animated.SharedValue<number>> | Animated.Node<number> | undefined\n>(undefined);\n"]}
@@ -0,0 +1,4 @@
1
+ import * as React from 'react';
2
+ const DrawerStatusContext = /*#__PURE__*/React.createContext(undefined);
3
+ export default DrawerStatusContext;
4
+ //# sourceMappingURL=DrawerStatusContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["DrawerStatusContext.tsx"],"names":["React","DrawerStatusContext","createContext","undefined"],"mappings":"AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAEA,MAAMC,mBAAmB,gBACvBD,KAAK,CAACE,aAAN,CAAmDC,SAAnD,CADF;AAGA,eAAeF,mBAAf","sourcesContent":["import * as React from 'react';\n\nconst DrawerStatusContext =\n React.createContext<'open' | 'closed' | undefined>(undefined);\n\nexport default DrawerStatusContext;\n"]}
@@ -0,0 +1,11 @@
1
+ export default function getDrawerStatusFromState(state) {
2
+ var _entry$status;
3
+
4
+ if (state.history == null) {
5
+ throw new Error("Couldn't find the drawer status in the state object. Is it a valid state object of drawer navigator?");
6
+ }
7
+
8
+ const entry = state.history.find(it => it.type === 'drawer');
9
+ return (_entry$status = entry === null || entry === void 0 ? void 0 : entry.status) !== null && _entry$status !== void 0 ? _entry$status : 'closed';
10
+ }
11
+ //# sourceMappingURL=getDrawerStatusFromState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["getDrawerStatusFromState.tsx"],"names":["getDrawerStatusFromState","state","history","Error","entry","find","it","type","status"],"mappings":"AAKA,eAAe,SAASA,wBAAT,CACbC,KADa,EAEb;AAAA;;AACA,MAAIA,KAAK,CAACC,OAAN,IAAiB,IAArB,EAA2B;AACzB,UAAM,IAAIC,KAAJ,CACJ,sGADI,CAAN;AAGD;;AAED,QAAMC,KAAK,GAAGH,KAAK,CAACC,OAAN,CAAcG,IAAd,CAAoBC,EAAD,IAAQA,EAAE,CAACC,IAAH,KAAY,QAAvC,CAAd;AAIA,0BAAOH,KAAP,aAAOA,KAAP,uBAAOA,KAAK,CAAEI,MAAd,yDAAwB,QAAxB;AACD","sourcesContent":["import type {\n DrawerNavigationState,\n ParamListBase,\n} from '@react-navigation/native';\n\nexport default function getDrawerStatusFromState(\n state: DrawerNavigationState<ParamListBase>\n) {\n if (state.history == null) {\n throw new Error(\n \"Couldn't find the drawer status in the state object. Is it a valid state object of drawer navigator?\"\n );\n }\n\n const entry = state.history.find((it) => it.type === 'drawer') as\n | { type: 'drawer'; status: 'open' }\n | undefined;\n\n return entry?.status ?? 'closed';\n}\n"]}
@@ -0,0 +1,12 @@
1
+ import * as React from 'react';
2
+ import DrawerProgressContext from './DrawerProgressContext';
3
+ export default function useDrawerProgress() {
4
+ const progress = React.useContext(DrawerProgressContext);
5
+
6
+ if (progress === undefined) {
7
+ throw new Error("Couldn't find a drawer. Is your component inside a drawer navigator?");
8
+ }
9
+
10
+ return progress;
11
+ }
12
+ //# sourceMappingURL=useDrawerProgress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["useDrawerProgress.tsx"],"names":["React","DrawerProgressContext","useDrawerProgress","progress","useContext","undefined","Error"],"mappings":"AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAGA,OAAOC,qBAAP,MAAkC,yBAAlC;AAEA,eAAe,SAASC,iBAAT,GAEW;AACxB,QAAMC,QAAQ,GAAGH,KAAK,CAACI,UAAN,CAAiBH,qBAAjB,CAAjB;;AAEA,MAAIE,QAAQ,KAAKE,SAAjB,EAA4B;AAC1B,UAAM,IAAIC,KAAJ,CACJ,sEADI,CAAN;AAGD;;AAED,SAAOH,QAAP;AACD","sourcesContent":["import * as React from 'react';\nimport type Animated from 'react-native-reanimated';\n\nimport DrawerProgressContext from './DrawerProgressContext';\n\nexport default function useDrawerProgress():\n | Readonly<Animated.SharedValue<number>>\n | Animated.Node<number> {\n const progress = React.useContext(DrawerProgressContext);\n\n if (progress === undefined) {\n throw new Error(\n \"Couldn't find a drawer. Is your component inside a drawer navigator?\"\n );\n }\n\n return progress;\n}\n"]}