@storybook/svelte
Version:
Storybook Svelte renderer: Develop, document, and test UI components in isolation.
13 lines (10 loc) • 2.57 kB
JavaScript
import './chunk-CEH6MNVV.mjs';
import { deprecate } from 'storybook/internal/client-logger';
import { SourceType } from 'storybook/internal/docs-tools';
import { useRef, useEffect, emitTransformCode } from 'storybook/preview-api';
var skipSourceRender=context=>{let sourceParams=context?.parameters.docs?.source,isArgsStory=context?.parameters.__isArgsStory;return (context?.tags??[]).some(tag=>tag.startsWith("svelte-csf"))?!0:sourceParams?.type===SourceType.DYNAMIC?!1:!isArgsStory||sourceParams?.code||sourceParams?.type===SourceType.CODE};function toSvelteProperty(key,value,argTypes){if(value==null)return null;let argType=argTypes[key];return argType&&argType.defaultValue===value||argType&&argType.action?null:value===!0?key:typeof value=="string"?`${key}=${JSON.stringify(value)}`:typeof value=="function"?`${key}={<handler>}`:`${key}={${JSON.stringify(value)}}`}function getComponentName(component){if(component==null)return null;let{__docgen={}}=component,{name}=__docgen;return name?(name.endsWith(".svelte")&&(name=name.substring(0,name.length-7)),name):component.name}function generateSvelteSource(component,args,argTypes,slotProperty){let name=getComponentName(component);if(!name)return null;let propsArray=Object.entries(args).filter(([k])=>k!==slotProperty).map(([k,v])=>toSvelteProperty(k,v,argTypes)).filter(p=>p),props=propsArray.join(" "),multiline=props.length>50,slotValue=slotProperty?args[slotProperty]:null,srcStart=multiline?`<${name}
${propsArray.join(`
`)}`:`<${name} ${props}`;return slotValue?`${srcStart}>
${slotValue}
</${name}>`:`${srcStart}/>`}function getWrapperProperties(component){let{__docgen}=component||{};return __docgen?__docgen.keywords?.find(kw=>kw.name==="wrapper")?{wrapper:!0,slotProperty:__docgen.data?.find(prop=>prop.keywords.find(kw=>kw.name==="slot"))?.name}:{wrapper:!1}:{wrapper:!1}}var sourceDecorator=(storyFn,context)=>{let skip=skipSourceRender(context),story=storyFn(),source=useRef(void 0);return useEffect(()=>{if(skip)return;let{parameters={},args={},component:ctxComponent}=context||{},{Component:component}=context.originalStoryFn(args,context),{wrapper,slotProperty}=getWrapperProperties(component);wrapper&&(parameters.component&&deprecate("parameters.component is deprecated. Using context.component instead."),component=ctxComponent);let generated=generateSvelteSource(component,args,context?.argTypes,slotProperty);generated&&source.current!==generated&&(emitTransformCode(generated,context),source.current=generated);}),story};var decorators=[sourceDecorator];
export { decorators };