From 5842bd9f9a2263aa6b22ca509dc2f3901694a7bd Mon Sep 17 00:00:00 2001 From: Jeff Emmett Date: Mon, 9 Mar 2026 20:15:57 -0700 Subject: [PATCH] fix: attachShadow guard, null toggleMemoryBtn, register canvas components - Add if (!this.shadowRoot) guard in history panel and space settings connectedCallback to prevent error on element reconnection - Null-check toggleMemoryBtn before addEventListener since #toggle-memory element was removed - Import and register RStackSpaceSettings + RStackHistoryPanel in canvas.html so settings gear and history panel work on canvas page Co-Authored-By: Claude Opus 4.6 --- shared/components/rstack-history-panel.ts | 2 +- shared/components/rstack-space-settings.ts | 2 +- website/canvas.html | 16 +++++++++++----- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/shared/components/rstack-history-panel.ts b/shared/components/rstack-history-panel.ts index d720a19..cf1908b 100644 --- a/shared/components/rstack-history-panel.ts +++ b/shared/components/rstack-history-panel.ts @@ -52,7 +52,7 @@ export class RStackHistoryPanel extends HTMLElement { } connectedCallback() { - this.attachShadow({ mode: "open" }); + if (!this.shadowRoot) this.attachShadow({ mode: "open" }); this._render(); } diff --git a/shared/components/rstack-space-settings.ts b/shared/components/rstack-space-settings.ts index af00f98..bbe0483 100644 --- a/shared/components/rstack-space-settings.ts +++ b/shared/components/rstack-space-settings.ts @@ -52,7 +52,7 @@ export class RStackSpaceSettings extends HTMLElement { connectedCallback() { this._space = this.getAttribute("space") || ""; - this.attachShadow({ mode: "open" }); + if (!this.shadowRoot) this.attachShadow({ mode: "open" }); this._render(); } diff --git a/website/canvas.html b/website/canvas.html index a695738..69e8be5 100644 --- a/website/canvas.html +++ b/website/canvas.html @@ -2218,6 +2218,8 @@ import { RStackSpaceSwitcher } from "@shared/components/rstack-space-switcher"; import { RStackTabBar } from "@shared/components/rstack-tab-bar"; import { RStackMi } from "@shared/components/rstack-mi"; + import { RStackSpaceSettings } from "@shared/components/rstack-space-settings"; + import { RStackHistoryPanel } from "@shared/components/rstack-history-panel"; import { rspaceNavUrl } from "@shared/url-helpers"; // Expose URL helper globally (matches shell.js) @@ -2229,6 +2231,8 @@ RStackSpaceSwitcher.define(); RStackTabBar.define(); RStackMi.define(); + RStackSpaceSettings.define(); + RStackHistoryPanel.define(); // Reload space list when user signs in/out document.addEventListener("auth-change", () => { @@ -4907,11 +4911,13 @@ return d.innerHTML; } - toggleMemoryBtn.addEventListener("click", () => { - const isOpen = memoryPanel.classList.toggle("open"); - toggleMemoryBtn.classList.toggle("active", isOpen); - if (isOpen) renderMemoryPanel(); - }); + if (toggleMemoryBtn) { + toggleMemoryBtn.addEventListener("click", () => { + const isOpen = memoryPanel.classList.toggle("open"); + toggleMemoryBtn.classList.toggle("active", isOpen); + if (isOpen) renderMemoryPanel(); + }); + } // Hide Forgotten toggle — hides all forgotten shapes from the canvas // Injected into rstack-identity dropdown under theme toggle