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 @@
+
+
+ I am default slot
+ I am the foo slot
+
+
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..bc3c9ecc25
--- /dev/null
+++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/expected.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+ I am default slot
+
+ I am the foo slot
+
+
+
+
\ 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..03c77e467f
--- /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 @@
+
+
+ I am default slot
+ I am the foo slot
+
+
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..ca8dce94e0
--- /dev/null
+++ b/packages/@lwc/engine-server/src/__tests__/fixtures/slots-basic/implicit-no-template/shadow/modules/x/outer/outer.js
@@ -0,0 +1,3 @@
+import { LightningElement } from 'lwc';
+
+export default class extends LightningElement {}
diff --git a/packages/@lwc/ssr-runtime/src/render.ts b/packages/@lwc/ssr-runtime/src/render.ts
index 188c169ba7..4a635df8e2 100644
--- a/packages/@lwc/ssr-runtime/src/render.ts
+++ b/packages/@lwc/ssr-runtime/src/render.ts
@@ -101,27 +101,33 @@ export function renderAttrsNoYield(
}
export function* fallbackTmpl(
- _shadowSlottedContent: unknown,
+ shadowSlottedContent: AsyncGeneratorFunction,
_lightSlottedContent: unknown,
_scopedSlottedContent: unknown,
Cmp: LightningElementConstructor,
- _instance: unknown
+ instance: unknown
) {
if (Cmp.renderMode !== 'light') {
- yield '';
+ yield ``;
+ if (shadowSlottedContent) {
+ yield shadowSlottedContent(instance);
+ }
}
}
export function fallbackTmplNoYield(
emit: (segment: string) => void,
- _shadowSlottedContent: unknown,
+ shadowSlottedContent: AsyncGeneratorFunction,
_lightSlottedContent: unknown,
_scopedSlottedContent: unknown,
Cmp: LightningElementConstructor,
- _instance: unknown
+ instance: unknown
) {
if (Cmp.renderMode !== 'light') {
- emit('');
+ emit(``);
+ if (shadowSlottedContent) {
+ shadowSlottedContent(emit, instance);
+ }
}
}