- 🎯 Drag & Drop - Freely position your menu anywhere on screen
- 🧠 Smart Positioning - Automatic edge detection and menu flipping
- 🌳 Nested Menus - Support for complex menu hierarchies
- ⌨️ Keyboard Accessible - Full keyboard navigation support
- 📱 Touch Optimized - Enhanced mobile experience (Touch Guide)
- ⚡ Performance - Optimized bundle size (Bundle Guide)
- 🎨 Customizable - Extensive theming options
- 🛠 TypeScript - Built with type safety
- 🎭 Vue 3 - Leverages the latest Vue.js features
- 📦 Tree-shakeable - Only import what you need
# Using npm npm install vue-float-menu # Using yarn yarn add vue-float-menu # Using pnpm pnpm add vue-float-menu
<template> <float-menu position="top left" :dimension="50" :menu-data="items" @select="handleSelection"> <template #icon> <BoxIcon /> </template> </float-menu> </template> <script setup> import { FloatMenu } from 'vue-float-menu'; import 'vue-float-menu/dist/vue-float-menu.css'; const items = [ { name: 'New' }, { name: 'Edit', subMenu: { name: 'edit-items', items: [{ name: 'Copy' }, { name: 'Paste' }], }, }, { name: 'Open Recent' }, { name: 'Save' }, ]; const handleSelection = (selectedItem) => { console.log('Selected:', selectedItem); }; </script>
Prop | Type | Default | Description |
---|---|---|---|
dimension | number | 50 | Size of menu head in pixels |
position | string | 'top left' | Initial position (top left , top right , bottom left , bottom right ) |
fixed | boolean | false | Disable dragging and fix position |
menu-dimension | object | { width: 200, height: 300 } | Menu dimensions |
menu-data | array | [] | Menu structure data |
menu-style | string | 'slide-out' | Menu style (slide-out' or accordion`) |
flip-on-edges | boolean | false | Auto-flip menu on screen edges |
theme | object | {} | Custom theme configuration |
The menu can be positioned in four corners of the screen:
<float-menu position="bottom right"> <template #icon> <BoxIcon /> </template> </float-menu>
Configure menu dimensions and style:
<float-menu :dimension="50" :menu-dimension="{ width: 300, height: 400 }" menu-style="accordion"> <template #icon> <BoxIcon /> </template> </float-menu>
Two menu styles are available:
- Slide-out (default)
- Accordion (mobile-friendly)
Customize the appearance with the theme prop:
<float-menu :theme="{ primary: '#00539C', textColor: '#000', menuBgColor: '#fff', textSelectedColor: '#fff', }" > Click </float-menu>
# Install dependencies pnpm install # Start development server pnpm run dev # Run linting pnpm run lint:all # Build package pnpm run rollup
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
Distributed under the MIT License. See LICENSE
for more information.
Prabhu Murthy
- Twitter: @prabhumurthy2
- Email: prabhu.m.murthy@gmail.com
- Website: prabhumurthy.com
- GitHub: @prabhuignoto
Made with ❤️ by Prabhu Murthy