|
import { app } from "../../scripts/app.js";
|
|
import { ComfyButtonGroup } from "../../scripts/ui/components/buttonGroup.js";
|
|
import { ComfyButton } from "../../scripts/ui/components/button.js";
|
|
import { iconGear, iconStarFilled, logoRgthree } from "../../rgthree/common/media/svgs.js";
|
|
import { createElement, empty } from "../../rgthree/common/utils_dom.js";
|
|
import { SERVICE as BOOKMARKS_SERVICE } from "./services/bookmarks_services.js";
|
|
import { SERVICE as CONFIG_SERVICE } from "./services/config_service.js";
|
|
import { ComfyPopup } from "../../scripts/ui/components/popup.js";
|
|
import { RgthreeConfigDialog } from "./config.js";
|
|
let rgthreeButtonGroup = null;
|
|
function addRgthreeTopBarButtons() {
|
|
var _a, _b, _c;
|
|
if (!CONFIG_SERVICE.getFeatureValue("comfy_top_bar_menu.enabled")) {
|
|
if ((_a = rgthreeButtonGroup === null || rgthreeButtonGroup === void 0 ? void 0 : rgthreeButtonGroup.element) === null || _a === void 0 ? void 0 : _a.parentElement) {
|
|
rgthreeButtonGroup.element.parentElement.removeChild(rgthreeButtonGroup.element);
|
|
}
|
|
return;
|
|
}
|
|
else if (rgthreeButtonGroup) {
|
|
(_b = app.menu) === null || _b === void 0 ? void 0 : _b.settingsGroup.element.before(rgthreeButtonGroup.element);
|
|
return;
|
|
}
|
|
const buttons = [];
|
|
const rgthreeButton = new ComfyButton({
|
|
icon: "rgthree",
|
|
tooltip: "rgthree-comfy",
|
|
app,
|
|
enabled: true,
|
|
classList: "comfyui-button comfyui-menu-mobile-collapse primary",
|
|
});
|
|
buttons.push(rgthreeButton);
|
|
rgthreeButton.iconElement.style.width = "1.2rem";
|
|
rgthreeButton.iconElement.innerHTML = logoRgthree;
|
|
rgthreeButton.withPopup(new ComfyPopup({ target: rgthreeButton.element, classList: "rgthree-top-menu" }, createElement("menu", {
|
|
children: [
|
|
createElement("li", {
|
|
child: createElement("button.rgthree-button-reset", {
|
|
html: iconGear + "Settings (rgthree-comfy)",
|
|
onclick: () => new RgthreeConfigDialog().show(),
|
|
}),
|
|
}),
|
|
createElement("li", {
|
|
child: createElement("button.rgthree-button-reset", {
|
|
html: iconStarFilled + "Star on Github",
|
|
onclick: () => window.open("https://github.com/rgthree/rgthree-comfy", "_blank"),
|
|
}),
|
|
}),
|
|
],
|
|
})), "click");
|
|
if (CONFIG_SERVICE.getFeatureValue("comfy_top_bar_menu.button_bookmarks.enabled")) {
|
|
const bookmarksListEl = createElement("menu");
|
|
bookmarksListEl.appendChild(createElement("li.rgthree-message", {
|
|
child: createElement("span", { text: "No bookmarks in current workflow." }),
|
|
}));
|
|
const bookmarksButton = new ComfyButton({
|
|
icon: "bookmark",
|
|
tooltip: "Workflow Bookmarks (rgthree-comfy)",
|
|
app,
|
|
});
|
|
const bookmarksPopup = new ComfyPopup({ target: bookmarksButton.element, classList: "rgthree-top-menu" }, bookmarksListEl);
|
|
bookmarksPopup.addEventListener("open", () => {
|
|
const bookmarks = BOOKMARKS_SERVICE.getCurrentBookmarks();
|
|
empty(bookmarksListEl);
|
|
if (bookmarks.length) {
|
|
for (const b of bookmarks) {
|
|
bookmarksListEl.appendChild(createElement("li", {
|
|
child: createElement("button.rgthree-button-reset", {
|
|
text: `[${b.shortcutKey}] ${b.title}`,
|
|
onclick: () => {
|
|
b.canvasToBookmark();
|
|
},
|
|
}),
|
|
}));
|
|
}
|
|
}
|
|
else {
|
|
bookmarksListEl.appendChild(createElement("li.rgthree-message", {
|
|
child: createElement("span", { text: "No bookmarks in current workflow." }),
|
|
}));
|
|
}
|
|
bookmarksPopup.update();
|
|
});
|
|
bookmarksButton.withPopup(bookmarksPopup, "hover");
|
|
buttons.push(bookmarksButton);
|
|
}
|
|
rgthreeButtonGroup = new ComfyButtonGroup(...buttons);
|
|
(_c = app.menu) === null || _c === void 0 ? void 0 : _c.settingsGroup.element.before(rgthreeButtonGroup.element);
|
|
}
|
|
app.registerExtension({
|
|
name: "rgthree.TopMenu",
|
|
async setup() {
|
|
addRgthreeTopBarButtons();
|
|
CONFIG_SERVICE.addEventListener("config-change", ((e) => {
|
|
var _a, _b;
|
|
if ((_b = (_a = e.detail) === null || _a === void 0 ? void 0 : _a.key) === null || _b === void 0 ? void 0 : _b.includes("features.comfy_top_bar_menu")) {
|
|
addRgthreeTopBarButtons();
|
|
}
|
|
}));
|
|
},
|
|
});
|
|
|