@storybook/react 6.5.0-alpha.47 → 6.5.0-alpha.48

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 (141) hide show
  1. package/dist/cjs/client/docs/config.js +29 -0
  2. package/dist/cjs/client/docs/extractArgTypes.js +54 -0
  3. package/dist/cjs/client/docs/extractProps.js +77 -0
  4. package/dist/cjs/client/docs/jsxDecorator.js +277 -0
  5. package/dist/cjs/client/docs/lib/captions.js +18 -0
  6. package/dist/cjs/client/docs/lib/componentTypes.js +24 -0
  7. package/dist/cjs/client/docs/lib/defaultValues/createDefaultValue.js +81 -0
  8. package/dist/cjs/client/docs/lib/defaultValues/createFromRawDefaultProp.js +225 -0
  9. package/dist/cjs/client/docs/lib/defaultValues/generateArray.js +29 -0
  10. package/dist/cjs/client/docs/lib/defaultValues/generateObject.js +29 -0
  11. package/dist/cjs/client/docs/lib/defaultValues/index.js +37 -0
  12. package/dist/cjs/client/docs/lib/defaultValues/prettyIdentifier.js +34 -0
  13. package/dist/cjs/client/docs/lib/generateCode.js +89 -0
  14. package/dist/cjs/client/docs/lib/index.js +63 -0
  15. package/dist/cjs/client/docs/lib/inspection/acornParser.js +254 -0
  16. package/dist/cjs/client/docs/lib/inspection/index.js +37 -0
  17. package/dist/cjs/client/docs/lib/inspection/inspectValue.js +26 -0
  18. package/dist/cjs/client/docs/lib/inspection/types.js +19 -0
  19. package/dist/cjs/client/docs/lib/isHtmlTag.js +18 -0
  20. package/dist/cjs/client/docs/propTypes/createType.js +469 -0
  21. package/dist/cjs/client/docs/propTypes/generateFuncSignature.js +78 -0
  22. package/dist/cjs/client/docs/propTypes/handleProp.js +54 -0
  23. package/dist/cjs/client/docs/propTypes/rawDefaultPropResolvers.js +47 -0
  24. package/dist/cjs/client/docs/propTypes/sortProps.js +37 -0
  25. package/dist/cjs/client/docs/react-argtypes.stories.js +129 -0
  26. package/dist/cjs/client/docs/typeScript/handleProp.js +38 -0
  27. package/dist/cjs/server/{framework-preset-react-docgen.js → framework-preset-react-docs.js} +19 -9
  28. package/dist/cjs/server/preset.js +1 -1
  29. package/dist/esm/client/docs/config.js +16 -0
  30. package/dist/esm/client/docs/extractArgTypes.js +39 -0
  31. package/dist/esm/client/docs/extractProps.js +54 -0
  32. package/dist/esm/client/docs/jsxDecorator.js +218 -0
  33. package/dist/esm/client/docs/lib/captions.js +6 -0
  34. package/dist/esm/client/docs/lib/componentTypes.js +9 -0
  35. package/dist/esm/client/docs/lib/defaultValues/createDefaultValue.js +67 -0
  36. package/dist/esm/client/docs/lib/defaultValues/createFromRawDefaultProp.js +191 -0
  37. package/dist/esm/client/docs/lib/defaultValues/generateArray.js +19 -0
  38. package/dist/esm/client/docs/lib/defaultValues/generateObject.js +19 -0
  39. package/dist/esm/client/docs/lib/defaultValues/index.js +2 -0
  40. package/dist/esm/client/docs/lib/defaultValues/prettyIdentifier.js +22 -0
  41. package/dist/esm/client/docs/lib/generateCode.js +68 -0
  42. package/dist/esm/client/docs/lib/index.js +4 -0
  43. package/dist/esm/client/docs/lib/inspection/acornParser.js +213 -0
  44. package/dist/esm/client/docs/lib/inspection/index.js +2 -0
  45. package/dist/esm/client/docs/lib/inspection/inspectValue.js +16 -0
  46. package/dist/esm/client/docs/lib/inspection/types.js +12 -0
  47. package/dist/esm/client/docs/lib/isHtmlTag.js +6 -0
  48. package/dist/esm/client/docs/propTypes/createType.js +449 -0
  49. package/dist/esm/client/docs/propTypes/generateFuncSignature.js +62 -0
  50. package/dist/esm/client/docs/propTypes/handleProp.js +39 -0
  51. package/dist/esm/client/docs/propTypes/rawDefaultPropResolvers.js +32 -0
  52. package/dist/esm/client/docs/propTypes/sortProps.js +24 -0
  53. package/dist/esm/client/docs/react-argtypes.stories.js +97 -0
  54. package/dist/esm/client/docs/typeScript/handleProp.js +27 -0
  55. package/dist/esm/server/{framework-preset-react-docgen.js → framework-preset-react-docs.js} +13 -9
  56. package/dist/esm/server/preset.js +1 -1
  57. package/dist/modern/client/docs/config.js +14 -0
  58. package/dist/modern/client/docs/extractArgTypes.js +38 -0
  59. package/dist/modern/client/docs/extractProps.js +42 -0
  60. package/dist/modern/client/docs/jsxDecorator.js +177 -0
  61. package/dist/modern/client/docs/lib/captions.js +6 -0
  62. package/dist/modern/client/docs/lib/componentTypes.js +2 -0
  63. package/dist/modern/client/docs/lib/defaultValues/createDefaultValue.js +72 -0
  64. package/dist/modern/client/docs/lib/defaultValues/createFromRawDefaultProp.js +181 -0
  65. package/dist/modern/client/docs/lib/defaultValues/generateArray.js +21 -0
  66. package/dist/modern/client/docs/lib/defaultValues/generateObject.js +21 -0
  67. package/dist/modern/client/docs/lib/defaultValues/index.js +2 -0
  68. package/dist/modern/client/docs/lib/defaultValues/prettyIdentifier.js +24 -0
  69. package/dist/modern/client/docs/lib/generateCode.js +59 -0
  70. package/dist/modern/client/docs/lib/index.js +4 -0
  71. package/dist/modern/client/docs/lib/inspection/acornParser.js +211 -0
  72. package/dist/modern/client/docs/lib/inspection/index.js +2 -0
  73. package/dist/modern/client/docs/lib/inspection/inspectValue.js +15 -0
  74. package/dist/modern/client/docs/lib/inspection/types.js +12 -0
  75. package/dist/modern/client/docs/lib/isHtmlTag.js +4 -0
  76. package/dist/modern/client/docs/propTypes/createType.js +446 -0
  77. package/dist/modern/client/docs/propTypes/generateFuncSignature.js +57 -0
  78. package/dist/modern/client/docs/propTypes/handleProp.js +39 -0
  79. package/dist/modern/client/docs/propTypes/rawDefaultPropResolvers.js +31 -0
  80. package/dist/modern/client/docs/propTypes/sortProps.js +14 -0
  81. package/dist/modern/client/docs/react-argtypes.stories.js +54 -0
  82. package/dist/modern/client/docs/typeScript/handleProp.js +28 -0
  83. package/dist/modern/server/{framework-preset-react-docgen.js → framework-preset-react-docs.js} +13 -9
  84. package/dist/modern/server/preset.js +1 -1
  85. package/dist/ts3.4/client/docs/config.d.ts +13 -0
  86. package/dist/ts3.4/client/docs/extractArgTypes.d.ts +2 -0
  87. package/dist/ts3.4/client/docs/extractProps.d.ts +5 -0
  88. package/dist/ts3.4/client/docs/jsxDecorator.d.ts +23 -0
  89. package/dist/ts3.4/client/docs/lib/captions.d.ts +6 -0
  90. package/dist/ts3.4/client/docs/lib/componentTypes.d.ts +2 -0
  91. package/dist/ts3.4/client/docs/lib/defaultValues/createDefaultValue.d.ts +2 -0
  92. package/dist/ts3.4/client/docs/lib/defaultValues/createFromRawDefaultProp.d.ts +11 -0
  93. package/dist/ts3.4/client/docs/lib/defaultValues/generateArray.d.ts +3 -0
  94. package/dist/ts3.4/client/docs/lib/defaultValues/generateObject.d.ts +3 -0
  95. package/dist/ts3.4/client/docs/lib/defaultValues/index.d.ts +2 -0
  96. package/dist/ts3.4/client/docs/lib/defaultValues/prettyIdentifier.d.ts +4 -0
  97. package/dist/ts3.4/client/docs/lib/generateCode.d.ts +3 -0
  98. package/dist/ts3.4/client/docs/lib/index.d.ts +4 -0
  99. package/dist/ts3.4/client/docs/lib/inspection/acornParser.d.ts +7 -0
  100. package/dist/ts3.4/client/docs/lib/inspection/index.d.ts +2 -0
  101. package/dist/ts3.4/client/docs/lib/inspection/inspectValue.d.ts +2 -0
  102. package/dist/ts3.4/client/docs/lib/inspection/types.d.ts +50 -0
  103. package/dist/ts3.4/client/docs/lib/isHtmlTag.d.ts +1 -0
  104. package/dist/ts3.4/client/docs/propTypes/createType.d.ts +2 -0
  105. package/dist/ts3.4/client/docs/propTypes/generateFuncSignature.d.ts +4 -0
  106. package/dist/ts3.4/client/docs/propTypes/handleProp.d.ts +5 -0
  107. package/dist/ts3.4/client/docs/propTypes/rawDefaultPropResolvers.d.ts +1 -0
  108. package/dist/ts3.4/client/docs/propTypes/sortProps.d.ts +4 -0
  109. package/dist/ts3.4/client/docs/react-argtypes.stories.d.ts +1 -0
  110. package/dist/ts3.4/client/docs/typeScript/handleProp.d.ts +3 -0
  111. package/dist/ts3.4/server/framework-preset-react-docs.d.ts +6 -0
  112. package/dist/ts3.9/client/docs/config.d.ts +13 -0
  113. package/dist/ts3.9/client/docs/extractArgTypes.d.ts +2 -0
  114. package/dist/ts3.9/client/docs/extractProps.d.ts +5 -0
  115. package/dist/ts3.9/client/docs/jsxDecorator.d.ts +23 -0
  116. package/dist/ts3.9/client/docs/lib/captions.d.ts +6 -0
  117. package/dist/ts3.9/client/docs/lib/componentTypes.d.ts +2 -0
  118. package/dist/ts3.9/client/docs/lib/defaultValues/createDefaultValue.d.ts +2 -0
  119. package/dist/ts3.9/client/docs/lib/defaultValues/createFromRawDefaultProp.d.ts +11 -0
  120. package/dist/ts3.9/client/docs/lib/defaultValues/generateArray.d.ts +3 -0
  121. package/dist/ts3.9/client/docs/lib/defaultValues/generateObject.d.ts +3 -0
  122. package/dist/ts3.9/client/docs/lib/defaultValues/index.d.ts +2 -0
  123. package/dist/ts3.9/client/docs/lib/defaultValues/prettyIdentifier.d.ts +4 -0
  124. package/dist/ts3.9/client/docs/lib/generateCode.d.ts +3 -0
  125. package/dist/ts3.9/client/docs/lib/index.d.ts +4 -0
  126. package/dist/ts3.9/client/docs/lib/inspection/acornParser.d.ts +7 -0
  127. package/dist/ts3.9/client/docs/lib/inspection/index.d.ts +2 -0
  128. package/dist/ts3.9/client/docs/lib/inspection/inspectValue.d.ts +2 -0
  129. package/dist/ts3.9/client/docs/lib/inspection/types.d.ts +50 -0
  130. package/dist/ts3.9/client/docs/lib/isHtmlTag.d.ts +1 -0
  131. package/dist/ts3.9/client/docs/propTypes/createType.d.ts +2 -0
  132. package/dist/ts3.9/client/docs/propTypes/generateFuncSignature.d.ts +4 -0
  133. package/dist/ts3.9/client/docs/propTypes/handleProp.d.ts +5 -0
  134. package/dist/ts3.9/client/docs/propTypes/rawDefaultPropResolvers.d.ts +1 -0
  135. package/dist/ts3.9/client/docs/propTypes/sortProps.d.ts +4 -0
  136. package/dist/ts3.9/client/docs/react-argtypes.stories.d.ts +1 -0
  137. package/dist/ts3.9/client/docs/typeScript/handleProp.d.ts +3 -0
  138. package/dist/ts3.9/server/framework-preset-react-docs.d.ts +6 -0
  139. package/package.json +21 -11
  140. package/dist/ts3.4/server/framework-preset-react-docgen.d.ts +0 -5
  141. package/dist/ts3.9/server/framework-preset-react-docgen.d.ts +0 -5
