diff --git a/examples/vue2/src/SharedControls.story.vue b/examples/vue2/src/SharedControls.story.vue
new file mode 100644
index 00000000..1e6736ba
--- /dev/null
+++ b/examples/vue2/src/SharedControls.story.vue
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Variant 1
+ {{ state }}
+
+
+
+ Variant 2
+ {{ state }}
+
+
+
diff --git a/packages/histoire-plugin-vue2/src/client/app/RenderStory.ts b/packages/histoire-plugin-vue2/src/client/app/RenderStory.ts
index 93da3cdc..5c3d73e7 100644
--- a/packages/histoire-plugin-vue2/src/client/app/RenderStory.ts
+++ b/packages/histoire-plugin-vue2/src/client/app/RenderStory.ts
@@ -111,9 +111,19 @@ export default _defineComponent({
},
render: () => {
- const vnodes = props.variant.slots()?.[props.slotName]?.({
+ const ensureFn = (fn: any) => {
+ if (typeof fn === 'function') {
+ return fn
+ } else if (fn != null) {
+ return () => fn
+ } else {
+ return null
+ }
+ }
+
+ const vnodes = ensureFn(props.variant.slots()?.[props.slotName])?.({
state: externalState,
- }) ?? props.story.slots()?.[props.slotName]?.({
+ }) ?? ensureFn(props.story.slots()?.[props.slotName])?.({
state: externalState,
})