From a44c0d5a4bb3877291b8957a54ef2f457860438b Mon Sep 17 00:00:00 2001 From: jerelvelarde Date: Tue, 24 Mar 2026 13:50:38 -0700 Subject: [PATCH 1/3] fix: pass DOM node instead of innerHTML string to Idiomorph.morph Idiomorph's innerHTML morphStyle expects a node reference, not a raw HTML string. Passing tmp (the wrapper element) instead of tmp.innerHTML fixes SVG rendering issues where nodes were being incorrectly diffed. --- apps/app/src/components/generative-ui/widget-renderer.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/app/src/components/generative-ui/widget-renderer.tsx b/apps/app/src/components/generative-ui/widget-renderer.tsx index 1e45b51..3b7ef48 100644 --- a/apps/app/src/components/generative-ui/widget-renderer.tsx +++ b/apps/app/src/components/generative-ui/widget-renderer.tsx @@ -388,7 +388,7 @@ window.addEventListener('message', function(e) { // Use idiomorph to diff/patch DOM (preserves existing nodes, no flicker) if (window.Idiomorph) { try { - Idiomorph.morph(content, tmp.innerHTML, { + Idiomorph.morph(content, tmp, { morphStyle: 'innerHTML', callbacks: { beforeNodeAdded: function(node) { From a5890e228642f11b786e130c64cda33e32e10c67 Mon Sep 17 00:00:00 2001 From: jerelvelarde Date: Tue, 24 Mar 2026 20:17:01 -0700 Subject: [PATCH 2/3] fix: prevent broken script execution during streaming in widget iframe Three bugs in the script execution code caused interactive widgets (BFS/DFS graphs, animations) to fail: - btoa() output contains =, +, / which are invalid in HTML attribute names, causing setAttribute to throw and abort the entire forEach - Incomplete