{"version":3,"file":"tray.mjs","names":[],"sources":["../../src/main/tray/index.ts"],"sourcesContent":["/**\n * Main process handlers for tray module\n * Usage in Electron main process:\n *\n * import { app, Tray } from 'electron';\n * import { RpcServer } from 'electron-json-rpc/main';\n * import { registerTrayModule } from 'electron-main-bridge/main';\n *\n * const rpc = new RpcServer();\n * app.whenReady().then(() => {\n *   const tray = new Tray('/path/to/icon.png');\n *   registerTrayModule(rpc, tray);\n *   rpc.listen();\n * });\n */\n\nimport { Menu } from \"electron\";\nimport type { Tray } from \"electron\";\nimport type { RpcServer } from \"electron-json-rpc/main\";\nimport type { DisplayBalloonOptions, SetTitleOptions } from \"@shared/tray.types.js\";\nimport type { MenuItemConstructorOptions } from \"@shared/menu.types.js\";\n\nlet trayInstance: Tray | null = null;\nlet rpcInstance: RpcServer | null = null;\n\nconst RPC_METHOD_PREFIX = \"tray\";\n\nfunction setupTrayEvents(tray: Tray): void {\n  tray.on(\"click\", (_event, bounds, position) => {\n    rpcInstance?.publish(\"tray.click\", { bounds, position });\n  });\n  tray.on(\"right-click\", (_event, bounds) => {\n    rpcInstance?.publish(\"tray.right-click\", { bounds });\n  });\n  tray.on(\"double-click\", (_event, bounds) => {\n    rpcInstance?.publish(\"tray.double-click\", { bounds });\n  });\n  tray.on(\"middle-click\", (_event, bounds) => {\n    rpcInstance?.publish(\"tray.middle-click\", { bounds });\n  });\n  tray.on(\"mouse-up\", (_event, position) => {\n    rpcInstance?.publish(\"tray.mouse-up\", { position });\n  });\n  tray.on(\"mouse-down\", (_event, position) => {\n    rpcInstance?.publish(\"tray.mouse-down\", { position });\n  });\n  tray.on(\"mouse-enter\", (_event, position) => {\n    rpcInstance?.publish(\"tray.mouse-enter\", { position });\n  });\n  tray.on(\"mouse-leave\", (_event, position) => {\n    rpcInstance?.publish(\"tray.mouse-leave\", { position });\n  });\n  tray.on(\"mouse-move\", (_event, position) => {\n    rpcInstance?.publish(\"tray.mouse-move\", { position });\n  });\n  tray.on(\"balloon-show\", () => {\n    rpcInstance?.publish(\"tray.balloon-show\");\n  });\n  tray.on(\"balloon-click\", () => {\n    rpcInstance?.publish(\"tray.balloon-click\");\n  });\n  tray.on(\"balloon-closed\", () => {\n    rpcInstance?.publish(\"tray.balloon-closed\");\n  });\n}\n\n// Handler functions\nasync function destroyHandler(): Promise<void> {\n  if (!trayInstance) throw new Error(\"Tray instance not provided\");\n  trayInstance.destroy();\n}\n\nasync function setImageHandler(...params: unknown[]): Promise<void> {\n  const [image] = params as [string];\n  if (!trayInstance) throw new Error(\"Tray instance not provided\");\n  trayInstance.setImage(image);\n}\n\nasync function setPressedImageHandler(...params: unknown[]): Promise<void> {\n  const [image] = params as [string];\n  if (!trayInstance) throw new Error(\"Tray instance not provided\");\n  trayInstance.setPressedImage(image);\n}\n\nasync function setToolTipHandler(...params: unknown[]): Promise<void> {\n  const [toolTip] = params as [string];\n  if (!trayInstance) throw new Error(\"Tray instance not provided\");\n  trayInstance.setToolTip(toolTip);\n}\n\nasync function setTitleHandler(...params: unknown[]): Promise<void> {\n  const [title, options] = params as [string, SetTitleOptions?];\n  if (!trayInstance) throw new Error(\"Tray instance not provided\");\n  trayInstance.setTitle(title, options as any);\n}\n\nasync function getTitleHandler(): Promise<string> {\n  if (!trayInstance) throw new Error(\"Tray instance not provided\");\n  return trayInstance.getTitle();\n}\n\nasync function setIgnoreDoubleClickEventsHandler(...params: unknown[]): Promise<void> {\n  const [ignore] = params as [boolean];\n  if (!trayInstance) throw new Error(\"Tray instance not provided\");\n  trayInstance.setIgnoreDoubleClickEvents(ignore);\n}\n\nasync function getIgnoreDoubleClickEventsHandler(): Promise<boolean> {\n  if (!trayInstance) throw new Error(\"Tray instance not provided\");\n  return trayInstance.getIgnoreDoubleClickEvents();\n}\n\nasync function setContextMenuHandler(...params: unknown[]): Promise<void> {\n  const [template] = params as [MenuItemConstructorOptions[] | null];\n  if (!trayInstance) throw new Error(\"Tray instance not provided\");\n  if (!template) {\n    trayInstance.setContextMenu(null);\n    return;\n  }\n  const menu = Menu.buildFromTemplate(template as Electron.MenuItemConstructorOptions[]);\n  trayInstance.setContextMenu(menu);\n}\n\nasync function displayBalloonHandler(...params: unknown[]): Promise<void> {\n  const [options] = params as [DisplayBalloonOptions];\n  if (!trayInstance) throw new Error(\"Tray instance not provided\");\n  trayInstance.displayBalloon(options as any);\n}\n\nasync function removeBalloonHandler(): Promise<void> {\n  if (!trayInstance) throw new Error(\"Tray instance not provided\");\n  trayInstance.removeBalloon();\n}\n\nasync function focusHandler(): Promise<void> {\n  if (!trayInstance) throw new Error(\"Tray instance not provided\");\n  trayInstance.focus();\n}\n\nasync function getBoundsHandler() {\n  if (!trayInstance) throw new Error(\"Tray instance not provided\");\n  return trayInstance.getBounds();\n}\n\nasync function getGUIDHandler(): Promise<string | null> {\n  if (!trayInstance) throw new Error(\"Tray instance not provided\");\n  return (trayInstance as any).getGUID();\n}\n\nasync function isDestroyedHandler(): Promise<boolean> {\n  if (!trayInstance) throw new Error(\"Tray instance not provided\");\n  return trayInstance.isDestroyed();\n}\n\n/**\n * Register tray module RPC handlers\n * @param rpc - RPC server instance\n * @param tray - Tray instance to manage\n */\nexport function registerTrayModule(rpc: RpcServer, tray: Tray): void {\n  rpcInstance = rpc;\n  trayInstance = tray;\n  setupTrayEvents(tray);\n\n  rpc.register(`${RPC_METHOD_PREFIX}.destroy`, destroyHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.setImage`, setImageHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.setPressedImage`, setPressedImageHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.setToolTip`, setToolTipHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.setTitle`, setTitleHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.getTitle`, getTitleHandler);\n  rpc.register(\n    `${RPC_METHOD_PREFIX}.setIgnoreDoubleClickEvents`,\n    setIgnoreDoubleClickEventsHandler,\n  );\n  rpc.register(\n    `${RPC_METHOD_PREFIX}.getIgnoreDoubleClickEvents`,\n    getIgnoreDoubleClickEventsHandler,\n  );\n  rpc.register(`${RPC_METHOD_PREFIX}.setContextMenu`, setContextMenuHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.displayBalloon`, displayBalloonHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.removeBalloon`, removeBalloonHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.focus`, focusHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.getBounds`, getBoundsHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.getGUID`, getGUIDHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.isDestroyed`, isDestroyedHandler);\n}\n\n// Re-export handlers for testing\nexport {\n  destroyHandler,\n  setImageHandler,\n  setPressedImageHandler,\n  setToolTipHandler,\n  setTitleHandler,\n  getTitleHandler,\n  setIgnoreDoubleClickEventsHandler,\n  getIgnoreDoubleClickEventsHandler,\n  setContextMenuHandler,\n  displayBalloonHandler,\n  removeBalloonHandler,\n  focusHandler,\n  getBoundsHandler,\n  getGUIDHandler,\n  isDestroyedHandler,\n};\n"],"mappings":"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"}