Menu

A menu of items that is hidden until triggered.

Preview
Code

Basic Example

<script>
	import {
		Menu,
		MenuArrow,
		MenuContent,
		MenuItem,
		MenuSub,
		MenuSubContent,
		MenuSubTrigger,
		MenuTrigger
	} from 'lithesome';
</script>

<Menu>
	<MenuTrigger>Menu</MenuTrigger>
	<MenuContent>
		<MenuItem>Item 1</MenuItem>
		<MenuItem>Item 2</MenuItem>
		<MenuItem>Item 3</MenuItem>
		<MenuSub name="submenu">
			<MenuSubTrigger>Item 4</MenuSubTrigger>

			<MenuSubContent>
				<MenuItem>Item 4-1</MenuItem>
				<MenuItem>Item 4-2</MenuItem>
				<MenuItem>Item 4-4</MenuItem>
			</MenuSubContent>
		</MenuSub>
	</MenuContent>
</Menu>

Disabling an item

By passing the disabled prop on the <MenuItem /> component. Lithesome will disallow clicking and skip over via keyboard navigation of that item.

<Menu>
	<MenuTrigger>Menu</MenuTrigger>
	<MenuContent>
		<MenuItem />
		<MenuItem disabled />
		<MenuItem />
	</MenuContent>
</Menu>

Each <MenuItem /> exposes a href prop. This will automatically turn the button into an anchor tag and place said href onto that item.

<Menu>
	<MenuTrigger>Menu</MenuTrigger>
	<MenuContent>
		<MenuItem href="/settings" />
		<MenuItem disabled />
		<MenuItem />
	</MenuContent>
</Menu>

To keep your menus organized, you can group related items together using the <MenuSub /> component and its related elements.

<Menu>
	<MenuTrigger>Menu</MenuTrigger>
	<MenuContent>
		<MenuItem />
		<MenuSub name="sub">
			<MenuSubTrigger>Sub Trigger</MenuSubTrigger>
			<MenuSubContent>
				<MenuItem />
				<MenuItem />
			</MenuSubContent>
		</MenuSub>
		<MenuItem />
	</MenuContent>
</Menu>

Whenever we want a sub menu, place it in the position to where you would want the new sub menu trigger to be.

The <MenuSub /> component must have a name prop with a unique ID.

Disabling a sub menu

Just like disabling an item, passing the disabled prop to the <MenuSub /> component will disable the <MenuSubTrigger /> and the following contents.

<Menu>
	<MenuTrigger>Menu</MenuTrigger>
	<MenuContent>
		<MenuItem />
		<MenuSub name="sub" disabled>
			<MenuSubTrigger>Sub Trigger</MenuSubTrigger>
			<MenuSubContent>
				<MenuItem />
				<MenuItem />
			</MenuSubContent>
		</MenuSub>
		<MenuItem />
	</MenuContent>
</Menu>

Deeply nested sub menus

The <MenuSub /> components can be place inside of one another to achieve a deeply nested menu.

<Menu>
	<MenuTrigger>Menu</MenuTrigger>
	<MenuContent>
		<MenuItem />
		<MenuSub name="sub">
			<MenuSubTrigger>Sub Trigger</MenuSubTrigger>
			<MenuSubContent>
				<MenuItem />
				<MenuSub name="anotherone">
					<MenuSubTrigger>Sub Trigger</MenuSubTrigger>
					<MenuSubContent>
						<MenuItem />
						<MenuItem />
					</MenuSubContent>
				</MenuSub>
				<MenuItem />
			</MenuSubContent>
		</MenuSub>
		<MenuItem />
	</MenuContent>
</Menu>