import { TemplateResult } from 'lit'; import { BahtElement } from '../base.js'; import { MenuItem } from '../menu-controller.js'; import { IconName } from './icons.js'; /** * Action menu behind a button: the ⋯ "more" menu on a table row or card, or a labelled * "Export ▾" menu. Same menu as `` — items with optional `shortcut` * hints (bound page-wide), disabled and danger entries, the APG menu-button keyboard. * * * * el.items = [{ value: 'rename', label: 'Rename', shortcut: 'f2' }, * { value: 'delete', label: 'Delete', danger: true }]; * el.addEventListener('baht-select', (e) => run(e.detail.value)); * * A child marked `data-trigger` becomes the trigger's content (an avatar menu); `heading` * adds a non-item first line ("Signed in as …"); items with `checked` are settings * (`menuitemcheckbox`) and can carry a `description` line. * * * * * * @fires baht-select - An item was picked (click, keyboard or its shortcut). `detail: { value, item }`. */ export declare class BahtMenu extends BahtElement { /** Menu entries. Set as a property: `el.items = [...]`. */ items: MenuItem[]; /** Visible trigger text; empty = an icon-only trigger. */ triggerLabel: string; /** Trigger icon from the curated set (default `more`, the ⋯). Ignored when `trigger-label` is set. */ icon: IconName | ''; /** Accessible name of the trigger (and the menu). Defaults to the trigger text, else "More actions". */ label: string; /** Trigger look: `ghost` (default) or `secondary`. */ variant: 'ghost' | 'secondary'; size: 'sm' | 'md'; /** Menu edge aligned with the trigger: `'end'` (default) or `'start'`. */ align: 'start' | 'end'; disabled: boolean; /** Non-item first line of the menu ("Signed in as …"). */ heading: string; private triggerEl; /** True once a `data-trigger` child was moved into the trigger. */ private customTrigger; private readonly menu; private get menuId(); protected firstUpdated(): void; protected updated(changed: Map): void; /** Button chrome for the built-in triggers; a custom (avatar) trigger stays bare. */ private triggerClass; protected render(): TemplateResult; }