diff --git a/docs/superpowers/plans/2026-07-28-nodes2-widget-compat.md b/docs/superpowers/plans/2026-07-28-nodes2-widget-compat.md new file mode 100644 index 0000000..e01b4e4 --- /dev/null +++ b/docs/superpowers/plans/2026-07-28-nodes2-widget-compat.md @@ -0,0 +1,682 @@ +# CraftKit Nodes 2.0 Widget Compatibility — Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Make every custom-drawn JS widget across ComfyUI-CraftKit's 4 nodes (section dividers, status boxes, longest-side preset chips) render correctly under both classic LiteGraph canvas rendering and ComfyUI's "Nodes 2.0" (Modern Node Design / Vue) renderer, without regressing classic-mode layout or widget-value save/reload. + +**Architecture:** ComfyUI's Nodes 2.0 Vue layer looks up how to render each widget by matching `widget.type` against a registry of known component names (`button`, `string`, `toggle`, `combo`, ...). CraftKit currently (ab)uses `type: "button"` for widgets that actually paint custom canvas content via a `draw()` override — Vue's registry intercepts `"button"`, renders its own generic `