import { app } from "../../scripts/app.js"; const clipboardSupportedPromise = new Promise(async (resolve) => { try { const result = await navigator.permissions.query({ name: "clipboard-write" }); resolve(result.state === "granted"); return; } catch (e) { try { if (!navigator.clipboard.write) { throw new Error(); } new ClipboardItem({ "image/png": new Blob([], { type: "image/png" }) }); resolve(true); return; } catch (e) { resolve(false); } } }); app.registerExtension({ name: "rgthree.CopyImageToClipboard", async beforeRegisterNodeDef(nodeType, nodeData) { if (nodeData.name.toLowerCase().includes("image")) { if (await clipboardSupportedPromise) { const getExtraMenuOptions = nodeType.prototype.getExtraMenuOptions; nodeType.prototype.getExtraMenuOptions = function (canvas, options) { var _a; getExtraMenuOptions ? getExtraMenuOptions.apply(this, arguments) : undefined; if ((_a = this.imgs) === null || _a === void 0 ? void 0 : _a.length) { let img = this.imgs[this.imageIndex || 0] || this.imgs[this.overIndex || 0] || this.imgs[0]; const foundIdx = options.findIndex((option) => { var _a; return (_a = option === null || option === void 0 ? void 0 : option.content) === null || _a === void 0 ? void 0 : _a.includes("Copy Image"); }); if (img && foundIdx === -1) { const menuItem = { content: "Copy Image (rgthree)", callback: () => { const canvas = document.createElement("canvas"); const ctx = canvas.getContext("2d"); canvas.width = img.naturalWidth; canvas.height = img.naturalHeight; ctx.drawImage(img, 0, 0, img.naturalWidth, img.naturalHeight); canvas.toBlob((blob) => { navigator.clipboard.write([new ClipboardItem({ "image/png": blob })]); }); }, }; let idx = options.findIndex((option) => { var _a; return (_a = option === null || option === void 0 ? void 0 : option.content) === null || _a === void 0 ? void 0 : _a.includes("Open Image"); }) + 1; if (idx != null) { options.splice(idx, 0, menuItem); } else { options.unshift(menuItem); } } } }; } } }, });