@storybook/addon-docs 7.0.0-alpha.4 → 7.0.0-alpha.41

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.
Files changed (109) hide show
  1. package/README.md +12 -75
  2. package/angular/index.js +1 -1
  3. package/dist/cjs/DocsRenderer.js +54 -0
  4. package/dist/cjs/blocks.js +18 -0
  5. package/dist/cjs/index.js +13 -1
  6. package/dist/cjs/preset.js +35 -18
  7. package/dist/cjs/preview.js +6 -2
  8. package/dist/esm/DocsRenderer.js +35 -0
  9. package/dist/esm/blocks.js +1 -0
  10. package/dist/esm/index.js +2 -1
  11. package/dist/esm/preset.js +31 -11
  12. package/dist/esm/preview.js +6 -2
  13. package/dist/types/DocsRenderer.d.ts +8 -0
  14. package/dist/types/blocks.d.ts +1 -0
  15. package/dist/types/index.d.ts +1 -0
  16. package/dist/types/preset.d.ts +8 -2
  17. package/dist/types/preview.d.ts +1 -6
  18. package/jest-transform-mdx.js +4 -3
  19. package/package.json +25 -32
  20. package/web-components/README.md +1 -0
  21. package/LICENSE +0 -21
  22. package/blocks.d.ts +0 -2
  23. package/blocks.js +0 -14
  24. package/dist/cjs/blocks/Anchor.js +0 -23
  25. package/dist/cjs/blocks/ArgsTable.js +0 -329
  26. package/dist/cjs/blocks/Canvas.js +0 -109
  27. package/dist/cjs/blocks/Description.js +0 -126
  28. package/dist/cjs/blocks/DocsContainer.js +0 -127
  29. package/dist/cjs/blocks/DocsContext.js +0 -25
  30. package/dist/cjs/blocks/DocsPage.js +0 -30
  31. package/dist/cjs/blocks/DocsStory.js +0 -68
  32. package/dist/cjs/blocks/Heading.js +0 -31
  33. package/dist/cjs/blocks/Meta.js +0 -50
  34. package/dist/cjs/blocks/Preview.js +0 -23
  35. package/dist/cjs/blocks/Primary.js +0 -39
  36. package/dist/cjs/blocks/Props.js +0 -29
  37. package/dist/cjs/blocks/Source.js +0 -179
  38. package/dist/cjs/blocks/SourceContainer.js +0 -67
  39. package/dist/cjs/blocks/Stories.js +0 -51
  40. package/dist/cjs/blocks/Story.js +0 -143
  41. package/dist/cjs/blocks/Subheading.js +0 -31
  42. package/dist/cjs/blocks/Subtitle.js +0 -39
  43. package/dist/cjs/blocks/Title.js +0 -44
  44. package/dist/cjs/blocks/Wrapper.js +0 -20
  45. package/dist/cjs/blocks/enhanceSource.js +0 -92
  46. package/dist/cjs/blocks/index.js +0 -366
  47. package/dist/cjs/blocks/mdx.js +0 -234
  48. package/dist/cjs/blocks/types.js +0 -10
  49. package/dist/cjs/blocks/useStory.js +0 -37
  50. package/dist/cjs/blocks/utils.js +0 -40
  51. package/dist/cjs/manager.js +0 -20
  52. package/dist/esm/blocks/Anchor.js +0 -8
  53. package/dist/esm/blocks/ArgsTable.js +0 -292
  54. package/dist/esm/blocks/Canvas.js +0 -83
  55. package/dist/esm/blocks/Description.js +0 -107
  56. package/dist/esm/blocks/DocsContainer.js +0 -98
  57. package/dist/esm/blocks/DocsContext.js +0 -16
  58. package/dist/esm/blocks/DocsPage.js +0 -11
  59. package/dist/esm/blocks/DocsStory.js +0 -46
  60. package/dist/esm/blocks/Heading.js +0 -17
  61. package/dist/esm/blocks/Meta.js +0 -31
  62. package/dist/esm/blocks/Preview.js +0 -9
  63. package/dist/esm/blocks/Primary.js +0 -23
  64. package/dist/esm/blocks/Props.js +0 -14
  65. package/dist/esm/blocks/Source.js +0 -144
  66. package/dist/esm/blocks/SourceContainer.js +0 -44
  67. package/dist/esm/blocks/Stories.js +0 -30
  68. package/dist/esm/blocks/Story.js +0 -114
  69. package/dist/esm/blocks/Subheading.js +0 -17
  70. package/dist/esm/blocks/Subtitle.js +0 -23
  71. package/dist/esm/blocks/Title.js +0 -24
  72. package/dist/esm/blocks/Wrapper.js +0 -8
  73. package/dist/esm/blocks/enhanceSource.js +0 -87
  74. package/dist/esm/blocks/index.js +0 -24
  75. package/dist/esm/blocks/mdx.js +0 -203
  76. package/dist/esm/blocks/types.js +0 -2
  77. package/dist/esm/blocks/useStory.js +0 -27
  78. package/dist/esm/blocks/utils.js +0 -29
  79. package/dist/esm/manager.js +0 -16
  80. package/dist/types/blocks/Anchor.d.ts +0 -6
  81. package/dist/types/blocks/ArgsTable.d.ts +0 -33
  82. package/dist/types/blocks/Canvas.d.ts +0 -9
  83. package/dist/types/blocks/Description.d.ts +0 -20
  84. package/dist/types/blocks/DocsContainer.d.ts +0 -7
  85. package/dist/types/blocks/DocsContext.d.ts +0 -5
  86. package/dist/types/blocks/DocsPage.d.ts +0 -2
  87. package/dist/types/blocks/DocsStory.d.ts +0 -3
  88. package/dist/types/blocks/Heading.d.ts +0 -6
  89. package/dist/types/blocks/Meta.d.ts +0 -9
  90. package/dist/types/blocks/Preview.d.ts +0 -3
  91. package/dist/types/blocks/Primary.d.ts +0 -6
  92. package/dist/types/blocks/Props.d.ts +0 -3
  93. package/dist/types/blocks/Source.d.ts +0 -38
  94. package/dist/types/blocks/SourceContainer.d.ts +0 -14
  95. package/dist/types/blocks/Stories.d.ts +0 -7
  96. package/dist/types/blocks/Story.d.ts +0 -28
  97. package/dist/types/blocks/Subheading.d.ts +0 -3
  98. package/dist/types/blocks/Subtitle.d.ts +0 -6
  99. package/dist/types/blocks/Title.d.ts +0 -8
  100. package/dist/types/blocks/Wrapper.d.ts +0 -2
  101. package/dist/types/blocks/enhanceSource.d.ts +0 -3
  102. package/dist/types/blocks/index.d.ts +0 -24
  103. package/dist/types/blocks/mdx.d.ts +0 -20
  104. package/dist/types/blocks/types.d.ts +0 -13
  105. package/dist/types/blocks/useStory.d.ts +0 -5
  106. package/dist/types/blocks/utils.d.ts +0 -3
  107. package/dist/types/manager.d.ts +0 -1
  108. package/manager.js +0 -1
  109. package/register.js +0 -6