@@ -0,0 +1,97 @@
1
+ import "core-js/modules/es.object.assign.js";
2
+ import "core-js/modules/es.array.map.js";
3
+ import "core-js/modules/es.object.entries.js";
4
+ import "core-js/modules/es.object.to-string.js";
5
+ import "core-js/modules/es.symbol.js";
6
+ import "core-js/modules/es.symbol.description.js";
7
+ import "core-js/modules/es.symbol.iterator.js";
8
+ import "core-js/modules/es.array.iterator.js";
9
+ import "core-js/modules/es.string.iterator.js";
10
+ import "core-js/modules/web.dom-collections.iterator.js";
11
+ import "core-js/modules/es.array.slice.js";
12
+ import "core-js/modules/es.function.name.js";
13
+ import "core-js/modules/es.array.from.js";
14
+ import "core-js/modules/es.regexp.exec.js";
15
+
16
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
17
+
18
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
19
+
20
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
21
+
22
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
23
+
24
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
25
+
26
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
27
+
28
+ import React, { useState } from 'react';
29
+ import mapValues from 'lodash/mapValues';
30
+ import { ArgsTable } from '@storybook/components';
31
+ import { inferControls } from '@storybook/store';
32
+ import { storiesOf } from '..';
33
+ import { extractArgTypes } from './extractArgTypes'; // FIXME
34
+
35
+ var argsTableProps = function argsTableProps(component) {
36
+ var argTypes = extractArgTypes(component);
37
+ var parameters = {
38
+ __isArgsStory: true
39
+ };
40
+ var rows = inferControls({
41
+ argTypes: argTypes,
42
+ parameters: parameters
43
+ });
44
+ return {
45
+ rows: rows
46
+ };
47
+ };
48
+
49
+ var ArgsStory = function ArgsStory(_ref) {
50
+ var component = _ref.component;
51
+
52
+ var _argsTableProps = argsTableProps(component),
53
+ rows = _argsTableProps.rows;
54
+
55
+ var initialArgs = mapValues(rows, function (argType) {
56
+ return argType.defaultValue;
57
+ });
58
+
59
+ var _useState = useState(initialArgs),
60
+ _useState2 = _slicedToArray(_useState, 2),
61
+ args = _useState2[0],
62
+ setArgs = _useState2[1];
63
+
64
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("p", null, /*#__PURE__*/React.createElement("b", null, "NOTE:"), " these stories are to help visualise the snapshot tests in", ' ', /*#__PURE__*/React.createElement("code", null, "./react-properties.test.js"), "."), /*#__PURE__*/React.createElement(ArgsTable, {
65
+ rows: rows,
66
+ args: args,
67
+ updateArgs: function updateArgs(val) {
68
+ return setArgs(Object.assign({}, args, val));
69
+ }
70
+ }), /*#__PURE__*/React.createElement("table", null, /*#__PURE__*/React.createElement("thead", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("th", null, "arg name"), /*#__PURE__*/React.createElement("th", null, "argType"))), /*#__PURE__*/React.createElement("tbody", null, Object.entries(args).map(function (_ref2) {
71
+ var _ref3 = _slicedToArray(_ref2, 2),
72
+ key = _ref3[0],
73
+ val = _ref3[1];
74
+
75
+ return /*#__PURE__*/React.createElement("tr", {
76
+ key: key
77
+ }, /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement("code", null, key)), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement("pre", null, JSON.stringify(rows[key]))));
78
+ }))));
79
+ };
80
+
81
+ var issuesFixtures = ['js-class-component', 'js-function-component', 'js-function-component-inline-defaults', 'js-function-component-inline-defaults-no-propTypes', 'ts-function-component', 'ts-function-component-inline-defaults', '9399-js-proptypes-shape', '8663-js-styled-components', '9626-js-default-values', '9668-js-proptypes-no-jsdoc', '8143-ts-react-fc-generics', '8143-ts-imported-types', '8279-js-styled-docgen', '8140-js-prop-types-oneof', '9023-js-hoc', '8740-ts-multi-props', '9556-ts-react-default-exports', '9592-ts-styled-props', '9591-ts-import-types', '9721-ts-deprecated-jsdoc', '9827-ts-default-values', '9586-js-react-memo', '9575-ts-camel-case', '9493-ts-display-name', '8894-9511-ts-forward-ref', '9465-ts-type-props', '8428-js-static-prop-types', '9764-ts-extend-props', '9922-ts-component-props'];
82
+ var issuesStories = storiesOf('ArgTypes/Issues', module);
83
+ issuesFixtures.forEach(function (fixture) {
84
+ // eslint-disable-next-line import/no-dynamic-require, global-require
85
+ var _require = require("./__testfixtures__/".concat(fixture, "/input")),
86
+ component = _require.component;
87
+
88
+ issuesStories.add(fixture, function () {
89
+ return /*#__PURE__*/React.createElement(ArgsStory, {
90
+ component: component
91
+ });
92
+ }, {
93
+ chromatic: {
94
+ disable: true
95
+ }
96
+ });
97
+ });
@@ -0,0 +1,27 @@
1
+ import "core-js/modules/es.array.map.js";
2
+ import { createDefaultValue, createDefaultValueFromRawDefaultProp } from '../lib/defaultValues';
3
+ export function enhanceTypeScriptProp(extractedProp, rawDefaultProp) {
4
+ var propDef = extractedProp.propDef;
5
+ var defaultValue = extractedProp.docgenInfo.defaultValue;
6
+
7
+ if (defaultValue != null && defaultValue.value != null) {
8
+ var newDefaultValue = createDefaultValue(defaultValue.value);
9
+
10
+ if (newDefaultValue != null) {
11
+ propDef.defaultValue = newDefaultValue;
12
+ }
13
+ } else if (rawDefaultProp != null) {
14
+ var _newDefaultValue = createDefaultValueFromRawDefaultProp(rawDefaultProp, propDef);
15
+
16
+ if (_newDefaultValue != null) {
17
+ propDef.defaultValue = _newDefaultValue;
18
+ }
19
+ }
20
+
21
+ return propDef;
22
+ }
23
+ export function enhanceTypeScriptProps(extractedProps) {
24
+ return extractedProps.map(function (prop) {
25
+ return enhanceTypeScriptProp(prop);
26
+ });
27
+ }
@@ -5,11 +5,12 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
5
5
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
6
 
