From cbe6460406257fea863470b16e9f70e3465ec72c Mon Sep 17 00:00:00 2001 From: John Hefferman Date: Thu, 23 Jan 2025 13:55:32 -0700 Subject: [PATCH 1/8] fix: add dangling slot definition --- .../slot-forwarding/slots/dangling/expected.html | 4 ++-- .../slots/dangling/modules/x/leaf/leaf.html | 2 +- .../slots/dangling/modules/x/slot/slot.html | 4 ++-- .../src/__tests__/utils/expected-failures.ts | 4 ++-- packages/@lwc/ssr-compiler/src/compile-template/index.ts | 1 + .../compile-template/transformers/component/component.ts | 3 +++ .../transformers/component/lwc-component.ts | 3 +++ .../transformers/component/slotted-content.ts | 3 ++- .../src/compile-template/transformers/element.ts | 9 +++++++++ .../src/compile-template/transformers/slot.ts | 8 ++++++-- 10 files changed, 31 insertions(+), 10 deletions(-) diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/expected.html b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/expected.html index aa23e8774b..b9dc6b9142 100644 --- a/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/expected.html +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/expected.html @@ -2,12 +2,12 @@ -

+

bottom content

-

+

top content

diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/modules/x/leaf/leaf.html b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/modules/x/leaf/leaf.html index 039365a7a7..a735614a68 100644 --- a/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/modules/x/leaf/leaf.html +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/modules/x/leaf/leaf.html @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/modules/x/slot/slot.html b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/modules/x/slot/slot.html index e641874967..e13bdfa20b 100644 --- a/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/modules/x/slot/slot.html +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/modules/x/slot/slot.html @@ -1,6 +1,6 @@ \ No newline at end of file diff --git a/packages/@lwc/ssr-compiler/src/__tests__/utils/expected-failures.ts b/packages/@lwc/ssr-compiler/src/__tests__/utils/expected-failures.ts index b2f8518054..f3ffe0e2df 100644 --- a/packages/@lwc/ssr-compiler/src/__tests__/utils/expected-failures.ts +++ b/packages/@lwc/ssr-compiler/src/__tests__/utils/expected-failures.ts @@ -13,8 +13,8 @@ export const expectedFailures = new Set([ 'exports/component-as-default/index.js', 'known-boolean-attributes/default-def-html-attributes/static-on-component/index.js', 'render-dynamic-value/index.js', - 'slot-forwarding/slots/mixed/index.js', - 'slot-forwarding/slots/dangling/index.js', + //'slot-forwarding/slots/mixed/index.js', + //'slot-forwarding/slots/dangling/index.js', 'wire/errors/throws-on-computed-key/index.js', 'wire/errors/throws-when-colliding-prop-then-method/index.js', ]); diff --git a/packages/@lwc/ssr-compiler/src/compile-template/index.ts b/packages/@lwc/ssr-compiler/src/compile-template/index.ts index 037d51299f..a56627281e 100644 --- a/packages/@lwc/ssr-compiler/src/compile-template/index.ts +++ b/packages/@lwc/ssr-compiler/src/compile-template/index.ts @@ -31,6 +31,7 @@ const bExportTemplate = esTemplate` // These should be scoped to the "tmpl" function however, to avoid conflicts with other templates. let textContentBuffer = ''; let didBufferTextContent = false; + let danglingSlotName = null; // Establishes a contextual relationship between two components for ContextProviders. // This variable will typically get overridden (shadowed) within slotted content. diff --git a/packages/@lwc/ssr-compiler/src/compile-template/transformers/component/component.ts b/packages/@lwc/ssr-compiler/src/compile-template/transformers/component/component.ts index 305878fdd4..832c3fdd1a 100644 --- a/packages/@lwc/ssr-compiler/src/compile-template/transformers/component/component.ts +++ b/packages/@lwc/ssr-compiler/src/compile-template/transformers/component/component.ts @@ -19,6 +19,9 @@ const bYieldFromChildGenerator = esTemplateWithYield` { const childProps = ${/* child props */ is.objectExpression}; const childAttrs = ${/* child attrs */ is.objectExpression}; + if (danglingSlotName) { + childAttrs.slot = danglingSlotName; + } ${ /* Slotted content is inserted here. diff --git a/packages/@lwc/ssr-compiler/src/compile-template/transformers/component/lwc-component.ts b/packages/@lwc/ssr-compiler/src/compile-template/transformers/component/lwc-component.ts index b7076424c9..88a1801e60 100644 --- a/packages/@lwc/ssr-compiler/src/compile-template/transformers/component/lwc-component.ts +++ b/packages/@lwc/ssr-compiler/src/compile-template/transformers/component/lwc-component.ts @@ -25,6 +25,9 @@ const bYieldFromDynamicComponentConstructorGenerator = esTemplateWithYield` } const childProps = ${/* child props */ is.objectExpression}; const childAttrs = ${/* child attrs */ is.objectExpression}; + if (danglingSlotName) { + childAttrs.slot = danglingSlotName; + } ${ /* Slotted content is inserted here. diff --git a/packages/@lwc/ssr-compiler/src/compile-template/transformers/component/slotted-content.ts b/packages/@lwc/ssr-compiler/src/compile-template/transformers/component/slotted-content.ts index 6fa1660203..bf9a8ad357 100644 --- a/packages/@lwc/ssr-compiler/src/compile-template/transformers/component/slotted-content.ts +++ b/packages/@lwc/ssr-compiler/src/compile-template/transformers/component/slotted-content.ts @@ -78,7 +78,8 @@ const bGenerateSlottedContent = esTemplateWithYield` const bAddSlottedContent = esTemplate` addSlottedContent(${/* slot name */ is.expression} ?? "", async function* generateSlottedContent(contextfulParent, ${ /* scoped slot data variable */ isNullableOf(is.identifier) - }) { + }, danglingSlotName) { + debugger; // FIXME: make validation work again ${/* slot content */ false} }, ${/* content map */ is.identifier}); diff --git a/packages/@lwc/ssr-compiler/src/compile-template/transformers/element.ts b/packages/@lwc/ssr-compiler/src/compile-template/transformers/element.ts index 66341e2355..3fd6d9438b 100644 --- a/packages/@lwc/ssr-compiler/src/compile-template/transformers/element.ts +++ b/packages/@lwc/ssr-compiler/src/compile-template/transformers/element.ts @@ -120,6 +120,14 @@ const bConditionallyYieldScopeTokenClass = esTemplateWithYield` } `; +const bConditionallyYieldDanglingSlotName = esTemplateWithYield` + { + if (danglingSlotName) { + yield \` slot="\${danglingSlotName}"\`; + } + } +`; + const bYieldSanitizedHtml = esTemplateWithYield` yield sanitizeHtmlContent(${/* lwc:inner-html content */ is.expression}) `; @@ -263,6 +271,7 @@ export const Element: Transformer = fu return [ bYield(b.literal(`<${node.name}`)), + ...[bConditionallyYieldDanglingSlotName()], // If we haven't already prefixed the scope token to an existing class, add an explicit class here ...(hasClassAttribute ? [] : [bConditionallyYieldScopeTokenClass()]), ...yieldAttrsAndProps, diff --git a/packages/@lwc/ssr-compiler/src/compile-template/transformers/slot.ts b/packages/@lwc/ssr-compiler/src/compile-template/transformers/slot.ts index 3dcdea4adc..d86d44a36b 100644 --- a/packages/@lwc/ssr-compiler/src/compile-template/transformers/slot.ts +++ b/packages/@lwc/ssr-compiler/src/compile-template/transformers/slot.ts @@ -30,6 +30,8 @@ const bConditionalSlot = esTemplateWithYield` const scopedGenerators = scopedSlottedContent?.[slotName ?? ""]; const mismatchedSlots = isScopedSlot ? lightGenerators : scopedGenerators; const generators = isScopedSlot ? scopedGenerators : lightGenerators; + debugger; + danglingSlotName = ${/* danglingSlotName */ is.expression} || danglingSlotName; // start bookend HTML comment for light DOM slot vfragment if (!isSlotted) { @@ -43,7 +45,7 @@ const bConditionalSlot = esTemplateWithYield` if (generators) { for (let i = 0; i < generators.length; i++) { - yield* generators[i](contextfulParent, ${/* scoped slot data */ isNullableOf(is.expression)}); + yield* generators[i](contextfulParent, ${/* scoped slot data */ isNullableOf(is.expression)}, danglingSlotName); // Scoped slotted data is separated by bookends. Final bookends are added outside of the loop below. if (isScopedSlot && i < generators.length - 1) { yield ''; @@ -90,5 +92,7 @@ export const Slot: Transformer = function Slot(node, ctx): EsStatement[] const slotChildren = irChildrenToEs(node.children, ctx); const isScopedSlot = b.literal(Boolean(slotBound)); const isSlotted = b.literal(Boolean(ctx.isSlotted)); - return [bConditionalSlot(isScopedSlot, isSlotted, slotName, slotBound, slotChildren, slotAst)]; + const danglingSlotName = bAttributeValue(node, 'slot'); + debugger; + return [bConditionalSlot(isScopedSlot, isSlotted, slotName, danglingSlotName, slotBound, slotChildren, slotAst)]; }; From c1664868ff04f616c7a20ce5fbfd31528379e5cd Mon Sep 17 00:00:00 2001 From: John Hefferman Date: Fri, 24 Jan 2025 11:03:50 -0700 Subject: [PATCH 2/8] fix: scoped slot case, nested cases --- .../slots/dangling/expected.html | 10 ++++---- .../modules/x/container/container.html | 2 +- .../slots/dangling/modules/x/leaf/leaf.html | 4 +-- .../slots/dangling/modules/x/slot/slot.html | 4 +-- .../src/__tests__/utils/expected-failures.ts | 2 -- .../src/compile-template/index.ts | 4 ++- .../transformers/component/component.ts | 8 ++++-- .../transformers/component/lwc-component.ts | 8 ++++-- .../transformers/component/slotted-content.ts | 3 +-- .../compile-template/transformers/element.ts | 8 ++++-- .../src/compile-template/transformers/slot.ts | 25 ++++++++++++++----- 11 files changed, 51 insertions(+), 27 deletions(-) diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/expected.html b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/expected.html index b9dc6b9142..adfb2329a5 100644 --- a/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/expected.html +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/expected.html @@ -2,14 +2,14 @@ -

- bottom content +

+ top content

-

- top content -

+

+ bottom content +

diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/modules/x/container/container.html b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/modules/x/container/container.html index d6153f7e58..616c5495b8 100644 --- a/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/modules/x/container/container.html +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/modules/x/container/container.html @@ -1,6 +1,6 @@ \ No newline at end of file diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/modules/x/leaf/leaf.html b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/modules/x/leaf/leaf.html index a735614a68..dc9ac68111 100644 --- a/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/modules/x/leaf/leaf.html +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/modules/x/leaf/leaf.html @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/modules/x/slot/slot.html b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/modules/x/slot/slot.html index e13bdfa20b..963a3fceca 100644 --- a/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/modules/x/slot/slot.html +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/modules/x/slot/slot.html @@ -1,6 +1,6 @@ \ No newline at end of file diff --git a/packages/@lwc/ssr-compiler/src/__tests__/utils/expected-failures.ts b/packages/@lwc/ssr-compiler/src/__tests__/utils/expected-failures.ts index f3ffe0e2df..4d02bf9f22 100644 --- a/packages/@lwc/ssr-compiler/src/__tests__/utils/expected-failures.ts +++ b/packages/@lwc/ssr-compiler/src/__tests__/utils/expected-failures.ts @@ -13,8 +13,6 @@ export const expectedFailures = new Set([ 'exports/component-as-default/index.js', 'known-boolean-attributes/default-def-html-attributes/static-on-component/index.js', 'render-dynamic-value/index.js', - //'slot-forwarding/slots/mixed/index.js', - //'slot-forwarding/slots/dangling/index.js', 'wire/errors/throws-on-computed-key/index.js', 'wire/errors/throws-when-colliding-prop-then-method/index.js', ]); diff --git a/packages/@lwc/ssr-compiler/src/compile-template/index.ts b/packages/@lwc/ssr-compiler/src/compile-template/index.ts index a56627281e..041ef68f94 100644 --- a/packages/@lwc/ssr-compiler/src/compile-template/index.ts +++ b/packages/@lwc/ssr-compiler/src/compile-template/index.ts @@ -31,7 +31,9 @@ const bExportTemplate = esTemplate` // These should be scoped to the "tmpl" function however, to avoid conflicts with other templates. let textContentBuffer = ''; let didBufferTextContent = false; - let danglingSlotName = null; + + // This will get overridden but requires initialization. + const slotAttributeValue = null; // Establishes a contextual relationship between two components for ContextProviders. // This variable will typically get overridden (shadowed) within slotted content. diff --git a/packages/@lwc/ssr-compiler/src/compile-template/transformers/component/component.ts b/packages/@lwc/ssr-compiler/src/compile-template/transformers/component/component.ts index 832c3fdd1a..adf94177dc 100644 --- a/packages/@lwc/ssr-compiler/src/compile-template/transformers/component/component.ts +++ b/packages/@lwc/ssr-compiler/src/compile-template/transformers/component/component.ts @@ -19,8 +19,12 @@ const bYieldFromChildGenerator = esTemplateWithYield` { const childProps = ${/* child props */ is.objectExpression}; const childAttrs = ${/* child attrs */ is.objectExpression}; - if (danglingSlotName) { - childAttrs.slot = danglingSlotName; + /* + If a slotAttributeValue is present, it is dangling and should be assigned to any slotted content. This behavior aligns with v1 and engine-dom. + See: engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/ for example case. + */ + if (slotAttributeValue) { + childAttrs.slot = slotAttributeValue; } ${ /* diff --git a/packages/@lwc/ssr-compiler/src/compile-template/transformers/component/lwc-component.ts b/packages/@lwc/ssr-compiler/src/compile-template/transformers/component/lwc-component.ts index 88a1801e60..8cfb10818a 100644 --- a/packages/@lwc/ssr-compiler/src/compile-template/transformers/component/lwc-component.ts +++ b/packages/@lwc/ssr-compiler/src/compile-template/transformers/component/lwc-component.ts @@ -25,8 +25,12 @@ const bYieldFromDynamicComponentConstructorGenerator = esTemplateWithYield` } const childProps = ${/* child props */ is.objectExpression}; const childAttrs = ${/* child attrs */ is.objectExpression}; - if (danglingSlotName) { - childAttrs.slot = danglingSlotName; + /* + If a slotAttributeValue is present, it is dangling and should be assigned to any slotted content. This behavior aligns with v1 and engine-dom. + See: engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/ for example case. + */ + if (slotAttributeValue) { + childAttrs.slot = slotAttributeValue; } ${ /* diff --git a/packages/@lwc/ssr-compiler/src/compile-template/transformers/component/slotted-content.ts b/packages/@lwc/ssr-compiler/src/compile-template/transformers/component/slotted-content.ts index bf9a8ad357..8ad46d5d5e 100644 --- a/packages/@lwc/ssr-compiler/src/compile-template/transformers/component/slotted-content.ts +++ b/packages/@lwc/ssr-compiler/src/compile-template/transformers/component/slotted-content.ts @@ -78,8 +78,7 @@ const bGenerateSlottedContent = esTemplateWithYield` const bAddSlottedContent = esTemplate` addSlottedContent(${/* slot name */ is.expression} ?? "", async function* generateSlottedContent(contextfulParent, ${ /* scoped slot data variable */ isNullableOf(is.identifier) - }, danglingSlotName) { - debugger; + }, slotAttributeValue) { // FIXME: make validation work again ${/* slot content */ false} }, ${/* content map */ is.identifier}); diff --git a/packages/@lwc/ssr-compiler/src/compile-template/transformers/element.ts b/packages/@lwc/ssr-compiler/src/compile-template/transformers/element.ts index 3fd6d9438b..e2b86b94cb 100644 --- a/packages/@lwc/ssr-compiler/src/compile-template/transformers/element.ts +++ b/packages/@lwc/ssr-compiler/src/compile-template/transformers/element.ts @@ -120,10 +120,14 @@ const bConditionallyYieldScopeTokenClass = esTemplateWithYield` } `; +/* + If a slotAttributeValue is present, it is dangling and should be assigned to any slotted content. This behavior aligns with v1 and engine-dom. + See: engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/ for example case. +*/ const bConditionallyYieldDanglingSlotName = esTemplateWithYield` { - if (danglingSlotName) { - yield \` slot="\${danglingSlotName}"\`; + if (slotAttributeValue) { + yield \` slot="\${slotAttributeValue}"\`; } } `; diff --git a/packages/@lwc/ssr-compiler/src/compile-template/transformers/slot.ts b/packages/@lwc/ssr-compiler/src/compile-template/transformers/slot.ts index d86d44a36b..952619235d 100644 --- a/packages/@lwc/ssr-compiler/src/compile-template/transformers/slot.ts +++ b/packages/@lwc/ssr-compiler/src/compile-template/transformers/slot.ts @@ -30,9 +30,13 @@ const bConditionalSlot = esTemplateWithYield` const scopedGenerators = scopedSlottedContent?.[slotName ?? ""]; const mismatchedSlots = isScopedSlot ? lightGenerators : scopedGenerators; const generators = isScopedSlot ? scopedGenerators : lightGenerators; - debugger; - danglingSlotName = ${/* danglingSlotName */ is.expression} || danglingSlotName; - + /* + If a slotAttributeValue is present, it should be provided for assignment to any slotted content. This behavior aligns with v1 and engine-dom. + See: engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/ for example. + Note the slot mapping does not work for scoped slots, so the slot name is not rendered in this case. + See: engine-server/src/__tests__/fixtures/slot-forwarding/scoped-slots for example. + */ + const danglingSlotName = !isScopedSlot ? ${/* slotAttributeValue */ is.expression} || slotAttributeValue : null; // start bookend HTML comment for light DOM slot vfragment if (!isSlotted) { yield ''; @@ -92,7 +96,16 @@ export const Slot: Transformer = function Slot(node, ctx): EsStatement[] const slotChildren = irChildrenToEs(node.children, ctx); const isScopedSlot = b.literal(Boolean(slotBound)); const isSlotted = b.literal(Boolean(ctx.isSlotted)); - const danglingSlotName = bAttributeValue(node, 'slot'); - debugger; - return [bConditionalSlot(isScopedSlot, isSlotted, slotName, danglingSlotName, slotBound, slotChildren, slotAst)]; + const slotAttributeValue = bAttributeValue(node, 'slot'); + return [ + bConditionalSlot( + isScopedSlot, + isSlotted, + slotName, + slotAttributeValue, + slotBound, + slotChildren, + slotAst + ), + ]; }; From 7460711ed45c1d90941b902d66f469acab0c15fd Mon Sep 17 00:00:00 2001 From: John Hefferman Date: Fri, 24 Jan 2025 11:45:00 -0700 Subject: [PATCH 3/8] fix: review comments --- .../src/compile-template/transformers/element.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/@lwc/ssr-compiler/src/compile-template/transformers/element.ts b/packages/@lwc/ssr-compiler/src/compile-template/transformers/element.ts index e2b86b94cb..8a80407fa9 100644 --- a/packages/@lwc/ssr-compiler/src/compile-template/transformers/element.ts +++ b/packages/@lwc/ssr-compiler/src/compile-template/transformers/element.ts @@ -125,11 +125,9 @@ const bConditionallyYieldScopeTokenClass = esTemplateWithYield` See: engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling/ for example case. */ const bConditionallyYieldDanglingSlotName = esTemplateWithYield` - { - if (slotAttributeValue) { - yield \` slot="\${slotAttributeValue}"\`; - } - } + if (slotAttributeValue) { + yield \` slot="\${slotAttributeValue}"\`; + } `; const bYieldSanitizedHtml = esTemplateWithYield` @@ -275,7 +273,7 @@ export const Element: Transformer = fu return [ bYield(b.literal(`<${node.name}`)), - ...[bConditionallyYieldDanglingSlotName()], + bConditionallyYieldDanglingSlotName(), // If we haven't already prefixed the scope token to an existing class, add an explicit class here ...(hasClassAttribute ? [] : [bConditionallyYieldScopeTokenClass()]), ...yieldAttrsAndProps, From 721e06360b92f5ed0d96775438a0bd104bd35321 Mon Sep 17 00:00:00 2001 From: John Hefferman Date: Fri, 24 Jan 2025 13:31:57 -0700 Subject: [PATCH 4/8] fix: additional test --- .../slots/dangling-component/error.txt | 0 .../slots/dangling-component/expected.html | 16 ++++++++++++++++ .../slots/dangling-component/index.js | 4 ++++ .../modules/x/component/component.html | 3 +++ .../modules/x/component/component.js | 5 +++++ .../modules/x/container/container.html | 6 ++++++ .../modules/x/container/container.js | 5 +++++ .../dangling-component/modules/x/leaf/leaf.html | 4 ++++ .../dangling-component/modules/x/leaf/leaf.js | 5 +++++ .../dangling-component/modules/x/slot/slot.html | 6 ++++++ .../dangling-component/modules/x/slot/slot.js | 5 +++++ 11 files changed, 59 insertions(+) create mode 100644 packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/error.txt create mode 100644 packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/expected.html create mode 100644 packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/index.js create mode 100644 packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/component/component.html create mode 100644 packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/component/component.js create mode 100644 packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/container/container.html create mode 100644 packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/container/container.js create mode 100644 packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/leaf/leaf.html create mode 100644 packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/leaf/leaf.js create mode 100644 packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/slot/slot.html create mode 100644 packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/slot/slot.js diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/error.txt b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/error.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/expected.html b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/expected.html new file mode 100644 index 0000000000..63ea1759fe --- /dev/null +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/expected.html @@ -0,0 +1,16 @@ + + + + + + Component content + + + + + Component content + + + + + \ No newline at end of file diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/index.js b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/index.js new file mode 100644 index 0000000000..b202a15a0a --- /dev/null +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/index.js @@ -0,0 +1,4 @@ +export const tagName = 'x-dangling-container'; +export { default } from 'x/container'; +export * from 'x/container'; +export const features = []; diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/component/component.html b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/component/component.html new file mode 100644 index 0000000000..17ad53e7e1 --- /dev/null +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/component/component.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/component/component.js b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/component/component.js new file mode 100644 index 0000000000..0679d2bc10 --- /dev/null +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/component/component.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/container/container.html b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/container/container.html new file mode 100644 index 0000000000..685193646f --- /dev/null +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/container/container.html @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/container/container.js b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/container/container.js new file mode 100644 index 0000000000..0679d2bc10 --- /dev/null +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/container/container.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/leaf/leaf.html b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/leaf/leaf.html new file mode 100644 index 0000000000..dc9ac68111 --- /dev/null +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/leaf/leaf.html @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/leaf/leaf.js b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/leaf/leaf.js new file mode 100644 index 0000000000..0679d2bc10 --- /dev/null +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/leaf/leaf.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/slot/slot.html b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/slot/slot.html new file mode 100644 index 0000000000..963a3fceca --- /dev/null +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/slot/slot.html @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/slot/slot.js b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/slot/slot.js new file mode 100644 index 0000000000..0679d2bc10 --- /dev/null +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slot-forwarding/slots/dangling-component/modules/x/slot/slot.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + static renderMode = 'light'; +} From ddea5e4b3c1ed66b1ba90253bee43faf5db7c876 Mon Sep 17 00:00:00 2001 From: John Hefferman Date: Mon, 27 Jan 2025 13:02:35 -0700 Subject: [PATCH 5/8] fix: default slotted content --- .../implicit-no-template/light/error.txt | 0 .../implicit-no-template/light/expected.html | 4 +++ .../implicit-no-template/light/index.js | 3 ++ .../light/modules/x/inner/inner.js | 5 ++++ .../light/modules/x/outer/outer.html | 6 ++++ .../light/modules/x/outer/outer.js | 5 ++++ .../implicit-no-template/shadow/error.txt | 0 .../implicit-no-template/shadow/expected.html | 10 +++++++ .../implicit-no-template/shadow/index.js | 3 ++ .../shadow/modules/x/inner/inner.js | 3 ++ .../shadow/modules/x/outer/outer.html | 6 ++++ .../shadow/modules/x/outer/outer.js | 5 ++++ packages/@lwc/ssr-runtime/src/render.ts | 29 ++++++++++++++----- 13 files changed, 71 insertions(+), 8 deletions(-) create mode 100644 packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/light/error.txt create mode 100644 packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/light/expected.html create mode 100644 packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/light/index.js create mode 100644 packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/light/modules/x/inner/inner.js create mode 100644 packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/light/modules/x/outer/outer.html create mode 100644 packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/light/modules/x/outer/outer.js create mode 100644 packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/error.txt create mode 100644 packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/expected.html create mode 100644 packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/index.js create mode 100644 packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/modules/x/inner/inner.js create mode 100644 packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/modules/x/outer/outer.html create mode 100644 packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/modules/x/outer/outer.js diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/light/error.txt b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/light/error.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/light/expected.html b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/light/expected.html new file mode 100644 index 0000000000..ada6887b85 --- /dev/null +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/light/expected.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/light/index.js b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/light/index.js new file mode 100644 index 0000000000..17a015b5ea --- /dev/null +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/light/index.js @@ -0,0 +1,3 @@ +export const tagName = 'x-outer'; +export { default } from 'x/outer'; +export * from 'x/outer'; diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/light/modules/x/inner/inner.js b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/light/modules/x/inner/inner.js new file mode 100644 index 0000000000..0679d2bc10 --- /dev/null +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/light/modules/x/inner/inner.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/light/modules/x/outer/outer.html b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/light/modules/x/outer/outer.html new file mode 100644 index 0000000000..e6479b1b01 --- /dev/null +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/light/modules/x/outer/outer.html @@ -0,0 +1,6 @@ + diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/light/modules/x/outer/outer.js b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/light/modules/x/outer/outer.js new file mode 100644 index 0000000000..0679d2bc10 --- /dev/null +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/light/modules/x/outer/outer.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/error.txt b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/error.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/expected.html b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/expected.html new file mode 100644 index 0000000000..2ed009a4ec --- /dev/null +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/expected.html @@ -0,0 +1,10 @@ + + + + slotted content +

+ more content +

+
+
\ No newline at end of file diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/index.js b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/index.js new file mode 100644 index 0000000000..17a015b5ea --- /dev/null +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/index.js @@ -0,0 +1,3 @@ +export const tagName = 'x-outer'; +export { default } from 'x/outer'; +export * from 'x/outer'; diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/modules/x/inner/inner.js b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/modules/x/inner/inner.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/modules/x/inner/inner.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/modules/x/outer/outer.html b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/modules/x/outer/outer.html new file mode 100644 index 0000000000..2542b79fe0 --- /dev/null +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/modules/x/outer/outer.html @@ -0,0 +1,6 @@ + diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/modules/x/outer/outer.js b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/modules/x/outer/outer.js new file mode 100644 index 0000000000..0679d2bc10 --- /dev/null +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/modules/x/outer/outer.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/ssr-runtime/src/render.ts b/packages/@lwc/ssr-runtime/src/render.ts index 188c169ba7..b6c240686d 100644 --- a/packages/@lwc/ssr-runtime/src/render.ts +++ b/packages/@lwc/ssr-runtime/src/render.ts @@ -101,27 +101,40 @@ export function renderAttrsNoYield( } export function* fallbackTmpl( - _shadowSlottedContent: unknown, - _lightSlottedContent: unknown, - _scopedSlottedContent: unknown, + _shadowSlottedContent: any, + _lightSlottedContent: any, + _scopedSlottedContent: any, Cmp: LightningElementConstructor, _instance: unknown ) { if (Cmp.renderMode !== 'light') { - yield ''; + yield ``; + renderSlottedContent(_lightSlottedContent, _instance); } } export function fallbackTmplNoYield( emit: (segment: string) => void, - _shadowSlottedContent: unknown, - _lightSlottedContent: unknown, - _scopedSlottedContent: unknown, + _shadowSlottedContent: any, + _lightSlottedContent: any, + _scopedSlottedContent: any, Cmp: LightningElementConstructor, _instance: unknown ) { if (Cmp.renderMode !== 'light') { - emit(''); + emit(``); + renderSlottedContent(_lightSlottedContent, emit); + } +} + +function renderSlottedContent(_lightSlottedContent: any, contextfulParent: any) { + if (_lightSlottedContent) { + for (const slotName in _lightSlottedContent) { + const generators = _lightSlottedContent[slotName]; + for (let i = 0; i < generators.length; i++) { + generators[i](contextfulParent, null, slotName); + } + } } } From 7e2a5de521c1aeeb2da7b122d27f62774ddfa579 Mon Sep 17 00:00:00 2001 From: John Hefferman Date: Wed, 29 Jan 2025 10:07:15 -0700 Subject: [PATCH 6/8] fix: render shadow slotted content for no template case --- .../implicit-no-template/shadow/expected.html | 18 ++++++++++-------- .../shadow/modules/x/outer/outer.html | 4 ++-- .../shadow/modules/x/outer/outer.js | 4 +--- packages/@lwc/ssr-runtime/src/render.ts | 17 +++++------------ 4 files changed, 18 insertions(+), 25 deletions(-) diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/expected.html b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/expected.html index 2ed009a4ec..bc3c9ecc25 100644 --- a/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/expected.html +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/expected.html @@ -1,10 +1,12 @@ - - - slotted content -

- more content -

-
+
\ No newline at end of file diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/modules/x/outer/outer.html b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/modules/x/outer/outer.html index 2542b79fe0..03c77e467f 100644 --- a/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/modules/x/outer/outer.html +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/modules/x/outer/outer.html @@ -1,6 +1,6 @@ diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/modules/x/outer/outer.js b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/modules/x/outer/outer.js index 0679d2bc10..ca8dce94e0 100644 --- a/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/modules/x/outer/outer.js +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/modules/x/outer/outer.js @@ -1,5 +1,3 @@ import { LightningElement } from 'lwc'; -export default class extends LightningElement { - static renderMode = 'light'; -} +export default class extends LightningElement {} diff --git a/packages/@lwc/ssr-runtime/src/render.ts b/packages/@lwc/ssr-runtime/src/render.ts index b6c240686d..32213b0c8a 100644 --- a/packages/@lwc/ssr-runtime/src/render.ts +++ b/packages/@lwc/ssr-runtime/src/render.ts @@ -109,7 +109,9 @@ export function* fallbackTmpl( ) { if (Cmp.renderMode !== 'light') { yield ``; - renderSlottedContent(_lightSlottedContent, _instance); + if (_shadowSlottedContent) { + yield _shadowSlottedContent(_instance); + } } } @@ -123,17 +125,8 @@ export function fallbackTmplNoYield( ) { if (Cmp.renderMode !== 'light') { emit(``); - renderSlottedContent(_lightSlottedContent, emit); - } -} - -function renderSlottedContent(_lightSlottedContent: any, contextfulParent: any) { - if (_lightSlottedContent) { - for (const slotName in _lightSlottedContent) { - const generators = _lightSlottedContent[slotName]; - for (let i = 0; i < generators.length; i++) { - generators[i](contextfulParent, null, slotName); - } + if (_shadowSlottedContent) { + _shadowSlottedContent(emit, _instance); } } } From ecedbcf4185a9bca8e29d10a7c2b0e1d8f2ce907 Mon Sep 17 00:00:00 2001 From: John Hefferman Date: Wed, 29 Jan 2025 11:46:18 -0700 Subject: [PATCH 7/8] fix: update types --- packages/@lwc/ssr-runtime/src/render.ts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/@lwc/ssr-runtime/src/render.ts b/packages/@lwc/ssr-runtime/src/render.ts index 32213b0c8a..e1f2d0e10b 100644 --- a/packages/@lwc/ssr-runtime/src/render.ts +++ b/packages/@lwc/ssr-runtime/src/render.ts @@ -101,32 +101,32 @@ export function renderAttrsNoYield( } export function* fallbackTmpl( - _shadowSlottedContent: any, - _lightSlottedContent: any, - _scopedSlottedContent: any, + shadowSlottedContent: AsyncGeneratorFunction, + _lightSlottedContent: unknown, + _scopedSlottedContent: unknown, Cmp: LightningElementConstructor, _instance: unknown ) { if (Cmp.renderMode !== 'light') { yield ``; - if (_shadowSlottedContent) { - yield _shadowSlottedContent(_instance); + if (shadowSlottedContent) { + yield shadowSlottedContent(_instance); } } } export function fallbackTmplNoYield( emit: (segment: string) => void, - _shadowSlottedContent: any, - _lightSlottedContent: any, - _scopedSlottedContent: any, + shadowSlottedContent: AsyncGeneratorFunction, + _lightSlottedContent: unknown, + _scopedSlottedContent: unknown, Cmp: LightningElementConstructor, _instance: unknown ) { if (Cmp.renderMode !== 'light') { emit(``); - if (_shadowSlottedContent) { - _shadowSlottedContent(emit, _instance); + if (shadowSlottedContent) { + shadowSlottedContent(emit, _instance); } } } From d6941e320153bb7b657182b4913836cd39be1c26 Mon Sep 17 00:00:00 2001 From: John Hefferman Date: Thu, 30 Jan 2025 11:06:49 -0700 Subject: [PATCH 8/8] fix: instance naming --- packages/@lwc/ssr-runtime/src/render.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/@lwc/ssr-runtime/src/render.ts b/packages/@lwc/ssr-runtime/src/render.ts index e1f2d0e10b..4a635df8e2 100644 --- a/packages/@lwc/ssr-runtime/src/render.ts +++ b/packages/@lwc/ssr-runtime/src/render.ts @@ -105,12 +105,12 @@ export function* fallbackTmpl( _lightSlottedContent: unknown, _scopedSlottedContent: unknown, Cmp: LightningElementConstructor, - _instance: unknown + instance: unknown ) { if (Cmp.renderMode !== 'light') { yield ``; if (shadowSlottedContent) { - yield shadowSlottedContent(_instance); + yield shadowSlottedContent(instance); } } } @@ -121,12 +121,12 @@ export function fallbackTmplNoYield( _lightSlottedContent: unknown, _scopedSlottedContent: unknown, Cmp: LightningElementConstructor, - _instance: unknown + instance: unknown ) { if (Cmp.renderMode !== 'light') { emit(``); if (shadowSlottedContent) { - shadowSlottedContent(emit, _instance); + shadowSlottedContent(emit, instance); } } }