| import { app } from "scripts/app.js";
|
| import { rgthreeApi } from "rgthree/common/rgthree_api.js";
|
|
|
| import type {
|
| LGraphCanvas as TLGraphCanvas,
|
| IWidget,
|
| LGraphNode,
|
| ContextMenuEventListener,
|
| ContextMenu,
|
| IContextMenuItem,
|
| } from "../typings/litegraph.js";
|
|
|
| const PASS_THROUGH = function <T extends any, I extends any>(item: T) {
|
| return item as T;
|
| };
|
|
|
| |
| |
|
|
| export async function showLoraChooser(
|
| event: PointerEvent,
|
| callback: ContextMenuEventListener,
|
| parentMenu?: ContextMenu | null,
|
| loras?: string[],
|
| ) {
|
| const canvas = app.canvas as TLGraphCanvas;
|
| if (!loras) {
|
| loras = ["None", ...(await rgthreeApi.getLoras())];
|
| }
|
| new LiteGraph.ContextMenu(loras, {
|
| event: event,
|
| parentMenu,
|
| title: "Choose a lora",
|
| scale: Math.max(1, canvas.ds?.scale ?? 1),
|
| className: "dark",
|
| callback,
|
| });
|
| }
|
|
|
| |
| |
| |
| |
| |
|
|
| export function showNodesChooser<T extends IContextMenuItem>(
|
| event: PointerEvent,
|
| mapFn: (n: LGraphNode) => T | null,
|
| callback: ContextMenuEventListener,
|
| parentMenu?: ContextMenu,
|
| ) {
|
| const canvas = app.canvas as TLGraphCanvas;
|
| const nodesOptions: T[] = (app.graph._nodes as LGraphNode[])
|
| .map(mapFn)
|
| .filter((e): e is NonNullable<any> => e != null);
|
|
|
| nodesOptions.sort((a: any, b: any) => {
|
| return a.value - b.value;
|
| });
|
|
|
| new LiteGraph.ContextMenu(nodesOptions, {
|
| event: event,
|
| parentMenu,
|
| title: "Choose a node id",
|
| scale: Math.max(1, canvas.ds?.scale ?? 1),
|
| className: "dark",
|
| callback,
|
| });
|
| }
|
|
|
| |
| |
| |
| |
| |
|
|
| export function showWidgetsChooser<T extends IContextMenuItem>(
|
| event: PointerEvent | MouseEvent,
|
| node: LGraphNode,
|
| mapFn: (n: IWidget) => T | null,
|
| callback: ContextMenuEventListener,
|
| parentMenu?: ContextMenu,
|
| ) {
|
| const options: T[] = (node.widgets || [])
|
| .map(mapFn)
|
| .filter((e): e is NonNullable<any> => e != null);
|
| if (options.length) {
|
| const canvas = app.canvas as TLGraphCanvas;
|
| new LiteGraph.ContextMenu(options, {
|
| event,
|
| parentMenu,
|
| title: "Choose an input/widget",
|
| scale: Math.max(1, canvas.ds?.scale ?? 1),
|
| className: "dark",
|
| callback,
|
| });
|
| }
|
| }
|
|
|