UNPKG

@laserware/hoverboard

Version:

Better context menus for Electron.

1 lines 47.4 kB
{"version":3,"sources":["../src/elements/ContextMenuItemElement.ts","../src/elements/NormalMenuItemElement.ts","../src/elements/CheckboxMenuItemElement.ts","../src/sandbox/globals.ts","../src/elements/ContextMenuEvent.ts","../src/elements/SharingItemEntryElement.ts","../src/elements/SubmenuMenuItemElement.ts","../src/elements/ContextMenuElement.ts","../src/elements/RadioMenuItemElement.ts","../src/elements/RoleMenuItemElement.ts","../src/elements/SeparatorMenuItemElement.ts","../src/elements/ShareMenuElement.ts","../src/elements/index.ts"],"names":["menuItem","element"],"mappings":"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","file":"elements.mjs","sourcesContent":["import type { MenuItemConstructorOptions } from \"electron\";\n\nimport type { ContextMenuItemType } from \"../renderer/types.js\";\nimport type { SubmenuMenuItemElement } from \"./SubmenuMenuItemElement.js\";\n\nexport type BooleanAttribute = \"true\" | \"false\" | null;\n\nexport interface ContextMenuItemAttributes {\n id: string;\n visible: BooleanAttribute;\n}\n\nexport type PropertyOptions = {\n attribute?: string;\n type: typeof Boolean | typeof Number | typeof String;\n fallback?: boolean | number | string;\n};\n\nexport function property(options: PropertyOptions) {\n // biome-ignore lint/complexity/useArrowFunction: Need to use a function here.\n return function (target: HTMLElement, propertyKey: string) {\n const attributeName = options.attribute ?? propertyKey;\n\n Object.defineProperty(target, propertyKey, {\n get() {\n const value = this.getAttribute(attributeName);\n\n if (value === null) {\n return options.fallback ?? undefined;\n }\n\n switch (options.type) {\n case Boolean:\n return value === \"true\";\n\n case Number: {\n const numericValue = Number(value);\n\n if (\n Number.isNaN(numericValue) &&\n typeof options.fallback === \"number\"\n ) {\n return options.fallback;\n } else {\n return numericValue;\n }\n }\n\n default:\n return value;\n }\n },\n\n set(value: boolean | number | string | null | undefined) {\n if (value === null || value === undefined) {\n this.removeAttribute(attributeName);\n } else {\n this.setAttribute(attributeName, String(value));\n }\n },\n });\n };\n}\n\nconst idGenerator = (() => {\n let value = 1;\n\n return {\n next: () => `menu-item-${(value++).toString()}`,\n };\n})();\n\nexport class ContextMenuItemElement<\n Attrs extends Record<string, any> = ContextMenuItemAttributes,\n> extends HTMLElement {\n public readonly type: ContextMenuItemType;\n\n constructor(type: ContextMenuItemType) {\n super();\n\n this.type = type;\n }\n\n @property({ type: String })\n public id!: string;\n\n @property({ type: Boolean })\n public visible: boolean | undefined;\n\n public submenu: SubmenuMenuItemElement | null = null;\n\n public toTemplate(): MenuItemConstructorOptions {\n const template: MenuItemConstructorOptions = {};\n\n const id = this.getAttribute(\"id\");\n\n if (id !== null) {\n template.id = this.id;\n }\n\n if (this.type !== undefined) {\n template.type = this.type;\n }\n\n if (this.visible !== undefined) {\n template.visible = this.visible;\n }\n\n return template;\n }\n\n public connectedCallback(): void {\n const id = this.getAttribute(\"id\");\n\n if (id === null) {\n this.setAttribute(\"id\", idGenerator.next());\n }\n }\n\n public getAttribute(name: keyof Attrs) {\n return super.getAttribute(name as string);\n }\n\n public setAttribute(name: keyof Attrs, value: string) {\n super.setAttribute(name as string, value);\n }\n\n public removeAttribute(name: keyof Attrs) {\n super.removeAttribute(name as string);\n }\n}\n","import type { MenuItemConstructorOptions } from \"electron\";\n\nimport type { ContextMenuItemType } from \"../renderer/types.js\";\nimport type { ContextMenuEventListenerOrEventListenerObject } from \"./ContextMenuEvent.js\";\nimport {\n type BooleanAttribute,\n type ContextMenuItemAttributes,\n ContextMenuItemElement,\n property,\n} from \"./ContextMenuItemElement.js\";\n\nexport interface NormalMenuItemAttributes extends ContextMenuItemAttributes {\n accelerator: string | null;\n \"accelerator-works-when-hidden\": BooleanAttribute;\n enabled: BooleanAttribute;\n icon: string | null;\n label: string | null;\n \"register-accelerator\": BooleanAttribute;\n tooltip: string | null;\n}\n\nexport class NormalMenuItemElement<\n A extends Record<string, any> = NormalMenuItemAttributes,\n> extends ContextMenuItemElement<A> {\n constructor(type: ContextMenuItemType = \"normal\") {\n super(type);\n }\n\n @property({ type: String })\n public accelerator: string | undefined;\n\n @property({ attribute: \"accelerator-works-when-hidden\", type: Boolean })\n public acceleratorWorksWhenHidden: boolean | undefined;\n\n @property({ type: Boolean })\n public enabled: boolean | undefined;\n\n @property({ type: String })\n public icon: string | undefined;\n\n @property({ type: String })\n public label: string | undefined;\n\n @property({ attribute: \"register-accelerator\", type: Boolean })\n public registerAccelerator: boolean | undefined;\n\n @property({ attribute: \"tooltip\", type: String })\n public toolTip: string | undefined;\n\n public toTemplate(): MenuItemConstructorOptions {\n const template = super.toTemplate();\n\n if (this.accelerator !== undefined) {\n template.accelerator = this.accelerator;\n }\n\n if (this.acceleratorWorksWhenHidden !== undefined) {\n template.acceleratorWorksWhenHidden = this.acceleratorWorksWhenHidden;\n }\n\n if (this.enabled !== undefined) {\n template.enabled = this.enabled;\n }\n\n if (this.icon !== undefined) {\n template.icon = this.icon;\n }\n\n if (this.label !== undefined) {\n template.label = this.label;\n }\n\n if (this.registerAccelerator !== undefined) {\n template.registerAccelerator = this.registerAccelerator;\n }\n\n if (this.toolTip !== undefined) {\n template.toolTip = this.toolTip;\n }\n\n return template;\n }\n\n public addEventListener(\n type: \"click\",\n listener: ContextMenuEventListenerOrEventListenerObject | null,\n options?: boolean | AddEventListenerOptions,\n ): void {\n super.addEventListener(\n type,\n listener as EventListenerOrEventListenerObject,\n options,\n );\n }\n\n public removeEventListener(\n type: \"click\",\n listener: ContextMenuEventListenerOrEventListenerObject | null,\n options?: boolean | AddEventListenerOptions,\n ): void {\n super.removeEventListener(\n type,\n listener as EventListenerOrEventListenerObject,\n options,\n );\n }\n}\n","import type { MenuItemConstructorOptions } from \"electron\";\n\nimport {\n type BooleanAttribute,\n type ContextMenuItemAttributes,\n property,\n} from \"./ContextMenuItemElement.js\";\nimport { NormalMenuItemElement } from \"./NormalMenuItemElement.js\";\n\nexport interface CheckboxMenuItemAttributes extends ContextMenuItemAttributes {\n checked: BooleanAttribute;\n}\n\nexport class CheckboxMenuItemElement extends NormalMenuItemElement<CheckboxMenuItemAttributes> {\n constructor() {\n super(\"checkbox\");\n }\n\n @property({ type: Boolean })\n public checked: boolean | undefined;\n\n public toTemplate(): MenuItemConstructorOptions {\n const template = super.toTemplate();\n\n if (this.checked !== undefined) {\n template.checked = this.checked;\n }\n\n return template;\n }\n}\n","import type {\n KeyboardEvent,\n MenuItemConstructorOptions,\n Point,\n} from \"electron\";\n\nexport const hoverboardApiKey = \"__laserware_hoverboard__\";\n\ndeclare global {\n interface Window {\n [hoverboardApiKey]: HoverboardGlobals;\n }\n}\n\n// biome-ignore lint/suspicious/noConstEnum: Swapped out with value in build process.\nexport const enum IpcChannel {\n ForShowContextMenu = \"hoverboard/contextMenu/show\",\n ForHideContextMenu = \"hoverboard/contextMenu/hide\",\n}\n\nexport interface ShowContextMenuRequest {\n menuId: string;\n position: Point;\n linkURL?: string;\n template: MenuItemConstructorOptions[];\n}\n\nexport interface ShowContextMenuResponse {\n menuId: string;\n menuItemId: string | null;\n event: KeyboardEvent;\n}\n\nexport interface HoverboardGlobals {\n showContextMenu(\n request: ShowContextMenuRequest,\n ): Promise<ShowContextMenuResponse>;\n hideContextMenu(menuId: string): Promise<void>;\n}\n\nexport function getHoverboardGlobals(): HoverboardGlobals {\n const windowGlobals = window[hoverboardApiKey];\n\n if (windowGlobals === undefined) {\n throw new Error(\"Globals not found, need to use preload\");\n }\n\n return {\n showContextMenu(\n request: ShowContextMenuRequest,\n ): Promise<ShowContextMenuResponse> {\n return windowGlobals.showContextMenu(request);\n },\n hideContextMenu(menuId: string): Promise<void> {\n return windowGlobals.hideContextMenu(menuId);\n },\n };\n}\n","import type { ContextMenuElement } from \"./ContextMenuElement.js\";\nimport type { ContextMenuItemElement } from \"./ContextMenuItemElement.js\";\n\nexport type ContextMenuEventType = \"attach\" | \"click\" | \"hide\" | \"show\";\n\nexport interface ContextMenuEventInit extends EventModifierInit {\n clientX?: number;\n clientY?: number;\n triggeredByAccelerator?: boolean;\n menu: ContextMenuElement | null;\n menuItem: ContextMenuItemElement | null;\n trigger?: HTMLElement | null;\n}\n\ntype ContextMenuEventListener = (event: ContextMenuEvent) => void;\n\ninterface ContextMenuEventListenerObject {\n handleEvent(object: ContextMenuEvent): void;\n}\n\nexport type ContextMenuEventListenerOrEventListenerObject =\n | ContextMenuEventListener\n | ContextMenuEventListenerObject;\n\nexport class ContextMenuEvent extends Event {\n public trigger: HTMLElement | null;\n public triggeredByAccelerator: boolean;\n public clientX: number;\n public clientY: number;\n public menu: ContextMenuElement | null;\n public menuItem: ContextMenuItemElement | null;\n\n constructor(type: ContextMenuEventType, eventInitDict: ContextMenuEventInit) {\n const {\n trigger,\n clientX,\n clientY,\n menu,\n menuItem,\n triggeredByAccelerator,\n ...rest\n } = eventInitDict;\n\n super(type, { bubbles: true, cancelable: true, composed: true, ...rest });\n\n this.clientX = clientX ?? 0;\n this.clientY = clientY ?? 0;\n this.menuItem = menuItem;\n this.menu = menu;\n this.trigger = trigger ?? null;\n this.triggeredByAccelerator = triggeredByAccelerator ?? false;\n }\n}\n","import { property } from \"./ContextMenuItemElement.js\";\n\nexport type SharingItemType = \"filePath\" | \"text\" | \"url\";\n\nexport interface SharingItemEntryAttributes {\n type: SharingItemType;\n value: string;\n}\n\nexport class SharingItemEntryElement extends HTMLElement {\n @property({ type: String })\n public type: SharingItemType | undefined;\n\n @property({ type: String })\n public value: string | undefined;\n\n public get entry(): { type: SharingItemType; value: string } {\n const type = this.type;\n\n if (type === undefined) {\n throw new Error(\"A type must be defined on a sharing item entry\");\n }\n\n if (type !== \"filePath\" && type !== \"text\" && type !== \"url\") {\n // biome-ignore format:\n throw new Error(`Invalid type ${type} specified for sharing item entry, only \"filePath\", \"text\", and \"url\" allowed`);\n }\n\n if (this.value === undefined) {\n throw new Error(\"A value must be defined on a sharing item entry\");\n }\n\n return { type, value: this.value };\n }\n\n public getAttribute(name: keyof SharingItemEntryAttributes) {\n return super.getAttribute(name);\n }\n}\n","import type { MenuItemConstructorOptions } from \"electron\";\n\nimport { ContextMenuItemElement } from \"./ContextMenuItemElement.js\";\nimport {\n type NormalMenuItemAttributes,\n NormalMenuItemElement,\n} from \"./NormalMenuItemElement.js\";\nimport { SharingItemEntryElement } from \"./SharingItemEntryElement.js\";\n\nexport type SubmenuMenuItemAttributes = NormalMenuItemAttributes;\n\nexport class SubmenuMenuItemElement extends NormalMenuItemElement<SubmenuMenuItemAttributes> {\n constructor() {\n super(\"submenu\");\n }\n\n [Symbol.iterator]() {\n let index = 0;\n\n return {\n next: () => {\n if (index < this.children.length) {\n return { value: this.children.item(index++), done: false };\n } else {\n return { done: true };\n }\n },\n };\n }\n\n public toTemplate(): MenuItemConstructorOptions {\n const template = super.toTemplate();\n\n const walker = document.createTreeWalker(this, NodeFilter.SHOW_ELEMENT);\n\n let node = walker.firstChild();\n\n const submenu: MenuItemConstructorOptions[] = [];\n\n while (node !== null) {\n // These don't get added to the menu template, they're used within a\n // ShareMenu menu item to define sharing items:\n if (node instanceof SharingItemEntryElement) {\n node = walker.nextNode();\n\n continue;\n }\n\n if (node instanceof ContextMenuItemElement) {\n node.submenu = this;\n\n submenu.push(node.toTemplate());\n }\n\n node = walker.nextNode();\n }\n\n return { ...template, submenu };\n }\n}\n","import type { MenuItemConstructorOptions } from \"electron\";\n\nimport { getHoverboardGlobals } from \"../sandbox/globals.js\";\nimport {\n ContextMenuEvent,\n type ContextMenuEventInit,\n type ContextMenuEventListenerOrEventListenerObject,\n} from \"./ContextMenuEvent.js\";\nimport { ContextMenuItemElement, property } from \"./ContextMenuItemElement.js\";\nimport { SharingItemEntryElement } from \"./SharingItemEntryElement.js\";\nimport { SubmenuMenuItemElement } from \"./SubmenuMenuItemElement.js\";\n\nexport interface ContextMenuAttributes {\n id: string | null;\n target?: string | null;\n}\n\nexport class ContextMenuElement extends HTMLElement {\n #controllers: Map<HTMLElement | string, AbortController> = new Map();\n #trigger: HTMLElement | null = null;\n\n constructor() {\n super();\n\n this.style.display = \"none\";\n\n this.attachShadow({ mode: \"closed\" });\n }\n\n *[Symbol.iterator]() {\n for (let index = 0; index < this.children.length; index++) {\n yield this.children.item(index);\n }\n }\n\n @property({ type: String })\n public id!: string;\n\n @property({ type: String })\n public target: string | undefined;\n\n public connectedCallback(): void {\n this.setAttribute(\"inert\", \"\");\n\n if (this.getAttribute(\"id\") === null) {\n this.id = window.crypto.randomUUID().substring(0, 6);\n }\n\n if (this.target !== undefined) {\n this.attachTo(this.target);\n }\n }\n\n public disconnectedCallback(): void {\n this.dispose();\n }\n\n public getAttribute(name: keyof ContextMenuAttributes) {\n return super.getAttribute(name);\n }\n\n public toTemplate(): MenuItemConstructorOptions[] {\n const template: MenuItemConstructorOptions[] = [];\n\n const walker = document.createTreeWalker(this, NodeFilter.SHOW_ELEMENT);\n\n let node = walker.firstChild();\n\n while (node !== null) {\n // These don't get added to the menu template, they're used within a\n // ShareMenu menu item to define sharing items:\n if (node instanceof SharingItemEntryElement) {\n node = walker.nextNode();\n\n continue;\n }\n\n if (node instanceof ContextMenuItemElement) {\n if (node.parentNode instanceof SubmenuMenuItemElement) {\n node = walker.nextNode();\n\n continue;\n } else {\n template.push(node.toTemplate());\n }\n }\n\n node = walker.nextNode();\n }\n\n return template;\n }\n\n public addEventListener(\n type: \"attach\",\n listener: ContextMenuEventListenerOrEventListenerObject | null,\n options?: boolean | AddEventListenerOptions,\n ): void;\n public addEventListener(\n type: \"click\",\n listener: ContextMenuEventListenerOrEventListenerObject | null,\n options?: boolean | AddEventListenerOptions,\n ): void;\n public addEventListener(\n type: \"hide\",\n listener: ContextMenuEventListenerOrEventListenerObject | null,\n options?: boolean | AddEventListenerOptions,\n ): void;\n public addEventListener(\n type: \"show\",\n listener: ContextMenuEventListenerOrEventListenerObject | null,\n options?: boolean | AddEventListenerOptions,\n ): void;\n public addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ) {\n super.addEventListener(\n type,\n listener as EventListenerOrEventListenerObject,\n options,\n );\n }\n\n public removeEventListener(\n type: \"attach\",\n listener: ContextMenuEventListenerOrEventListenerObject | null,\n options?: boolean | AddEventListenerOptions,\n ): void;\n public removeEventListener(\n type: \"click\",\n listener: ContextMenuEventListenerOrEventListenerObject | null,\n options?: boolean | AddEventListenerOptions,\n ): void;\n public removeEventListener(\n type: \"hide\",\n listener: ContextMenuEventListenerOrEventListenerObject | null,\n options?: boolean | AddEventListenerOptions,\n ): void;\n public removeEventListener(\n type: \"show\",\n listener: ContextMenuEventListenerOrEventListenerObject | null,\n options?: boolean | AddEventListenerOptions,\n ): void;\n public removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ) {\n super.removeEventListener(\n type,\n listener as EventListenerOrEventListenerObject,\n options,\n );\n }\n\n public async hide(): Promise<void> {\n const globals = getHoverboardGlobals();\n\n await globals.hideContextMenu(this.id);\n\n this.dispatchEvent(\n new ContextMenuEvent(\"hide\", {\n menu: this,\n menuItem: null,\n trigger: this.#trigger,\n }),\n );\n }\n\n public async show(\n x: number,\n y: number,\n ): Promise<ContextMenuItemElement | null> {\n const template = this.toTemplate();\n\n const globals = getHoverboardGlobals();\n\n const dispatchHideEvent = (\n menuItem: ContextMenuItemElement | null,\n triggeredByAccelerator?: boolean,\n ): void => {\n this.dispatchEvent(\n new ContextMenuEvent(\"hide\", {\n clientX: x,\n clientY: y,\n menu: this,\n menuItem,\n trigger: this.#trigger,\n triggeredByAccelerator,\n }),\n );\n };\n\n let linkURL: string | undefined;\n\n // If any of the elements in the clicked point are an anchor with an\n // `href` property, send that to the context menu builder in the main\n // process so we can add the appropriate link actions to the menu:\n for (const element of document.elementsFromPoint(x, y)) {\n if (element instanceof HTMLAnchorElement && linkURL === undefined) {\n linkURL = element.href || undefined;\n }\n }\n\n const response = await globals.showContextMenu({\n menuId: this.id,\n position: { x, y },\n template,\n linkURL,\n });\n\n this.dispatchEvent(\n new ContextMenuEvent(\"show\", {\n clientX: x,\n clientY: y,\n menu: this,\n menuItem: null,\n trigger: this.#trigger,\n }),\n );\n\n if (response.menuId !== this.id) {\n return null;\n }\n\n const menuItem =\n response.menuItemId === null\n ? null\n : this.#findMenuItem(response.menuItemId);\n\n if (!(menuItem instanceof ContextMenuItemElement)) {\n dispatchHideEvent(null);\n\n return null;\n }\n\n const clickInit = {\n ...response.event,\n clientX: x,\n clientY: y,\n menu: this,\n menuItem,\n trigger: this.#trigger,\n } satisfies ContextMenuEventInit;\n\n menuItem.dispatchEvent(new ContextMenuEvent(\"click\", clickInit));\n\n this.dispatchEvent(new ContextMenuEvent(\"click\", clickInit));\n\n dispatchHideEvent(menuItem, response.event.triggeredByAccelerator);\n\n return menuItem;\n }\n\n #findMenuItem(id: string): HTMLElement | null {\n const walker = document.createTreeWalker(this, NodeFilter.SHOW_ELEMENT);\n\n let node = walker.firstChild();\n\n while (node !== null) {\n if (node instanceof HTMLElement && \"id\" in node && node.id === id) {\n return node;\n }\n\n node = walker.nextNode();\n }\n\n return null;\n }\n\n public attachTo(target: HTMLElement | string): void {\n const controller = new AbortController();\n\n const { signal } = controller;\n\n if (target instanceof HTMLElement) {\n this.#trigger = target;\n }\n\n const handleContextMenu = async (event: MouseEvent): Promise<void> => {\n let trigger: HTMLElement | null = null;\n\n if (target instanceof HTMLElement) {\n trigger = target;\n } else {\n const element = event.target as HTMLElement;\n\n if (element.matches(target)) {\n trigger = element;\n } else {\n const { clientX: x, clientY: y } = event;\n for (const element of document.elementsFromPoint(x, y)) {\n if (element.matches(target)) {\n trigger = element as HTMLElement;\n break;\n }\n }\n }\n }\n\n this.#trigger = trigger;\n\n if (trigger === null) {\n return;\n }\n\n event.preventDefault();\n\n this.dispatchEvent(\n new ContextMenuEvent(\"attach\", {\n ...event,\n menu: this,\n menuItem: null,\n trigger,\n triggeredByAccelerator: false,\n }),\n );\n\n await this.show(event.clientX, event.clientY);\n };\n\n const options = { signal, capture: true };\n\n if (target instanceof HTMLElement) {\n target.addEventListener(\"contextmenu\", handleContextMenu, options);\n } else {\n window.addEventListener(\"contextmenu\", handleContextMenu, options);\n }\n\n this.#controllers.set(target, controller);\n }\n\n public detach(): void {\n for (const controller of this.#controllers.values()) {\n controller.abort();\n }\n\n this.#controllers.clear();\n\n this.#trigger = null;\n }\n\n public dispose(): void {\n this.detach();\n }\n}\n","import type { MenuItemConstructorOptions } from \"electron\";\n\nimport {\n type BooleanAttribute,\n type ContextMenuItemAttributes,\n property,\n} from \"./ContextMenuItemElement.js\";\nimport { NormalMenuItemElement } from \"./NormalMenuItemElement.js\";\n\nexport interface RadioMenuItemAttributes extends ContextMenuItemAttributes {\n checked: BooleanAttribute;\n}\n\nexport class RadioMenuItemElement extends NormalMenuItemElement<RadioMenuItemAttributes> {\n constructor() {\n super(\"radio\");\n }\n\n @property({ type: Boolean })\n public checked: boolean | undefined;\n\n public toTemplate(): MenuItemConstructorOptions {\n const template = super.toTemplate();\n\n if (this.checked !== undefined) {\n template.checked = this.checked;\n }\n\n return template;\n }\n}\n","import type { MenuItemConstructorOptions } from \"electron\";\n\nimport type { ContextMenuItemRole } from \"../renderer/types.js\";\nimport {\n type BooleanAttribute,\n type ContextMenuItemAttributes,\n ContextMenuItemElement,\n property,\n} from \"./ContextMenuItemElement.js\";\n\nexport interface RoleMenuItemAttributes extends ContextMenuItemAttributes {\n accelerator: string | null;\n \"accelerator-works-when-hidden\": BooleanAttribute;\n enabled: BooleanAttribute;\n icon: string | null;\n of: ContextMenuItemRole | null;\n \"register-accelerator\": BooleanAttribute;\n tooltip: string | null;\n}\n\nexport class RoleMenuItemElement extends ContextMenuItemElement<RoleMenuItemAttributes> {\n constructor() {\n super(undefined);\n }\n\n @property({ type: String })\n public accelerator: string | undefined;\n\n @property({ attribute: \"accelerator-works-when-hidden\", type: Boolean })\n public acceleratorWorksWhenHidden: boolean | undefined;\n\n @property({ type: Boolean })\n public enabled: boolean | undefined;\n\n @property({ type: String })\n public icon: string | undefined;\n\n @property({ type: String })\n public of: ContextMenuItemRole | undefined;\n\n @property({ attribute: \"register-accelerator\", type: Boolean })\n public registerAccelerator: boolean | undefined;\n\n @property({ attribute: \"tooltip\", type: String })\n public toolTip: string | undefined;\n\n public toTemplate(): MenuItemConstructorOptions {\n const template = super.toTemplate();\n\n if (this.accelerator !== undefined) {\n template.accelerator = this.accelerator;\n }\n\n if (this.acceleratorWorksWhenHidden !== undefined) {\n template.acceleratorWorksWhenHidden = this.acceleratorWorksWhenHidden;\n }\n\n if (this.enabled !== undefined) {\n template.enabled = this.enabled;\n }\n\n if (this.icon !== undefined) {\n template.icon = this.icon;\n }\n\n if (this.of !== undefined) {\n template.role = this.of;\n }\n\n if (this.registerAccelerator !== undefined) {\n template.registerAccelerator = this.registerAccelerator;\n }\n\n if (this.toolTip !== undefined) {\n template.toolTip = this.toolTip;\n }\n\n return template;\n }\n}\n","import type { MenuItemConstructorOptions } from \"electron\";\n\nimport {\n type ContextMenuItemAttributes,\n ContextMenuItemElement,\n} from \"./ContextMenuItemElement.js\";\n\nexport type SeparatorMenuItemAttributes = ContextMenuItemAttributes;\n\nexport class SeparatorMenuItemElement extends ContextMenuItemElement<SeparatorMenuItemAttributes> {\n constructor() {\n super(\"separator\");\n }\n\n public get template(): MenuItemConstructorOptions {\n const { visible, type } = super.toTemplate();\n\n const template: MenuItemConstructorOptions = { type };\n\n if (visible !== undefined) {\n template.visible = visible;\n }\n\n return template;\n }\n}\n","import type { MenuItemConstructorOptions, SharingItem } from \"electron\";\n\nimport { ContextMenuItemElement } from \"./ContextMenuItemElement.js\";\nimport { SharingItemEntryElement } from \"./SharingItemEntryElement.js\";\n\nexport class ShareMenuElement extends ContextMenuItemElement {\n constructor() {\n super(undefined);\n }\n\n public toTemplate(): MenuItemConstructorOptions {\n const filePaths: string[] = [];\n const texts: string[] = [];\n const urls: string[] = [];\n\n for (let index = 0; index < this.children.length; index++) {\n const child = this.children.item(index);\n\n if (!(child instanceof SharingItemEntryElement)) {\n throw new Error(\"Only sharing item entry is allowed in share menu\");\n }\n\n const { type, value } = child.entry;\n\n if (type === \"filePath\") {\n filePaths.push(value);\n } else if (type === \"text\") {\n texts.push(value);\n } else if (type === \"url\") {\n urls.push(value);\n }\n }\n const sharingItem: SharingItem = {};\n\n if (filePaths.length !== 0) {\n sharingItem.filePaths = filePaths;\n }\n\n if (texts.length !== 0) {\n sharingItem.texts = texts;\n }\n\n if (urls.length !== 0) {\n sharingItem.urls = urls;\n }\n\n return {\n ...super.toTemplate(),\n role: \"shareMenu\",\n sharingItem,\n };\n }\n}\n","import { CheckboxMenuItemElement } from \"./CheckboxMenuItemElement.js\";\nimport { ContextMenuElement } from \"./ContextMenuElement.js\";\nimport { NormalMenuItemElement } from \"./NormalMenuItemElement.js\";\nimport { RadioMenuItemElement } from \"./RadioMenuItemElement.js\";\nimport { RoleMenuItemElement } from \"./RoleMenuItemElement.js\";\nimport { SeparatorMenuItemElement } from \"./SeparatorMenuItemElement.js\";\nimport { ShareMenuElement } from \"./ShareMenuElement.js\";\nimport { SharingItemEntryElement } from \"./SharingItemEntryElement.js\";\nimport { SubmenuMenuItemElement } from \"./SubmenuMenuItemElement.js\";\n\nexport {\n ContextMenuEvent,\n type ContextMenuEventInit,\n type ContextMenuEventType,\n type ContextMenuEventListenerOrEventListenerObject,\n} from \"./ContextMenuEvent.js\";\n\nexport {\n CheckboxMenuItemElement,\n type CheckboxMenuItemAttributes,\n} from \"./CheckboxMenuItemElement.js\";\nexport {\n ContextMenuElement,\n type ContextMenuAttributes,\n} from \"./ContextMenuElement.js\";\nexport type { ContextMenuItemElement } from \"./ContextMenuItemElement.js\";\nexport {\n NormalMenuItemElement,\n type NormalMenuItemAttributes,\n} from \"./NormalMenuItemElement.js\";\nexport {\n RadioMenuItemElement,\n type RadioMenuItemAttributes,\n} from \"./RadioMenuItemElement.js\";\nexport {\n RoleMenuItemElement,\n type RoleMenuItemAttributes,\n} from \"./RoleMenuItemElement.js\";\nexport {\n SeparatorMenuItemElement,\n type SeparatorMenuItemAttributes,\n} from \"./SeparatorMenuItemElement.js\";\nexport {\n SubmenuMenuItemElement,\n type SubmenuMenuItemAttributes,\n} from \"./SubmenuMenuItemElement.js\";\n\nexport function registerElements() {\n customElements.define(\"checkbox-menu-item\", CheckboxMenuItemElement);\n customElements.define(\"context-menu\", ContextMenuElement);\n customElements.define(\"normal-menu-item\", NormalMenuItemElement);\n customElements.define(\"radio-menu-item\", RadioMenuItemElement);\n customElements.define(\"role-menu-item\", RoleMenuItemElement);\n customElements.define(\"separator-menu-item\", SeparatorMenuItemElement);\n customElements.define(\"submenu-menu-item\", SubmenuMenuItemElement);\n customElements.define(\"share-menu\", ShareMenuElement);\n customElements.define(\"sharing-item-entry\", SharingItemEntryElement);\n}\n"]}