UNPKG

@laserware/hoverboard

Version:

Better context menus for Electron.

175 lines (162 loc) 7.87 kB
import { MenuItemConstructorOptions } from 'electron'; /** * Role for a {@linkcode RoleMenuItem}. See the [Electron documentation](https://www.electronjs.org/docs/latest/api/menu-item#roles) * for additional information. * * @remarks * Some of the menu item roles don't work in a context menu, so if clicking * on it doesn't do anything, that's why. */ type ContextMenuItemRole = MenuItemConstructorOptions["role"]; /** * Type of context menu item. See the [Electron documentation](https://www.electronjs.org/docs/latest/api/menu-item#menuitemtype) * for additional information. */ type ContextMenuItemType = MenuItemConstructorOptions["type"]; interface NormalMenuItemAttributes extends ContextMenuItemAttributes { accelerator: string | null; "accelerator-works-when-hidden": BooleanAttribute; enabled: BooleanAttribute; icon: string | null; label: string | null; "register-accelerator": BooleanAttribute; tooltip: string | null; } declare class NormalMenuItemElement<A extends Record<string, any> = NormalMenuItemAttributes> extends ContextMenuItemElement<A> { constructor(type?: ContextMenuItemType); accelerator: string | undefined; acceleratorWorksWhenHidden: boolean | undefined; enabled: boolean | undefined; icon: string | undefined; label: string | undefined; registerAccelerator: boolean | undefined; toolTip: string | undefined; toTemplate(): MenuItemConstructorOptions; addEventListener(type: "click", listener: ContextMenuEventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions): void; removeEventListener(type: "click", listener: ContextMenuEventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions): void; } type SubmenuMenuItemAttributes = NormalMenuItemAttributes; declare class SubmenuMenuItemElement extends NormalMenuItemElement<SubmenuMenuItemAttributes> { constructor(); [Symbol.iterator](): { next: () => { value: Element | null; done: boolean; } | { done: boolean; value?: undefined; }; }; toTemplate(): MenuItemConstructorOptions; } type BooleanAttribute = "true" | "false" | null; interface ContextMenuItemAttributes { id: string; visible: BooleanAttribute; } declare class ContextMenuItemElement<Attrs extends Record<string, any> = ContextMenuItemAttributes> extends HTMLElement { readonly type: ContextMenuItemType; constructor(type: ContextMenuItemType); id: string; visible: boolean | undefined; submenu: SubmenuMenuItemElement | null; toTemplate(): MenuItemConstructorOptions; connectedCallback(): void; getAttribute(name: keyof Attrs): string | null; setAttribute(name: keyof Attrs, value: string): void; removeAttribute(name: keyof Attrs): void; } interface ContextMenuAttributes { id: string | null; target?: string | null; } declare class ContextMenuElement extends HTMLElement { #private; constructor(); [Symbol.iterator](): Generator<Element | null, void, unknown>; id: string; target: string | undefined; connectedCallback(): void; disconnectedCallback(): void; getAttribute(name: keyof ContextMenuAttributes): string | null; toTemplate(): MenuItemConstructorOptions[]; addEventListener(type: "attach", listener: ContextMenuEventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions): void; addEventListener(type: "click", listener: ContextMenuEventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions): void; addEventListener(type: "hide", listener: ContextMenuEventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions): void; addEventListener(type: "show", listener: ContextMenuEventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions): void; removeEventListener(type: "attach", listener: ContextMenuEventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions): void; removeEventListener(type: "click", listener: ContextMenuEventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions): void; removeEventListener(type: "hide", listener: ContextMenuEventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions): void; removeEventListener(type: "show", listener: ContextMenuEventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions): void; hide(): Promise<void>; show(x: number, y: number): Promise<ContextMenuItemElement | null>; attachTo(target: HTMLElement | string): void; detach(): void; dispose(): void; } type ContextMenuEventType = "attach" | "click" | "hide" | "show"; interface ContextMenuEventInit extends EventModifierInit { clientX?: number; clientY?: number; triggeredByAccelerator?: boolean; menu: ContextMenuElement | null; menuItem: ContextMenuItemElement | null; trigger?: HTMLElement | null; } type ContextMenuEventListener = (event: ContextMenuEvent) => void; interface ContextMenuEventListenerObject { handleEvent(object: ContextMenuEvent): void; } type ContextMenuEventListenerOrEventListenerObject = ContextMenuEventListener | ContextMenuEventListenerObject; declare class ContextMenuEvent extends Event { trigger: HTMLElement | null; triggeredByAccelerator: boolean; clientX: number; clientY: number; menu: ContextMenuElement | null; menuItem: ContextMenuItemElement | null; constructor(type: ContextMenuEventType, eventInitDict: ContextMenuEventInit); } interface CheckboxMenuItemAttributes extends ContextMenuItemAttributes { checked: BooleanAttribute; } declare class CheckboxMenuItemElement extends NormalMenuItemElement<CheckboxMenuItemAttributes> { constructor(); checked: boolean | undefined; toTemplate(): MenuItemConstructorOptions; } interface RadioMenuItemAttributes extends ContextMenuItemAttributes { checked: BooleanAttribute; } declare class RadioMenuItemElement extends NormalMenuItemElement<RadioMenuItemAttributes> { constructor(); checked: boolean | undefined; toTemplate(): MenuItemConstructorOptions; } interface RoleMenuItemAttributes extends ContextMenuItemAttributes { accelerator: string | null; "accelerator-works-when-hidden": BooleanAttribute; enabled: BooleanAttribute; icon: string | null; of: ContextMenuItemRole | null; "register-accelerator": BooleanAttribute; tooltip: string | null; } declare class RoleMenuItemElement extends ContextMenuItemElement<RoleMenuItemAttributes> { constructor(); accelerator: string | undefined; acceleratorWorksWhenHidden: boolean | undefined; enabled: boolean | undefined; icon: string | undefined; of: ContextMenuItemRole | undefined; registerAccelerator: boolean | undefined; toolTip: string | undefined; toTemplate(): MenuItemConstructorOptions; } type SeparatorMenuItemAttributes = ContextMenuItemAttributes; declare class SeparatorMenuItemElement extends ContextMenuItemElement<SeparatorMenuItemAttributes> { constructor(); get template(): MenuItemConstructorOptions; } declare function registerElements(): void; export { type CheckboxMenuItemAttributes, CheckboxMenuItemElement, type ContextMenuAttributes, ContextMenuElement, ContextMenuEvent, type ContextMenuEventInit, type ContextMenuEventListenerOrEventListenerObject, type ContextMenuEventType, ContextMenuItemElement, type NormalMenuItemAttributes, NormalMenuItemElement, type RadioMenuItemAttributes, RadioMenuItemElement, type RoleMenuItemAttributes, RoleMenuItemElement, type SeparatorMenuItemAttributes, SeparatorMenuItemElement, type SubmenuMenuItemAttributes, SubmenuMenuItemElement, registerElements };