BrowseMenu

Overlays

Menu

An actions menu with shortcuts, toggles, choices and nested submenus.

Preview

New window ⌘N Duplicate ⌘DShow sidebarSort byNameDateSizeDelete

Installation

Install the package once, then import the parts you use into a standalone component.

Install

npm install ngx-vitreo @angular/cdk @floating-ui/dom
Import

import { GlassMenu, GlassMenuTrigger, GlassMenuContent, GlassMenuItem, GlassMenuCheckboxItem, GlassMenuRadioGroup, GlassMenuRadioItem, GlassMenuGroup / GlassMenuLabel / GlassMenuSeparator / GlassMenuShortcut, GlassMenuSub / GlassMenuSubTrigger, GlassMenuSubContent } from 'ngx-vitreo';

@Component({
  imports: [GlassMenu, GlassMenuTrigger, GlassMenuContent, GlassMenuItem, GlassMenuCheckboxItem, GlassMenuRadioGroup, GlassMenuRadioItem, GlassMenuGroup / GlassMenuLabel / GlassMenuSeparator / GlassMenuShortcut, GlassMenuSub / GlassMenuSubTrigger, GlassMenuSubContent],
  // ...
})

Usage

Usage

<glass-menu>
  <button glassButton glassMenuTrigger>Edit</button>
  <glass-menu-content>
    <glass-menu-label>View</glass-menu-label>
    <glass-menu-checkbox-item [(checked)]="showGrid">Show grid</glass-menu-checkbox-item>
    <glass-menu-separator />
    <glass-menu-sub>
      <glass-menu-sub-trigger>Sort by</glass-menu-sub-trigger>
      <glass-menu-sub-content>
        <glass-menu-radio-group [(value)]="sort">
          <glass-menu-radio-item value="name">Name</glass-menu-radio-item>
          <glass-menu-radio-item value="date">Date</glass-menu-radio-item>
        </glass-menu-radio-group>
      </glass-menu-sub-content>
    </glass-menu-sub>
    <glass-menu-separator />
    <glass-menu-item (select)="undo()">
      Undo <glass-menu-shortcut>⌘Z</glass-menu-shortcut>
    </glass-menu-item>
    <glass-menu-item tone="destructive">Delete</glass-menu-item>
  </glass-menu-content>
</glass-menu>

API reference

GlassMenu

glass-menu

InputTypeDefaultDescription
modalbooleanfalseLocks page scroll and hides the page from assistive technology while open. Off by default, so the page keeps its scroll.
[(open)]booleanfalseWhether the menu is open.

GlassMenuTrigger

[glassMenuTrigger]

InputTypeDefaultDescription
disabledbooleanfalseStops the menu from opening.

GlassMenuContent

glass-menu-content

InputTypeDefaultDescription
sideOffsetnumber8Gap in pixels between the trigger and the menu.
side / align'top' | 'right' | 'bottom' | 'left' / 'start' | 'center' | 'end''bottom' / 'center'Preferred placement; it flips to stay on screen.
alignOffset / avoidCollisions / collisionPadding / sticky / hideWhenDetachednumber / boolean / number / 'partial' | 'always' / boolean0 / true / 0 / 'partial' / falseFine placement: offsets, collision padding and sticking to the anchor.
thicknessnumber thickness preference Glass thickness as a multiple of regular (1); thicker glass bends the backdrop further at the rim.

GlassMenuItem

glass-menu-item, [glassMenuItem]

InputTypeDefaultDescription
tone'default' | 'destructive''default'destructive colours the item for actions such as Delete.
insetbooleanfalseIndents the label to line up with checkbox and radio items.
(select)EventNoneFires when the item is chosen by click or keyboard; preventDefault() keeps the menu open.
disabled / textValueboolean / string false / its text Every item takes these.

GlassMenuCheckboxItem

glass-menu-checkbox-item

InputTypeDefaultDescription
[(checked)]boolean | 'indeterminate'falseWhether the check shows; choosing the item toggles it.

GlassMenuRadioGroup

glass-menu-radio-group

InputTypeDefaultDescription
[(value)]stringNoneThe selected item's value.

GlassMenuRadioItem

glass-menu-radio-item

InputTypeDefaultDescription
valuestring required The value this item selects in its radio group.

GlassMenuGroup / GlassMenuLabel / GlassMenuSeparator / GlassMenuShortcut

glass-menu-group, glass-menu-label, glass-menu-separator, glass-menu-shortcut

GlassMenuSub / GlassMenuSubTrigger

glass-menu-sub, glass-menu-sub-trigger

InputTypeDefaultDescription
[(open)] / insetboolean / booleanfalse / falseThe submenu's open state, and the trigger's indent.

GlassMenuSubContent

glass-menu-sub-content

InputTypeDefaultDescription
sideOffsetnumber6Gap in pixels between the submenu and its trigger.
alignOffsetnumber-6Shifts the submenu along its trigger so the first item lines up.