@react-navigation/drawer 6.4.4 → 6.5.1

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 (85) hide show
  1. package/lib/commonjs/index.js.map +1 -1
  2. package/lib/commonjs/navigators/createDrawerNavigator.js +1 -1
  3. package/lib/commonjs/navigators/createDrawerNavigator.js.map +1 -1
  4. package/lib/commonjs/types.js.map +1 -1
  5. package/lib/commonjs/utils/DrawerGestureContext.js.map +1 -1
  6. package/lib/commonjs/utils/DrawerPositionContext.js.map +1 -1
  7. package/lib/commonjs/utils/DrawerProgressContext.js.map +1 -1
  8. package/lib/commonjs/utils/DrawerStatusContext.js.map +1 -1
  9. package/lib/commonjs/utils/getDrawerStatusFromState.js.map +1 -1
  10. package/lib/commonjs/utils/useDrawerProgress.js.map +1 -1
  11. package/lib/commonjs/utils/useDrawerStatus.js.map +1 -1
  12. package/lib/commonjs/views/DrawerContent.js +1 -1
  13. package/lib/commonjs/views/DrawerContent.js.map +1 -1
  14. package/lib/commonjs/views/DrawerContentScrollView.js +1 -1
  15. package/lib/commonjs/views/DrawerContentScrollView.js.map +1 -1
  16. package/lib/commonjs/views/DrawerItem.js +1 -1
  17. package/lib/commonjs/views/DrawerItem.js.map +1 -1
  18. package/lib/commonjs/views/DrawerItemList.js.map +1 -1
  19. package/lib/commonjs/views/DrawerToggleButton.js +1 -1
  20. package/lib/commonjs/views/DrawerToggleButton.js.map +1 -1
  21. package/lib/commonjs/views/DrawerView.js +10 -5
  22. package/lib/commonjs/views/DrawerView.js.map +1 -1
  23. package/lib/commonjs/views/GestureHandler.android.js.map +1 -1
  24. package/lib/commonjs/views/GestureHandler.ios.js.map +1 -1
  25. package/lib/commonjs/views/GestureHandler.js.map +1 -1
  26. package/lib/commonjs/views/GestureHandlerNative.js +0 -6
  27. package/lib/commonjs/views/GestureHandlerNative.js.map +1 -1
  28. package/lib/commonjs/views/ScreenFallback.js +1 -1
  29. package/lib/commonjs/views/ScreenFallback.js.map +1 -1
  30. package/lib/commonjs/views/legacy/Drawer.js +1 -1
  31. package/lib/commonjs/views/legacy/Drawer.js.map +1 -1
  32. package/lib/commonjs/views/legacy/Overlay.js +1 -1
  33. package/lib/commonjs/views/legacy/Overlay.js.map +1 -1
  34. package/lib/commonjs/views/modern/Drawer.js +10 -3
  35. package/lib/commonjs/views/modern/Drawer.js.map +1 -1
  36. package/lib/commonjs/views/modern/Overlay.js +1 -1
  37. package/lib/commonjs/views/modern/Overlay.js.map +1 -1
  38. package/lib/module/index.js.map +1 -1
  39. package/lib/module/navigators/createDrawerNavigator.js +1 -1
  40. package/lib/module/navigators/createDrawerNavigator.js.map +1 -1
  41. package/lib/module/types.js.map +1 -1
  42. package/lib/module/utils/DrawerGestureContext.js.map +1 -1
  43. package/lib/module/utils/DrawerPositionContext.js.map +1 -1
  44. package/lib/module/utils/DrawerProgressContext.js.map +1 -1
  45. package/lib/module/utils/DrawerStatusContext.js.map +1 -1
  46. package/lib/module/utils/getDrawerStatusFromState.js.map +1 -1
  47. package/lib/module/utils/useDrawerProgress.js.map +1 -1
  48. package/lib/module/utils/useDrawerStatus.js.map +1 -1
  49. package/lib/module/views/DrawerContent.js +1 -1
  50. package/lib/module/views/DrawerContent.js.map +1 -1
  51. package/lib/module/views/DrawerContentScrollView.js +1 -1
  52. package/lib/module/views/DrawerContentScrollView.js.map +1 -1
  53. package/lib/module/views/DrawerItem.js +1 -1
  54. package/lib/module/views/DrawerItem.js.map +1 -1
  55. package/lib/module/views/DrawerItemList.js.map +1 -1
  56. package/lib/module/views/DrawerToggleButton.js +1 -1
  57. package/lib/module/views/DrawerToggleButton.js.map +1 -1
  58. package/lib/module/views/DrawerView.js +10 -5
  59. package/lib/module/views/DrawerView.js.map +1 -1
  60. package/lib/module/views/GestureHandler.android.js.map +1 -1
  61. package/lib/module/views/GestureHandler.ios.js.map +1 -1
  62. package/lib/module/views/GestureHandler.js.map +1 -1
  63. package/lib/module/views/GestureHandlerNative.js +1 -1
  64. package/lib/module/views/GestureHandlerNative.js.map +1 -1
  65. package/lib/module/views/ScreenFallback.js +1 -1
  66. package/lib/module/views/ScreenFallback.js.map +1 -1
  67. package/lib/module/views/legacy/Drawer.js +1 -1
  68. package/lib/module/views/legacy/Drawer.js.map +1 -1
  69. package/lib/module/views/legacy/Overlay.js +1 -1
  70. package/lib/module/views/legacy/Overlay.js.map +1 -1
  71. package/lib/module/views/modern/Drawer.js +10 -3
  72. package/lib/module/views/modern/Drawer.js.map +1 -1
  73. package/lib/module/views/modern/Overlay.js +1 -1
  74. package/lib/module/views/modern/Overlay.js.map +1 -1
  75. package/lib/typescript/src/types.d.ts +8 -0
  76. package/lib/typescript/src/views/GestureHandlerNative.d.ts +2 -1
  77. package/lib/typescript/src/views/ScreenFallback.d.ts +1 -0
  78. package/lib/typescript/src/views/legacy/Overlay.d.ts +1 -2
  79. package/lib/typescript/src/views/modern/Overlay.d.ts +1 -2
  80. package/package.json +13 -13
  81. package/src/types.tsx +9 -0
  82. package/src/views/DrawerView.tsx +8 -3
  83. package/src/views/GestureHandlerNative.tsx +1 -1
  84. package/src/views/ScreenFallback.tsx +1 -0
  85. package/src/views/modern/Drawer.tsx +10 -3