7
7
  import "core-js/modules/es.promise.js";
8
+ import { findDistEsm } from '@storybook/core-common';
8
9
  import ReactDocgenTypescriptPlugin from '@storybook/react-docgen-typescript-plugin';
9
- export async function babel(config, {
10
- presets: presets
11
- }) {
12
- var typescriptOptions = await presets.apply('typescript', {});
10
+ import { hasDocsOrControls } from '@storybook/docs-tools';
11
+ export async function babel(config, options) {
12
+ if (!hasDocsOrControls(options)) return config;
13
+ var typescriptOptions = await options.presets.apply('typescript', {});
13
14
  var reactDocgen = typescriptOptions.reactDocgen;
14
15
 
15
16
  if (typeof reactDocgen !== 'string') {
@@ -25,10 +26,9 @@ export async function babel(config, {
25
26
  }]
26
27
  });
27
28
  }
28
- export async function webpackFinal(config, {
29
- presets: presets
30
- }) {
31
- var typescriptOptions = await presets.apply('typescript', {});
29
+ export async function webpackFinal(config, options) {
30
+ if (!hasDocsOrControls(options)) return config;
31
+ var typescriptOptions = await options.presets.apply('typescript', {});
32
32
  var reactDocgen = typescriptOptions.reactDocgen,
33
33
  reactDocgenTypescriptOptions = typescriptOptions.reactDocgenTypescriptOptions;
34
34
 
@@ -42,4 +42,8 @@ export async function webpackFinal(config, {
42
42
  savePropValueAsString: true
43
43
  }))]
