UNPKG

menupro

Version:

Custom menu like OS but better

150 lines (118 loc) 3.4 kB
# menupro [![npm version](https://img.shields.io/npm/v/menupro.svg)](https://www.npmjs.com/package/menupro) [![License](https://img.shields.io/npm/l/menupro.svg)](https://opensource.org/licenses/MIT) A lightweight, dependency-free dropdown menu library for web applications. Create desktop-style navigation menus with ease. ## Features - **Zero dependencies** - No jQuery, React, or other libraries required - **Lightweight** - Only ~2.4KB minified (including CSS) - **Auto-injected CSS** - Styles are automatically loaded with the JavaScript - **Recursive menus** - Support for unlimited nested submenus - **Icon support** - Add icons to menu items - **Easy event handling** - Multiple ways to handle click events ## Install ```bash npm i menupro ``` ## Quick Start ### 1. Import the library ```html <script src="menupro/index.js"></script> ``` Or with ES modules: ```js import 'menupro' ``` ### 2. Initialize the menu ```js menupro.start({ name: 'menupro', element: '#navbar', nav: [ { name: 'File', sub: [ { name: 'New', onclick: 'createNew()' }, { name: 'Open', onclick: "openFile('doc')" }, { name: '' }, // Separator { name: 'Exit', onclick: 'app.exit()' } ] }, { name: 'Edit', sub: [ { name: 'Cut', onclick: 'edit.cut()' }, { name: 'Copy', onclick: 'edit.copy()' }, { name: 'Paste', onclick: 'edit.paste()' } ] }, { name: 'Help', onclick: 'showHelp()' } ] }) ``` ## Configuration ### Parameters | Parameter | Type | Description | |-----------|------|-------------| | `name` | string | CSS class name for the menu (default: "menupro") | | `element` | string \| HTMLElement | Target container for the menu | | `nav` | array | Menu structure (see below) | ### Menu Item Structure ```js { name: 'Menu Label', // Required (empty string for separator) onclick: 'functionName', // Optional: function name or call icon: '<img src="...">', // Optional: HTML icon sub: [ // Optional: nested menu items { name: 'Sub Item', ... } ] } ``` ### onclick Options The `onclick` property supports multiple formats: ```js // 1. Function name (must be global) { onclick: 'myFunction' } // 2. Function call with arguments { onclick: "openFile('document.pdf')" } // 3. Direct function reference { onclick: () => console.log('clicked!') } ``` ## Example HTML ```html <!DOCTYPE html> <html> <head> <title>menupro Demo</title> <script src="menupro/index.js"></script> </head> <body> <nav id="navbar"></nav> <script> // Define a global function function message(text) { alert('You clicked: ' + text); } // Initialize menu menupro.start({ name: 'menupro', element: '#navbar', nav: [ { name: 'Home', onclick: "message('Home')" }, { name: 'Products', sub: [ { name: 'Software', onclick: "message('Software')" }, { name: 'Hardware', onclick: "message('Hardware')" } ]}, { name: 'About', onclick: "message('About')" } ] }); </script> </body> </html> ``` ## License MIT License ## Credits Copyrigth (c) [Dario Passariello](https://dario.passariello.ca/)