fix: Use slot.parentElement instead of :scope selector for ShadowRoot

The :scope selector may not work correctly when querying from a ShadowRoot.
Use slot.parentElement to reliably find the container div to replace.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Jeff Emmett 2026-01-03 16:09:48 +01:00
parent 42b29ff9d7
commit 9e32b5a457
15 changed files with 30 additions and 15 deletions

View File

@ -270,7 +270,8 @@ export class FolkCalendar extends FolkShape {
`;
// Replace the container div (slot's parent) with our wrapper
const containerDiv = root.querySelector(":scope > div");
const slot = root.querySelector("slot");
const containerDiv = slot?.parentElement as HTMLElement;
if (containerDiv) {
containerDiv.replaceWith(wrapper);
}

View File

@ -239,7 +239,8 @@ export class FolkChat extends FolkShape {
`;
// Replace the container div (slot's parent) with our wrapper
const containerDiv = root.querySelector(":scope > div");
const slot = root.querySelector("slot");
const containerDiv = slot?.parentElement as HTMLElement;
if (containerDiv) {
containerDiv.replaceWith(wrapper);
}

View File

@ -259,7 +259,8 @@ export class FolkEmbed extends FolkShape {
`;
// Replace the container div (slot's parent) with our wrapper
const containerDiv = root.querySelector(":scope > div");
const slot = root.querySelector("slot");
const containerDiv = slot?.parentElement as HTMLElement;
if (containerDiv) {
containerDiv.replaceWith(wrapper);
}

View File

@ -230,7 +230,8 @@ export class FolkGoogleItem extends FolkShape {
`;
// Replace the container div (slot's parent) with our card
const containerDiv = root.querySelector(":scope > div");
const slot = root.querySelector("slot");
const containerDiv = slot?.parentElement as HTMLElement;
const cardEl = wrapper.querySelector(".card");
if (containerDiv && cardEl) {
containerDiv.replaceWith(cardEl);

View File

@ -265,7 +265,8 @@ export class FolkImageGen extends FolkShape {
`;
// Replace the container div (slot's parent) with our wrapper
const containerDiv = root.querySelector(":scope > div");
const slot = root.querySelector("slot");
const containerDiv = slot?.parentElement as HTMLElement;
if (containerDiv) {
containerDiv.replaceWith(wrapper);
}

View File

@ -309,7 +309,8 @@ export class FolkMap extends FolkShape {
`;
// Replace the container div (slot's parent) with our wrapper
const containerDiv = root.querySelector(":scope > div");
const slot = root.querySelector("slot");
const containerDiv = slot?.parentElement as HTMLElement;
if (containerDiv) {
containerDiv.replaceWith(wrapper);
}

View File

@ -174,7 +174,8 @@ export class FolkMarkdown extends FolkShape {
`;
// Replace the container div (slot's parent) with our wrapper
const containerDiv = root.querySelector(":scope > div");
const slot = root.querySelector("slot");
const containerDiv = slot?.parentElement as HTMLElement;
if (containerDiv) {
containerDiv.replaceWith(wrapper);
}

View File

@ -367,7 +367,8 @@ export class FolkObsNote extends FolkShape {
`;
// Replace the container div (slot's parent) with our wrapper
const containerDiv = root.querySelector(":scope > div");
const slot = root.querySelector("slot");
const containerDiv = slot?.parentElement as HTMLElement;
if (containerDiv) {
containerDiv.replaceWith(wrapper);
}

View File

@ -196,7 +196,8 @@ export class FolkPiano extends FolkShape {
`;
// Replace the container div (slot's parent) with our piano container
const containerDiv = root.querySelector(":scope > div");
const slot = root.querySelector("slot");
const containerDiv = slot?.parentElement as HTMLElement;
const pianoContainer = wrapper.querySelector(".piano-container");
if (containerDiv && pianoContainer) {
containerDiv.replaceWith(pianoContainer);

View File

@ -294,7 +294,8 @@ export class FolkPrompt extends FolkShape {
`;
// Replace the container div (slot's parent) with our wrapper
const containerDiv = root.querySelector(":scope > div");
const slot = root.querySelector("slot");
const containerDiv = slot?.parentElement as HTMLElement;
if (containerDiv) {
containerDiv.replaceWith(wrapper);
}

View File

@ -89,7 +89,8 @@ export class FolkSlide extends FolkShape {
`;
// Replace the container div (slot's parent) with our slide container
const containerDiv = root.querySelector(":scope > div");
const slot = root.querySelector("slot");
const containerDiv = slot?.parentElement as HTMLElement;
const slideContainer = wrapper.querySelector(".slide-container");
if (containerDiv && slideContainer) {
containerDiv.replaceWith(slideContainer);

View File

@ -350,7 +350,8 @@ export class FolkTranscription extends FolkShape {
`;
// Replace the container div (slot's parent) with our wrapper
const containerDiv = root.querySelector(":scope > div");
const slot = root.querySelector("slot");
const containerDiv = slot?.parentElement as HTMLElement;
if (containerDiv) {
containerDiv.replaceWith(wrapper);
}

View File

@ -326,7 +326,8 @@ export class FolkVideoChat extends FolkShape {
`;
// Replace the container div (slot's parent) with our wrapper
const containerDiv = root.querySelector(":scope > div");
const slot = root.querySelector("slot");
const containerDiv = slot?.parentElement as HTMLElement;
if (containerDiv) {
containerDiv.replaceWith(wrapper);
}

View File

@ -360,7 +360,8 @@ export class FolkVideoGen extends FolkShape {
`;
// Replace the container div (slot's parent) with our wrapper
const containerDiv = root.querySelector(":scope > div");
const slot = root.querySelector("slot");
const containerDiv = slot?.parentElement as HTMLElement;
if (containerDiv) {
containerDiv.replaceWith(wrapper);
}

View File

@ -341,7 +341,8 @@ export class FolkWorkflowBlock extends FolkShape {
`;
// Replace the container div (slot's parent) with our wrapper
const containerDiv = root.querySelector(":scope > div");
const slot = root.querySelector("slot");
const containerDiv = slot?.parentElement as HTMLElement;
if (containerDiv) {
containerDiv.replaceWith(wrapper);
}