@@ -1,31 +0,0 @@
1
- import React, { useContext } from 'react';
2
- import global from 'global';
3
- import { Anchor } from './Anchor';
4
- import { DocsContext } from './DocsContext';
5
- const {
6
- document
7
- } = global;
8
-
9
- function getFirstStoryId(docsContext) {
10
- const stories = docsContext.componentStories();
11
- return stories.length > 0 ? stories[0].id : null;
12
- }
13
-
14
- function renderAnchor() {
15
- const context = useContext(DocsContext);
16
- const anchorId = getFirstStoryId(context) || context.id;
17
- return /*#__PURE__*/React.createElement(Anchor, {
18
- storyId: anchorId
19
- });
20
- }
21
- /**
22
- * This component is used to declare component metadata in docs
23
- * and gets transformed into a default export underneath the hood.
24
- */
25
-
26
-
27
- export const Meta = () => {
28
- const params = new URL(document.location).searchParams;
29
- const isDocs = params.get('viewMode') === 'docs';
30
- return isDocs ? renderAnchor() : null;
31
- };
@@ -1,9 +0,0 @@
1
- import React from 'react';
2
- import deprecate from 'util-deprecate';
3
- import dedent from 'ts-dedent';
4
- import { Canvas } from './Canvas';
5
- export const Preview = deprecate(props => /*#__PURE__*/React.createElement(Canvas, props), dedent`
6
- Preview doc block has been renamed to Canvas.
7
-
8
- https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#previewprops-renamed
9
- `);
@@ -1,23 +0,0 @@
1
- function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
-
3
- import React, { useContext } from 'react';
4
- import { DocsContext } from './DocsContext';
5
- import { DocsStory } from './DocsStory';
6
- export const Primary = ({
7
- name
8
- }) => {
9
- const {
10
- componentStories: getComponentStories
11
- } = useContext(DocsContext);
12
- const componentStories = getComponentStories();
13
- let story;
14
-
15
- if (componentStories) {
16
- story = name ? componentStories.find(s => s.name === name) : componentStories[0];
17
- }
18
-
19
- return story ? /*#__PURE__*/React.createElement(DocsStory, _extends({}, story, {
20
- expanded: false,
21
- withToolbar: true
22
- })) : null;
23
- };
@@ -1,14 +0,0 @@
1
- import React from 'react';
2
- import deprecate from 'util-deprecate';
3
- import dedent from 'ts-dedent';
4
- import { ArgsTable } from './ArgsTable';
5
- import { CURRENT_SELECTION } from './types';
6
- export const Props = deprecate(props => /*#__PURE__*/React.createElement(ArgsTable, props), dedent`
7
- Props doc block has been renamed to ArgsTable.
8
-
9
- https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#previewprops-renamed
10
- `); // @ts-ignore
11
-
12
- Props.defaultProps = {
13
- of: CURRENT_SELECTION
14
- };
@@ -1,144 +0,0 @@
1
- import React, { useContext } from 'react';
2
- import { Source as PureSource, SourceError } from '@storybook/components';
3
- import { DocsContext } from './DocsContext';
4
- import { SourceContext } from './SourceContainer';
5
- import { CURRENT_SELECTION } from './types';
6
- import { SourceType } from '../shared';
7
- import { enhanceSource } from './enhanceSource';
8
- import { useStories } from './useStory';
9
- export let SourceState;
10
-
11
- (function (SourceState) {
12
- SourceState["OPEN"] = "open";
13
- SourceState["CLOSED"] = "closed";
14
- SourceState["NONE"] = "none";
15
- })(SourceState || (SourceState = {}));
16
-
17
- const getSourceState = stories => {
18
- const states = stories.map(story => story.parameters.docs?.source?.state).filter(Boolean);
19
- if (states.length === 0) return SourceState.CLOSED; // FIXME: handling multiple stories is a pain
20
-
21
- return states[0];
22
- };
23
-
24
- const getStorySource = (storyId, sourceContext) => {
25
- const {
26
- sources
27
- } = sourceContext; // source rendering is async so source is unavailable at the start of the render cycle,
28
- // so we fail gracefully here without warning
29
-
30
- return sources?.[storyId] || {
31
- code: '',
32
- format: false
33
- };
34
- };
35
-
36
- const getSnippet = (snippet, story) => {
37
- if (!story) {
38
- return snippet;
39
- }
40
-
41
- const {
42
- parameters
43
- } = story; // eslint-disable-next-line no-underscore-dangle
44
-
45
- const isArgsStory = parameters.__isArgsStory;
46
- const type = parameters.docs?.source?.type || SourceType.AUTO; // if user has hard-coded the snippet, that takes precedence
47
-
48
- const userCode = parameters.docs?.source?.code;
49
-
50
- if (userCode !== undefined) {
51
- return userCode;
52
- } // if user has explicitly set this as dynamic, use snippet
53
-
54
-
55
- if (type === SourceType.DYNAMIC) {
56
- return parameters.docs?.transformSource?.(snippet, story) || snippet;
57
- } // if this is an args story and there's a snippet
58
-
59
-
60
- if (type === SourceType.AUTO && snippet && isArgsStory) {
61
- return parameters.docs?.transformSource?.(snippet, story) || snippet;
62
- } // otherwise, use the source code logic
63
-
64
-
65
- const enhanced = enhanceSource(story) || parameters;
66
- return enhanced?.docs?.source?.code || '';
67
- };
68
-
69
- export const getSourceProps = (props, docsContext, sourceContext) => {
70
- const {
71
- id: currentId,
72
- storyById
73
- } = docsContext;
74
- const {
75
- parameters
76
- } = storyById(currentId);
77
- const codeProps = props;
78
- const singleProps = props;
79
- const multiProps = props;
80
- let source = codeProps.code; // prefer user-specified code
81
-
82
- let {
83
- format
84
- } = codeProps; // prefer user-specified code
85
-
86
- const targetIds = multiProps.ids || [singleProps.id || currentId];
87
- const storyIds = targetIds.map(targetId => targetId === CURRENT_SELECTION ? currentId : targetId);
88
- const stories = useStories(storyIds, docsContext);
89
-
90
- if (!stories.every(Boolean)) {
91
- return {
92
- error: SourceError.SOURCE_UNAVAILABLE,
93
- state: SourceState.NONE
94
- };
95
- }
96
-
97
- if (!source) {
98
- // just take the format from the first story, given how they're all concatinated together...
99
- // TODO: we should consider sending an event with all the sources separately, instead of concatenating them here
100
- ({
101
- format
102
- } = getStorySource(storyIds[0], sourceContext));
103
- source = storyIds.map((storyId, idx) => {
104
- const {
105
- code: storySource
106
- } = getStorySource(storyId, sourceContext);
107
- const storyObj = stories[idx];
108
- return getSnippet(storySource, storyObj);
109
- }).join('\n\n');
110
- }
111
-
112
- const state = getSourceState(stories);
113
- const {
114
- docs: docsParameters = {}
115
- } = parameters;
116
- const {
117
- source: sourceParameters = {}
118
- } = docsParameters;
119
- const {
120
- language: docsLanguage = null
121
- } = sourceParameters;
122
- return source ? {
123
- code: source,
124
- state,
125
- format,
126
- language: props.language || docsLanguage || 'jsx',
127
- dark: props.dark || false
128
- } : {
129
- error: SourceError.SOURCE_UNAVAILABLE,
130
- state
131
- };
132
- };
133
- /**
134
- * Story source doc block renders source code if provided,
135
- * or the source for a story if `storyId` is provided, or
136
- * the source for the current story if nothing is provided.
137
- */
138
-
139
- export const Source = props => {
140
- const sourceContext = useContext(SourceContext);
141
- const docsContext = useContext(DocsContext);
142
- const sourceProps = getSourceProps(props, docsContext, sourceContext);
143
- return /*#__PURE__*/React.createElement(PureSource, sourceProps);
144
- };
@@ -1,44 +0,0 @@
1
- import React, { createContext, useEffect, useState } from 'react';
2
- import deepEqual from 'fast-deep-equal';
3
- import { addons } from '@storybook/addons';
4
- import { SNIPPET_RENDERED } from '../shared';
5
- export const SourceContext = /*#__PURE__*/createContext({
6
- sources: {}
7
- });
8
- export const SourceContainer = ({
9
- children
10
- }) => {
11
- const [sources, setSources] = useState({});
12
- const channel = addons.getChannel();
13
- useEffect(() => {
14
- const handleSnippetRendered = (id, newSource, format = false) => {
15
- // optimization: if the source is the same, ignore the incoming event
16
- if (sources[id] && sources[id].code === newSource) {
17
- return;
18
- }
19
-
20
- setSources(current => {
21
- const newSources = Object.assign({}, current, {
22
- [id]: {
23
- code: newSource,
24
- format
25
- }
26
- });
27
-
28
- if (!deepEqual(current, newSources)) {
29
- return newSources;
30
- }
31
-
32
- return current;
33
- });
34
- };
35
-
36
- channel.on(SNIPPET_RENDERED, handleSnippetRendered);
37
- return () => channel.off(SNIPPET_RENDERED, handleSnippetRendered);
38
- }, []);
39
- return /*#__PURE__*/React.createElement(SourceContext.Provider, {
40
- value: {
41
- sources
42
- }
43
- }, children);
44
- };
@@ -1,30 +0,0 @@
1
- function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
-
3
- import React, { useContext } from 'react';
4
- import { DocsContext } from './DocsContext';
5
- import { DocsStory } from './DocsStory';
6
- import { Heading } from './Heading';
7
- export const Stories = ({
8
- title,
9
- includePrimary = false
10
- }) => {
11
- const {
12
- componentStories
13
- } = useContext(DocsContext);
14
- let stories = componentStories();
15
- stories = stories.filter(story => !story.parameters?.docs?.disable);
16
- if (!includePrimary) stories = stories.slice(1);
17
-
18
- if (!stories || stories.length === 0) {
19
- return null;
20
- }
21
-
22
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Heading, null, title), stories.map(story => story && /*#__PURE__*/React.createElement(DocsStory, _extends({
23
- key: story.id
24
- }, story, {
25
- expanded: true
26
- }))));
27
- };
28
- Stories.defaultProps = {
29
- title: 'Stories'
30
- };
@@ -1,114 +0,0 @@
1
- import React, { useContext, useRef, useEffect, useState } from 'react';
2
- import { MDXProvider } from '@mdx-js/react';
3
- import { resetComponents, Story as PureStory, StorySkeleton } from '@storybook/components';
4
- import { toId, storyNameFromExport } from '@storybook/csf';
5
- import { CURRENT_SELECTION } from './types';
6
- import { DocsContext } from './DocsContext';
7
- import { useStory } from './useStory';
8
- export const storyBlockIdFromId = storyId => `story--${storyId}`;
9
- export const lookupStoryId = (storyName, {
10
- mdxStoryNameToKey,
11
- mdxComponentAnnotations
12
- }) => toId(mdxComponentAnnotations.id || mdxComponentAnnotations.title, storyNameFromExport(mdxStoryNameToKey[storyName]));
13
- export const getStoryId = (props, context) => {
14
- const {
15
- id
16
- } = props;
17
- const {
18
- name
19
- } = props;
20
- const inputId = id === CURRENT_SELECTION ? context.id : id;
21
- return inputId || lookupStoryId(name, context);
22
- };
23
- export const getStoryProps = ({
24
- height,
25
- inline
26
- }, story) => {
27
- const {
28
- name: storyName,
29
- parameters
30
- } = story;
31
- const {
32
- docs = {}
33
- } = parameters;
34
-
35
- if (docs.disable) {
36
- return null;
37
- } // prefer block props, then story parameters defined by the framework-specific settings and optionally overridden by users
38
-
39
-
40
- const {
41
- inlineStories = false,
42
- iframeHeight = 100
43
- } = docs;
44
- const storyIsInline = typeof inline === 'boolean' ? inline : inlineStories;
45
- return Object.assign({
46
- inline: storyIsInline,
47
- id: story.id,
48
- height: height || (storyIsInline ? undefined : iframeHeight),
49
- title: storyName
50
- }, storyIsInline && {
51
- parameters
52
- });
53
- };
54
-
55
- const Story = props => {
56
- const context = useContext(DocsContext);
57
- const storyRef = useRef();
58
- const storyId = getStoryId(props, context);
59
- const story = useStory(storyId, context);
60
- const [showLoader, setShowLoader] = useState(true);
61
- useEffect(() => {
62
- let cleanup;
63
-
64
- if (story && storyRef.current) {
65
- const element = storyRef.current;
66
- cleanup = context.renderStoryToElement(story, element);
67
- setShowLoader(false);
68
- }
69
-
70
- return () => cleanup && cleanup();
71
- }, [story]);
72
-
73
- if (!story) {
74
- return /*#__PURE__*/React.createElement(StorySkeleton, null);
75
- }
76
-
77
- const storyProps = getStoryProps(props, story);
78
-
79
- if (!storyProps) {
80
- return null;
81
- }
82
-
83
- if (storyProps.inline) {
84
- // We do this so React doesn't complain when we replace the span in a secondary render
85
- const htmlContents = `<span></span>`; // FIXME: height/style/etc. lifted from PureStory
86
-
87
- const {
88
- height
89
- } = storyProps;
90
- return /*#__PURE__*/React.createElement("div", {
91
- id: storyBlockIdFromId(story.id)
92
- }, /*#__PURE__*/React.createElement(MDXProvider, {
93
- components: resetComponents
94
- }, height ? /*#__PURE__*/React.createElement("style", null, `#story--${story.id} { min-height: ${height}; transform: translateZ(0); overflow: auto }`) : null, showLoader && /*#__PURE__*/React.createElement(StorySkeleton, null), /*#__PURE__*/React.createElement("div", {
95
- ref: storyRef,
96
- "data-name": story.name,
97
- dangerouslySetInnerHTML: {
98
- __html: htmlContents
99
- }
100
- })));
101
- }
102
-
103
- return /*#__PURE__*/React.createElement("div", {
104
- id: storyBlockIdFromId(story.id)
105
- }, /*#__PURE__*/React.createElement(MDXProvider, {
106
- components: resetComponents
107
- }, /*#__PURE__*/React.createElement(PureStory, storyProps)));
108
- };
109
-
110
- Story.defaultProps = {
111
- children: null,
112
- name: null
113
- };
114
- export { Story };
@@ -1,17 +0,0 @@
1
- import React from 'react';
2
- import { H3 } from '@storybook/components';
3
- import { HeaderMdx } from './mdx';
4
- export const Subheading = ({
5
- children,
6
- disableAnchor
7
- }) => {
8
- if (disableAnchor || typeof children !== 'string') {
9
- return /*#__PURE__*/React.createElement(H3, null, children);
10
- }
11
-
12
- const tagID = children.toLowerCase().replace(/[^a-z0-9]/gi, '-');
13
- return /*#__PURE__*/React.createElement(HeaderMdx, {
14
- as: "h3",
15
- id: tagID
16
- }, children);
17
- };
@@ -1,23 +0,0 @@
1
- import React, { useContext } from 'react';
2
- import { Subtitle as PureSubtitle } from '@storybook/components';
3
- import { DocsContext } from './DocsContext';
4
- export const Subtitle = ({
5
- children
6
- }) => {
7
- const {
8
- id,
9
- storyById
10
- } = useContext(DocsContext);
11
- const {
12
- parameters
13
- } = storyById(id);
14
- let text = children;
15
-
16
- if (!text) {
17
- text = parameters?.componentSubtitle;
18
- }
19
-
20
- return text ? /*#__PURE__*/React.createElement(PureSubtitle, {
21
- className: "sbdocs-subtitle"
22
- }, text) : null;
23
- };
@@ -1,24 +0,0 @@
1
- import React, { useContext } from 'react';
2
- import { Title as PureTitle } from '@storybook/components';
3
- import { DocsContext } from './DocsContext';
4
- const STORY_KIND_PATH_SEPARATOR = /\s*\/\s*/;
5
- export const extractTitle = ({
6
- title
7
- }) => {
8
- const groups = title.trim().split(STORY_KIND_PATH_SEPARATOR);
9
- return groups && groups[groups.length - 1] || title;
10
- };
11
- export const Title = ({
12
- children
13
- }) => {
14
- const context = useContext(DocsContext);
15
- let text = children;
16
-
17
- if (!text) {
18
- text = extractTitle(context);
19
- }
20
-
21
- return text ? /*#__PURE__*/React.createElement(PureTitle, {
22
- className: "sbdocs-title"
23
- }, text) : null;
24
- };
@@ -1,8 +0,0 @@
1
- import React from 'react';
2
- export const Wrapper = ({
3
- children
4
- }) => /*#__PURE__*/React.createElement("div", {
5
- style: {
6
- fontFamily: 'sans-serif'
7
- }
8
- }, children);
@@ -1,87 +0,0 @@
1
- import { combineParameters } from '@storybook/store'; // ============================================================
2
- // START @storybook/source-loader/extract-source
3
- //
4
- // This code duplicated because tree-shaking isn't working.
5
- // It's not DRY, but source-loader is on the chopping block for
6
- // the next version of addon-docs, so it's not the worst sin.
7
- // ============================================================
8
-
9
- /**
10
- * given a location, extract the text from the full source
11
- */
12
- function extractSource(location, lines) {
13
- const {
14
- startBody: start,
15
- endBody: end
16
- } = location;
17
-
18
- if (start.line === end.line && lines[start.line - 1] !== undefined) {
19
- return lines[start.line - 1].substring(start.col, end.col);
20
- } // NOTE: storysource locations are 1-based not 0-based!
21
-
22
-
23
- const startLine = lines[start.line - 1];
24
- const endLine = lines[end.line - 1];
25
-
26
- if (startLine === undefined || endLine === undefined) {
27
- return null;
28
- }
29
-
30
- return [startLine.substring(start.col), ...lines.slice(start.line, end.line - 1), endLine.substring(0, end.col)].join('\n');
31
- } // ============================================================
32
- // END @storybook/source-loader/extract-source
33
- // ============================================================
34
-
35
-
36
- /**
37
- * Replaces full story id name like: story-kind--story-name -> story-name
38
- * @param id
39
- */
40
- const storyIdToSanitizedStoryName = id => id.replace(/^.*?--/, '');
41
-
42
- const extract = (targetId, {
43
- source,
44
- locationsMap
45
- }) => {
46
- if (!locationsMap) {
47
- return source;
48
- }
49
-
50
- const sanitizedStoryName = storyIdToSanitizedStoryName(targetId);
51
- const location = locationsMap[sanitizedStoryName];
52
-
53
- if (!location) {
54
- return source;
55
- }
56
-
57
- const lines = source.split('\n');
58
- return extractSource(location, lines);
59
- };
60
-
61
- export const enhanceSource = story => {
62
- const {
63
- id,
64
- parameters
65
- } = story;
66
- const {
67
- storySource,
68
- docs = {}
69
- } = parameters;
70
- const {
71
- transformSource
72
- } = docs; // no input or user has manually overridden the output
73
-
74
- if (!storySource?.source || docs.source?.code) {
75
- return null;
76
- }
77
-
78
- const input = extract(id, storySource);
79
- const code = transformSource ? transformSource(input, story) : input;
80
- return {
81
- docs: combineParameters(docs, {
82
- source: {
83
- code
84
- }
85
- })
86
- };
87
- };
@@ -1,24 +0,0 @@
1
- export { ColorPalette, ColorItem, IconGallery, IconItem, Typeset } from '@storybook/components';
2
- export * from './Anchor';
3
- export * from './ArgsTable';
4
- export * from './Canvas';
5
- export * from './Description';
6
- export * from './DocsContext';
7
- export * from './DocsPage';
8
- export * from './DocsContainer';
9
- export * from './DocsStory';
10
- export * from './Heading';
11
- export * from './Meta';
12
- export * from './Preview';
13
- export * from './Primary';
14
- export * from './Props';
15
- export * from './Source';
16
- export * from './SourceContainer';
17
- export * from './Stories';
18
- export * from './Story';
19
- export * from './Subheading';
20
- export * from './Subtitle';
21
- export * from './Title';
22
- export * from './Wrapper';
23
- export * from './types';
24
- export * from './mdx';