@@ -1 +1 @@
1
- {"version":3,"sources":["Overlay.tsx"],"names":["React","Platform","Pressable","StyleSheet","Animated","interpolate","interpolateDeprecated","interpolateNode","cond","greaterThan","PROGRESS_EPSILON","Overlay","forwardRef","ref","progress","onPress","style","props","animatedStyle","opacity","inputRange","OS","outputRange","zIndex","styles","overlay","overlayStyle","pressable","select","web","WebkitTapHighlightColor","default","create","absoluteFillObject","backgroundColor","flex"],"mappings":";;AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,SAASC,QAAT,EAAmBC,SAAnB,EAA8BC,UAA9B,QAAgD,cAAhD;AACA,OAAOC,QAAP,MAAqB,yBAArB;AAEA,MAAM;AACJ;AACAC,EAAAA,WAAW,EAAEC,qBAFT;AAGJC,EAAAA,eAHI;AAIJC,EAAAA,IAJI;AAKJC,EAAAA;AALI,IAMFL,QANJ;AAQA,MAAMC,WAAmC,GACvCE,eADuC,aACvCA,eADuC,cACvCA,eADuC,GACpBD,qBADrB;AAGA,MAAMI,gBAAgB,GAAG,IAAzB;AAOA,MAAMC,OAAO,gBAAGX,KAAK,CAACY,UAAN,CAAiB,SAASD,OAAT,OAE/BE,GAF+B,EAG/B;AAAA,MAFA;AAAEC,IAAAA,QAAF;AAAYC,IAAAA,OAAZ;AAAqBC,IAAAA,KAArB;AAA4B,OAAGC;AAA/B,GAEA;AACA,QAAMC,aAAa,GAAG;AACpBC,IAAAA,OAAO,EAAEd,WAAW,CAACS,QAAD,EAAW;AAC7B;AACA;AACA;AACA;AACAM,MAAAA,UAAU,EACRnB,QAAQ,CAACoB,EAAT,KAAgB,SAAhB,IAA6BpB,QAAQ,CAACoB,EAAT,KAAgB,OAA7C,GACI,CAAC,CAAD,EAAI,CAAJ,CADJ,GAEI,CAACX,gBAAD,EAAmB,CAAnB,CARuB;AAS7BY,MAAAA,WAAW,EAAE,CAAC,CAAD,EAAI,CAAJ;AATgB,KAAX,CADA;AAYpB;AACA;AACA;AACAC,IAAAA,MAAM,EAAEf,IAAI,CAACC,WAAW,CAACK,QAAD,EAAWJ,gBAAX,CAAZ,EAA0C,CAA1C,EAA6C,CAAC,CAA9C;AAfQ,GAAtB;AAkBA,sBACE,oBAAC,QAAD,CAAU,IAAV,eACMO,KADN;AAEE,IAAA,GAAG,EAAEJ,GAFP;AAGE,IAAA,KAAK,EAAE,CAACW,MAAM,CAACC,OAAR,EAAiBC,YAAjB,EAA+BR,aAA/B,EAA8CF,KAA9C;AAHT,mBAKE,oBAAC,SAAD;AAAW,IAAA,OAAO,EAAED,OAApB;AAA6B,IAAA,KAAK,EAAES,MAAM,CAACG;AAA3C,IALF,CADF;AASD,CA/Be,CAAhB;AAiCA,MAAMD,YAAY,GAAGzB,QAAQ,CAAC2B,MAAT,CAAwC;AAC3DC,EAAAA,GAAG,EAAE;AACH;AACA;AACAC,IAAAA,uBAAuB,EAAE;AAHtB,GADsD;AAM3DC,EAAAA,OAAO,EAAE;AANkD,CAAxC,CAArB;AASA,MAAMP,MAAM,GAAGrB,UAAU,CAAC6B,MAAX,CAAkB;AAC/BP,EAAAA,OAAO,EAAE,EACP,GAAGtB,UAAU,CAAC8B,kBADP;AAEPC,IAAAA,eAAe,EAAE;AAFV,GADsB;AAK/BP,EAAAA,SAAS,EAAE;AACTQ,IAAAA,IAAI,EAAE;AADG;AALoB,CAAlB,CAAf;AAUA,eAAexB,OAAf","sourcesContent":["import * as React from 'react';\nimport { Platform, Pressable, StyleSheet } from 'react-native';\nimport Animated from 'react-native-reanimated';\n\nconst {\n // @ts-expect-error: this is to support reanimated 1\n interpolate: interpolateDeprecated,\n interpolateNode,\n cond,\n greaterThan,\n} = Animated;\n\nconst interpolate: typeof interpolateNode =\n interpolateNode ?? interpolateDeprecated;\n\nconst PROGRESS_EPSILON = 0.05;\n\ntype Props = React.ComponentProps<typeof Animated.View> & {\n progress: Animated.Node<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 = {\n opacity: interpolate(progress, {\n // Default input range is [PROGRESS_EPSILON, 1]\n // On Windows, the output value is 1 when input value is out of range for some reason\n // The default value 0 will be interpolated to 1 in this case, which is not what we want.\n // Therefore changing input range on Windows to [0,1] instead.\n inputRange:\n Platform.OS === 'windows' || Platform.OS === 'macos'\n ? [0, 1]\n : [PROGRESS_EPSILON, 1],\n outputRange: [0, 1],\n }),\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, which works, and is much less code\n zIndex: cond(greaterThan(progress, PROGRESS_EPSILON), 0, -1),\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"]}
1
+ {"version":3,"names":["React","Platform","Pressable","StyleSheet","Animated","interpolate","interpolateDeprecated","interpolateNode","cond","greaterThan","PROGRESS_EPSILON","Overlay","forwardRef","ref","progress","onPress","style","props","animatedStyle","opacity","inputRange","OS","outputRange","zIndex","styles","overlay","overlayStyle","pressable","select","web","WebkitTapHighlightColor","default","create","absoluteFillObject","backgroundColor","flex"],"sources":["Overlay.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Platform, Pressable, StyleSheet } from 'react-native';\nimport Animated from 'react-native-reanimated';\n\nconst {\n // @ts-expect-error: this is to support reanimated 1\n interpolate: interpolateDeprecated,\n interpolateNode,\n cond,\n greaterThan,\n} = Animated;\n\nconst interpolate: typeof interpolateNode =\n interpolateNode ?? interpolateDeprecated;\n\nconst PROGRESS_EPSILON = 0.05;\n\ntype Props = React.ComponentProps<typeof Animated.View> & {\n progress: Animated.Node<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 = {\n opacity: interpolate(progress, {\n // Default input range is [PROGRESS_EPSILON, 1]\n // On Windows, the output value is 1 when input value is out of range for some reason\n // The default value 0 will be interpolated to 1 in this case, which is not what we want.\n // Therefore changing input range on Windows to [0,1] instead.\n inputRange:\n Platform.OS === 'windows' || Platform.OS === 'macos'\n ? [0, 1]\n : [PROGRESS_EPSILON, 1],\n outputRange: [0, 1],\n }),\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, which works, and is much less code\n zIndex: cond(greaterThan(progress, PROGRESS_EPSILON), 0, -1),\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"],"mappings":";;AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,SAASC,QAAT,EAAmBC,SAAnB,EAA8BC,UAA9B,QAAgD,cAAhD;AACA,OAAOC,QAAP,MAAqB,yBAArB;AAEA,MAAM;EACJ;EACAC,WAAW,EAAEC,qBAFT;EAGJC,eAHI;EAIJC,IAJI;EAKJC;AALI,IAMFL,QANJ;AAQA,MAAMC,WAAmC,GACvCE,eADuC,aACvCA,eADuC,cACvCA,eADuC,GACpBD,qBADrB;AAGA,MAAMI,gBAAgB,GAAG,IAAzB;AAOA,MAAMC,OAAO,gBAAGX,KAAK,CAACY,UAAN,CAAiB,SAASD,OAAT,OAE/BE,GAF+B,EAG/B;EAAA,IAFA;IAAEC,QAAF;IAAYC,OAAZ;IAAqBC,KAArB;IAA4B,GAAGC;EAA/B,CAEA;EACA,MAAMC,aAAa,GAAG;IACpBC,OAAO,EAAEd,WAAW,CAACS,QAAD,EAAW;MAC7B;MACA;MACA;MACA;MACAM,UAAU,EACRnB,QAAQ,CAACoB,EAAT,KAAgB,SAAhB,IAA6BpB,QAAQ,CAACoB,EAAT,KAAgB,OAA7C,GACI,CAAC,CAAD,EAAI,CAAJ,CADJ,GAEI,CAACX,gBAAD,EAAmB,CAAnB,CARuB;MAS7BY,WAAW,EAAE,CAAC,CAAD,EAAI,CAAJ;IATgB,CAAX,CADA;IAYpB;IACA;IACA;IACAC,MAAM,EAAEf,IAAI,CAACC,WAAW,CAACK,QAAD,EAAWJ,gBAAX,CAAZ,EAA0C,CAA1C,EAA6C,CAAC,CAA9C;EAfQ,CAAtB;EAkBA,oBACE,oBAAC,QAAD,CAAU,IAAV,eACMO,KADN;IAEE,GAAG,EAAEJ,GAFP;IAGE,KAAK,EAAE,CAACW,MAAM,CAACC,OAAR,EAAiBC,YAAjB,EAA+BR,aAA/B,EAA8CF,KAA9C;EAHT,iBAKE,oBAAC,SAAD;IAAW,OAAO,EAAED,OAApB;IAA6B,KAAK,EAAES,MAAM,CAACG;EAA3C,EALF,CADF;AASD,CA/Be,CAAhB;AAiCA,MAAMD,YAAY,GAAGzB,QAAQ,CAAC2B,MAAT,CAAwC;EAC3DC,GAAG,EAAE;IACH;IACA;IACAC,uBAAuB,EAAE;EAHtB,CADsD;EAM3DC,OAAO,EAAE;AANkD,CAAxC,CAArB;AASA,MAAMP,MAAM,GAAGrB,UAAU,CAAC6B,MAAX,CAAkB;EAC/BP,OAAO,EAAE,EACP,GAAGtB,UAAU,CAAC8B,kBADP;IAEPC,eAAe,EAAE;EAFV,CADsB;EAK/BP,SAAS,EAAE;IACTQ,IAAI,EAAE;EADG;AALoB,CAAlB,CAAf;AAUA,eAAexB,OAAf"}
@@ -1,4 +1,4 @@
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); }
1
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : 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
2
 
