@storybook/svelte 9.0.0-alpha.8 → 9.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-2IXN2SLZ.mjs +11 -0
- package/dist/components/AddStorybookIdDecorator.svelte +3 -3
- package/dist/components/DecoratorHandler.svelte +20 -0
- package/dist/components/PreviewRender.svelte +14 -41
- package/dist/{createSvelte5Props.svelte.js → createReactiveProps.svelte.js} +1 -1
- package/dist/entry-preview-docs.js +1 -1
- package/dist/entry-preview-docs.mjs +3 -3
- package/dist/entry-preview.d.ts +1 -1
- package/dist/entry-preview.js +1 -1
- package/dist/entry-preview.mjs +1 -1
- package/dist/index.js +1 -1
- package/dist/index.mjs +3 -3
- package/package.json +8 -9
- package/template/cli/{svelte-5-ts-4-9 → js}/Button.stories.svelte +1 -1
- package/template/cli/js/Button.svelte +11 -20
- package/template/cli/js/Header.svelte +12 -17
- package/template/cli/js/Page.svelte +4 -4
- package/template/cli/{svelte-5-js → ts}/Button.stories.svelte +1 -1
- package/template/cli/{svelte-5-ts-3-8 → ts}/Button.svelte +8 -7
- package/template/cli/{svelte-5-ts-4-9 → ts}/Header.svelte +3 -3
- package/template/stories/args.stories.js +21 -10
- package/template/stories/{slot-decorators.stories.js → decorators.stories.js} +21 -8
- package/dist/chunk-XMMNDRKT.mjs +0 -12
- package/dist/components/SlotDecorator.svelte +0 -50
- package/template/cli/js/Button.stories.js +0 -43
- package/template/cli/js/Header.stories.js +0 -22
- package/template/cli/js/Page.stories.js +0 -28
- package/template/cli/svelte-5-js/Button.svelte +0 -26
- package/template/cli/svelte-5-js/Header.svelte +0 -47
- package/template/cli/svelte-5-js/Page.svelte +0 -70
- package/template/cli/svelte-5-ts-3-8/Button.stories.svelte +0 -31
- package/template/cli/svelte-5-ts-3-8/Header.svelte +0 -45
- package/template/cli/svelte-5-ts-4-9/Button.svelte +0 -29
- package/template/cli/svelte-5-ts-4-9/Header.stories.svelte +0 -26
- package/template/cli/svelte-5-ts-4-9/Page.stories.svelte +0 -30
- package/template/cli/svelte-5-ts-4-9/Page.svelte +0 -70
- package/template/cli/ts-4-9/Button.stories.ts +0 -48
- package/template/cli/ts-4-9/Button.svelte +0 -34
- package/template/cli/ts-4-9/Header.stories.ts +0 -27
- package/template/cli/ts-4-9/Header.svelte +0 -52
- package/template/cli/ts-4-9/Page.stories.ts +0 -33
- package/template/cli/ts-4-9/Page.svelte +0 -70
- package/template/stories/decorators-runs-once.stories.js +0 -16
- package/template/stories/docs-jsdoc.stories.js +0 -9
- /package/template/cli/{svelte-5-js → js}/Header.stories.svelte +0 -0
- /package/template/cli/{svelte-5-js → js}/Page.stories.svelte +0 -0
- /package/template/cli/{svelte-5-ts-3-8 → ts}/Header.stories.svelte +0 -0
- /package/template/cli/{svelte-5-ts-3-8 → ts}/Page.stories.svelte +0 -0
- /package/template/cli/{svelte-5-ts-3-8 → ts}/Page.svelte +0 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { __export } from './chunk-CEH6MNVV.mjs';
|
|
2
|
+
import { RESET_STORY_ARGS } from 'storybook/internal/core-events';
|
|
3
|
+
import PreviewRender from '@storybook/svelte/internal/PreviewRender.svelte';
|
|
4
|
+
import { createReactiveProps } from '@storybook/svelte/internal/createReactiveProps';
|
|
5
|
+
import { addons, sanitizeStoryContextUpdate } from 'storybook/preview-api';
|
|
6
|
+
import * as svelte from 'svelte';
|
|
7
|
+
import DecoratorHandler from '@storybook/svelte/internal/DecoratorHandler.svelte';
|
|
8
|
+
|
|
9
|
+
var entry_preview_exports={};__export(entry_preview_exports,{applyDecorators:()=>decorateStory,mount:()=>mount2,parameters:()=>parameters,render:()=>render,renderToCanvas:()=>renderToCanvas});var storyIdsToRemountFromResetArgsEvent=new Set;addons.getChannel().on(RESET_STORY_ARGS,({storyId})=>{storyIdsToRemountFromResetArgsEvent.add(storyId);});var componentsByDomElement=new Map;function renderToCanvas({storyFn,title,name,showMain,showError,storyContext,forceRemount},canvasElement){function unmount2(canvasElementToUnmount){let{mountedComponent}=componentsByDomElement.get(canvasElementToUnmount)??{};mountedComponent&&(svelte.unmount(mountedComponent),componentsByDomElement.delete(canvasElementToUnmount));}let existingComponent=componentsByDomElement.get(canvasElement),remount=forceRemount;if(storyIdsToRemountFromResetArgsEvent.has(storyContext.id)&&(remount=!0,storyIdsToRemountFromResetArgsEvent.delete(storyContext.id)),remount&&unmount2(canvasElement),!existingComponent||remount){let props=createReactiveProps({storyFn,storyContext,name,title,showError}),mountedComponent=svelte.mount(PreviewRender,{target:canvasElement,props});componentsByDomElement.set(canvasElement,{mountedComponent,props});}else Object.assign(existingComponent.props,{storyFn,storyContext,name,title,showError});return showMain(),()=>{unmount2(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}};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:DecoratorHandler,props:{...innerStory,decorator:preparedStory}}:{...preparedStory,argTypes:context.argTypes}}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 mount2=context=>async(Component,options)=>(Component&&(context.originalStoryFn=()=>({Component,props:options&&"props"in options?options?.props:options})),await context.renderToCanvas(),context.canvas);var parameters={renderer:"svelte"};
|
|
10
|
+
|
|
11
|
+
export { decorateStory, entry_preview_exports, mount2 as mount, parameters, render, renderToCanvas };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
const { decorator, Component, props } = $props();
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
Svelte Docgen will create argTypes for events with the name 'event_eventName'
|
|
6
|
+
The Actions addon will convert these to args because they are type: 'action'
|
|
7
|
+
We need to filter these args out so they are not passed to the component
|
|
8
|
+
*/
|
|
9
|
+
let propsWithoutDocgenEvents = $derived(
|
|
10
|
+
Object.fromEntries(Object.entries(props).filter(([key]) => !key.startsWith('event_')))
|
|
11
|
+
);
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
{#if decorator}
|
|
15
|
+
<decorator.Component {...decorator.props}>
|
|
16
|
+
<Component {...propsWithoutDocgenEvents} />
|
|
17
|
+
</decorator.Component>
|
|
18
|
+
{:else}
|
|
19
|
+
<Component {...propsWithoutDocgenEvents} />
|
|
20
|
+
{/if}
|
|
@@ -1,56 +1,29 @@
|
|
|
1
1
|
<script>
|
|
2
|
-
import
|
|
2
|
+
import DecoratorHandler from './DecoratorHandler.svelte';
|
|
3
3
|
import { dedent } from 'ts-dedent';
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
export let title;
|
|
7
|
-
export let storyFn;
|
|
8
|
-
export let showError;
|
|
9
|
-
export let storyContext;
|
|
5
|
+
const { name, title, storyFn, showError } = $props();
|
|
10
6
|
|
|
11
7
|
let {
|
|
12
|
-
/** @type {SvelteComponent} */
|
|
8
|
+
/** @type {import('svelte').SvelteComponent} */
|
|
13
9
|
Component,
|
|
14
|
-
/** @type {any} */
|
|
15
10
|
props = {},
|
|
16
|
-
|
|
17
|
-
on,
|
|
18
|
-
/** @type {any} whether this level of the decorator chain is the last, ie. the actual story */
|
|
19
|
-
argTypes,
|
|
20
|
-
} = storyFn();
|
|
21
|
-
|
|
22
|
-
let firstTime = true;
|
|
23
|
-
|
|
24
|
-
// the first time we don't want to call storyFn two times so we just return the values
|
|
25
|
-
// we already have from the previous call. If storyFn changes this function will run
|
|
26
|
-
// again but this time firstTime will be false
|
|
27
|
-
function getStoryFnValue(storyFn) {
|
|
28
|
-
if (firstTime) {
|
|
29
|
-
firstTime = false;
|
|
30
|
-
return {
|
|
31
|
-
Component,
|
|
32
|
-
props,
|
|
33
|
-
on,
|
|
34
|
-
argTypes,
|
|
35
|
-
};
|
|
36
|
-
}
|
|
11
|
+
} = $derived.by(() => {
|
|
37
12
|
return storyFn();
|
|
38
|
-
}
|
|
13
|
+
});
|
|
39
14
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
showError({
|
|
46
|
-
title: `Expecting a Svelte component from the story: "${name}" of "${title}".`,
|
|
47
|
-
description: dedent`
|
|
15
|
+
$effect(() => {
|
|
16
|
+
if (!Component) {
|
|
17
|
+
showError({
|
|
18
|
+
title: `Expecting a Svelte component from the story: "${name}" of "${title}".`,
|
|
19
|
+
description: dedent`
|
|
48
20
|
Did you forget to return the Svelte component configuration from the story?
|
|
49
21
|
Use "() => ({ Component: YourComponent, props: {} })"
|
|
50
22
|
when defining the story.
|
|
51
23
|
`,
|
|
52
|
-
|
|
53
|
-
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
});
|
|
54
27
|
</script>
|
|
55
28
|
|
|
56
|
-
<
|
|
29
|
+
<DecoratorHandler {Component} {props} />
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* @param {TProps} data - The data to create Svelte 5 props from.
|
|
8
8
|
* @returns {TProps} - The created Svelte 5 props.
|
|
9
9
|
*/
|
|
10
|
-
export const
|
|
10
|
+
export const createReactiveProps = (data) => {
|
|
11
11
|
const props = $state(data);
|
|
12
12
|
return props;
|
|
13
13
|
};
|
|
@@ -4,4 +4,4 @@
|
|
|
4
4
|
${propsArray.join(`
|
|
5
5
|
`)}`:`<${name} ${props}`;return slotValue?`${srcStart}>
|
|
6
6
|
${slotValue}
|
|
7
|
-
</${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
|
|
7
|
+
</${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=(0,import_preview_api.useRef)(void 0);return(0,import_preview_api.useEffect)(()=>{if(skip)return;let{parameters:parameters2={},args={},component:ctxComponent}=context||{},{Component:component}=context.originalStoryFn(args,context),{wrapper,slotProperty}=getWrapperProperties(component);wrapper&&(parameters2.component&&(0,import_client_logger2.deprecate)("parameters.component is deprecated. Using context.component instead."),component=ctxComponent);let generated=generateSvelteSource(component,args,context?.argTypes,slotProperty);generated&&source.current!==generated&&((0,import_preview_api.emitTransformCode)(generated,context),source.current=generated)}),story};var parameters={docs:{story:{inline:!0},extractArgTypes,extractComponentDescription}},decorators=[sourceDecorator],argTypesEnhancers=[import_docs_tools2.enhanceArgTypes];0&&(module.exports={argTypesEnhancers,decorators,parameters});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import './chunk-CEH6MNVV.mjs';
|
|
2
|
-
import { enhanceArgTypes,
|
|
2
|
+
import { enhanceArgTypes, SourceType } from 'storybook/internal/docs-tools';
|
|
3
3
|
import { logger, deprecate } from 'storybook/internal/client-logger';
|
|
4
|
-
import {
|
|
4
|
+
import { useRef, useEffect, emitTransformCode } from 'storybook/preview-api';
|
|
5
5
|
|
|
6
6
|
function hasKeyword(keyword,keywords){return keywords?keywords.find(k=>k.name===keyword)!=null:!1}var extractArgTypes=component=>{try{let docgen=component.__docgen;if(docgen)return createArgTypes(docgen)}catch(err){logger.log(`Error extracting argTypes: ${err}`);}return {}},createArgTypes=docgen=>{let results={};return docgen.data&&docgen.data.forEach(item=>{results[item.name]={...parseTypeToControl(item.type),name:item.name,description:item.description||void 0,type:{required:hasKeyword("required",item.keywords||[]),name:item.type?.text==="{}"?"object":item.type?.text},table:{type:{summary:item.type?.text},defaultValue:{summary:item.defaultValue},category:"properties"}};}),docgen.events&&docgen.events.forEach(item=>{results[`event_${item.name}`]={name:item.name,action:item.name,control:!1,...item.description?{description:item.description}:{},table:{category:"events"}};}),docgen.slots&&docgen.slots.forEach(item=>{results[`slot_${item.name}`]={name:item.name,control:!1,description:[item.description,item.params?.map(p=>`\`${p.name}\``).join(" ")].filter(p=>p).join(`
|
|
7
7
|
|
|
@@ -9,6 +9,6 @@ function hasKeyword(keyword,keywords){return keywords?keywords.find(k=>k.name===
|
|
|
9
9
|
${propsArray.join(`
|
|
10
10
|
`)}`:`<${name} ${props}`;return slotValue?`${srcStart}>
|
|
11
11
|
${slotValue}
|
|
12
|
-
</${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
|
|
12
|
+
</${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:parameters2={},args={},component:ctxComponent}=context||{},{Component:component}=context.originalStoryFn(args,context),{wrapper,slotProperty}=getWrapperProperties(component);wrapper&&(parameters2.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 parameters={docs:{story:{inline:!0},extractArgTypes,extractComponentDescription}},decorators=[sourceDecorator],argTypesEnhancers=[enhanceArgTypes];
|
|
13
13
|
|
|
14
14
|
export { argTypesEnhancers, decorators, parameters };
|
package/dist/entry-preview.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { RenderContext, ArgsStoryFn, BaseAnnotations } from 'storybook/internal/
|
|
|
2
2
|
import { S as SvelteRenderer } from './types-b7d0039b.js';
|
|
3
3
|
import 'svelte';
|
|
4
4
|
|
|
5
|
-
declare function renderToCanvas(
|
|
5
|
+
declare function renderToCanvas({ storyFn, title, name, showMain, showError, storyContext, forceRemount, }: RenderContext<SvelteRenderer>, canvasElement: SvelteRenderer['canvasElement']): () => void;
|
|
6
6
|
declare const render: ArgsStoryFn<SvelteRenderer>;
|
|
7
7
|
|
|
8
8
|
declare function decorateStory(storyFn: any, decorators: any[]): any;
|
package/dist/entry-preview.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var entry_preview_exports={};__export(entry_preview_exports,{applyDecorators:()=>decorateStory,mount:()=>mount2,parameters:()=>parameters,render:()=>render,renderToCanvas:()=>renderToCanvas});module.exports=__toCommonJS(entry_preview_exports);var import_core_events=require("storybook/internal/core-events"),import_PreviewRender=__toESM(require("@storybook/svelte/internal/PreviewRender.svelte")),
|
|
1
|
+
"use strict";var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var entry_preview_exports={};__export(entry_preview_exports,{applyDecorators:()=>decorateStory,mount:()=>mount2,parameters:()=>parameters,render:()=>render,renderToCanvas:()=>renderToCanvas});module.exports=__toCommonJS(entry_preview_exports);var import_core_events=require("storybook/internal/core-events"),import_PreviewRender=__toESM(require("@storybook/svelte/internal/PreviewRender.svelte")),import_createReactiveProps=require("@storybook/svelte/internal/createReactiveProps"),import_preview_api=require("storybook/preview-api"),svelte=__toESM(require("svelte")),storyIdsToRemountFromResetArgsEvent=new Set;import_preview_api.addons.getChannel().on(import_core_events.RESET_STORY_ARGS,({storyId})=>{storyIdsToRemountFromResetArgsEvent.add(storyId)});var componentsByDomElement=new Map;function renderToCanvas({storyFn,title,name,showMain,showError,storyContext,forceRemount},canvasElement){function unmount2(canvasElementToUnmount){let{mountedComponent}=componentsByDomElement.get(canvasElementToUnmount)??{};mountedComponent&&(svelte.unmount(mountedComponent),componentsByDomElement.delete(canvasElementToUnmount))}let existingComponent=componentsByDomElement.get(canvasElement),remount=forceRemount;if(storyIdsToRemountFromResetArgsEvent.has(storyContext.id)&&(remount=!0,storyIdsToRemountFromResetArgsEvent.delete(storyContext.id)),remount&&unmount2(canvasElement),!existingComponent||remount){let props=(0,import_createReactiveProps.createReactiveProps)({storyFn,storyContext,name,title,showError}),mountedComponent=svelte.mount(import_PreviewRender.default,{target:canvasElement,props});componentsByDomElement.set(canvasElement,{mountedComponent,props})}else Object.assign(existingComponent.props,{storyFn,storyContext,name,title,showError});return showMain(),()=>{unmount2(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}};var import_DecoratorHandler=__toESM(require("@storybook/svelte/internal/DecoratorHandler.svelte")),import_preview_api2=require("storybook/preview-api");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:import_DecoratorHandler.default,props:{...innerStory,decorator:preparedStory}}:{...preparedStory,argTypes:context.argTypes}}function decorateStory(storyFn,decorators){return decorators.reduce((decorated,decorator)=>context=>{let story,decoratedStory=decorator(update=>(story=decorated({...context,...(0,import_preview_api2.sanitizeStoryContextUpdate)(update)}),story),context);return story||(story=decorated(context)),decoratedStory===story?story:prepareStory(context,decoratedStory,story)},context=>prepareStory(context,storyFn(context)))}var mount2=context=>async(Component,options)=>(Component&&(context.originalStoryFn=()=>({Component,props:options&&"props"in options?options?.props:options})),await context.renderToCanvas(),context.canvas);var parameters={renderer:"svelte"};0&&(module.exports={applyDecorators,mount,parameters,render,renderToCanvas});
|
package/dist/entry-preview.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { decorateStory as applyDecorators, mount, parameters, render, renderToCanvas } from './chunk-
|
|
1
|
+
export { decorateStory as applyDecorators, mount, parameters, render, renderToCanvas } from './chunk-2IXN2SLZ.mjs';
|
|
2
2
|
import './chunk-CEH6MNVV.mjs';
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var index_exports={};__export(index_exports,{INTERNAL_DEFAULT_PROJECT_ANNOTATIONS:()=>INTERNAL_DEFAULT_PROJECT_ANNOTATIONS,composeStories:()=>composeStories,composeStory:()=>composeStory,setProjectAnnotations:()=>setProjectAnnotations});module.exports=__toCommonJS(index_exports);globalThis.STORYBOOK_ENV="svelte";var import_PreviewRender2=__toESM(require("@storybook/svelte/internal/PreviewRender.svelte")),
|
|
1
|
+
"use strict";var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var index_exports={};__export(index_exports,{INTERNAL_DEFAULT_PROJECT_ANNOTATIONS:()=>INTERNAL_DEFAULT_PROJECT_ANNOTATIONS,composeStories:()=>composeStories,composeStory:()=>composeStory,setProjectAnnotations:()=>setProjectAnnotations});module.exports=__toCommonJS(index_exports);globalThis.STORYBOOK_ENV="svelte";var import_PreviewRender2=__toESM(require("@storybook/svelte/internal/PreviewRender.svelte")),import_createReactiveProps2=require("@storybook/svelte/internal/createReactiveProps"),import_preview_api3=require("storybook/preview-api");var entry_preview_exports={};__export(entry_preview_exports,{applyDecorators:()=>decorateStory,mount:()=>mount2,parameters:()=>parameters,render:()=>render,renderToCanvas:()=>renderToCanvas});var import_core_events=require("storybook/internal/core-events"),import_PreviewRender=__toESM(require("@storybook/svelte/internal/PreviewRender.svelte")),import_createReactiveProps=require("@storybook/svelte/internal/createReactiveProps"),import_preview_api=require("storybook/preview-api"),svelte=__toESM(require("svelte")),storyIdsToRemountFromResetArgsEvent=new Set;import_preview_api.addons.getChannel().on(import_core_events.RESET_STORY_ARGS,({storyId})=>{storyIdsToRemountFromResetArgsEvent.add(storyId)});var componentsByDomElement=new Map;function renderToCanvas({storyFn,title,name,showMain,showError,storyContext,forceRemount},canvasElement){function unmount2(canvasElementToUnmount){let{mountedComponent}=componentsByDomElement.get(canvasElementToUnmount)??{};mountedComponent&&(svelte.unmount(mountedComponent),componentsByDomElement.delete(canvasElementToUnmount))}let existingComponent=componentsByDomElement.get(canvasElement),remount=forceRemount;if(storyIdsToRemountFromResetArgsEvent.has(storyContext.id)&&(remount=!0,storyIdsToRemountFromResetArgsEvent.delete(storyContext.id)),remount&&unmount2(canvasElement),!existingComponent||remount){let props=(0,import_createReactiveProps.createReactiveProps)({storyFn,storyContext,name,title,showError}),mountedComponent=svelte.mount(import_PreviewRender.default,{target:canvasElement,props});componentsByDomElement.set(canvasElement,{mountedComponent,props})}else Object.assign(existingComponent.props,{storyFn,storyContext,name,title,showError});return showMain(),()=>{unmount2(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}};var import_DecoratorHandler=__toESM(require("@storybook/svelte/internal/DecoratorHandler.svelte")),import_preview_api2=require("storybook/preview-api");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:import_DecoratorHandler.default,props:{...innerStory,decorator:preparedStory}}:{...preparedStory,argTypes:context.argTypes}}function decorateStory(storyFn,decorators){return decorators.reduce((decorated,decorator)=>context=>{let story,decoratedStory=decorator(update=>(story=decorated({...context,...(0,import_preview_api2.sanitizeStoryContextUpdate)(update)}),story),context);return story||(story=decorated(context)),decoratedStory===story?story:prepareStory(context,decoratedStory,story)},context=>prepareStory(context,storyFn(context)))}var mount2=context=>async(Component,options)=>(Component&&(context.originalStoryFn=()=>({Component,props:options&&"props"in options?options?.props:options})),await context.renderToCanvas(),context.canvas);var parameters={renderer:"svelte"};function setProjectAnnotations(projectAnnotations){return(0,import_preview_api3.setDefaultProjectAnnotations)(INTERNAL_DEFAULT_PROJECT_ANNOTATIONS),(0,import_preview_api3.setProjectAnnotations)(projectAnnotations)}var INTERNAL_DEFAULT_PROJECT_ANNOTATIONS={...entry_preview_exports,renderToCanvas:(renderContext,canvasElement)=>{if(renderContext.storyContext.testingLibraryRender==null)return renderToCanvas(renderContext,canvasElement);let{storyFn,storyContext:{testingLibraryRender:render2}}=renderContext,{Component,props}=storyFn(),{unmount:unmount2}=render2(Component,{props,target:canvasElement});return unmount2}};function composeStory(story,componentAnnotations,projectAnnotations,exportsName){let composedStory=(0,import_preview_api3.composeStory)(story,componentAnnotations,projectAnnotations,globalThis.globalProjectAnnotations??INTERNAL_DEFAULT_PROJECT_ANNOTATIONS,exportsName),props=(0,import_createReactiveProps2.createReactiveProps)({storyFn:composedStory,storyContext:{...composedStory},name:composedStory.storyName,title:composedStory.id,showError:()=>{}}),renderable={Component:import_PreviewRender2.default,props};return Object.assign(renderable,composedStory),renderable}function composeStories(csfExports,projectAnnotations){return(0,import_preview_api3.composeStories)(csfExports,projectAnnotations,composeStory)}0&&(module.exports={INTERNAL_DEFAULT_PROJECT_ANNOTATIONS,composeStories,composeStory,setProjectAnnotations});
|
package/dist/index.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { entry_preview_exports, renderToCanvas
|
|
1
|
+
import { entry_preview_exports, renderToCanvas } from './chunk-2IXN2SLZ.mjs';
|
|
2
2
|
import './chunk-CEH6MNVV.mjs';
|
|
3
3
|
import PreviewRender from '@storybook/svelte/internal/PreviewRender.svelte';
|
|
4
|
-
import {
|
|
4
|
+
import { createReactiveProps } from '@storybook/svelte/internal/createReactiveProps';
|
|
5
5
|
import { setDefaultProjectAnnotations, setProjectAnnotations as setProjectAnnotations$1, composeStory as composeStory$1, composeStories as composeStories$1 } from 'storybook/preview-api';
|
|
6
6
|
|
|
7
|
-
globalThis.STORYBOOK_ENV="svelte";function setProjectAnnotations(projectAnnotations){return setDefaultProjectAnnotations(INTERNAL_DEFAULT_PROJECT_ANNOTATIONS),setProjectAnnotations$1(projectAnnotations)}var INTERNAL_DEFAULT_PROJECT_ANNOTATIONS={...entry_preview_exports,renderToCanvas:(renderContext,canvasElement)=>{if(renderContext.storyContext.testingLibraryRender==null)return renderToCanvas(renderContext,canvasElement);let{storyFn,storyContext:{testingLibraryRender:render}}=renderContext,{Component,props}=storyFn(),{unmount}=render(Component,{props,target:canvasElement});return unmount}};function composeStory(story,componentAnnotations,projectAnnotations,exportsName){let composedStory=composeStory$1(story,componentAnnotations,projectAnnotations,globalThis.globalProjectAnnotations??INTERNAL_DEFAULT_PROJECT_ANNOTATIONS,exportsName),props={storyFn:composedStory,storyContext:{...composedStory},name:composedStory.storyName,title:composedStory.id,showError:()=>{}}
|
|
7
|
+
globalThis.STORYBOOK_ENV="svelte";function setProjectAnnotations(projectAnnotations){return setDefaultProjectAnnotations(INTERNAL_DEFAULT_PROJECT_ANNOTATIONS),setProjectAnnotations$1(projectAnnotations)}var INTERNAL_DEFAULT_PROJECT_ANNOTATIONS={...entry_preview_exports,renderToCanvas:(renderContext,canvasElement)=>{if(renderContext.storyContext.testingLibraryRender==null)return renderToCanvas(renderContext,canvasElement);let{storyFn,storyContext:{testingLibraryRender:render}}=renderContext,{Component,props}=storyFn(),{unmount}=render(Component,{props,target:canvasElement});return unmount}};function composeStory(story,componentAnnotations,projectAnnotations,exportsName){let composedStory=composeStory$1(story,componentAnnotations,projectAnnotations,globalThis.globalProjectAnnotations??INTERNAL_DEFAULT_PROJECT_ANNOTATIONS,exportsName),props=createReactiveProps({storyFn:composedStory,storyContext:{...composedStory},name:composedStory.storyName,title:composedStory.id,showError:()=>{}}),renderable={Component:PreviewRender,props};return Object.assign(renderable,composedStory),renderable}function composeStories(csfExports,projectAnnotations){return composeStories$1(csfExports,projectAnnotations,composeStory)}
|
|
8
8
|
|
|
9
9
|
export { INTERNAL_DEFAULT_PROJECT_ANNOTATIONS, composeStories, composeStory, setProjectAnnotations };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@storybook/svelte",
|
|
3
|
-
"version": "9.0.0-
|
|
3
|
+
"version": "9.0.0-beta.0",
|
|
4
4
|
"description": "Storybook Svelte renderer",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"storybook"
|
|
@@ -35,9 +35,9 @@
|
|
|
35
35
|
"./dist/entry-preview-docs.mjs": "./dist/entry-preview-docs.mjs",
|
|
36
36
|
"./package.json": "./package.json",
|
|
37
37
|
"./internal/PreviewRender.svelte": "./dist/components/PreviewRender.svelte",
|
|
38
|
-
"./internal/
|
|
38
|
+
"./internal/DecoratorHandler.svelte": "./dist/components/DecoratorHandler.svelte",
|
|
39
39
|
"./internal/AddStorybookIdDecorator.svelte": "./dist/components/AddStorybookIdDecorator.svelte",
|
|
40
|
-
"./internal/
|
|
40
|
+
"./internal/createReactiveProps": "./dist/createReactiveProps.svelte.js"
|
|
41
41
|
},
|
|
42
42
|
"main": "dist/index.js",
|
|
43
43
|
"module": "dist/index.mjs",
|
|
@@ -55,7 +55,6 @@
|
|
|
55
55
|
"prep": "jiti ../../../scripts/prepare/bundle.ts"
|
|
56
56
|
},
|
|
57
57
|
"dependencies": {
|
|
58
|
-
"@storybook/csf": "0.1.12",
|
|
59
58
|
"@storybook/global": "^5.0.0",
|
|
60
59
|
"sveltedoc-parser": "^4.2.1",
|
|
61
60
|
"ts-dedent": "^2.0.0",
|
|
@@ -65,17 +64,17 @@
|
|
|
65
64
|
"@sveltejs/vite-plugin-svelte": "^5.0.3",
|
|
66
65
|
"@testing-library/svelte": "^5.2.4",
|
|
67
66
|
"expect-type": "^1.1.0",
|
|
68
|
-
"svelte": "^5.
|
|
67
|
+
"svelte": "^5.20.5",
|
|
69
68
|
"svelte-check": "^4.1.4",
|
|
70
69
|
"typescript": "^5.7.3",
|
|
71
|
-
"vite": "^6.
|
|
70
|
+
"vite": "^6.2.5"
|
|
72
71
|
},
|
|
73
72
|
"peerDependencies": {
|
|
74
|
-
"storybook": "^9.0.0-
|
|
75
|
-
"svelte": "^
|
|
73
|
+
"storybook": "^9.0.0-beta.0",
|
|
74
|
+
"svelte": "^5.0.0"
|
|
76
75
|
},
|
|
77
76
|
"engines": {
|
|
78
|
-
"node": ">=
|
|
77
|
+
"node": ">=20.0.0"
|
|
79
78
|
},
|
|
80
79
|
"publishConfig": {
|
|
81
80
|
"access": "public"
|
|
@@ -2,35 +2,26 @@
|
|
|
2
2
|
import './button.css';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* @typedef {Object} Props
|
|
6
|
+
* @property {boolean} [primary] Is this the principal call to action on the page?
|
|
7
|
+
* @property {string} [backgroundColor] What background color to use
|
|
8
|
+
* @property {'small' | 'medium' | 'large'} [size] How large should the button be?
|
|
9
|
+
* @property {string} label Button contents
|
|
10
|
+
* @property {() => void} [onclick] The onclick event handler
|
|
6
11
|
*/
|
|
7
|
-
export let primary = false;
|
|
8
12
|
|
|
9
|
-
/**
|
|
10
|
-
|
|
11
|
-
*/
|
|
12
|
-
export let backgroundColor = undefined;
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* @type {'small' | 'medium' | 'large'} How large should the button be?
|
|
16
|
-
*/
|
|
17
|
-
export let size = 'medium';
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* @type {string} Button contents
|
|
21
|
-
*/
|
|
22
|
-
export let label;
|
|
23
|
-
|
|
24
|
-
$: mode = primary ? 'storybook-button--primary' : 'storybook-button--secondary';
|
|
13
|
+
/** @type {Props} */
|
|
14
|
+
const { primary = false, backgroundColor, size = 'medium', label, ...props } = $props();
|
|
25
15
|
|
|
26
|
-
|
|
16
|
+
let mode = $derived(primary ? 'storybook-button--primary' : 'storybook-button--secondary');
|
|
17
|
+
let style = $derived(backgroundColor ? `background-color: ${backgroundColor}` : '');
|
|
27
18
|
</script>
|
|
28
19
|
|
|
29
20
|
<button
|
|
30
21
|
type="button"
|
|
31
22
|
class={['storybook-button', `storybook-button--${size}`, mode].join(' ')}
|
|
32
23
|
{style}
|
|
33
|
-
|
|
24
|
+
{...props}
|
|
34
25
|
>
|
|
35
26
|
{label}
|
|
36
27
|
</button>
|
|
@@ -2,21 +2,16 @@
|
|
|
2
2
|
import './header.css';
|
|
3
3
|
import Button from './Button.svelte';
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* @typedef {Object} Props
|
|
7
|
+
* @property {{name: string}} [user] The user object
|
|
8
|
+
* @property {() => void} [onLogin] The login event handler
|
|
9
|
+
* @property {() => void} [onLogout] The logout event handler
|
|
10
|
+
* @property {() => void} [onCreateAccount] The account creation event handler
|
|
11
|
+
*/
|
|
6
12
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const dispatch = createEventDispatcher();
|
|
10
|
-
|
|
11
|
-
function onLogin(event) {
|
|
12
|
-
dispatch('login', event);
|
|
13
|
-
}
|
|
14
|
-
function onLogout(event) {
|
|
15
|
-
dispatch('logout', event);
|
|
16
|
-
}
|
|
17
|
-
function onCreateAccount(event) {
|
|
18
|
-
dispatch('createAccount', event);
|
|
19
|
-
}
|
|
13
|
+
/** @type {Props} */
|
|
14
|
+
const { user, onLogin, onLogout, onCreateAccount } = $props();
|
|
20
15
|
</script>
|
|
21
16
|
|
|
22
17
|
<header>
|
|
@@ -42,10 +37,10 @@
|
|
|
42
37
|
<span class="welcome">
|
|
43
38
|
Welcome, <b>{user.name}</b>!
|
|
44
39
|
</span>
|
|
45
|
-
<Button size="small"
|
|
40
|
+
<Button size="small" onclick={onLogout} label="Log out" />
|
|
46
41
|
{:else}
|
|
47
|
-
<Button size="small"
|
|
48
|
-
<Button primary size="small"
|
|
42
|
+
<Button size="small" onclick={onLogin} label="Log in" />
|
|
43
|
+
<Button primary size="small" onclick={onCreateAccount} label="Sign up" />
|
|
49
44
|
{/if}
|
|
50
45
|
</div>
|
|
51
46
|
</div>
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
import './page.css';
|
|
3
3
|
import Header from './Header.svelte';
|
|
4
4
|
|
|
5
|
-
let user = null;
|
|
5
|
+
let user = $state(null);
|
|
6
6
|
</script>
|
|
7
7
|
|
|
8
8
|
<article>
|
|
9
9
|
<Header
|
|
10
10
|
{user}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
onLogin={() => (user = { name: 'Jane Doe' })}
|
|
12
|
+
onLogout={() => (user = null)}
|
|
13
|
+
onCreateAccount={() => (user = { name: 'Jane Doe' })}
|
|
14
14
|
/>
|
|
15
15
|
|
|
16
16
|
<section class="storybook-page">
|
|
@@ -11,19 +11,20 @@
|
|
|
11
11
|
/** Button contents */
|
|
12
12
|
label: string;
|
|
13
13
|
/** The onclick event handler */
|
|
14
|
-
|
|
14
|
+
onclick?: () => void;
|
|
15
15
|
}
|
|
16
|
+
|
|
17
|
+
const { primary = false, backgroundColor, size = 'medium', label, ...props }: Props = $props();
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
let mode = $derived(primary ? 'storybook-button--primary' : 'storybook-button--secondary');
|
|
20
|
+
let style = $derived(backgroundColor ? `background-color: ${backgroundColor}` : '');
|
|
18
21
|
</script>
|
|
19
22
|
|
|
20
23
|
<button
|
|
21
24
|
type="button"
|
|
22
|
-
class={['storybook-button', `storybook-button--${size}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
style:background-color={backgroundColor}
|
|
26
|
-
onclick={onClick}
|
|
25
|
+
class={['storybook-button', `storybook-button--${size}`, mode].join(' ')}
|
|
26
|
+
{style}
|
|
27
|
+
{...props}
|
|
27
28
|
>
|
|
28
29
|
{label}
|
|
29
30
|
</button>
|
|
@@ -35,10 +35,10 @@
|
|
|
35
35
|
<span class="welcome">
|
|
36
36
|
Welcome, <b>{user.name}</b>!
|
|
37
37
|
</span>
|
|
38
|
-
<Button size="small"
|
|
38
|
+
<Button size="small" onclick={onLogout} label="Log out" />
|
|
39
39
|
{:else}
|
|
40
|
-
<Button size="small"
|
|
41
|
-
<Button primary size="small"
|
|
40
|
+
<Button size="small" onclick={onLogin} label="Log in" />
|
|
41
|
+
<Button primary size="small" onclick={onCreateAccount} label="Sign up" />
|
|
42
42
|
{/if}
|
|
43
43
|
</div>
|
|
44
44
|
</div>
|
|
@@ -7,14 +7,14 @@ import {
|
|
|
7
7
|
import { addons } from 'storybook/preview-api';
|
|
8
8
|
import { expect, userEvent, waitFor, within } from 'storybook/test';
|
|
9
9
|
|
|
10
|
-
import
|
|
10
|
+
import Button from './Button.svelte';
|
|
11
11
|
|
|
12
12
|
export default {
|
|
13
|
-
component:
|
|
13
|
+
component: Button,
|
|
14
14
|
tags: ['!vitest'],
|
|
15
15
|
};
|
|
16
16
|
|
|
17
|
-
export const
|
|
17
|
+
export const UpdatingArgs = {
|
|
18
18
|
play: async ({ canvasElement, id, step }) => {
|
|
19
19
|
const canvas = await within(canvasElement);
|
|
20
20
|
const channel = addons.getChannel();
|
|
@@ -25,14 +25,16 @@ export const RemountOnResetStoryArgs = {
|
|
|
25
25
|
await new Promise((resolve) => {
|
|
26
26
|
channel.once(STORY_RENDERED, resolve);
|
|
27
27
|
});
|
|
28
|
+
await expect(await canvas.getByRole('button')).toHaveTextContent('You clicked: 0');
|
|
28
29
|
});
|
|
29
|
-
const button = await canvas.getByRole('button');
|
|
30
|
-
await expect(button).toHaveTextContent('You clicked: 0');
|
|
31
30
|
|
|
32
|
-
await
|
|
31
|
+
const button = await canvas.getByRole('button');
|
|
32
|
+
await step('Change state', async () => {
|
|
33
|
+
await userEvent.click(button);
|
|
33
34
|
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
await waitFor(async () => {
|
|
36
|
+
await expect(button).toHaveTextContent('You clicked: 1');
|
|
37
|
+
});
|
|
36
38
|
});
|
|
37
39
|
|
|
38
40
|
await step("Update story args with { text: 'Changed' }", async () => {
|
|
@@ -40,15 +42,24 @@ export const RemountOnResetStoryArgs = {
|
|
|
40
42
|
await new Promise((resolve) => {
|
|
41
43
|
channel.once(STORY_RENDERED, resolve);
|
|
42
44
|
});
|
|
45
|
+
await expect(button).toHaveTextContent('Changed: 1');
|
|
43
46
|
});
|
|
44
|
-
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export const RemountOnResetStoryArgs = {
|
|
51
|
+
play: async (playContext) => {
|
|
52
|
+
const { canvas, id, step } = playContext;
|
|
53
|
+
await UpdatingArgs.play(playContext);
|
|
54
|
+
|
|
55
|
+
const channel = addons.getChannel();
|
|
45
56
|
|
|
46
57
|
// expect that all state and args are reset after RESET_STORY_ARGS because Svelte needs to remount the component
|
|
47
58
|
// most other renderers would have 'You clicked: 1' here because they don't remount the component
|
|
48
59
|
// if this doesn't fully remount it would be 'undefined: 1' because undefined args are used as is in Svelte, and the state is kept
|
|
49
60
|
await step('Reset story args', () => channel.emit(RESET_STORY_ARGS, { storyId: id }));
|
|
50
61
|
await waitFor(async () =>
|
|
51
|
-
expect(await
|
|
62
|
+
expect(await canvas.getByRole('button')).toHaveTextContent('You clicked: 0')
|
|
52
63
|
);
|
|
53
64
|
},
|
|
54
65
|
};
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
import
|
|
4
|
-
import
|
|
1
|
+
import { expect, fn } from 'storybook/test';
|
|
2
|
+
|
|
3
|
+
import BorderDecoratorBlue from './BorderDecoratorBlue.svelte';
|
|
4
|
+
import BorderDecoratorProps from './BorderDecoratorProps.svelte';
|
|
5
|
+
import BorderDecoratorRed from './BorderDecoratorRed.svelte';
|
|
6
|
+
import Button from './Button.svelte';
|
|
5
7
|
|
|
6
8
|
export default {
|
|
7
|
-
component:
|
|
9
|
+
component: Button,
|
|
8
10
|
decorators: [() => BorderDecoratorRed],
|
|
9
|
-
args: {
|
|
10
|
-
primary: true,
|
|
11
|
-
},
|
|
12
11
|
tags: ['autodocs'],
|
|
13
12
|
};
|
|
14
13
|
|
|
@@ -41,3 +40,17 @@ export const WithArgsBasedBorder = {
|
|
|
41
40
|
...WithArgsBasedBorderUnset,
|
|
42
41
|
args: { color: 'lightblue' },
|
|
43
42
|
};
|
|
43
|
+
|
|
44
|
+
const decoratorCalled = fn();
|
|
45
|
+
|
|
46
|
+
export const DecoratorsRunOnce = {
|
|
47
|
+
decorators: [
|
|
48
|
+
(Story) => {
|
|
49
|
+
decoratorCalled();
|
|
50
|
+
return Story();
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
play: async () => {
|
|
54
|
+
expect(decoratorCalled).toHaveBeenCalledTimes(1);
|
|
55
|
+
},
|
|
56
|
+
};
|
package/dist/chunk-XMMNDRKT.mjs
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { __export } from './chunk-CEH6MNVV.mjs';
|
|
2
|
-
import { RESET_STORY_ARGS } from 'storybook/internal/core-events';
|
|
3
|
-
import PreviewRender from '@storybook/svelte/internal/PreviewRender.svelte';
|
|
4
|
-
import { createSvelte5Props } from '@storybook/svelte/internal/createSvelte5Props';
|
|
5
|
-
import { addons, sanitizeStoryContextUpdate } from 'storybook/preview-api';
|
|
6
|
-
import * as svelte from 'svelte';
|
|
7
|
-
import { VERSION } from 'svelte/compiler';
|
|
8
|
-
import SlotDecorator from '@storybook/svelte/internal/SlotDecorator.svelte';
|
|
9
|
-
|
|
10
|
-
var entry_preview_exports={};__export(entry_preview_exports,{applyDecorators:()=>decorateStory,mount:()=>mount2,parameters:()=>parameters,render:()=>render,renderToCanvas:()=>renderToCanvas});var IS_SVELTE_V4=Number(VERSION[0])<=4;function renderToCanvas(renderContext,canvasElement){return IS_SVELTE_V4?renderToCanvasV4(renderContext,canvasElement):renderToCanvasV5(renderContext,canvasElement)}var storyIdsToRemountFromResetArgsEvent=new Set;addons.getChannel().on(RESET_STORY_ARGS,({storyId})=>{storyIdsToRemountFromResetArgsEvent.add(storyId);});var componentsByDomElementV4=new Map;function renderToCanvasV4({storyFn,title,name,showMain,showError,storyContext,forceRemount},canvasElement){function unmount2(canvasElementToUnmount){componentsByDomElementV4.has(canvasElementToUnmount)&&(componentsByDomElementV4.get(canvasElementToUnmount).$destroy(),componentsByDomElementV4.delete(canvasElementToUnmount),canvasElementToUnmount.innerHTML="");}let existingComponent=componentsByDomElementV4.get(canvasElement),remount=forceRemount;if(storyIdsToRemountFromResetArgsEvent.has(storyContext.id)&&(remount=!0,storyIdsToRemountFromResetArgsEvent.delete(storyContext.id)),remount&&unmount2(canvasElement),!existingComponent||remount){let mountedComponent=new PreviewRender({target:canvasElement,props:{storyFn,storyContext,name,title,showError}});componentsByDomElementV4.set(canvasElement,mountedComponent);}else existingComponent.$set({storyFn,storyContext,name,title,showError});return showMain(),()=>{unmount2(canvasElement);}}var componentsByDomElementV5=new Map;function renderToCanvasV5({storyFn,title,name,showMain,showError,storyContext,forceRemount},canvasElement){function unmount2(canvasElementToUnmount){let{mountedComponent}=componentsByDomElementV5.get(canvasElementToUnmount)??{};mountedComponent&&(svelte.unmount(mountedComponent),componentsByDomElementV5.delete(canvasElementToUnmount));}let existingComponent=componentsByDomElementV5.get(canvasElement),remount=forceRemount;if(storyIdsToRemountFromResetArgsEvent.has(storyContext.id)&&(remount=!0,storyIdsToRemountFromResetArgsEvent.delete(storyContext.id)),remount&&unmount2(canvasElement),!existingComponent||remount){let props=createSvelte5Props({storyFn,storyContext,name,title,showError}),mountedComponent=svelte.mount(PreviewRender,{target:canvasElement,props});componentsByDomElementV5.set(canvasElement,{mountedComponent,props});}else Object.assign(existingComponent.props,{storyFn,storyContext,name,title,showError});return showMain(),()=>{unmount2(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}};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,argTypes:context.argTypes}}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 mount2=context=>async(Component,options)=>(Component&&(context.originalStoryFn=()=>({Component,props:options&&"props"in options?options?.props:options})),await context.renderToCanvas(),context.canvas);var parameters={renderer:"svelte"};
|
|
11
|
-
|
|
12
|
-
export { IS_SVELTE_V4, decorateStory, entry_preview_exports, mount2 as mount, parameters, render, renderToCanvas };
|