OptionalcheckedRenders a check mark to the left of the label.
Optionalcovertype: 'nowplaying' album art, drawn at 40x40 CSS px by the default
stylesheet. Accepts three forms: a full data URL
(data:image/jpeg;base64,...), an http(s):// URL (used directly), or
raw base64 (decoded as JPEG).
OptionalenabledDisabled rows are greyed out and cannot be chosen. Defaults to true.
OptionaliconInline monochrome SVG icon, drawn before the label. content is the SVG
inner markup (e.g. "<path d=\"...\"/>"). The overlay runtime parses it
with DOMParser and clones only an allowlisted set of shape elements /
attributes into the live document; raw innerHTML injection is not used.
An illegal or oversized (>32 KiB) icon is dropped silently and the row
continues without an icon.
OptionalidStable id echoed back through menu:select when the row is chosen.
OptionallabelVisible row text; omitted for separators.
Optionalmaxtype: 'slider' range maximum (default 100).
Optionalmintype: 'slider' range minimum (default 0).
Optionalorientationtype: 'slider' axis only ('horizontal' | 'vertical'). Default when
omitted: 'horizontal'. Only the exact value 'vertical' is vertical;
unknown strings fall back to horizontal, and non-slider types ignore the
field. Vertical semantics: min at bottom, max at top; ArrowUp / ArrowRight
increase, ArrowDown / ArrowLeft decrease, Home=min, End=max. A constant
slider (min === max after normalization) displays its value and never
emits a value change.
Optionalsegmentstype: 'segmented' segments — an inline single-select control (one row of
mutually exclusive options). The selected segment is value, a
zero-based index. Each segment shows its iconSvg when present, otherwise
its label; a segment with enabled: false is greyed out and cannot be
picked. Picking one reports { menuId, itemId, value } through
menu:valueChanged and keeps the menu open (Left/Right also move the
selection). Segment icons go through the same allowlist sanitizer as item
icons, so an illegal icon is dropped per segment.
OptionalsubmenuNested child items; presence renders a flyout arrow.
Optionalsubtitletype: 'nowplaying' secondary line (artist / album).
Optionaltitletype: 'nowplaying' primary line (track title). Falls back to label.
OptionaltypeRow kind. 'separator' renders a divider; any other value is a normal row.
The rich kinds ('nowplaying' / 'rating' / 'slider' / 'segmented')
draw an inline control instead of a plain label row. A rating, slider, or
segmented change reports through menu:valueChanged and keeps the menu
open; a now-playing card is an ordinary selection that reports through
menu:select and closes the menu.
OptionalvalueCurrent value of a rich value control. type: 'rating' → integer stars
0..5; type: 'slider' → integer within [min, max];
type: 'segmented' → zero-based index of the selected segment. Changes
are reported through menu:valueChanged as { menuId, itemId, value }
without closing the menu, so the page owns what a value means.
A single item in a self-drawn (WebView-rendered) popup menu.
This is the input shape accepted by
menu.show/menu.popup, distinct from the read-only MenuItem tree returned bymenu.getMainMenu/menu.getContextMenu.