Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .external/addon-svelte-csf
Submodule addon-svelte-csf deleted from 0ff845
1 change: 0 additions & 1 deletion .external/addon-webpack5-compiler-babel
Submodule addon-webpack5-compiler-babel deleted from ae95d5
1 change: 0 additions & 1 deletion .external/addon-webpack5-compiler-swc
Submodule addon-webpack5-compiler-swc deleted from 3d64e2
1 change: 0 additions & 1 deletion .rollout-repos/addon-coverage
Submodule addon-coverage deleted from 0279cd
1 change: 0 additions & 1 deletion .rollout-repos/addon-designs
Submodule addon-designs deleted from 50824a
1 change: 0 additions & 1 deletion .rollout-repos/addon-kit
Submodule addon-kit deleted from e17a0f
1 change: 0 additions & 1 deletion .rollout-repos/addon-styling-webpack
Submodule addon-styling-webpack deleted from 7df09e
1 change: 0 additions & 1 deletion .rollout-repos/addon-visual-tests
Submodule addon-visual-tests deleted from be1829
1 change: 0 additions & 1 deletion .rollout-repos/addon-webpack5-compiler-babel
Submodule addon-webpack5-compiler-babel deleted from 5d9ade
1 change: 0 additions & 1 deletion .rollout-repos/addon-webpack5-compiler-swc
Submodule addon-webpack5-compiler-swc deleted from 5af316
1 change: 0 additions & 1 deletion .rollout-repos/icons
Submodule icons deleted from 70f13d
1 change: 0 additions & 1 deletion .rollout-repos/telejson
Submodule telejson deleted from 78136d
1 change: 0 additions & 1 deletion .rollout-repos/test-runner
Submodule test-runner deleted from c1be8e
1 change: 0 additions & 1 deletion .rollout-repos/vite-plugin-storybook-nextjs
Submodule vite-plugin-storybook-nextjs deleted from bbbb87
21 changes: 21 additions & 0 deletions code/core/src/csf/csf-factories.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,27 @@ test('addon parameters are inferred', () => {
});
});

test('addon parameters and globals are inferred in decorator context', () => {
const typedMeta = preview.type<{ globals: { theme: 'light' | 'dark' } }>().meta({
decorators: [
(Story, { parameters, globals }) => {
parameters.foo?.value satisfies string | undefined;
parameters.bar?.value satisfies string | undefined;
globals.theme satisfies 'light' | 'dark';

// @ts-expect-error can not treat string parameter values as numbers
parameters.foo!.value satisfies number;
// @ts-expect-error can not treat typed globals as other values
globals.theme satisfies 'sepia';

return Story();
},
],
});

typedMeta.story();
});

describe('test function', () => {
test('without overrides', async () => {
const MyStory = meta.story({ args: { label: 'foo' } });
Expand Down
21 changes: 12 additions & 9 deletions code/core/src/csf/story.ts
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,12 @@ export interface Renderer extends AddonTypes {
csf4: boolean;
}

type TypedParameters<TRenderer extends Renderer> = Parameters &
(TRenderer['csf4'] extends true ? CoreTypes['parameters'] & TRenderer['parameters'] : unknown);

type TypedGlobals<TRenderer extends Renderer> = Globals &
(TRenderer['csf4'] extends true ? CoreTypes['globals'] & TRenderer['globals'] : unknown);

/** @deprecated - Use `Renderer` */
export type AnyFramework = Renderer;

Expand All @@ -222,7 +228,7 @@ export interface StoryContextForEnhancers<
> extends StoryIdentifier {
component?: (TRenderer & { T: any })['component'];
subcomponents?: Record<string, (TRenderer & { T: any })['component']>;
parameters: Parameters;
parameters: TypedParameters<TRenderer>;
initialArgs: TArgs;
argTypes: StrictArgTypes<TArgs>;
}
Expand Down Expand Up @@ -267,6 +273,7 @@ export interface Canvas {}

export interface StoryContext<TRenderer extends Renderer = Renderer, TArgs = Args>
extends StoryContextForEnhancers<TRenderer, TArgs>, Required<StoryContextUpdate<TArgs>> {
globals: TypedGlobals<TRenderer>;
loaded: Record<string, any>;
abortSignal: AbortSignal;
canvasElement: TRenderer['canvasElement'];
Expand Down Expand Up @@ -361,8 +368,7 @@ export interface BaseAnnotations<TRenderer extends Renderer = Renderer, TArgs =
*
* @see [Parameters](https://storybook.js.org/docs/writing-stories/parameters)
*/
parameters?: Parameters &
(TRenderer['csf4'] extends true ? CoreTypes['parameters'] & TRenderer['parameters'] : unknown);
parameters?: TypedParameters<TRenderer>;

/**
* Dynamic data that are provided (and possibly updated by) Storybook and its addons.
Expand Down Expand Up @@ -441,8 +447,7 @@ export interface ProjectAnnotations<
*/
beforeAll?: BeforeAll;

initialGlobals?: Globals &
(TRenderer['csf4'] extends true ? CoreTypes['globals'] & TRenderer['globals'] : unknown);
initialGlobals?: TypedGlobals<TRenderer>;
globalTypes?: GlobalTypes;
applyDecorators?: DecoratorApplicator<TRenderer, Args>;
runStep?: StepRunner<TRenderer, TArgs>;
Expand Down Expand Up @@ -536,8 +541,7 @@ export interface ComponentAnnotations<
play?: PlayFunction<TRenderer, TArgs>;

/** Override the globals values for all stories in this component */
globals?: Globals &
(TRenderer['csf4'] extends true ? CoreTypes['globals'] & TRenderer['globals'] : unknown);
globals?: TypedGlobals<TRenderer>;
}

export type StoryAnnotations<
Expand All @@ -555,8 +559,7 @@ export type StoryAnnotations<
play?: PlayFunction<TRenderer, TArgs>;

/** Override the globals values for this story */
globals?: Globals &
(TRenderer['csf4'] extends true ? CoreTypes['globals'] & TRenderer['globals'] : unknown);
globals?: TypedGlobals<TRenderer>;

/** @deprecated */
story?: Omit<StoryAnnotations<TRenderer, TArgs>, 'story'>;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ export function composeStory<TRenderer extends Renderer = Renderer, TArgs extend
mount: null!,
});

context.parameters.__isPortableStory = true;
(context.parameters as Parameters).__isPortableStory = true;

context.context = context;

Expand Down
Loading