3
3
  import * as React from 'react';
4
4
  import { I18nManager, InteractionManager, Keyboard, Platform, StatusBar, StyleSheet, View } from 'react-native';
@@ -144,15 +144,22 @@ export default function Drawer(_ref) {
144
144
  React.useEffect(() => toggleDrawer(open), [open, toggleDrawer]);
145
145
  const onGestureEvent = useAnimatedGestureHandler({
146
146
  onStart: (event, ctx) => {
147
+ ctx.hasCalledOnStart = false;
147
148
  ctx.startX = translationX.value;
148
149
  gestureState.value = event.state;
149
150
  touchStartX.value = event.x;
150
- runOnJS(onGestureStart)();
151
151
  },
152
152
  onActive: (event, ctx) => {
153
153
  touchX.value = event.x;
154
154
  translationX.value = ctx.startX + event.translationX;
155
- gestureState.value = event.state;
155
+ gestureState.value = event.state; // onStart will _always_ be called, even when the activation
156
+ // criteria isn't met yet. This makes sure onGestureStart is only
157
+ // called when the criteria is really met.
158
+
159
+ if (!ctx.hasCalledOnStart) {
160
+ ctx.hasCalledOnStart = true;
161
+ runOnJS(onGestureStart)();
162
+ }
156
163
  },
157
164
  onEnd: event => {
158
165
  gestureState.value = event.state;
@@ -1 +1 @@
1
- {"version":3,"sources":["Drawer.tsx"],"names":["React","I18nManager","InteractionManager","Keyboard","Platform","StatusBar","StyleSheet","View","PanGestureHandler","State","GestureState","Animated","interpolate","runOnJS","useAnimatedGestureHandler","useAnimatedStyle","useDerivedValue","useSharedValue","withSpring","DrawerProgressContext","Overlay","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","flatten","endsWith","percentage","Number","replace","isFinite","drawerWidth","isOpen","isRight","getDrawerTranslationX","useCallback","hideStatusBar","hide","setHidden","useEffect","interactionHandleRef","useRef","startInteraction","current","createInteractionHandle","endInteraction","clearInteractionHandle","hideKeyboard","dismiss","onGestureStart","onGestureFinish","hitSlop","right","undefined","left","touchStartX","touchX","translationX","gestureState","UNDETERMINED","toggleDrawer","velocity","translateX","stiffness","damping","mass","overshootClamping","restDisplacementThreshold","restSpeedThreshold","onGestureEvent","onStart","event","ctx","startX","state","x","onActive","onEnd","nextOpen","abs","velocityX","onFinish","touchDistance","ACTIVE","isRTL","getConstants","drawerAnimatedStyle","distanceFromEdge","transform","contentAnimatedStyle","progress","styles","main","flexDirection","content","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 I18nManager,\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 onGestureFinish = () => {\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(translateX, {\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 (open) {\n runOnJS(onOpen)();\n } else {\n runOnJS(onClose)();\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 },\n onFinish: () => {\n runOnJS(onGestureFinish)();\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 isRTL = I18nManager.getConstants().isRTL;\n const drawerAnimatedStyle = useAnimatedStyle(() => {\n const distanceFromEdge = dimensions.width - drawerWidth;\n\n return {\n transform:\n drawerType === 'permanent'\n ? // Reanimated needs the property to be present, but it results in Browser bug\n // https://bugs.chromium.org/p/chromium/issues/detail?id=20574\n []\n : [\n {\n translateX:\n // The drawer stays in place when `drawerType` is `back`\n (drawerType === 'back' ? 0 : translateX.value) +\n (drawerPosition === 'left'\n ? isRTL\n ? -distanceFromEdge\n : 0\n : isRTL\n ? 0\n : distanceFromEdge),\n },\n ],\n };\n });\n\n const contentAnimatedStyle = useAnimatedStyle(() => {\n return {\n transform:\n drawerType === 'permanent'\n ? // Reanimated needs the property to be present, but it results in Browser bug\n // https://bugs.chromium.org/p/chromium/issues/detail?id=20574\n []\n : [\n {\n translateX:\n // The screen content stays in place when `drawerType` is `front`\n drawerType === 'front'\n ? 0\n : translateX.value +\n drawerWidth * (drawerPosition === 'left' ? 1 : -1),\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"]}
1
+ {"version":3,"names":["React","I18nManager","InteractionManager","Keyboard","Platform","StatusBar","StyleSheet","View","PanGestureHandler","State","GestureState","Animated","interpolate","runOnJS","useAnimatedGestureHandler","useAnimatedStyle","useDerivedValue","useSharedValue","withSpring","DrawerProgressContext","Overlay","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","flatten","endsWith","percentage","Number","replace","isFinite","drawerWidth","isOpen","isRight","getDrawerTranslationX","useCallback","hideStatusBar","hide","setHidden","useEffect","interactionHandleRef","useRef","startInteraction","current","createInteractionHandle","endInteraction","clearInteractionHandle","hideKeyboard","dismiss","onGestureStart","onGestureFinish","hitSlop","right","undefined","left","touchStartX","touchX","translationX","gestureState","UNDETERMINED","toggleDrawer","velocity","translateX","stiffness","damping","mass","overshootClamping","restDisplacementThreshold","restSpeedThreshold","onGestureEvent","onStart","event","ctx","hasCalledOnStart","startX","state","x","onActive","onEnd","nextOpen","abs","velocityX","onFinish","touchDistance","ACTIVE","isRTL","getConstants","drawerAnimatedStyle","distanceFromEdge","transform","contentAnimatedStyle","progress","styles","main","flexDirection","content","OS","container","position","zIndex","create","top","bottom","maxWidth","flex","select","web","default","overflow"],"sources":["Drawer.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n I18nManager,\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 onGestureFinish = () => {\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(translateX, {\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 (open) {\n runOnJS(onOpen)();\n } else {\n runOnJS(onClose)();\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; hasCalledOnStart: boolean }\n >({\n onStart: (event, ctx) => {\n ctx.hasCalledOnStart = false;\n ctx.startX = translationX.value;\n gestureState.value = event.state;\n touchStartX.value = event.x;\n },\n onActive: (event, ctx) => {\n touchX.value = event.x;\n translationX.value = ctx.startX + event.translationX;\n gestureState.value = event.state;\n\n // onStart will _always_ be called, even when the activation\n // criteria isn't met yet. This makes sure onGestureStart is only\n // called when the criteria is really met.\n if (!ctx.hasCalledOnStart) {\n ctx.hasCalledOnStart = true;\n runOnJS(onGestureStart)();\n }\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 },\n onFinish: () => {\n runOnJS(onGestureFinish)();\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 isRTL = I18nManager.getConstants().isRTL;\n const drawerAnimatedStyle = useAnimatedStyle(() => {\n const distanceFromEdge = dimensions.width - drawerWidth;\n\n return {\n transform:\n drawerType === 'permanent'\n ? // Reanimated needs the property to be present, but it results in Browser bug\n // https://bugs.chromium.org/p/chromium/issues/detail?id=20574\n []\n : [\n {\n translateX:\n // The drawer stays in place when `drawerType` is `back`\n (drawerType === 'back' ? 0 : translateX.value) +\n (drawerPosition === 'left'\n ? isRTL\n ? -distanceFromEdge\n : 0\n : isRTL\n ? 0\n : distanceFromEdge),\n },\n ],\n };\n });\n\n const contentAnimatedStyle = useAnimatedStyle(() => {\n return {\n transform:\n drawerType === 'permanent'\n ? // Reanimated needs the property to be present, but it results in Browser bug\n // https://bugs.chromium.org/p/chromium/issues/detail?id=20574\n []\n : [\n {\n translateX:\n // The screen content stays in place when `drawerType` is `front`\n drawerType === 'front'\n ? 0\n : translateX.value +\n drawerWidth * (drawerPosition === 'left' ? 1 : -1),\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"],"mappings":"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"}
@@ -1,4 +1,4 @@
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); }
1
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : 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
2
 
3
3
  import * as React from 'react';
4
4
  import { Platform, Pressable, StyleSheet } from 'react-native';
@@ -1 +1 @@
1
- {"version":3,"sources":["Overlay.tsx"],"names":["React","Platform","Pressable","StyleSheet","Animated","useAnimatedProps","useAnimatedStyle","PROGRESS_EPSILON","Overlay","forwardRef","ref","progress","onPress","style","props","animatedStyle","opacity","value","zIndex","animatedProps","active","pointerEvents","accessibilityElementsHidden","importantForAccessibility","styles","overlay","overlayStyle","pressable","select","web","WebkitTapHighlightColor","default","create","absoluteFillObject","backgroundColor","flex"],"mappings":";;AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,SAASC,QAAT,EAAmBC,SAAnB,EAA8BC,UAA9B,QAAgD,cAAhD;AACA,OAAOC,QAAP,IACEC,gBADF,EAEEC,gBAFF,QAGO,yBAHP;AAKA,MAAMC,gBAAgB,GAAG,IAAzB;AAOA,MAAMC,OAAO,gBAAGR,KAAK,CAACS,UAAN,CAAiB,SAASD,OAAT,OAE/BE,GAF+B,EAG/B;AAAA,MAFA;AAAEC,IAAAA,QAAF;AAAYC,IAAAA,OAAZ;AAAqBC,IAAAA,KAArB;AAA4B,OAAGC;AAA/B,GAEA;AACA,QAAMC,aAAa,GAAGT,gBAAgB,CAAC,MAAM;AAC3C,WAAO;AACLU,MAAAA,OAAO,EAAEL,QAAQ,CAACM,KADb;AAEL;AACA;AACAC,MAAAA,MAAM,EAAEP,QAAQ,CAACM,KAAT,GAAiBV,gBAAjB,GAAoC,CAApC,GAAwC,CAAC;AAJ5C,KAAP;AAMD,GAPqC,CAAtC;AASA,QAAMY,aAAa,GAAGd,gBAAgB,CAAC,MAAM;AAC3C,UAAMe,MAAM,GAAGT,QAAQ,CAACM,KAAT,GAAiBV,gBAAhC;AAEA,WAAO;AACLc,MAAAA,aAAa,EAAED,MAAM,GAAG,MAAH,GAAY,MAD5B;AAELE,MAAAA,2BAA2B,EAAE,CAACF,MAFzB;AAGLG,MAAAA,yBAAyB,EAAEH,MAAM,GAAG,MAAH,GAAY;AAHxC,KAAP;AAKD,GARqC,CAAtC;AAUA,sBACE,oBAAC,QAAD,CAAU,IAAV,eACMN,KADN;AAEE,IAAA,GAAG,EAAEJ,GAFP;AAGE,IAAA,KAAK,EAAE,CAACc,MAAM,CAACC,OAAR,EAAiBC,YAAjB,EAA+BX,aAA/B,EAA8CF,KAA9C,CAHT;AAIE,IAAA,aAAa,EAAEM;AAJjB,mBAME,oBAAC,SAAD;AAAW,IAAA,OAAO,EAAEP,OAApB;AAA6B,IAAA,KAAK,EAAEY,MAAM,CAACG;AAA3C,IANF,CADF;AAUD,CAjCe,CAAhB;AAmCA,MAAMD,YAAY,GAAGzB,QAAQ,CAAC2B,MAAT,CAAwC;AAC3DC,EAAAA,GAAG,EAAE;AACH;AACA;AACAC,IAAAA,uBAAuB,EAAE;AAHtB,GADsD;AAM3DC,EAAAA,OAAO,EAAE;AANkD,CAAxC,CAArB;AASA,MAAMP,MAAM,GAAGrB,UAAU,CAAC6B,MAAX,CAAkB;AAC/BP,EAAAA,OAAO,EAAE,EACP,GAAGtB,UAAU,CAAC8B,kBADP;AAEPC,IAAAA,eAAe,EAAE;AAFV,GADsB;AAK/BP,EAAAA,SAAS,EAAE;AACTQ,IAAAA,IAAI,EAAE;AADG;AALoB,CAAlB,CAAf;AAUA,eAAe3B,OAAf","sourcesContent":["import * as React from 'react';\nimport { Platform, Pressable, StyleSheet } from 'react-native';\nimport Animated, {\n useAnimatedProps,\n useAnimatedStyle,\n} 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 // We can send the overlay behind the screen to avoid it\n zIndex: progress.value > PROGRESS_EPSILON ? 0 : -1,\n };\n });\n\n const animatedProps = useAnimatedProps(() => {\n const active = progress.value > PROGRESS_EPSILON;\n\n return {\n pointerEvents: active ? 'auto' : 'none',\n accessibilityElementsHidden: !active,\n importantForAccessibility: active ? 'auto' : 'no-hide-descendants',\n } as const;\n });\n\n return (\n <Animated.View\n {...props}\n ref={ref}\n style={[styles.overlay, overlayStyle, animatedStyle, style]}\n animatedProps={animatedProps}\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"]}
1
+ {"version":3,"names":["React","Platform","Pressable","StyleSheet","Animated","useAnimatedProps","useAnimatedStyle","PROGRESS_EPSILON","Overlay","forwardRef","ref","progress","onPress","style","props","animatedStyle","opacity","value","zIndex","animatedProps","active","pointerEvents","accessibilityElementsHidden","importantForAccessibility","styles","overlay","overlayStyle","pressable","select","web","WebkitTapHighlightColor","default","create","absoluteFillObject","backgroundColor","flex"],"sources":["Overlay.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Platform, Pressable, StyleSheet } from 'react-native';\nimport Animated, {\n useAnimatedProps,\n useAnimatedStyle,\n} 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 // We can send the overlay behind the screen to avoid it\n zIndex: progress.value > PROGRESS_EPSILON ? 0 : -1,\n };\n });\n\n const animatedProps = useAnimatedProps(() => {\n const active = progress.value > PROGRESS_EPSILON;\n\n return {\n pointerEvents: active ? 'auto' : 'none',\n accessibilityElementsHidden: !active,\n importantForAccessibility: active ? 'auto' : 'no-hide-descendants',\n } as const;\n });\n\n return (\n <Animated.View\n {...props}\n ref={ref}\n style={[styles.overlay, overlayStyle, animatedStyle, style]}\n animatedProps={animatedProps}\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"],"mappings":";;AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,SAASC,QAAT,EAAmBC,SAAnB,EAA8BC,UAA9B,QAAgD,cAAhD;AACA,OAAOC,QAAP,IACEC,gBADF,EAEEC,gBAFF,QAGO,yBAHP;AAKA,MAAMC,gBAAgB,GAAG,IAAzB;AAOA,MAAMC,OAAO,gBAAGR,KAAK,CAACS,UAAN,CAAiB,SAASD,OAAT,OAE/BE,GAF+B,EAG/B;EAAA,IAFA;IAAEC,QAAF;IAAYC,OAAZ;IAAqBC,KAArB;IAA4B,GAAGC;EAA/B,CAEA;EACA,MAAMC,aAAa,GAAGT,gBAAgB,CAAC,MAAM;IAC3C,OAAO;MACLU,OAAO,EAAEL,QAAQ,CAACM,KADb;MAEL;MACA;MACAC,MAAM,EAAEP,QAAQ,CAACM,KAAT,GAAiBV,gBAAjB,GAAoC,CAApC,GAAwC,CAAC;IAJ5C,CAAP;EAMD,CAPqC,CAAtC;EASA,MAAMY,aAAa,GAAGd,gBAAgB,CAAC,MAAM;IAC3C,MAAMe,MAAM,GAAGT,QAAQ,CAACM,KAAT,GAAiBV,gBAAhC;IAEA,OAAO;MACLc,aAAa,EAAED,MAAM,GAAG,MAAH,GAAY,MAD5B;MAELE,2BAA2B,EAAE,CAACF,MAFzB;MAGLG,yBAAyB,EAAEH,MAAM,GAAG,MAAH,GAAY;IAHxC,CAAP;EAKD,CARqC,CAAtC;EAUA,oBACE,oBAAC,QAAD,CAAU,IAAV,eACMN,KADN;IAEE,GAAG,EAAEJ,GAFP;IAGE,KAAK,EAAE,CAACc,MAAM,CAACC,OAAR,EAAiBC,YAAjB,EAA+BX,aAA/B,EAA8CF,KAA9C,CAHT;IAIE,aAAa,EAAEM;EAJjB,iBAME,oBAAC,SAAD;IAAW,OAAO,EAAEP,OAApB;IAA6B,KAAK,EAAEY,MAAM,CAACG;EAA3C,EANF,CADF;AAUD,CAjCe,CAAhB;AAmCA,MAAMD,YAAY,GAAGzB,QAAQ,CAAC2B,MAAT,CAAwC;EAC3DC,GAAG,EAAE;IACH;IACA;IACAC,uBAAuB,EAAE;EAHtB,CADsD;EAM3DC,OAAO,EAAE;AANkD,CAAxC,CAArB;AASA,MAAMP,MAAM,GAAGrB,UAAU,CAAC6B,MAAX,CAAkB;EAC/BP,OAAO,EAAE,EACP,GAAGtB,UAAU,CAAC8B,kBADP;IAEPC,eAAe,EAAE;EAFV,CADsB;EAK/BP,SAAS,EAAE;IACTQ,IAAI,EAAE;EADG;AALoB,CAAlB,CAAf;AAUA,eAAe3B,OAAf"}
@@ -173,6 +173,14 @@ export declare type DrawerNavigationOptions = HeaderOptions & {
173
173
  * Defaults to `false`.
174
174
  */
175
175
  unmountOnBlur?: boolean;
176
+ /**
177
+ * Whether inactive screens should be suspended from re-rendering. Defaults to `false`.
178
+ * Defaults to `true` when `enableFreeze()` is run at the top of the application.
179
+ * Requires `react-native-screens` version >=3.16.0.
180
+ *
181
+ * Only supported on iOS and Android.
182
+ */
183
+ freezeOnBlur?: boolean;
176
184
  };
177
185
  export declare type DrawerContentComponentProps = {
178
186
  state: DrawerNavigationState<ParamListBase>;
@@ -1,4 +1,5 @@
1
1
  /// <reference types="react" />
2
2
  import { PanGestureHandlerProperties } from 'react-native-gesture-handler';
3
3
  export declare function PanGestureHandler(props: PanGestureHandlerProperties): JSX.Element;
4
- export { GestureHandlerRootView, State as GestureState, PanGestureHandlerGestureEvent, TapGestureHandler, } from 'react-native-gesture-handler';
4
+ export type { PanGestureHandlerGestureEvent } from 'react-native-gesture-handler';
5
+ export { GestureHandlerRootView, State as GestureState, TapGestureHandler, } from 'react-native-gesture-handler';
@@ -4,6 +4,7 @@ declare type Props = {
4
4
  visible: boolean;
5
5
  children: React.ReactNode;
6
6
  enabled: boolean;
7
+ freezeOnBlur?: boolean;
7
8
  style?: StyleProp<ViewStyle>;
8
9
  };
9
10
  export declare const MaybeScreenContainer: ({ enabled, ...rest }: ViewProps & {
@@ -2,11 +2,10 @@ import * as React from 'react';
2
2
  import Animated from 'react-native-reanimated';
3
3
  declare const Overlay: React.ForwardRefExoticComponent<{
4
4
  children?: React.ReactNode | Animated.Node<React.ReactNode>;
5
+ removeClippedSubviews?: boolean | Animated.Node<boolean | undefined> | undefined;
5
6
  hitSlop?: import("react-native").Insets | Animated.Node<import("react-native").Insets | undefined> | undefined;
6
7
  onLayout?: ((event: import("react-native").LayoutChangeEvent) => void) | Animated.Node<((event: import("react-native").LayoutChangeEvent) => void) | undefined> | undefined;
7
8
  pointerEvents?: "none" | "auto" | "box-none" | "box-only" | Animated.Node<"none" | "auto" | "box-none" | "box-only" | undefined> | undefined;
8
- removeClippedSubviews?: boolean | Animated.Node<boolean | undefined> | undefined;
9
- style?: import("react-native").StyleProp<import("react-native").ViewStyle> | Animated.Node<import("react-native").StyleProp<import("react-native").ViewStyle>>;
10
9
  testID?: string | Animated.Node<string | undefined> | undefined;
11
10
  nativeID?: string | Animated.Node<string | undefined> | undefined;
12
11
  collapsable?: boolean | Animated.Node<boolean | undefined> | undefined;
@@ -2,11 +2,10 @@ import * as React from 'react';
2
2
  import Animated from 'react-native-reanimated';
3
3
  declare const Overlay: React.ForwardRefExoticComponent<{
4
4
  children?: React.ReactNode | Animated.Node<React.ReactNode>;
5
+ removeClippedSubviews?: boolean | Animated.Node<boolean | undefined> | undefined;
5
6
  hitSlop?: import("react-native").Insets | Animated.Node<import("react-native").Insets | undefined> | undefined;
6
7
  onLayout?: ((event: import("react-native").LayoutChangeEvent) => void) | Animated.Node<((event: import("react-native").LayoutChangeEvent) => void) | undefined> | undefined;
7
8
  pointerEvents?: "none" | "auto" | "box-none" | "box-only" | Animated.Node<"none" | "auto" | "box-none" | "box-only" | undefined> | undefined;
8
- removeClippedSubviews?: boolean | Animated.Node<boolean | undefined> | undefined;
9
- style?: import("react-native").StyleProp<import("react-native").ViewStyle> | Animated.Node<import("react-native").StyleProp<import("react-native").ViewStyle>>;
10
9
  testID?: string | Animated.Node<string | undefined> | undefined;
11
10
  nativeID?: string | Animated.Node<string | undefined> | undefined;
12
11
  collapsable?: boolean | Animated.Node<boolean | undefined> | undefined;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@react-navigation/drawer",
3
3
  "description": "Drawer navigator component with animated transitions and gesturess",
4
- "version": "6.4.4",
4
+ "version": "6.5.1",
5
5
  "keywords": [
6
6
  "react-native-component",
7
7
  "react-component",
@@ -41,23 +41,23 @@
41
41
  "clean": "del lib"
42
42
  },
43
43
  "dependencies": {
44
- "@react-navigation/elements": "^1.3.5",
44
+ "@react-navigation/elements": "^1.3.7",
45
45
  "color": "^4.2.3",
46
46
  "warn-once": "^0.1.0"
47
47
  },
48
48
  "devDependencies": {
49
- "@react-navigation/native": "^6.0.12",
50
- "@testing-library/react-native": "^7.2.0",
51
- "@types/react": "^17.0.47",
52
- "@types/react-native": "~0.68.1",
49
+ "@react-navigation/native": "^6.0.14",
50
+ "@testing-library/react-native": "^11.5.0",
51
+ "@types/react": "~18.0.0",
52
+ "@types/react-native": "~0.69.1",
53
53
  "del-cli": "^3.0.1",
54
- "react": "17.0.2",
55
- "react-native": "~0.68.2",
54
+ "react": "18.0.0",
55
+ "react-native": "0.69.5",
56
56
  "react-native-builder-bob": "^0.18.1",
57
- "react-native-gesture-handler": "~2.2.1",
58
- "react-native-reanimated": "~2.8.0",
59
- "react-native-safe-area-context": "4.2.4",
60
- "react-native-screens": "~3.11.1",
57
+ "react-native-gesture-handler": "~2.5.0",
58
+ "react-native-reanimated": "~2.9.1",
59
+ "react-native-safe-area-context": "4.3.1",
60
+ "react-native-screens": "~3.15.0",
61
61
  "typescript": "^4.7.4"
62
62
  },
63
63
  "peerDependencies": {
@@ -83,5 +83,5 @@
83
83
  ]
84
84
  ]
85
85
  },
86
- "gitHead": "83aa392f1e13796d609c9df0afa44699ce4bacae"
86
+ "gitHead": "92f9f265d2627a3ef5b3890042d59405ff38401e"
87
87
  }
package/src/types.tsx CHANGED
@@ -211,6 +211,15 @@ export type DrawerNavigationOptions = HeaderOptions & {
211
211
  * Defaults to `false`.
212
212
  */
213
213
  unmountOnBlur?: boolean;
214
+
215
+ /**
216
+ * Whether inactive screens should be suspended from re-rendering. Defaults to `false`.
217
+ * Defaults to `true` when `enableFreeze()` is run at the top of the application.
218
+ * Requires `react-native-screens` version >=3.16.0.
219
+ *
220
+ * Only supported on iOS and Android.
221
+ */
222
+ freezeOnBlur?: boolean;
214
223
  };
215
224
 
216
225
  export type DrawerContentComponentProps = {
@@ -230,6 +230,7 @@ function DrawerViewBase({
230
230
  }
231
231
 
232
232
  const {
233
+ freezeOnBlur,
233
234
  header = ({ layout, options }: DrawerHeaderProps) => (
234
235
  <Header
235
236
  {...options}
@@ -241,6 +242,9 @@ function DrawerViewBase({
241
242
  }
242
243
  />
243
244
  ),
245
+ headerShown,
246
+ headerStatusBarHeight,
247
+ headerTransparent,
244
248
  sceneContainerStyle,
245
249
  } = descriptor.options;
246
250
 
@@ -250,14 +254,15 @@ function DrawerViewBase({
250
254
  style={[StyleSheet.absoluteFill, { zIndex: isFocused ? 0 : -1 }]}
251
255
  visible={isFocused}
252
256
  enabled={detachInactiveScreens}
257
+ freezeOnBlur={freezeOnBlur}
253
258
  >
254
259
  <Screen
255
260
  focused={isFocused}
256
261
  route={descriptor.route}
257
262
  navigation={descriptor.navigation}
258
- headerShown={descriptor.options.headerShown}
259
- headerTransparent={descriptor.options.headerTransparent}
260
- headerStatusBarHeight={descriptor.options.headerStatusBarHeight}
263
+ headerShown={headerShown}
264
+ headerStatusBarHeight={headerStatusBarHeight}
265
+ headerTransparent={headerTransparent}
261
266
  header={header({
262
267
  layout: dimensions,
263
268
  route: descriptor.route,
@@ -16,9 +16,9 @@ export function PanGestureHandler(props: PanGestureHandlerProperties) {
16
16
  );
17
17
  }
18
18
 
19
+ export type { PanGestureHandlerGestureEvent } from 'react-native-gesture-handler';
19
20
  export {
20
21
  GestureHandlerRootView,
21
22
  State as GestureState,
22
- PanGestureHandlerGestureEvent,
23
23
  TapGestureHandler,
24
24
  } from 'react-native-gesture-handler';
@@ -6,6 +6,7 @@ type Props = {
6
6
  visible: boolean;
7
7
  children: React.ReactNode;
8
8
  enabled: boolean;
9
+ freezeOnBlur?: boolean;
9
10
  style?: StyleProp<ViewStyle>;
10
11
  };
11
12
 
@@ -178,19 +178,26 @@ export default function Drawer({
178
178
 
179
179
  const onGestureEvent = useAnimatedGestureHandler<
180
180
  PanGestureHandlerGestureEvent,
181
- { startX: number }
181
+ { startX: number; hasCalledOnStart: boolean }
182
182
  >({
183
183
  onStart: (event, ctx) => {
184
+ ctx.hasCalledOnStart = false;
184
185
  ctx.startX = translationX.value;
185
186
  gestureState.value = event.state;
186
187
  touchStartX.value = event.x;
187
-
188
- runOnJS(onGestureStart)();
189
188
  },
190
189
  onActive: (event, ctx) => {
191
190
  touchX.value = event.x;
192
191
  translationX.value = ctx.startX + event.translationX;
193
192
  gestureState.value = event.state;
193
+
194
+ // onStart will _always_ be called, even when the activation
195
+ // criteria isn't met yet. This makes sure onGestureStart is only
196
+ // called when the criteria is really met.
197
+ if (!ctx.hasCalledOnStart) {
198
+ ctx.hasCalledOnStart = true;
199
+ runOnJS(onGestureStart)();
200
+ }
194
201
  },
195
202
  onEnd: (event) => {
196
203
  gestureState.value = event.state;