# Menu
 
A [Menu](https://www.google.com/design/spec/components/menus.html) is a temporary piece of material emitted from a button, an action, a pointer, or another control that contains at least two menu items. Each menu item is a discrete option or action that can affect the app, the view, or selected elements within a view. Menus should not be used as a primary method for navigation within an app. You can compose a menu based on a few subcomponents, same as for Lists.

<!-- example -->
```jsx
import {IconMenu, MenuItem, MenuDivider } from 'react-toolbox';
 
const MenuTest = () => (
  <IconMenu icon='more-vert' position='top-left' menuRipple selectable>
    <MenuItem value='download' icon='get-app' caption='Download' />
    <MenuItem value='help' icon='favorite' caption='Favorite' />
    <MenuItem value='settings' icon='open-in-browser' caption='Open in app' />
    <MenuDivider />
    <MenuItem value='signout' icon='delete' caption='Delete' disabled />
  </IconMenu>
);
```

## Menu

This subcomponent is the default wrapper for a menu and is responsible for the opening behavior. Its properties can affect to the Item children.

| Name              | Type          | Default         | Description|
|:-----|:-----|:-----|:-----|
| `active`   | `Boolean`    | `false`    | If true, the menu will be displayed as opened by default.| 
| `className`   | `String`    |  `''`    | Set a class to give custom styles to the menu wrapper.| 
| `onHide`    | `Function`    |    | Callback that will be called when the menu is being hid. |
| `onShow`    | `Function`    |    | Callback that will be invoked when the menu is being shown. |
| `outline`    | `Boolean`    | `true`  | If true the menu wrapper will show an outline with a soft shadow. |
| `position`    | `String`    | `static`  | Determine the position of the menu. With `static` value the menu will be always shown, `auto` means that the it will decide the opening direction based on the current position. To force a position use `top-left`, `top-right`, `bottom-left`, `bottom-right`. |
| `ripple`    | `Boolean`    | `true`  | If true, the menu items will show a ripple effect on click. |
| `selectable`    | `Boolean`    | `true`  | If true, the menu will keep a value to highlight the active child item. |
| `value`    | `Boolean`    |  | Used for selectable menus and indicates the initial value so the child item with this value can be highlighted. |

The menu has state to keep a value with the currently selected item. It also exposes methods to show and hide the menu from the code:

- `getValue` is used to get the current value.
- `setValue` is used to set a new active value.
- `show` is used to show the menu.
- `hide` is used to hide the menu.

## Icon Menu

As the most usual scenario will be to open the menu from a click in an Icon, we provide this subcomponent implementing this behavior. The `IconMenu` shows an icon and implements a `Menu` under the covers that is shown when is clicked. Some of its properties are transferred to the menu, others to the children:

| Name              | Type          | Default         | Description|
|:-----|:-----|:-----|:-----|
| `className`   | `String`    |  `''`    | Set a class to give custom styles to the icon wrapper.| 
| `icon`    | `String`    | `more-vert`  | Icon font key string to display the opener icon. |
| `iconRipple`    | `String`    | `true`  | If true, the icon will show a ripple when is clicked. |
| `menuRipple`    | `String`    | `true`  | Transferred to the `Menu` component. |
| `onClick`    | `Function`    |    | Callback that will be called when the icon is clicked. |
| `onHide`    | `Function`    |    | Callback that will be called when the menu is being hid. |
| `onShow`    | `Function`    |    | Callback that will be invoked when the menu is being shown. |
| `onSelect`    | `Function`    |    | Callback that will be invoked when a menu item is selected. |
| `position`    | `String`    | `auto`  | Determine the position of the menu. This property is transferred to the inner `Menu` component. |
| `selectable`    | `Boolean`    | `false`  | If true, the menu will keep a value to highlight the active child item. Transferred to the `Menu` |

## Menu Item

Is the inner component for menus and describes the content of each option. It behaves in a similar way to List Items but simpler.

| Name              | Type          | Default         | Description|
|:-----|:-----|:-----|:-----|
| `caption`   | `String`    |    | The text to include in the menu item.| 
| `className`   | `String`    |  `''`    | Set a class to give custom styles to the item.| 
| `disabled`   | `Boolean`    |  `false`    | If true, the item will be displayed as disabled and is not selectable.| 
| `icon`    | `String`    |  | Icon font key string to display in the right side of the option. |
| `ripple`    | `Boolean`    | `false`  | If true, the item will show a ripple effect when it's clicked. Inherited from the parent. |
| `selected`    | `Boolean`    | `false`  | Transferred from the `Menu` component for selectable menus. Indicates if it's the current active option. |

## Menu Divider

A very simple component that just displays a separator between options. It has no props and no state or methods, just markup.
