@storybook/svelte
Version:
Storybook Svelte renderer
9 lines (6 loc) • 2.51 kB
JavaScript
import { addons, sanitizeStoryContextUpdate } from '@storybook/preview-api';
import SlotDecorator from '@storybook/svelte/templates/SlotDecorator.svelte';
import { RESET_STORY_ARGS } from '@storybook/core-events';
import PreviewRender from '@storybook/svelte/templates/PreviewRender.svelte';
function unWrap(obj){return obj&&typeof obj=="object"&&"default"in obj?obj.default:obj}function prepareStory(context,rawStory,rawInnerStory){let story=unWrap(rawStory),innerStory=rawInnerStory&&unWrap(rawInnerStory),preparedStory;return !story||Object.keys(story).length===0?preparedStory={Component:context.component}:story.Component?preparedStory=story:preparedStory={Component:story},innerStory?{Component:SlotDecorator,props:{...innerStory,decorator:preparedStory}}:preparedStory}function decorateStory(storyFn,decorators){return decorators.reduce((decorated,decorator)=>context=>{let story,decoratedStory=decorator(update=>(story=decorated({...context,...sanitizeStoryContextUpdate(update)}),story),context);return story||(story=decorated(context)),decoratedStory===story?story:prepareStory(context,decoratedStory,story)},context=>prepareStory(context,storyFn(context)))}var componentsByDomElement=new Map;function teardown(canvasElement){componentsByDomElement.has(canvasElement)&&(componentsByDomElement.get(canvasElement).$destroy(),canvasElement.innerHTML="",componentsByDomElement.delete(canvasElement));}var storyIdsToRemountFromResetArgsEvent=new Set;addons.getChannel().on(RESET_STORY_ARGS,({storyId})=>{storyIdsToRemountFromResetArgsEvent.add(storyId);});function renderToCanvas({storyFn,kind,name,showMain,showError,storyContext,forceRemount},canvasElement){let existingComponent=componentsByDomElement.get(canvasElement),remount=forceRemount;if(storyIdsToRemountFromResetArgsEvent.has(storyContext.id)&&(remount=!0,storyIdsToRemountFromResetArgsEvent.delete(storyContext.id)),remount&&teardown(canvasElement),!existingComponent||remount){let createdComponent=new PreviewRender({target:canvasElement,props:{storyFn,storyContext,name,kind,showError}});componentsByDomElement.set(canvasElement,createdComponent);}else existingComponent.$set({storyFn,storyContext,name,kind,showError});return showMain(),()=>{teardown(canvasElement);}}var render=(args,context)=>{let{id,component:Component}=context;if(!Component)throw new Error(`Unable to render story ${id} as the component annotation is missing from the default export`);return {Component,props:args}};
export { decorateStory, render, renderToCanvas };