@laserware/hoverboard
Version:
Better context menus for Electron.
175 lines (162 loc) • 7.87 kB
TypeScript
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 };