npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@breeffy/react-native-popup-menu

v0.8.0

Published

Popup Menu for React Native

Downloads

380

Readme

react-native-popup-menu · npm license

Features

| Positioning | Description | | :------------------------- | :---------------------------------------------------------------------------------------------------------- | | snap positioning | Allows to snap menu to any element's border | | stick to center of element | Allows to show menu by the center of element's width | | dynamic positioning | Allows to add dynamic offsets to base menu position | | position constraints | Automatically applies constraints to never allow to go beyond screen borders. You always will see full menu |

| Animations | Description | | :-------------------- | :------------------------------------------------------------------------------------------------- | | Right-to-Left support | Not implemented. See #1 |

Pure TypeScript material menu component for React Native.

initial-gif example-application-gif

Install

Using npm

npm install "@breeffy/react-native-popup-menu" --save

Using yarn

yarn add "@breeffy/react-native-popup-menu"

Usage

| Library version | React Native version | Description | | :------------------------- | :------------------------- | :---------------------------------------------------------------------------------------------------------- | | 0.7.0 | React Native 0.62.2 | Shows how to use react-native-popup-menu with Typescript | | 0.7.0 | React Native 0.62.2 | Shows how to use react-native-popup-menu with Javascript |

...
export const App = () => {
  let elementRef = React.createRef<View>();
  let menuRef: Menu | null = null;

  const setMenuRef: (instance: Menu | null) => void = (ref) => (menuRef = ref);
  const hideMenu = () => menuRef?.hide();
  const showMenu = () => {
    menuRef?.show(elementRef.current, Position.TOP_LEFT);
  };
  const onPress = () => showMenu();

  return (
    <View
      style={{
        width: '100%',
        height: '100%',
        alignItems: 'center',
        justifyContent: 'center'
      }}
    >
      <ElementToStick ref={elementRef} />
      <Button
        style={{ position: 'absolute', bottom: 64 }}
        title={'Press to show menu'}
        onPress={onPress}
      />
      <Menu ref={setMenuRef}>
        <MenuItem onPress={hideMenu}>Item 1</MenuItem>
        <MenuItem onPress={hideMenu}>Item 2</MenuItem>
        <MenuItem onPress={hideMenu} disabled>
          Item 3
        </MenuItem>
        <MenuDivider />
        <MenuItem onPress={hideMenu}>Item 4</MenuItem>
      </Menu>
    </View>
  );
};

Menu

Properties

| name | description | type | default | | :------- | :---------------------------------------------- | -------: | :------ | | children | Components rendered in menu (required) | Node | - | | style | Menu style (optional) | Style | - | | onHidden | Callback when menu has become hidden (optional) | Function | - |

Methods

| name | description | | :----- | :---------- | | show() | Shows menu | | hide() | Hides menu |

show method parameters

| name | description | type | default | | :------------ | :--------------------------------------------------------- | --------: | :------------------ | | ref | React reference to component (required) | Reference | - | | stickTo | To which component border(s) we will stick menu (optional) | Position | Position.TOP_LEFT | | extraOffset | Additional offset to stickTo (optional) | Object | { left: 0, top: 0 } | | computeOffset | Additional computed offset to stickTo (optional) | Function | { left: 0, top: 0 } |

stickTo parameter set relative base position of menu, it is always relative to component.

Position enum values

| value | description | | :------------ | :-------------------------------------------------- | | TOP_LEFT | Show the menu at the top left of the component | | TOP_RIGHT | Show the menu at the top rigth of the component | | TOP_CENTER | Show the menu at the top center of the component | | BOTTOM_LEFT | Show the menu at the bottom left of the component | | BOTTOM_RIGHT | Show the menu at the bottom right of the component | | BOTTOM_CENTER | Show the menu at the bottom center of the component |

extraOffset parameter set additional offset to base position of menu. It's used if you want customize stickTo, adding additional offset. extraOffset is an Object with the following allowed properties.

extraOffset object properties

| value | description | type | | :----- | :----------------------------------------------------------------------------------------------------------------- | :----- | | top | Offset the top edge from menu base position | Number | | bottom | Offset the bottom edge from menu base position | Number | | left | Offset the left edge from menu base position | Number | | right | Offset the right edge from menu base position | Number |

| Notes | Example | | :--------------------------------------------------------------------------------- | :------------------------------ | | extraOffset can have duplicate properties (they all will be applied correctly) | { top: 10, top: -5, top: 15 } | | extraOffset values can be negative too | { top: 10, top: -5, top: 15 } |

computeOffset parameter is a callback function which will be called with position and size of component (computeOffset(left, top, width, height)). It's used if you want to customize stickTo dynamically and your computed offset depends on component position / size (for example to show menu centered you need to know component width).

computeOffset callback parameters

| name | description | type | | :----- | :----------------------------------------------------------------------------------- | -----: | | left | position of component on the horizontal axis (from top left window corner) | Number | | top | position of component on the vertical axis (from top left window corner) | Number | | width | width of component | Number | | height | height of component | Number |

computeOffset callback should return Object with the same properties as extraOffset Object.

/* Example of computeOffset return value */
{
  top: 10,
  left: 15,
  bottom: -3,
  right: 15,
  top: 12
}

| Notes | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | You can use extraOffset parameter or computeOffset or both parameters simultaneously. So, the final position of menu is calculated as basePosition + extraOffset + computeOffset(left, top, width, height) |

MenuItem

Properties

| name | description | type | default | | :---------------- | :----------------------- | -----: | :-------- | | children | Rendered text (required) | String | - | | disabled | Disabled flag | Bool | false | | disabledTextColor | Disabled text color | String | "#BDBDBD" | | onPress | Called function on press | Func | - | | style | Container style | Style | - | | textStyle | Text style | Style | - | | underlayColor | Pressed color | String | "#E0E0E0" |

MenuDivider

Properties

| name | description | type | default | | :---- | :---------- | -----: | :----------------- | | color | Line color | String | "rgba(0,0,0,0.12)" |