@lilydesignsystem/vue-menu-picker

Lily Design System Vue 3 menu picker: an icon button (a hamburger icon) opening a dropdown of whatever the app provides. Headless, SSR-safe, no CSS.
196
Install
npm install @lilydesignsystem/vue-menu-picker
Latest Version:0.1.0
Vue:3
License:MIT OR Apache-2.0 OR GPL-2.0-only OR GPL-3.0-only OR BSD-3-Clause
Last Updated:Oct 8, 2026
Links: npm
Maintainer: joelparkerhenderson

MenuPicker (Vue helper)

A headless Vue 3 control for a dropdown of whatever your app provides: a single-icon button (a bundled three-line hamburger SVG) that opens a panel you fill with links, buttons, a search form, a few settings — anything.

The single source of truth is spec/index.md. This file is the human-readable guide.

Install

import MenuPicker from "@lilydesignsystem/vue-menu-picker";

Quick start

<script setup lang="ts">
import MenuPicker from "@lilydesignsystem/vue-menu-picker";
</script>

<template>
  <MenuPicker label="Menu">
    <ul>
      <li><a href="https://github.com/LilyDesignSystem/lily-design-system-vue-helpers/blob/HEAD/">Home</a></li>
      <li><a href="https://github.com/LilyDesignSystem/lily-design-system-vue-helpers/blob/HEAD/about/">About Us</a></li>
      <li><button type="button" @click="signOut">Sign out</button></li>
    </ul>
  </MenuPicker>
</template>

label is the button's accessible name, the panel's name and the tooltip text. There is no default content: the package ships no links and no English, so the panel's content, and every word on it, is yours.

Closing from your content

The default slot receives { open, close }:

<MenuPicker label="Menu" v-slot="{ close }">
  <form @submit.prevent="search(); close()">
    <input type="search" aria-label="Search" />
  </form>
</MenuPicker>

By default, activating a link, a button or a [role="menuitem"] inside the panel closes it. Turn that off with :close-on-select="false", or opt one element or region out with a data-menu-picker-keep-open ancestor.

Props

label (required), v-model:open?, closeOnSelect? (default true), the default slot (the panel's content), the icon slot (replaces the icon, not the content), class?.

Styling

Headless: no CSS ships. Target .menu-picker, .menu-picker-button, .menu-picker-icon, .menu-picker-tooltip, .menu-picker-panel. The 45 reference themes in the monorepo's themes/ style all of them, including the popup placement.

Examples

examples/: a links panel, a panel with a form and close, and a custom icon.

Related Packages

@lilydesignsystem/vue-settings-picker

Lily Design System Vue 3 settings picker: an icon button (a cog icon) opening a...

215
@lilydesignsystem/vue-locale-picker

Lily Design System Vue 3 locale picker: an icon button opening an APG listbox th...

1,260 3
@lilydesignsystem/vue-theme-picker

Lily Design System Vue 3 theme picker: an icon button opening an APG listbox tha...

1,137 3
@lilydesignsystem/vue-text-size-picker

Lily Design System - Vue 3 text size picker

1,113 3
@lilydesignsystem/vue-search-picker

Lily Design System Vue 3 search picker: a magnifying-glass icon button opening a...

644 3

Version History

Version Released Vue License
0.1.0 ^3.0.0 MIT OR Apache-2.0 OR GPL-2.0-only OR GPL-3.0-only OR BSD-3-Clause
Pre-releases (1)
Version Released License
0.0.0-stage