- ⚡ Configurable and smart floating menu for react
- ⚙️ Comes with a lot of options to customize the behavior of the menu
- 💡 Auto detects edges of the screen and places the menu accordingly
- 🎨 Customize colors with ease
- 📱 Seamless support for mobile and desktop
- 💪 Built with Typescript
- 📦 Installation
- 🚀 Getting started
- ⚙️ Properties
- 🎨 Theme
- 🧪 Tests
- 🍫 CodeSandbox Examples
- 🤝 Contributing
- 📃 Meta
Install the package with npm
or yarn
.
npm install react-float-menu
or
yarn add react-float-menu
Let's get started by creating a new floating menu with drag super power.
<Menu
dimension={40}
items={[
{ name: "File" },
{
children: [
{ children: [{ name: "Cut 1" }, { name: "Cut 2" }], name: "Cut" },
{ name: "Select All" },
],
name: "Edit",
},
{ name: "Add" },
{
children: [
{ name: "Copy from clipboard" },
{ name: "Copy selection" },
],
name: "Copy",
},
{ name: "Save" },
{ name: "Logout" },
]}
shape="square"
startPosition="top left"
width={250}
onSelect={(val) => console.log(val)}
>
<PlusIcon />
</Menu>
name | description | default |
---|---|---|
autoFlipMenu | Flips the menu when the button is at the bottom of the screen and there is no space to display the menu | true |
bringMenuToFocus | Automatically moves the menu and brings it to focus when the menu is activated from the left or right edge of the screen. | true |
closeOnClickOutside | Closes the menu if you touch or click outside the menu. | true |
dimension | Sets the height and width of the button | 30 |
disableHeader | Disables the header section of the menu. | false |
iconSize | Size of the menu item icons | "1rem" |
items | Collection of menu items. Please refer Menu item model | [] |
pin | Disables dragging and pins the menu. The button's initial placement will be determined by startPosition |
30 |
shape | Shape of the button. can be square or circle |
circle |
RTL | Renders the menu items right to left. The submenu's will open to the left side . |
False |
startPosition | Starting position of the button. can be top left ,top right ,bottom left ,bottom right |
top left |
theme | With the theme object, you can change the colors of different elements. |
|
width | Width of the menu | 30 |
items
is an array of menu item objects. A menu item represents the individual menu item and its properties.
name | description |
---|---|
name | Label of the menu item |
id | Unique id of the menu item. This is optional as the ids are automatically generated by the library |
children | The prop takes an array of Menu item objects and it will be rendered as the submenu for this menu item |
icon | Use this prop to display a icon for the menu item |
selected | This is an internal prop that is set to true when the menu item is selected |
submenus are activated by clicking on the menu item or by hovering over the menu item.
Use the theme object to customize the colors of the different elements of the menu.
name | description | default |
---|---|---|
menuBackgroundColor | background color of the menu | #FFFFFF |
menuItemHoverColor | background color of the menu item when its hovered | #318CE7 |
menuItemHoverTextColor | Text color of the menu item when its hovered | #fff |
primary | Primary color or the predominant color of the menu | #318CE7 |
secondary | Secondary color of the menu | #FFFFFF |
import {Menu} from 'react-float-menu';
<Menu
startPosition="top right"
theme={{
menuBackgroundColor: "#FFFFFF",
menuItemHoverColor: "#318CE7",
menuItemHoverTextColor: "#fff",
primary: "#318CE7",
secondary: "#FFFFFF",
}}
/>
We use cypress to test the library.
To run the tests, run the following command in the root directory of the project.
pnpm install
pnpm run cypress:open
- Fork it
- Create your feature branch (git checkout -b new-feature)
- Commit your changes (git commit -am 'Add feature')
- Push to the branch (git push origin new-feature)
- Create a new Pull Request
Check out the contributing guide for more details.
Distributed under the MIT license. See LICENSE
for more information.
Prabhu Murthy – @prabhumurthy2 – prabhu.m.murthy@gmail.com https://github.com/prabhuignoto