44
44
  });
45
- }
45
+ }
46
+ export var config = function (entry = [], options) {
47
+ if (!hasDocsOrControls(options)) return entry;
48
+ return [...entry, findDistEsm(__dirname, 'client/docs/config')];
49
+ };
@@ -2,4 +2,4 @@ import { findDistEsm } from '@storybook/core-common';
2
2
  export var config = function (entries = []) {
3
3
  return [...entries, findDistEsm(__dirname, 'client/preview/config')];
4
4
  };
5
- export var addons = [require.resolve('./framework-preset-react'), require.resolve('./framework-preset-cra'), require.resolve('./framework-preset-react-docgen')];
5
+ export var addons = [require.resolve('./framework-preset-react'), require.resolve('./framework-preset-cra'), require.resolve('./framework-preset-react-docs')];
@@ -0,0 +1,14 @@
1
+ import { extractComponentDescription, enhanceArgTypes } from '@storybook/docs-tools';
2
+ import { extractArgTypes } from './extractArgTypes';
3
+ import { jsxDecorator } from './jsxDecorator';
4
+ export const parameters = {
5
+ docs: {
6
+ inlineStories: true,
7
+ // NOTE: that the result is a react element. Hooks support is provided by the outer code.
8
+ prepareForInline: storyFn => storyFn(),
9
+ extractArgTypes,
10
+ extractComponentDescription
11
+ }
12
+ };
13
+ export const decorators = [jsxDecorator];
14
+ export const argTypesEnhancers = [enhanceArgTypes];
@@ -0,0 +1,38 @@
1
+ import "core-js/modules/es.array.reduce.js";
2
+ import { extractProps } from './extractProps';
3
+ export const extractArgTypes = component => {
4
+ if (component) {
5
+ const {
6
+ rows
7
+ } = extractProps(component);
8
+
9
+ if (rows) {
10
+ return rows.reduce((acc, row) => {
11
+ const {
12
+ name,
13
+ description,
14
+ type,
15
+ sbType,
16
+ defaultValue: defaultSummary,
17
+ jsDocTags,
18
+ required
19
+ } = row;
20
+ acc[name] = {
21
+ name,
22
+ description,
23
+ type: Object.assign({
24
+ required
25
+ }, sbType),
26
+ table: {
27
+ type,
28
+ jsDocTags,
29
+ defaultValue: defaultSummary
30
+ }
31
+ };
32
+ return acc;
33
+ }, {});
34
+ }
35
+ }
36
+
37
+ return null;
38
+ };
@@ -0,0 +1,42 @@
1
+ import PropTypes from 'prop-types';
2
+ import { hasDocgen, extractComponentProps, TypeSystem } from '@storybook/docs-tools';
3
+ import { enhancePropTypesProps } from './propTypes/handleProp';
4
+ import { enhanceTypeScriptProps } from './typeScript/handleProp';
5
+ import { isMemo } from './lib'; // FIXME
6
+
7
+ const propTypesMap = new Map();
8
+ Object.keys(PropTypes).forEach(typeName => {
9
+ // @ts-ignore
10
+ const type = PropTypes[typeName];
11
+ propTypesMap.set(type, typeName);
12
+ propTypesMap.set(type.isRequired, typeName);
13
+ });
14
+
15
+ function getPropDefs(component, section) {
16
+ let processedComponent = component; // eslint-disable-next-line react/forbid-foreign-prop-types
17
+
18
+ if (!hasDocgen(component) && !component.propTypes && isMemo(component)) {
19
+ processedComponent = component.type;
20
+ }
21
+
22
+ const extractedProps = extractComponentProps(processedComponent, section);
23
+
24
+ if (extractedProps.length === 0) {
25
+ return [];
26
+ }
27
+
28
+ switch (extractedProps[0].typeSystem) {
29
+ case TypeSystem.JAVASCRIPT:
30
+ return enhancePropTypesProps(extractedProps, component);
31
+
32
+ case TypeSystem.TYPESCRIPT:
33
+ return enhanceTypeScriptProps(extractedProps);
34
+
35
+ default:
36
+ return extractedProps.map(x => x.propDef);
37
+ }
38
+ }
39
+
40
+ export const extractProps = component => ({
41
+ rows: getPropDefs(component, 'props')
42
+ });
@@ -0,0 +1,177 @@
1
+ const _excluded = ["mdxType", "originalType", "children"];
2
+
3
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
4
+
5
+ import React, { createElement } from 'react';
6
+ import reactElementToJSXString from 'react-element-to-jsx-string';
7
+ import dedent from 'ts-dedent';
8
+ import deprecate from 'util-deprecate';
9
+ import { addons, useEffect } from '@storybook/addons';
10
+ import { SourceType, SNIPPET_RENDERED, getDocgenSection } from '@storybook/docs-tools';
11
+ import { logger } from '@storybook/client-logger';
12
+ import { isMemo, isForwardRef } from './lib';
13
+
14
+ /** Run the user supplied onBeforeRender function if it exists */
15
+ const applyBeforeRender = (domString, options) => {
16
+ if (typeof options.onBeforeRender !== 'function') {
17
+ return domString;
18
+ }
19
+
20
+ const deprecatedOnBeforeRender = deprecate(options.onBeforeRender, dedent`
21
+ StoryFn.parameters.jsx.onBeforeRender was deprecated.
22
+ Prefer StoryFn.parameters.jsx.transformSource instead.
23
+ See https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#deprecated-onbeforerender for details.
24
+ `);
25
+ return deprecatedOnBeforeRender(domString);
26
+ };
27
+ /** Run the user supplied transformSource function if it exists */
28
+
29
+
30
+ const applyTransformSource = (domString, options, context) => {
31
+ if (typeof options.transformSource !== 'function') {
32
+ return domString;
33
+ }
34
+
35
+ return options.transformSource(domString, context);
36
+ };
37
+ /** Apply the users parameters and render the jsx for a story */
38
+
39
+
40
+ export const renderJsx = (code, options) => {
41
+ if (typeof code === 'undefined') {
42
+ logger.warn('Too many skip or undefined component');
43
+ return null;
44
+ }
45
+
46
+ let renderedJSX = code;
47
+ const Type = renderedJSX.type;
48
+
49
+ for (let i = 0; i < options.skip; i += 1) {
50
+ if (typeof renderedJSX === 'undefined') {
51
+ logger.warn('Cannot skip undefined element');
52
+ return null;
53
+ }
54
+
55
+ if (React.Children.count(renderedJSX) > 1) {
56
+ logger.warn('Trying to skip an array of elements');
57
+ return null;
58
+ }
59
+
60
+ if (typeof renderedJSX.props.children === 'undefined') {
61
+ logger.warn('Not enough children to skip elements.');
62
+
63
+ if (typeof renderedJSX.type === 'function' && renderedJSX.type.name === '') {
64
+ renderedJSX = /*#__PURE__*/React.createElement(Type, renderedJSX.props);
65
+ }
66
+ } else if (typeof renderedJSX.props.children === 'function') {
67
+ renderedJSX = renderedJSX.props.children();
68
+ } else {
69
+ renderedJSX = renderedJSX.props.children;
70
+ }
71
+ }
72
+
73
+ const displayNameDefaults = typeof options.displayName === 'string' ? {
74
+ showFunctions: true,
75
+ displayName: () => options.displayName
76
+ } : {
77
+ // To get exotic component names resolving properly
78
+ displayName: el => el.type.displayName || getDocgenSection(el.type, 'displayName') || (el.type.name !== '_default' ? el.type.name : null) || (typeof el.type === 'function' ? 'No Display Name' : null) || (isForwardRef(el.type) ? el.type.render.name : null) || (isMemo(el.type) ? el.type.type.name : null) || el.type
79
+ };
80
+ const filterDefaults = {
81
+ filterProps: (value, key) => value !== undefined
82
+ };
83
+ const opts = Object.assign({}, displayNameDefaults, filterDefaults, options);
84
+ const result = React.Children.map(code, c => {
85
+ // @ts-ignore FIXME: workaround react-element-to-jsx-string
86
+ const child = typeof c === 'number' ? c.toString() : c;
87
+ let string = applyBeforeRender(reactElementToJSXString(child, opts), options);
88
+
89
+ if (string.indexOf('&quot;') > -1) {
90
+ const matches = string.match(/\S+=\\"([^"]*)\\"/g);
91
+
92
+ if (matches) {
93
+ matches.forEach(match => {
94
+ string = string.replace(match, match.replace(/&quot;/g, "'"));
95
+ });
96
+ }
97
+ }
98
+
99
+ return string;
100
+ }).join('\n');
101
+ return result.replace(/function\s+noRefCheck\(\)\s+\{\}/, '() => {}');
102
+ };
103
+ const defaultOpts = {
104
+ skip: 0,
105
+ showFunctions: false,
106
+ enableBeautify: true,
107
+ showDefaultProps: false
108
+ };
109
+ export const skipJsxRender = context => {
110
+ var _context$parameters$d;
111
+
112
+ const sourceParams = context === null || context === void 0 ? void 0 : (_context$parameters$d = context.parameters.docs) === null || _context$parameters$d === void 0 ? void 0 : _context$parameters$d.source;
113
+ const isArgsStory = context === null || context === void 0 ? void 0 : context.parameters.__isArgsStory; // always render if the user forces it
114
+
115
+ if ((sourceParams === null || sourceParams === void 0 ? void 0 : sourceParams.type) === SourceType.DYNAMIC) {
116
+ return false;
117
+ } // never render if the user is forcing the block to render code, or
118
+ // if the user provides code, or if it's not an args story.
119
+
120
+
121
+ return !isArgsStory || (sourceParams === null || sourceParams === void 0 ? void 0 : sourceParams.code) || (sourceParams === null || sourceParams === void 0 ? void 0 : sourceParams.type) === SourceType.CODE;
122
+ };
123
+
124
+ const isMdx = node => {
125
+ var _node$type, _node$props;
126
+
127
+ return ((_node$type = node.type) === null || _node$type === void 0 ? void 0 : _node$type.displayName) === 'MDXCreateElement' && !!((_node$props = node.props) !== null && _node$props !== void 0 && _node$props.mdxType);
128
+ };
129
+
130
+ const mdxToJsx = node => {
131
+ if (!isMdx(node)) return node;
132
+
133
+ const _node$props2 = node.props,
134
+ {
135
+ originalType,
136
+ children
137
+ } = _node$props2,
138
+ rest = _objectWithoutPropertiesLoose(_node$props2, _excluded);
139
+
140
+ let jsxChildren = [];
141
+
142
+ if (children) {
143
+ const array = Array.isArray(children) ? children : [children];
144
+ jsxChildren = array.map(mdxToJsx);
145
+ }
146
+
147
+ return /*#__PURE__*/createElement(originalType, rest, ...jsxChildren);
148
+ };
149
+
150
+ export const jsxDecorator = (storyFn, context) => {
151
+ var _context$parameters$d2, _context$parameters$d3;
152
+
153
+ const channel = addons.getChannel();
154
+ const skip = skipJsxRender(context);
155
+ const story = storyFn();
156
+ let jsx = '';
157
+ useEffect(() => {
158
+ if (!skip) channel.emit(SNIPPET_RENDERED, (context || {}).id, jsx);
159
+ }); // We only need to render JSX if the source block is actually going to
160
+ // consume it. Otherwise it's just slowing us down.
161
+
162
+ if (skip) {
163
+ return story;
164
+ }
165
+
166
+ const options = Object.assign({}, defaultOpts, (context === null || context === void 0 ? void 0 : context.parameters.jsx) || {}); // Exclude decorators from source code snippet by default
167
+
168
+ const storyJsx = context !== null && context !== void 0 && (_context$parameters$d2 = context.parameters.docs) !== null && _context$parameters$d2 !== void 0 && (_context$parameters$d3 = _context$parameters$d2.source) !== null && _context$parameters$d3 !== void 0 && _context$parameters$d3.excludeDecorators ? context.originalStoryFn(context.args, context) : story;
169
+ const sourceJsx = mdxToJsx(storyJsx);
170
+ const rendered = renderJsx(sourceJsx, options);
171
+
172
+ if (rendered) {
173
+ jsx = applyTransformSource(rendered, options, context);
174
+ }
175
+
176
+ return story;
177
+ };
@@ -0,0 +1,6 @@
1
+ export const CUSTOM_CAPTION = 'custom';
2
+ export const OBJECT_CAPTION = 'object';
3
+ export const ARRAY_CAPTION = 'array';
4
+ export const CLASS_CAPTION = 'class';
5
+ export const FUNCTION_CAPTION = 'func';
6
+ export const ELEMENT_CAPTION = 'element';
@@ -0,0 +1,2 @@
1
+ export const isMemo = component => component.$$typeof === Symbol.for('react.memo');
2
+ export const isForwardRef = component => component.$$typeof === Symbol.for('react.forward_ref');
@@ -0,0 +1,72 @@
1
+ import { createSummaryValue, isTooLongForDefaultValueSummary } from '@storybook/docs-tools';
2
+ import { FUNCTION_CAPTION, ELEMENT_CAPTION } from '../captions';
3
+ import { InspectionType, inspectValue } from '../inspection';
4
+ import { isHtmlTag } from '../isHtmlTag';
5
+ import { generateCode } from '../generateCode';
6
+ import { generateObject } from './generateObject';
7
+ import { generateArray } from './generateArray';
8
+ import { getPrettyIdentifier } from './prettyIdentifier';
9
+
10
+ function generateFunc({
11
+ inferredType,
12
+ ast
13
+ }) {
14
+ const {
15
+ identifier
16
+ } = inferredType;
17
+
18
+ if (identifier != null) {
19
+ return createSummaryValue(getPrettyIdentifier(inferredType), generateCode(ast));
20
+ }
21
+
22
+ const prettyCaption = generateCode(ast, true);
23
+ return !isTooLongForDefaultValueSummary(prettyCaption) ? createSummaryValue(prettyCaption) : createSummaryValue(FUNCTION_CAPTION, generateCode(ast));
24
+ } // All elements are JSX elements.
25
+ // JSX elements are not supported by escodegen.
26
+
27
+
28
+ function generateElement(defaultValue, inspectionResult) {
29
+ const {
30
+ inferredType
31
+ } = inspectionResult;
32
+ const {
33
+ identifier
34
+ } = inferredType;
35
+
36
+ if (identifier != null) {
37
+ if (!isHtmlTag(identifier)) {
38
+ const prettyIdentifier = getPrettyIdentifier(inferredType);
39
+ return createSummaryValue(prettyIdentifier, defaultValue);
40
+ }
41
+ }
42
+
43
+ return !isTooLongForDefaultValueSummary(defaultValue) ? createSummaryValue(defaultValue) : createSummaryValue(ELEMENT_CAPTION, defaultValue);
44
+ }
45
+
46
+ export function createDefaultValue(defaultValue) {
47
+ try {
48
+ const inspectionResult = inspectValue(defaultValue);
49
+
50
+ switch (inspectionResult.inferredType.type) {
51
+ case InspectionType.OBJECT:
52
+ return generateObject(inspectionResult);
53
+
54
+ case InspectionType.FUNCTION:
55
+ return generateFunc(inspectionResult);
56
+
57
+ case InspectionType.ELEMENT:
58
+ return generateElement(defaultValue, inspectionResult);
59
+
60
+ case InspectionType.ARRAY:
61
+ return generateArray(inspectionResult);
62
+
63
+ default:
64
+ return null;
65
+ }
66
+ } catch (e) {
67
+ // eslint-disable-next-line no-console
68
+ console.error(e);
69
+ }
70
+
71
+ return null;
72
+ }