repoweaver
Version:
A GitHub App that skillfully weaves multiple templates together to create and update repositories with intelligent merge strategies
1 lines • 56.5 kB
JSON
{"ast":null,"code":"function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nimport * as React from 'react';\nimport Animated from \"react-native-web/dist/exports/Animated\";\nimport Dimensions from \"react-native-web/dist/exports/Dimensions\";\nimport Easing from \"react-native-web/dist/exports/Easing\";\nimport I18nManager from \"react-native-web/dist/exports/I18nManager\";\nimport Keyboard from \"react-native-web/dist/exports/Keyboard\";\nimport Platform from \"react-native-web/dist/exports/Platform\";\nimport ScrollView from \"react-native-web/dist/exports/ScrollView\";\nimport StyleSheet from \"react-native-web/dist/exports/StyleSheet\";\nimport View from \"react-native-web/dist/exports/View\";\nimport Pressable from \"react-native-web/dist/exports/Pressable\";\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport MenuItem from \"./MenuItem\";\nimport { useInternalTheme } from \"../../core/theming\";\nimport { ElevationLevels } from \"../../types\";\nimport { addEventListener } from \"../../utils/addEventListener\";\nimport { BackHandler } from \"../../utils/BackHandler/BackHandler\";\nimport Portal from \"../Portal/Portal\";\nimport Surface from \"../Surface\";\nconst SCREEN_INDENT = 8;\nconst ANIMATION_DURATION = 250;\nconst EASING = Easing.bezier(0.4, 0, 0.2, 1);\nconst WINDOW_LAYOUT = Dimensions.get('window');\nconst DEFAULT_ELEVATION = 2;\nexport const ELEVATION_LEVELS_MAP = Object.values(ElevationLevels);\nconst DEFAULT_MODE = 'elevated';\nconst focusFirstDOMNode = el => {\n if (el && Platform.OS === 'web') {\n if (el instanceof HTMLElement) {\n var _el$querySelector;\n (_el$querySelector = el.querySelector('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])')) === null || _el$querySelector === void 0 || _el$querySelector.focus();\n }\n }\n};\nconst isCoordinate = anchor => !React.isValidElement(anchor) && typeof (anchor === null || anchor === void 0 ? void 0 : anchor.x) === 'number' && typeof (anchor === null || anchor === void 0 ? void 0 : anchor.y) === 'number';\nconst isBrowser = () => Platform.OS === 'web' && 'document' in global;\nconst Menu = ({\n visible,\n statusBarHeight,\n overlayAccessibilityLabel = 'Close menu',\n testID = 'menu',\n anchor,\n onDismiss,\n anchorPosition,\n contentStyle,\n style,\n elevation = DEFAULT_ELEVATION,\n mode = DEFAULT_MODE,\n children,\n theme: themeOverrides,\n keyboardShouldPersistTaps\n}) => {\n const theme = useInternalTheme(themeOverrides);\n const insets = useSafeAreaInsets();\n const [rendered, setRendered] = React.useState(visible);\n const [left, setLeft] = React.useState(0);\n const [top, setTop] = React.useState(0);\n const [menuLayout, setMenuLayout] = React.useState({\n width: 0,\n height: 0\n });\n const [anchorLayout, setAnchorLayout] = React.useState({\n width: 0,\n height: 0\n });\n const [windowLayout, setWindowLayout] = React.useState({\n width: WINDOW_LAYOUT.width,\n height: WINDOW_LAYOUT.height\n });\n const opacityAnimationRef = React.useRef(new Animated.Value(0));\n const scaleAnimationRef = React.useRef(new Animated.ValueXY({\n x: 0,\n y: 0\n }));\n const keyboardHeightRef = React.useRef(0);\n const prevVisible = React.useRef(null);\n const anchorRef = React.useRef(null);\n const menuRef = React.useRef(null);\n const prevRendered = React.useRef(false);\n const keyboardDidShow = React.useCallback(e => {\n const keyboardHeight = e.endCoordinates.height;\n keyboardHeightRef.current = keyboardHeight;\n }, []);\n const keyboardDidHide = React.useCallback(() => {\n keyboardHeightRef.current = 0;\n }, []);\n const keyboardDidShowListenerRef = React.useRef(undefined);\n const keyboardDidHideListenerRef = React.useRef(undefined);\n const backHandlerSubscriptionRef = React.useRef(undefined);\n const dimensionsSubscriptionRef = React.useRef(undefined);\n const handleDismiss = React.useCallback(() => {\n if (visible) {\n onDismiss === null || onDismiss === void 0 || onDismiss();\n }\n }, [onDismiss, visible]);\n const handleKeypress = React.useCallback(e => {\n if (e.key === 'Escape') {\n onDismiss === null || onDismiss === void 0 || onDismiss();\n }\n }, [onDismiss]);\n const removeListeners = React.useCallback(() => {\n var _backHandlerSubscript, _dimensionsSubscripti;\n (_backHandlerSubscript = backHandlerSubscriptionRef.current) === null || _backHandlerSubscript === void 0 || _backHandlerSubscript.remove();\n (_dimensionsSubscripti = dimensionsSubscriptionRef.current) === null || _dimensionsSubscripti === void 0 || _dimensionsSubscripti.remove();\n isBrowser() && document.removeEventListener('keyup', handleKeypress);\n }, [handleKeypress]);\n const attachListeners = React.useCallback(() => {\n backHandlerSubscriptionRef.current = addEventListener(BackHandler, 'hardwareBackPress', handleDismiss);\n dimensionsSubscriptionRef.current = addEventListener(Dimensions, 'change', handleDismiss);\n Platform.OS === 'web' && document.addEventListener('keyup', handleKeypress);\n }, [handleDismiss, handleKeypress]);\n const measureMenuLayout = () => new Promise(resolve => {\n if (menuRef.current) {\n menuRef.current.measureInWindow((x, y, width, height) => {\n resolve({\n x,\n y,\n width,\n height\n });\n });\n }\n });\n const measureAnchorLayout = React.useCallback(() => new Promise(resolve => {\n if (isCoordinate(anchor)) {\n resolve({\n x: anchor.x,\n y: anchor.y,\n width: 0,\n height: 0\n });\n return;\n }\n if (anchorRef.current) {\n anchorRef.current.measureInWindow((x, y, width, height) => {\n resolve({\n x,\n y,\n width,\n height\n });\n });\n }\n }), [anchor]);\n const show = React.useCallback(async () => {\n const windowLayoutResult = Dimensions.get('window');\n const [menuLayoutResult, anchorLayoutResult] = await Promise.all([measureMenuLayout(), measureAnchorLayout()]);\n if (!windowLayoutResult.width || !windowLayoutResult.height || !menuLayoutResult.width || !menuLayoutResult.height || !anchorLayoutResult.width && !isCoordinate(anchor) || !anchorLayoutResult.height && !isCoordinate(anchor)) {\n requestAnimationFrame(show);\n return;\n }\n setLeft(anchorLayoutResult.x);\n setTop(anchorLayoutResult.y);\n setAnchorLayout({\n height: anchorLayoutResult.height,\n width: anchorLayoutResult.width\n });\n setMenuLayout({\n height: menuLayoutResult.height,\n width: menuLayoutResult.width\n });\n setWindowLayout({\n height: windowLayoutResult.height - keyboardHeightRef.current,\n width: windowLayoutResult.width\n });\n attachListeners();\n const {\n animation\n } = theme;\n Animated.parallel([Animated.timing(scaleAnimationRef.current, {\n toValue: {\n x: menuLayoutResult.width,\n y: menuLayoutResult.height\n },\n duration: ANIMATION_DURATION * animation.scale,\n easing: EASING,\n useNativeDriver: true\n }), Animated.timing(opacityAnimationRef.current, {\n toValue: 1,\n duration: ANIMATION_DURATION * animation.scale,\n easing: EASING,\n useNativeDriver: true\n })]).start(({\n finished\n }) => {\n if (finished) {\n focusFirstDOMNode(menuRef.current);\n prevRendered.current = true;\n }\n });\n }, [anchor, attachListeners, measureAnchorLayout, theme]);\n const hide = React.useCallback(() => {\n removeListeners();\n const {\n animation\n } = theme;\n Animated.timing(opacityAnimationRef.current, {\n toValue: 0,\n duration: ANIMATION_DURATION * animation.scale,\n easing: EASING,\n useNativeDriver: true\n }).start(({\n finished\n }) => {\n if (finished) {\n setMenuLayout({\n width: 0,\n height: 0\n });\n setRendered(false);\n prevRendered.current = false;\n focusFirstDOMNode(anchorRef.current);\n }\n });\n }, [removeListeners, theme]);\n const updateVisibility = React.useCallback(async display => {\n await Promise.resolve().then(() => {\n if (display && !prevRendered.current) {\n show();\n return;\n }\n if (!display && prevRendered.current) {\n hide();\n }\n return;\n });\n }, [hide, show]);\n React.useEffect(() => {\n const opacityAnimation = opacityAnimationRef.current;\n const scaleAnimation = scaleAnimationRef.current;\n keyboardDidShowListenerRef.current = Keyboard.addListener('keyboardDidShow', keyboardDidShow);\n keyboardDidHideListenerRef.current = Keyboard.addListener('keyboardDidHide', keyboardDidHide);\n return () => {\n var _keyboardDidShowListe, _keyboardDidHideListe;\n removeListeners();\n (_keyboardDidShowListe = keyboardDidShowListenerRef.current) === null || _keyboardDidShowListe === void 0 || _keyboardDidShowListe.remove();\n (_keyboardDidHideListe = keyboardDidHideListenerRef.current) === null || _keyboardDidHideListe === void 0 || _keyboardDidHideListe.remove();\n scaleAnimation.removeAllListeners();\n opacityAnimation === null || opacityAnimation === void 0 || opacityAnimation.removeAllListeners();\n };\n }, [removeListeners, keyboardDidHide, keyboardDidShow]);\n React.useEffect(() => {\n if (prevVisible.current !== visible) {\n prevVisible.current = visible;\n if (visible !== rendered) {\n setRendered(visible);\n }\n }\n }, [visible, rendered]);\n React.useEffect(() => {\n updateVisibility(rendered);\n }, [rendered, updateVisibility]);\n const additionalVerticalValue = Platform.select({\n android: statusBarHeight ?? insets.top,\n default: 0\n });\n const positionTransforms = [];\n let leftTransformation = left;\n let topTransformation = !isCoordinate(anchorRef.current) && anchorPosition === 'bottom' ? top + anchorLayout.height : top;\n if (left <= windowLayout.width - menuLayout.width - SCREEN_INDENT) {\n positionTransforms.push({\n translateX: scaleAnimationRef.current.x.interpolate({\n inputRange: [0, menuLayout.width],\n outputRange: [-(menuLayout.width / 2), 0]\n })\n });\n if (leftTransformation < SCREEN_INDENT) {\n leftTransformation = SCREEN_INDENT;\n }\n } else {\n positionTransforms.push({\n translateX: scaleAnimationRef.current.x.interpolate({\n inputRange: [0, menuLayout.width],\n outputRange: [menuLayout.width / 2, 0]\n })\n });\n leftTransformation += anchorLayout.width - menuLayout.width;\n const right = leftTransformation + menuLayout.width;\n if (right > windowLayout.width - SCREEN_INDENT) {\n leftTransformation = windowLayout.width - SCREEN_INDENT - menuLayout.width;\n }\n }\n let scrollableMenuHeight = 0;\n if (topTransformation >= windowLayout.height - menuLayout.height - SCREEN_INDENT - additionalVerticalValue && topTransformation <= windowLayout.height - topTransformation) {\n scrollableMenuHeight = windowLayout.height - topTransformation - SCREEN_INDENT - additionalVerticalValue;\n } else if (topTransformation >= windowLayout.height - menuLayout.height - SCREEN_INDENT - additionalVerticalValue && topTransformation >= windowLayout.height - top && topTransformation <= menuLayout.height - anchorLayout.height + SCREEN_INDENT - additionalVerticalValue) {\n scrollableMenuHeight = topTransformation + anchorLayout.height - SCREEN_INDENT + additionalVerticalValue;\n }\n scrollableMenuHeight = scrollableMenuHeight > windowLayout.height - 2 * SCREEN_INDENT ? windowLayout.height - 2 * SCREEN_INDENT : scrollableMenuHeight;\n if (topTransformation <= windowLayout.height - menuLayout.height - SCREEN_INDENT - additionalVerticalValue || topTransformation >= windowLayout.height - menuLayout.height - SCREEN_INDENT - additionalVerticalValue && topTransformation <= windowLayout.height - topTransformation) {\n positionTransforms.push({\n translateY: scaleAnimationRef.current.y.interpolate({\n inputRange: [0, menuLayout.height],\n outputRange: [-((scrollableMenuHeight || menuLayout.height) / 2), 0]\n })\n });\n if (topTransformation < SCREEN_INDENT) {\n topTransformation = SCREEN_INDENT;\n }\n } else {\n positionTransforms.push({\n translateY: scaleAnimationRef.current.y.interpolate({\n inputRange: [0, menuLayout.height],\n outputRange: [(scrollableMenuHeight || menuLayout.height) / 2, 0]\n })\n });\n topTransformation += anchorLayout.height - (scrollableMenuHeight || menuLayout.height);\n const bottom = topTransformation + (scrollableMenuHeight || menuLayout.height) + additionalVerticalValue;\n if (bottom > windowLayout.height - SCREEN_INDENT) {\n topTransformation = scrollableMenuHeight === windowLayout.height - 2 * SCREEN_INDENT ? -SCREEN_INDENT * 2 : windowLayout.height - menuLayout.height - SCREEN_INDENT - additionalVerticalValue;\n }\n }\n const shadowMenuContainerStyle = Object.assign({\n opacity: opacityAnimationRef.current,\n transform: [{\n scaleX: scaleAnimationRef.current.x.interpolate({\n inputRange: [0, menuLayout.width],\n outputRange: [0, 1]\n })\n }, {\n scaleY: scaleAnimationRef.current.y.interpolate({\n inputRange: [0, menuLayout.height],\n outputRange: [0, 1]\n })\n }],\n borderRadius: theme.roundness\n }, !theme.isV3 && {\n elevation: 8\n }, scrollableMenuHeight ? {\n height: scrollableMenuHeight\n } : {});\n const positionStyle = Object.assign({\n top: isCoordinate(anchor) ? topTransformation : topTransformation + additionalVerticalValue\n }, I18nManager.getConstants().isRTL ? {\n right: leftTransformation\n } : {\n left: leftTransformation\n });\n const pointerEvents = visible ? 'box-none' : 'none';\n return React.createElement(View, {\n ref: ref => {\n anchorRef.current = ref;\n },\n collapsable: false\n }, isCoordinate(anchor) ? null : anchor, rendered ? React.createElement(Portal, null, React.createElement(Pressable, {\n accessibilityLabel: overlayAccessibilityLabel,\n accessibilityRole: \"button\",\n onPress: onDismiss,\n style: styles.pressableOverlay\n }), React.createElement(View, {\n ref: ref => {\n menuRef.current = ref;\n },\n collapsable: false,\n accessibilityViewIsModal: visible,\n style: [styles.wrapper, positionStyle, style],\n pointerEvents: pointerEvents,\n onAccessibilityEscape: onDismiss,\n testID: `${testID}-view`\n }, React.createElement(Animated.View, {\n pointerEvents: pointerEvents,\n style: {\n transform: positionTransforms\n }\n }, React.createElement(Surface, _extends({\n mode: mode,\n pointerEvents: pointerEvents,\n style: [styles.shadowMenuContainer, shadowMenuContainerStyle, theme.isV3 && {\n backgroundColor: theme.colors.elevation[ELEVATION_LEVELS_MAP[elevation]]\n }, contentStyle]\n }, theme.isV3 && {\n elevation\n }, {\n testID: `${testID}-surface`,\n theme: theme,\n container: true\n }), scrollableMenuHeight && React.createElement(ScrollView, {\n keyboardShouldPersistTaps: keyboardShouldPersistTaps\n }, children) || React.createElement(React.Fragment, null, children))))) : null);\n};\nMenu.Item = MenuItem;\nconst styles = StyleSheet.create({\n wrapper: {\n position: 'absolute'\n },\n shadowMenuContainer: {\n opacity: 0,\n paddingVertical: 8\n },\n pressableOverlay: Object.assign({}, Platform.select({\n web: {\n cursor: 'auto'\n }\n }), StyleSheet.absoluteFillObject, {\n width: '100%'\n })\n});\nexport default Menu;","map":{"version":3,"names":["React","Animated","Dimensions","Easing","I18nManager","Keyboard","Platform","ScrollView","StyleSheet","View","Pressable","useSafeAreaInsets","MenuItem","useInternalTheme","ElevationLevels","addEventListener","BackHandler","Portal","Surface","SCREEN_INDENT","ANIMATION_DURATION","EASING","bezier","WINDOW_LAYOUT","get","DEFAULT_ELEVATION","ELEVATION_LEVELS_MAP","Object","values","DEFAULT_MODE","focusFirstDOMNode","el","OS","HTMLElement","_el$querySelector","querySelector","focus","isCoordinate","anchor","isValidElement","x","y","isBrowser","global","Menu","visible","statusBarHeight","overlayAccessibilityLabel","testID","onDismiss","anchorPosition","contentStyle","style","elevation","mode","children","theme","themeOverrides","keyboardShouldPersistTaps","insets","rendered","setRendered","useState","left","setLeft","top","setTop","menuLayout","setMenuLayout","width","height","anchorLayout","setAnchorLayout","windowLayout","setWindowLayout","opacityAnimationRef","useRef","Value","scaleAnimationRef","ValueXY","keyboardHeightRef","prevVisible","anchorRef","menuRef","prevRendered","keyboardDidShow","useCallback","e","keyboardHeight","endCoordinates","current","keyboardDidHide","keyboardDidShowListenerRef","undefined","keyboardDidHideListenerRef","backHandlerSubscriptionRef","dimensionsSubscriptionRef","handleDismiss","handleKeypress","key","removeListeners","_backHandlerSubscript","_dimensionsSubscripti","remove","document","removeEventListener","attachListeners","measureMenuLayout","Promise","resolve","measureInWindow","measureAnchorLayout","show","windowLayoutResult","menuLayoutResult","anchorLayoutResult","all","requestAnimationFrame","animation","parallel","timing","toValue","duration","scale","easing","useNativeDriver","start","finished","hide","updateVisibility","display","then","useEffect","opacityAnimation","scaleAnimation","addListener","_keyboardDidShowListe","_keyboardDidHideListe","removeAllListeners","additionalVerticalValue","select","android","default","positionTransforms","leftTransformation","topTransformation","push","translateX","interpolate","inputRange","outputRange","right","scrollableMenuHeight","translateY","bottom","shadowMenuContainerStyle","assign","opacity","transform","scaleX","scaleY","borderRadius","roundness","isV3","positionStyle","getConstants","isRTL","pointerEvents","createElement","ref","collapsable","accessibilityLabel","accessibilityRole","onPress","styles","pressableOverlay","accessibilityViewIsModal","wrapper","onAccessibilityEscape","_extends","shadowMenuContainer","backgroundColor","colors","container","Fragment","Item","create","position","paddingVertical","web","cursor","absoluteFillObject"],"sources":["/Users/pmouli/Documents/GitHub.nosync/boots-strapper/mobile/node_modules/react-native-paper/src/components/Menu/Menu.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n Animated,\n Dimensions,\n Easing,\n EmitterSubscription,\n I18nManager,\n Keyboard,\n KeyboardEvent as RNKeyboardEvent,\n LayoutRectangle,\n NativeEventSubscription,\n Platform,\n ScrollView,\n ScrollViewProps,\n StyleProp,\n StyleSheet,\n View,\n ViewStyle,\n Pressable,\n} from 'react-native';\n\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport MenuItem from './MenuItem';\nimport { useInternalTheme } from '../../core/theming';\nimport type { MD3Elevation, ThemeProp } from '../../types';\nimport { ElevationLevels } from '../../types';\nimport { addEventListener } from '../../utils/addEventListener';\nimport { BackHandler } from '../../utils/BackHandler/BackHandler';\nimport Portal from '../Portal/Portal';\nimport Surface from '../Surface';\n\nexport type Props = {\n /**\n * Whether the Menu is currently visible.\n */\n visible: boolean;\n /**\n * The anchor to open the menu from. In most cases, it will be a button that opens the menu.\n */\n anchor: React.ReactNode | { x: number; y: number };\n /**\n * Whether the menu should open at the top of the anchor or at its bottom.\n * Applied only when anchor is a node, not an x/y position.\n */\n anchorPosition?: 'top' | 'bottom';\n /**\n * Extra margin to add at the top of the menu to account for translucent status bar on Android.\n * If you are using Expo, we assume translucent status bar and set a height for status bar automatically.\n * Pass `0` or a custom value to and customize it.\n * This is automatically handled on iOS.\n */\n statusBarHeight?: number;\n /**\n * Callback called when Menu is dismissed. The `visible` prop needs to be updated when this is called.\n */\n onDismiss?: () => void;\n /**\n * Accessibility label for the overlay. This is read by the screen reader when the user taps outside the menu.\n */\n overlayAccessibilityLabel?: string;\n /**\n * Content of the `Menu`.\n */\n children: React.ReactNode;\n /**\n * Style of menu's inner content.\n */\n contentStyle?: Animated.WithAnimatedValue<StyleProp<ViewStyle>>;\n style?: StyleProp<ViewStyle>;\n /**\n * Elevation level of the menu's content. Shadow styles are calculated based on this value. Default `backgroundColor` is taken from the corresponding `theme.colors.elevation` property. By default equals `2`.\n * @supported Available in v5.x with theme version 3\n */\n elevation?: MD3Elevation;\n /**\n * Mode of the menu's content.\n * - `elevated` - Surface with a shadow and background color corresponding to set `elevation` value.\n * - `flat` - Surface without a shadow, with the background color corresponding to set `elevation` value.\n *\n * @supported Available in v5.x with theme version 3\n */\n mode?: 'flat' | 'elevated';\n /**\n * @optional\n */\n theme?: ThemeProp;\n /**\n * Inner ScrollView prop\n */\n keyboardShouldPersistTaps?: ScrollViewProps['keyboardShouldPersistTaps'];\n /**\n * testID to be used on tests.\n */\n testID?: string;\n};\n\n// Minimum padding between the edge of the screen and the menu\nconst SCREEN_INDENT = 8;\n// From https://material.io/design/motion/speed.html#duration\nconst ANIMATION_DURATION = 250;\n// From the 'Standard easing' section of https://material.io/design/motion/speed.html#easing\nconst EASING = Easing.bezier(0.4, 0, 0.2, 1);\n\nconst WINDOW_LAYOUT = Dimensions.get('window');\n\nconst DEFAULT_ELEVATION: MD3Elevation = 2;\nexport const ELEVATION_LEVELS_MAP = Object.values(\n ElevationLevels\n) as ElevationLevels[];\n\nconst DEFAULT_MODE = 'elevated';\n\nconst focusFirstDOMNode = (el: View | null | undefined) => {\n if (el && Platform.OS === 'web') {\n // When in the browser, we want to focus the first focusable item on toggle\n // For example, when menu is shown, focus the first item in the menu\n // And when menu is dismissed, send focus back to the button to resume tabbing\n if (el instanceof HTMLElement) {\n el.querySelector<HTMLElement>(\n // This is a rough list of selectors that can be focused\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n )?.focus();\n }\n }\n};\n\nconst isCoordinate = (anchor: any): anchor is { x: number; y: number } =>\n !React.isValidElement(anchor) &&\n typeof anchor?.x === 'number' &&\n typeof anchor?.y === 'number';\n\nconst isBrowser = () => Platform.OS === 'web' && 'document' in global;\n\n/**\n * Menus display a list of choices on temporary elevated surfaces. Their placement varies based on the element that opens them.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { View } from 'react-native';\n * import { Button, Menu, Divider, PaperProvider } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [visible, setVisible] = React.useState(false);\n *\n * const openMenu = () => setVisible(true);\n *\n * const closeMenu = () => setVisible(false);\n *\n * return (\n * <PaperProvider>\n * <View\n * style={{\n * paddingTop: 50,\n * flexDirection: 'row',\n * justifyContent: 'center',\n * }}>\n * <Menu\n * visible={visible}\n * onDismiss={closeMenu}\n * anchor={<Button onPress={openMenu}>Show menu</Button>}>\n * <Menu.Item onPress={() => {}} title=\"Item 1\" />\n * <Menu.Item onPress={() => {}} title=\"Item 2\" />\n * <Divider />\n * <Menu.Item onPress={() => {}} title=\"Item 3\" />\n * </Menu>\n * </View>\n * </PaperProvider>\n * );\n * };\n *\n * export default MyComponent;\n * ```\n *\n * ### Note\n * When using `Menu` within a React Native's `Modal` component, you need to wrap all\n * `Modal` contents within a `PaperProvider` in order for the menu to show. This\n * wrapping is not necessary if you use Paper's `Modal` instead.\n */\n\nconst Menu = ({\n visible,\n statusBarHeight,\n overlayAccessibilityLabel = 'Close menu',\n testID = 'menu',\n anchor,\n onDismiss,\n anchorPosition,\n contentStyle,\n style,\n elevation = DEFAULT_ELEVATION,\n mode = DEFAULT_MODE,\n children,\n theme: themeOverrides,\n keyboardShouldPersistTaps,\n}: Props) => {\n const theme = useInternalTheme(themeOverrides);\n const insets = useSafeAreaInsets();\n const [rendered, setRendered] = React.useState(visible);\n const [left, setLeft] = React.useState(0);\n const [top, setTop] = React.useState(0);\n const [menuLayout, setMenuLayout] = React.useState({ width: 0, height: 0 });\n const [anchorLayout, setAnchorLayout] = React.useState({\n width: 0,\n height: 0,\n });\n const [windowLayout, setWindowLayout] = React.useState({\n width: WINDOW_LAYOUT.width,\n height: WINDOW_LAYOUT.height,\n });\n\n const opacityAnimationRef = React.useRef(new Animated.Value(0));\n const scaleAnimationRef = React.useRef(new Animated.ValueXY({ x: 0, y: 0 }));\n const keyboardHeightRef = React.useRef(0);\n const prevVisible = React.useRef<boolean | null>(null);\n const anchorRef = React.useRef<View | null>(null);\n const menuRef = React.useRef<View | null>(null);\n const prevRendered = React.useRef(false);\n\n const keyboardDidShow = React.useCallback((e: RNKeyboardEvent) => {\n const keyboardHeight = e.endCoordinates.height;\n keyboardHeightRef.current = keyboardHeight;\n }, []);\n\n const keyboardDidHide = React.useCallback(() => {\n keyboardHeightRef.current = 0;\n }, []);\n\n const keyboardDidShowListenerRef: React.RefObject<\n EmitterSubscription | undefined\n > = React.useRef(undefined);\n const keyboardDidHideListenerRef: React.RefObject<\n EmitterSubscription | undefined\n > = React.useRef(undefined);\n\n const backHandlerSubscriptionRef: React.RefObject<\n NativeEventSubscription | undefined\n > = React.useRef(undefined);\n const dimensionsSubscriptionRef: React.RefObject<\n NativeEventSubscription | undefined\n > = React.useRef(undefined);\n\n const handleDismiss = React.useCallback(() => {\n if (visible) {\n onDismiss?.();\n }\n }, [onDismiss, visible]);\n\n const handleKeypress = React.useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onDismiss?.();\n }\n },\n [onDismiss]\n );\n\n const removeListeners = React.useCallback(() => {\n backHandlerSubscriptionRef.current?.remove();\n dimensionsSubscriptionRef.current?.remove();\n isBrowser() && document.removeEventListener('keyup', handleKeypress);\n }, [handleKeypress]);\n\n const attachListeners = React.useCallback(() => {\n backHandlerSubscriptionRef.current = addEventListener(\n BackHandler,\n 'hardwareBackPress',\n handleDismiss\n );\n dimensionsSubscriptionRef.current = addEventListener(\n Dimensions,\n 'change',\n handleDismiss\n );\n Platform.OS === 'web' && document.addEventListener('keyup', handleKeypress);\n }, [handleDismiss, handleKeypress]);\n\n const measureMenuLayout = () =>\n new Promise<LayoutRectangle>((resolve) => {\n if (menuRef.current) {\n menuRef.current.measureInWindow((x, y, width, height) => {\n resolve({ x, y, width, height });\n });\n }\n });\n\n const measureAnchorLayout = React.useCallback(\n () =>\n new Promise<LayoutRectangle>((resolve) => {\n if (isCoordinate(anchor)) {\n resolve({ x: anchor.x, y: anchor.y, width: 0, height: 0 });\n return;\n }\n\n if (anchorRef.current) {\n anchorRef.current.measureInWindow((x, y, width, height) => {\n resolve({ x, y, width, height });\n });\n }\n }),\n [anchor]\n );\n\n const show = React.useCallback(async () => {\n const windowLayoutResult = Dimensions.get('window');\n const [menuLayoutResult, anchorLayoutResult] = await Promise.all([\n measureMenuLayout(),\n measureAnchorLayout(),\n ]);\n\n // When visible is true for first render\n // native views can be still not rendered and\n // measureMenuLayout/measureAnchorLayout functions\n // return wrong values e.g { x:0, y: 0, width: 0, height: 0 }\n // so we have to wait until views are ready\n // and rerun this function to show menu\n if (\n !windowLayoutResult.width ||\n !windowLayoutResult.height ||\n !menuLayoutResult.width ||\n !menuLayoutResult.height ||\n (!anchorLayoutResult.width && !isCoordinate(anchor)) ||\n (!anchorLayoutResult.height && !isCoordinate(anchor))\n ) {\n requestAnimationFrame(show);\n return;\n }\n\n setLeft(anchorLayoutResult.x);\n setTop(anchorLayoutResult.y);\n setAnchorLayout({\n height: anchorLayoutResult.height,\n width: anchorLayoutResult.width,\n });\n\n setMenuLayout({\n height: menuLayoutResult.height,\n width: menuLayoutResult.width,\n });\n\n setWindowLayout({\n height: windowLayoutResult.height - keyboardHeightRef.current,\n width: windowLayoutResult.width,\n });\n\n attachListeners();\n const { animation } = theme;\n Animated.parallel([\n Animated.timing(scaleAnimationRef.current, {\n toValue: { x: menuLayoutResult.width, y: menuLayoutResult.height },\n duration: ANIMATION_DURATION * animation.scale,\n easing: EASING,\n useNativeDriver: true,\n }),\n Animated.timing(opacityAnimationRef.current, {\n toValue: 1,\n duration: ANIMATION_DURATION * animation.scale,\n easing: EASING,\n useNativeDriver: true,\n }),\n ]).start(({ finished }) => {\n if (finished) {\n focusFirstDOMNode(menuRef.current);\n prevRendered.current = true;\n }\n });\n }, [anchor, attachListeners, measureAnchorLayout, theme]);\n\n const hide = React.useCallback(() => {\n removeListeners();\n\n const { animation } = theme;\n\n Animated.timing(opacityAnimationRef.current, {\n toValue: 0,\n duration: ANIMATION_DURATION * animation.scale,\n easing: EASING,\n useNativeDriver: true,\n }).start(({ finished }) => {\n if (finished) {\n setMenuLayout({ width: 0, height: 0 });\n setRendered(false);\n prevRendered.current = false;\n focusFirstDOMNode(anchorRef.current);\n }\n });\n }, [removeListeners, theme]);\n\n const updateVisibility = React.useCallback(\n async (display: boolean) => {\n // Menu is rendered in Portal, which updates items asynchronously\n // We need to do the same here so that the ref is up-to-date\n await Promise.resolve().then(() => {\n if (display && !prevRendered.current) {\n show();\n return;\n }\n\n if (!display && prevRendered.current) {\n hide();\n }\n\n return;\n });\n },\n [hide, show]\n );\n\n React.useEffect(() => {\n const opacityAnimation = opacityAnimationRef.current;\n const scaleAnimation = scaleAnimationRef.current;\n keyboardDidShowListenerRef.current = Keyboard.addListener(\n 'keyboardDidShow',\n keyboardDidShow\n );\n keyboardDidHideListenerRef.current = Keyboard.addListener(\n 'keyboardDidHide',\n keyboardDidHide\n );\n\n return () => {\n removeListeners();\n keyboardDidShowListenerRef.current?.remove();\n keyboardDidHideListenerRef.current?.remove();\n scaleAnimation.removeAllListeners();\n opacityAnimation?.removeAllListeners();\n };\n }, [removeListeners, keyboardDidHide, keyboardDidShow]);\n\n React.useEffect(() => {\n if (prevVisible.current !== visible) {\n prevVisible.current = visible;\n\n if (visible !== rendered) {\n setRendered(visible);\n }\n }\n }, [visible, rendered]);\n\n React.useEffect(() => {\n updateVisibility(rendered);\n }, [rendered, updateVisibility]);\n\n // I don't know why but on Android measure function is wrong by 24\n const additionalVerticalValue = Platform.select({\n android: statusBarHeight ?? insets.top,\n default: 0,\n });\n\n // We need to translate menu while animating scale to imitate transform origin for scale animation\n const positionTransforms = [];\n let leftTransformation = left;\n let topTransformation =\n !isCoordinate(anchorRef.current) && anchorPosition === 'bottom'\n ? top + anchorLayout.height\n : top;\n\n // Check if menu fits horizontally and if not align it to right.\n if (left <= windowLayout.width - menuLayout.width - SCREEN_INDENT) {\n positionTransforms.push({\n translateX: scaleAnimationRef.current.x.interpolate({\n inputRange: [0, menuLayout.width],\n outputRange: [-(menuLayout.width / 2), 0],\n }),\n });\n\n // Check if menu position has enough space from left side\n if (leftTransformation < SCREEN_INDENT) {\n leftTransformation = SCREEN_INDENT;\n }\n } else {\n positionTransforms.push({\n translateX: scaleAnimationRef.current.x.interpolate({\n inputRange: [0, menuLayout.width],\n outputRange: [menuLayout.width / 2, 0],\n }),\n });\n\n leftTransformation += anchorLayout.width - menuLayout.width;\n\n const right = leftTransformation + menuLayout.width;\n // Check if menu position has enough space from right side\n if (right > windowLayout.width - SCREEN_INDENT) {\n leftTransformation =\n windowLayout.width - SCREEN_INDENT - menuLayout.width;\n }\n }\n\n // If the menu is larger than available vertical space,\n // calculate the height of scrollable view\n let scrollableMenuHeight = 0;\n\n // Check if the menu should be scrollable\n if (\n // Check if the menu overflows from bottom side\n topTransformation >=\n windowLayout.height -\n menuLayout.height -\n SCREEN_INDENT -\n additionalVerticalValue &&\n // And bottom side of the screen has more space than top side\n topTransformation <= windowLayout.height - topTransformation\n ) {\n // Scrollable menu should be below the anchor (expands downwards)\n scrollableMenuHeight =\n windowLayout.height -\n topTransformation -\n SCREEN_INDENT -\n additionalVerticalValue;\n } else if (\n // Check if the menu overflows from bottom side\n topTransformation >=\n windowLayout.height -\n menuLayout.height -\n SCREEN_INDENT -\n additionalVerticalValue &&\n // And top side of the screen has more space than bottom side\n topTransformation >= windowLayout.height - top &&\n // And menu overflows from top side\n topTransformation <=\n menuLayout.height -\n anchorLayout.height +\n SCREEN_INDENT -\n additionalVerticalValue\n ) {\n // Scrollable menu should be above the anchor (expands upwards)\n scrollableMenuHeight =\n topTransformation +\n anchorLayout.height -\n SCREEN_INDENT +\n additionalVerticalValue;\n }\n\n // Scrollable menu max height\n scrollableMenuHeight =\n scrollableMenuHeight > windowLayout.height - 2 * SCREEN_INDENT\n ? windowLayout.height - 2 * SCREEN_INDENT\n : scrollableMenuHeight;\n\n // Menu is typically positioned below the element that generates it\n // So first check if it fits below the anchor (expands downwards)\n if (\n // Check if menu fits vertically\n topTransformation <=\n windowLayout.height -\n menuLayout.height -\n SCREEN_INDENT -\n additionalVerticalValue ||\n // Or if the menu overflows from bottom side\n (topTransformation >=\n windowLayout.height -\n menuLayout.height -\n SCREEN_INDENT -\n additionalVerticalValue &&\n // And bottom side of the screen has more space than top side\n topTransformation <= windowLayout.height - topTransformation)\n ) {\n positionTransforms.push({\n translateY: scaleAnimationRef.current.y.interpolate({\n inputRange: [0, menuLayout.height],\n outputRange: [-((scrollableMenuHeight || menuLayout.height) / 2), 0],\n }),\n });\n\n // Check if menu position has enough space from top side\n if (topTransformation < SCREEN_INDENT) {\n topTransformation = SCREEN_INDENT;\n }\n } else {\n positionTransforms.push({\n translateY: scaleAnimationRef.current.y.interpolate({\n inputRange: [0, menuLayout.height],\n outputRange: [(scrollableMenuHeight || menuLayout.height) / 2, 0],\n }),\n });\n\n topTransformation +=\n anchorLayout.height - (scrollableMenuHeight || menuLayout.height);\n\n const bottom =\n topTransformation +\n (scrollableMenuHeight || menuLayout.height) +\n additionalVerticalValue;\n\n // Check if menu position has enough space from bottom side\n if (bottom > windowLayout.height - SCREEN_INDENT) {\n topTransformation =\n scrollableMenuHeight === windowLayout.height - 2 * SCREEN_INDENT\n ? -SCREEN_INDENT * 2\n : windowLayout.height -\n menuLayout.height -\n SCREEN_INDENT -\n additionalVerticalValue;\n }\n }\n\n const shadowMenuContainerStyle = {\n opacity: opacityAnimationRef.current,\n transform: [\n {\n scaleX: scaleAnimationRef.current.x.interpolate({\n inputRange: [0, menuLayout.width],\n outputRange: [0, 1],\n }),\n },\n {\n scaleY: scaleAnimationRef.current.y.interpolate({\n inputRange: [0, menuLayout.height],\n outputRange: [0, 1],\n }),\n },\n ],\n borderRadius: theme.roundness,\n ...(!theme.isV3 && { elevation: 8 }),\n ...(scrollableMenuHeight ? { height: scrollableMenuHeight } : {}),\n };\n\n const positionStyle = {\n top: isCoordinate(anchor)\n ? topTransformation\n : topTransformation + additionalVerticalValue,\n ...(I18nManager.getConstants().isRTL\n ? { right: leftTransformation }\n : { left: leftTransformation }),\n };\n\n const pointerEvents = visible ? 'box-none' : 'none';\n\n return (\n <View\n ref={(ref) => {\n anchorRef.current = ref;\n }}\n collapsable={false}\n >\n {isCoordinate(anchor) ? null : anchor}\n {rendered ? (\n <Portal>\n <Pressable\n accessibilityLabel={overlayAccessibilityLabel}\n accessibilityRole=\"button\"\n onPress={onDismiss}\n style={styles.pressableOverlay}\n />\n <View\n ref={(ref) => {\n menuRef.current = ref;\n }}\n collapsable={false}\n accessibilityViewIsModal={visible}\n style={[styles.wrapper, positionStyle, style]}\n pointerEvents={pointerEvents}\n onAccessibilityEscape={onDismiss}\n testID={`${testID}-view`}\n >\n <Animated.View\n pointerEvents={pointerEvents}\n style={{\n transform: positionTransforms,\n }}\n >\n <Surface\n mode={mode}\n pointerEvents={pointerEvents}\n style={[\n styles.shadowMenuContainer,\n shadowMenuContainerStyle,\n theme.isV3 && {\n backgroundColor:\n theme.colors.elevation[ELEVATION_LEVELS_MAP[elevation]],\n },\n contentStyle,\n ]}\n {...(theme.isV3 && { elevation })}\n testID={`${testID}-surface`}\n theme={theme}\n container\n >\n {(scrollableMenuHeight && (\n <ScrollView\n keyboardShouldPersistTaps={keyboardShouldPersistTaps}\n >\n {children}\n </ScrollView>\n )) || <React.Fragment>{children}</React.Fragment>}\n </Surface>\n </Animated.View>\n </View>\n </Portal>\n ) : null}\n </View>\n );\n};\n\nMenu.Item = MenuItem;\n\nconst styles = StyleSheet.create({\n wrapper: {\n position: 'absolute',\n },\n shadowMenuContainer: {\n opacity: 0,\n paddingVertical: 8,\n },\n pressableOverlay: {\n ...Platform.select({\n web: {\n cursor: 'auto',\n },\n }),\n ...StyleSheet.absoluteFillObject,\n width: '100%',\n },\n});\n\nexport default Menu;\n"],"mappings":"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","ignoreList":[]},"metadata":{"hasCjsExports":false},"sourceType":"module","externalDependencies":[]}