• Add comment directives that will enable transforming the story source code into the code snippet for the story.

    Relies on storysource addon

    Notable issues:

    • if a story is all object syntax, then it won't have a storySource at all. That's likely a limitation of source-loader.
    • If a story name is very long, story-loader's handling can get weird

    TODO: some notable naive approaches here. Could parse AST to get the default export, to automatically include assignments to stories, or to better parse story objects.

    TODO: Some of this might be suitable contribution to storysource, but the goals there often different, e.g. to show how to use a component whereas here we're showing how to build stories.

    TODO: ideas include-render, include-template, include-region

    All comments start with // story-code or with /* or /** style single line comments. So // story-code @end SomeComponent @include-default for example.

    Available commands:

    • @end: end the previous story's code block. Note, this is works across stories such that any story which does not specify its end which begins before this use will end at this point. Use named end's if you need specificity
      const SomeStory: ComponentStory<typeof Comp> = (args) => <Comp {...args} />;
      SomeStory.args = { prop: 1 };
      // story-code @end
    • @end SomeComponent: same as above, but only mark the end for the given component
      const SomeStory: ComponentStory<typeof Comp> = (args) => <Comp {...args} />;
      const OtherStory: ComponentStory<typeof Comp> = (args) => <Comp {...args} />;
      OtherStory.args = { prop: 1 };
      // story-code @end OtherStory
    • @include-default: include the default code export. Can occur in an @end line or on the line following a natural or designated end.
      const SomeStory: ComponentStory<typeof Comp> = (args) => <Comp {...args} />;
      SomeStory.args = { prop: 1 };
      // story-code @end @include-default
    • @include-start: include from the top of the file through to the default code export. Can occur in an @end line or on the line following a natural or designated end.
      const SomeStory: ComponentStory<typeof Comp> = (args) => <Comp {...args} />;
      // story-code @include-start
    • @skip: Skip the current line
      const somethingToIgnore = 1; // story-code @skip
      
    • @skip-next: Skip the next line
      // story-code @skip-next
      const somethingToIgnore = 1;
    • @skip-start and @skip-end: Skip a block of text, e.g.
      // story-code @skip-start
      const hideThis = 1;
      const andThis = 2;
      // story-code @skip-end
      There's nothing enforcing that you have to have a @skip-end if you have a @skip-start

    Parameters

    Returns ((snippet: string, storyContext: StoryContextStorySource) => string)