@storybook/cli 6.4.18 → 6.4.21

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 (62) hide show
  1. package/dist/cjs/automigrate/fixes/builder-vite.js +123 -0
  2. package/dist/cjs/automigrate/fixes/index.js +3 -1
  3. package/dist/cjs/extract.js +7 -2
  4. package/dist/cjs/frameworks/angular/Header.stories.ts +8 -3
  5. package/dist/cjs/frameworks/angular/Page.stories.ts +12 -10
  6. package/dist/cjs/frameworks/angular/header.component.ts +30 -19
  7. package/dist/cjs/frameworks/angular/page.component.ts +13 -27
  8. package/dist/cjs/frameworks/common/header.css +6 -0
  9. package/dist/cjs/frameworks/react/js/Header.jsx +6 -1
  10. package/dist/cjs/frameworks/react/js/Header.stories.jsx +7 -1
  11. package/dist/cjs/frameworks/react/js/Page.jsx +61 -63
  12. package/dist/cjs/frameworks/react/js/Page.stories.jsx +12 -9
  13. package/dist/cjs/frameworks/react/ts/Header.stories.tsx +7 -1
  14. package/dist/cjs/frameworks/react/ts/Header.tsx +11 -2
  15. package/dist/cjs/frameworks/react/ts/Page.stories.tsx +12 -9
  16. package/dist/cjs/frameworks/react/ts/Page.tsx +66 -60
  17. package/dist/cjs/frameworks/web-components/js/Page.js +2 -2
  18. package/dist/cjs/frameworks/web-components/ts/Page.ts +2 -2
  19. package/dist/cjs/generators/baseGenerator.js +28 -1
  20. package/dist/cjs/project_types.js +1 -0
  21. package/dist/cjs/upgrade.js +1 -1
  22. package/dist/cjs/versions.json +55 -55
  23. package/dist/esm/automigrate/fixes/builder-vite.js +123 -0
  24. package/dist/esm/automigrate/fixes/index.js +3 -1
  25. package/dist/esm/extract.js +7 -2
  26. package/dist/esm/frameworks/angular/Header.stories.ts +8 -3
  27. package/dist/esm/frameworks/angular/Page.stories.ts +12 -10
  28. package/dist/esm/frameworks/angular/header.component.ts +30 -19
  29. package/dist/esm/frameworks/angular/page.component.ts +13 -27
  30. package/dist/esm/frameworks/common/header.css +6 -0
  31. package/dist/esm/frameworks/react/js/Header.jsx +6 -1
  32. package/dist/esm/frameworks/react/js/Header.stories.jsx +7 -1
  33. package/dist/esm/frameworks/react/js/Page.jsx +61 -63
  34. package/dist/esm/frameworks/react/js/Page.stories.jsx +12 -9
  35. package/dist/esm/frameworks/react/ts/Header.stories.tsx +7 -1
  36. package/dist/esm/frameworks/react/ts/Header.tsx +11 -2
  37. package/dist/esm/frameworks/react/ts/Page.stories.tsx +12 -9
  38. package/dist/esm/frameworks/react/ts/Page.tsx +66 -60
  39. package/dist/esm/frameworks/web-components/js/Page.js +2 -2
  40. package/dist/esm/frameworks/web-components/ts/Page.ts +2 -2
  41. package/dist/esm/generators/baseGenerator.js +28 -1
  42. package/dist/esm/project_types.js +1 -0
  43. package/dist/esm/upgrade.js +1 -1
  44. package/dist/esm/versions.json +55 -55
  45. package/dist/modern/automigrate/fixes/builder-vite.js +123 -0
  46. package/dist/modern/automigrate/fixes/index.js +3 -1
  47. package/dist/modern/extract.js +7 -2
  48. package/dist/modern/frameworks/common/header.css +6 -0
  49. package/dist/modern/frameworks/react/js/Header.jsx +6 -1
  50. package/dist/modern/frameworks/react/js/Header.stories.jsx +7 -1
  51. package/dist/modern/frameworks/react/js/Page.jsx +61 -63
  52. package/dist/modern/frameworks/react/js/Page.stories.jsx +12 -9
  53. package/dist/modern/frameworks/web-components/js/Page.js +2 -2
  54. package/dist/modern/generators/baseGenerator.js +28 -1
  55. package/dist/modern/project_types.js +1 -0
  56. package/dist/modern/upgrade.js +1 -1
  57. package/dist/modern/versions.json +55 -55
  58. package/dist/ts3.4/automigrate/fixes/builder-vite.d.ts +19 -0
  59. package/dist/ts3.4/project_types.d.ts +2 -1
  60. package/dist/ts3.9/automigrate/fixes/builder-vite.d.ts +19 -0
  61. package/dist/ts3.9/project_types.d.ts +2 -1
  62. package/package.json +7 -7
@@ -3,65 +3,71 @@ import React from 'react';
3
3
  import { Header } from './Header';
4
4
  import './page.css';
5
5
 
6
- interface PageProps {
7
- user?: {};
8
- onLogin: () => void;
9
- onLogout: () => void;
10
- onCreateAccount: () => void;
11
- }
6
+ type User = {
7
+ name: string;
8
+ };
12
9
 
13
- export const Page = ({ user, onLogin, onLogout, onCreateAccount }: PageProps) => (
14
- <article>
15
- <Header user={user} onLogin={onLogin} onLogout={onLogout} onCreateAccount={onCreateAccount} />
10
+ export const Page: React.VFC = () => {
11
+ const [user, setUser] = React.useState<User>();
16
12
 
17
- <section>
18
- <h2>Pages in Storybook</h2>
19
- <p>
20
- We recommend building UIs with a{' '}
21
- <a href="https://componentdriven.org" target="_blank" rel="noopener noreferrer">
22
- <strong>component-driven</strong>
23
- </a>{' '}
24
- process starting with atomic components and ending with pages.
25
- </p>
26
- <p>
27
- Render pages with mock data. This makes it easy to build and review page states without
28
- needing to navigate to them in your app. Here are some handy patterns for managing page data
29
- in Storybook:
30
- </p>
31
- <ul>
32
- <li>
33
- Use a higher-level connected component. Storybook helps you compose such data from the
34
- "args" of child component stories
35
- </li>
36
- <li>
37
- Assemble data in the page component from your services. You can mock these services out
38
- using Storybook.
39
- </li>
40
- </ul>
41
- <p>
42
- Get a guided tutorial on component-driven development at{' '}
43
- <a href="https://storybook.js.org/tutorials/" target="_blank" rel="noopener noreferrer">
44
- Storybook tutorials
45
- </a>
46
- . Read more in the{' '}
47
- <a href="https://storybook.js.org/docs" target="_blank" rel="noopener noreferrer">
48
- docs
49
- </a>
50
- .
51
- </p>
52
- <div className="tip-wrapper">
53
- <span className="tip">Tip</span> Adjust the width of the canvas with the{' '}
54
- <svg width="10" height="10" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg">
55
- <g fill="none" fillRule="evenodd">
56
- <path
57
- d="M1.5 5.2h4.8c.3 0 .5.2.5.4v5.1c-.1.2-.3.3-.4.3H1.4a.5.5 0 01-.5-.4V5.7c0-.3.2-.5.5-.5zm0-2.1h6.9c.3 0 .5.2.5.4v7a.5.5 0 01-1 0V4H1.5a.5.5 0 010-1zm0-2.1h9c.3 0 .5.2.5.4v9.1a.5.5 0 01-1 0V2H1.5a.5.5 0 010-1zm4.3 5.2H2V10h3.8V6.2z"
58
- id="a"
59
- fill="#999"
60
- />
61
- </g>
62
- </svg>
63
- Viewports addon in the toolbar
64
- </div>
65
- </section>
66
- </article>
67
- );
13
+ return (
14
+ <article>
15
+ <Header
16
+ user={user}
17
+ onLogin={() => setUser({ name: 'Jane Doe' })}
18
+ onLogout={() => setUser(undefined)}
19
+ onCreateAccount={() => setUser({ name: 'Jane Doe' })}
20
+ />
21
+
22
+ <section>
23
+ <h2>Pages in Storybook</h2>
24
+ <p>
25
+ We recommend building UIs with a{' '}
26
+ <a href="https://componentdriven.org" target="_blank" rel="noopener noreferrer">
27
+ <strong>component-driven</strong>
28
+ </a>{' '}
29
+ process starting with atomic components and ending with pages.
30
+ </p>
31
+ <p>
32
+ Render pages with mock data. This makes it easy to build and review page states without
33
+ needing to navigate to them in your app. Here are some handy patterns for managing page
34
+ data in Storybook:
35
+ </p>
36
+ <ul>
37
+ <li>
38
+ Use a higher-level connected component. Storybook helps you compose such data from the
39
+ "args" of child component stories
40
+ </li>
41
+ <li>
42
+ Assemble data in the page component from your services. You can mock these services out
43
+ using Storybook.
44
+ </li>
45
+ </ul>
46
+ <p>
47
+ Get a guided tutorial on component-driven development at{' '}
48
+ <a href="https://storybook.js.org/tutorials/" target="_blank" rel="noopener noreferrer">
49
+ Storybook tutorials
50
+ </a>
51
+ . Read more in the{' '}
52
+ <a href="https://storybook.js.org/docs" target="_blank" rel="noopener noreferrer">
53
+ docs
54
+ </a>
55
+ .
56
+ </p>
57
+ <div className="tip-wrapper">
58
+ <span className="tip">Tip</span> Adjust the width of the canvas with the{' '}
59
+ <svg width="10" height="10" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg">
60
+ <g fill="none" fillRule="evenodd">
61
+ <path
62
+ d="M1.5 5.2h4.8c.3 0 .5.2.5.4v5.1c-.1.2-.3.3-.4.3H1.4a.5.5 0 01-.5-.4V5.7c0-.3.2-.5.5-.5zm0-2.1h6.9c.3 0 .5.2.5.4v7a.5.5 0 01-1 0V4H1.5a.5.5 0 010-1zm0-2.1h9c.3 0 .5.2.5.4v9.1a.5.5 0 01-1 0V2H1.5a.5.5 0 010-1zm4.3 5.2H2V10h3.8V6.2z"
63
+ id="a"
64
+ fill="#999"
65
+ />
66
+ </g>
67
+ </svg>
68
+ Viewports addon in the toolbar
69
+ </div>
70
+ </section>
71
+ </article>
72
+ );
73
+ };
@@ -43,8 +43,8 @@ export const Page = ({ user, onLogin, onLogout, onCreateAccount }) => html`
43
43
  <a href="https://storybook.js.org/docs" target="_blank" rel="noopener noreferrer"> docs </a>
44
44
  .
45
45
  </p>
46
- <div className="tip-wrapper">
47
- <span className="tip">Tip</span> Adjust the width of the canvas with the
46
+ <div class="tip-wrapper">
47
+ <span class="tip">Tip</span> Adjust the width of the canvas with the
48
48
  <svg width="10" height="10" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg">
49
49
  <g fill="none" fillRule="evenodd">
50
50
  <path
@@ -50,8 +50,8 @@ export const Page = ({ user, onLogin, onLogout, onCreateAccount }: PageProps) =>
50
50
  <a href="https://storybook.js.org/docs" target="_blank" rel="noopener noreferrer"> docs </a>
51
51
  .
52
52
  </p>
53
- <div className="tip-wrapper">
54
- <span className="tip">Tip</span> Adjust the width of the canvas with the
53
+ <div class="tip-wrapper">
54
+ <span class="tip">Tip</span> Adjust the width of the canvas with the
55
55
  <svg width="10" height="10" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg">
56
56
  <g fill="none" fillRule="evenodd">
57
57
  <path
@@ -9,6 +9,8 @@ require("core-js/modules/es.promise.js");
9
9
 
10
10
  var _fsExtra = _interopRequireDefault(require("fs-extra"));
11
11
 
12
+ var _tsDedent = _interopRequireDefault(require("ts-dedent"));
13
+
12
14
  var _coreCommon = require("@storybook/core-common");
13
15
 
14
16
  var _project_types = require("../project_types");
@@ -44,6 +46,9 @@ const builderDependencies = builder => {
44
46
  case _project_types.CoreBuilder.Webpack5:
45
47
  return ['@storybook/builder-webpack5', '@storybook/manager-webpack5'];
46
48
 
49
+ case _project_types.CoreBuilder.Vite:
50
+ return ['@storybook/builder-vite'];
51
+
47
52
  default:
48
53
  return [builder];
49
54
  }
@@ -51,6 +56,8 @@ const builderDependencies = builder => {
51
56
 
52
57
  const stripVersions = addons => addons.map(addon => (0, _jsPackageManager.getPackageDetails)(addon)[0]);
53
58
 
59
+ const hasInteractiveStories = framework => ['react', 'angular'].includes(framework);
60
+
54
61
  async function baseGenerator(packageManager, npmOptions, {
55
62
  language,
56
63
  builder
@@ -71,6 +78,12 @@ async function baseGenerator(packageManager, npmOptions, {
71
78
  const addons = ['@storybook/addon-links', '@storybook/addon-essentials']; // added to package.json
72
79
 
73
80
  const addonPackages = [...addons, '@storybook/addon-actions'];
81
+
82
+ if (hasInteractiveStories(framework)) {
83
+ addons.push('@storybook/addon-interactions');
84
+ addonPackages.push('@storybook/addon-interactions', '@storybook/testing-library');
85
+ }
86
+
74
87
  const yarn2Dependencies = packageManager.type === 'yarn2' ? ['@storybook/addon-docs', '@mdx-js/react@1.x.x'] : [];
75
88
  const files = await _fsExtra.default.readdir(process.cwd());
76
89
  const isNewFolder = !files.some(fname => fname.startsWith('.babel') || fname.startsWith('babel') || fname === 'package.json');
@@ -79,9 +92,11 @@ async function baseGenerator(packageManager, npmOptions, {
79
92
  const frameworkPackage = `@storybook/${framework}`;
80
93
  const packages = [frameworkPackage, ...addonPackages, ...extraPackages, ...extraAddons, ...yarn2Dependencies, ...builderDependencies(builder)].filter(Boolean).filter(packageToInstall => !installedDependencies.has((0, _jsPackageManager.getPackageDetails)(packageToInstall)[0]));
81
94
  const versionedPackages = await packageManager.getVersionedPackages(...packages);
95
+ const coreBuilders = [_project_types.CoreBuilder.Webpack4, _project_types.CoreBuilder.Webpack5, _project_types.CoreBuilder.Vite];
96
+ const expandedBuilder = coreBuilders.includes(builder) ? `@storybook/builder-${builder}` : builder;
82
97
  const mainOptions = builder !== _project_types.CoreBuilder.Webpack4 ? Object.assign({
83
98
  core: {
84
- builder
99
+ builder: expandedBuilder
85
100
  }
86
101
  }, extraMain) : extraMain;
87
102
  (0, _configure.configure)(framework, Object.assign({
@@ -93,6 +108,18 @@ async function baseGenerator(packageManager, npmOptions, {
93
108
 
94
109
  if (addComponents) {
95
110
  (0, _helpers.copyComponents)(framework, language);
111
+ } // FIXME: temporary workaround for https://github.com/storybookjs/storybook/issues/17516
112
+
113
+
114
+ if (expandedBuilder === '@storybook/builder-vite') {
115
+ const previewHead = (0, _tsDedent.default)`
116
+ <script>
117
+ window.global = window;
118
+ </script>
119
+ `;
120
+ await _fsExtra.default.writeFile(`.storybook/preview-head.html`, previewHead, {
121
+ encoding: 'utf8'
122
+ });
96
123
  }
97
124
 
98
125
  const babelDependencies = addBabel ? await (0, _helpers.getBabelDependencies)(packageManager, packageJson) : [];
@@ -59,6 +59,7 @@ exports.CoreBuilder = CoreBuilder;
59
59
  (function (CoreBuilder) {
60
60
  CoreBuilder["Webpack4"] = "webpack4";
61
61
  CoreBuilder["Webpack5"] = "webpack5";
62
+ CoreBuilder["Vite"] = "vite";
62
63
  })(CoreBuilder || (exports.CoreBuilder = CoreBuilder = {}));
63
64
 
64
65
  let SupportedLanguage;
@@ -34,7 +34,7 @@ const getStorybookVersion = line => {
34
34
  };
35
35
 
36
36
  exports.getStorybookVersion = getStorybookVersion;
37
- const excludeList = ['@storybook/linter-config', '@storybook/design-system', '@storybook/ember-cli-storybook', '@storybook/semver', '@storybook/eslint-config-storybook', '@storybook/bench', '@storybook/addon-bench', '@storybook/addon-console', '@storybook/csf', '@storybook/storybook-deployer'];
37
+ const excludeList = ['@storybook/linter-config', '@storybook/design-system', '@storybook/ember-cli-storybook', '@storybook/semver', '@storybook/eslint-config-storybook', '@storybook/bench', '@storybook/addon-bench', '@storybook/addon-console', '@storybook/csf', '@storybook/storybook-deployer', '@storybook/addon-postcss', '@storybook/react-docgen-typescript-plugin', '@storybook/babel-plugin-require-context-hook', '@storybook/builder-vite', '@storybook/mdx1-csf', '@storybook/mdx2-csf'];
38
38
 
39
39
  const isCorePackage = pkg => pkg.startsWith('@storybook/') && !pkg.startsWith('@storybook/preset-') && !excludeList.includes(pkg);
40
40
 
@@ -1,57 +1,57 @@
1
1
  {
2
- "@storybook/addon-a11y": "6.4.18",
3
- "@storybook/addon-actions": "6.4.18",
4
- "@storybook/addon-backgrounds": "6.4.18",
5
- "@storybook/addon-controls": "6.4.18",
6
- "@storybook/addon-docs": "6.4.18",
7
- "@storybook/addon-essentials": "6.4.18",
8
- "@storybook/addon-interactions": "6.4.18",
9
- "@storybook/addon-jest": "6.4.18",
10
- "@storybook/addon-links": "6.4.18",
11
- "@storybook/addon-measure": "6.4.18",
12
- "@storybook/addon-outline": "6.4.18",
13
- "@storybook/addon-storyshots": "6.4.18",
14
- "@storybook/addon-storyshots-puppeteer": "6.4.18",
15
- "@storybook/addon-storysource": "6.4.18",
16
- "@storybook/addon-toolbars": "6.4.18",
17
- "@storybook/addon-viewport": "6.4.18",
18
- "@storybook/addons": "6.4.18",
19
- "@storybook/angular": "6.4.18",
20
- "@storybook/api": "6.4.18",
21
- "@storybook/builder-webpack4": "6.4.18",
22
- "@storybook/builder-webpack5": "6.4.18",
23
- "@storybook/channel-postmessage": "6.4.18",
24
- "@storybook/channel-websocket": "6.4.18",
25
- "@storybook/channels": "6.4.18",
26
- "@storybook/cli": "6.4.18",
27
- "@storybook/client-api": "6.4.18",
28
- "@storybook/client-logger": "6.4.18",
29
- "@storybook/codemod": "6.4.18",
30
- "@storybook/components": "6.4.18",
31
- "@storybook/core": "6.4.18",
32
- "@storybook/core-client": "6.4.18",
33
- "@storybook/core-common": "6.4.18",
34
- "@storybook/core-events": "6.4.18",
35
- "@storybook/core-server": "6.4.18",
36
- "@storybook/csf-tools": "6.4.18",
37
- "@storybook/ember": "6.4.18",
38
- "@storybook/html": "6.4.18",
39
- "@storybook/instrumenter": "6.4.18",
40
- "@storybook/manager-webpack4": "6.4.18",
41
- "@storybook/manager-webpack5": "6.4.18",
42
- "@storybook/node-logger": "6.4.18",
43
- "@storybook/postinstall": "6.4.18",
44
- "@storybook/preact": "6.4.18",
45
- "@storybook/preview-web": "6.4.18",
46
- "@storybook/react": "6.4.18",
47
- "@storybook/router": "6.4.18",
48
- "@storybook/server": "6.4.18",
49
- "@storybook/source-loader": "6.4.18",
50
- "@storybook/store": "6.4.18",
51
- "@storybook/svelte": "6.4.18",
52
- "@storybook/theming": "6.4.18",
53
- "@storybook/ui": "6.4.18",
54
- "@storybook/vue": "6.4.18",
55
- "@storybook/vue3": "6.4.18",
56
- "@storybook/web-components": "6.4.18"
2
+ "@storybook/addon-a11y": "6.4.21",
3
+ "@storybook/addon-actions": "6.4.21",
4
+ "@storybook/addon-backgrounds": "6.4.21",
5
+ "@storybook/addon-controls": "6.4.21",
6
+ "@storybook/addon-docs": "6.4.21",
7
+ "@storybook/addon-essentials": "6.4.21",
8
+ "@storybook/addon-interactions": "6.4.21",
9
+ "@storybook/addon-jest": "6.4.21",
10
+ "@storybook/addon-links": "6.4.21",
11
+ "@storybook/addon-measure": "6.4.21",
12
+ "@storybook/addon-outline": "6.4.21",
13
+ "@storybook/addon-storyshots": "6.4.21",
14
+ "@storybook/addon-storyshots-puppeteer": "6.4.21",
15
+ "@storybook/addon-storysource": "6.4.21",
16
+ "@storybook/addon-toolbars": "6.4.21",
17
+ "@storybook/addon-viewport": "6.4.21",
18
+ "@storybook/addons": "6.4.21",
19
+ "@storybook/angular": "6.4.21",
20
+ "@storybook/api": "6.4.21",
21
+ "@storybook/builder-webpack4": "6.4.21",
22
+ "@storybook/builder-webpack5": "6.4.21",
23
+ "@storybook/channel-postmessage": "6.4.21",
24
+ "@storybook/channel-websocket": "6.4.21",
25
+ "@storybook/channels": "6.4.21",
26
+ "@storybook/cli": "6.4.21",
27
+ "@storybook/client-api": "6.4.21",
28
+ "@storybook/client-logger": "6.4.21",
29
+ "@storybook/codemod": "6.4.21",
30
+ "@storybook/components": "6.4.21",
31
+ "@storybook/core": "6.4.21",
32
+ "@storybook/core-client": "6.4.21",
33
+ "@storybook/core-common": "6.4.21",
34
+ "@storybook/core-events": "6.4.21",
35
+ "@storybook/core-server": "6.4.21",
36
+ "@storybook/csf-tools": "6.4.21",
37
+ "@storybook/ember": "6.4.21",
38
+ "@storybook/html": "6.4.21",
39
+ "@storybook/instrumenter": "6.4.21",
40
+ "@storybook/manager-webpack4": "6.4.21",
41
+ "@storybook/manager-webpack5": "6.4.21",
42
+ "@storybook/node-logger": "6.4.21",
43
+ "@storybook/postinstall": "6.4.21",
44
+ "@storybook/preact": "6.4.21",
45
+ "@storybook/preview-web": "6.4.21",
46
+ "@storybook/react": "6.4.21",
47
+ "@storybook/router": "6.4.21",
48
+ "@storybook/server": "6.4.21",
49
+ "@storybook/source-loader": "6.4.21",
50
+ "@storybook/store": "6.4.21",
51
+ "@storybook/svelte": "6.4.21",
52
+ "@storybook/theming": "6.4.21",
53
+ "@storybook/ui": "6.4.21",
54
+ "@storybook/vue": "6.4.21",
55
+ "@storybook/vue3": "6.4.21",
56
+ "@storybook/web-components": "6.4.21"
57
57
  }
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.builderVite = void 0;
7
+
8
+ require("core-js/modules/es.promise.js");
9
+
10
+ var _chalk = _interopRequireDefault(require("chalk"));
11
+
12
+ var _tsDedent = _interopRequireDefault(require("ts-dedent"));
13
+
14
+ var _csfTools = require("@storybook/csf-tools");
15
+
16
+ var _getStorybookInfo = require("../helpers/getStorybookInfo");
17
+
18
+ var _jsPackageManager = require("../../js-package-manager");
19
+
20
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
+
22
+ const logger = console;
23
+
24
+ /**
25
+ * Is the user using 'storybook-builder-vite' in their project?
26
+ *
27
+ * If so, prompt them to upgrade to '@storybook/builder-vite'.
28
+ *
29
+ * - Add '@storybook/builder-vite' as dev dependency
30
+ * - Remove 'storybook-builder-vite' dependency
31
+ * - Add core.builder = '@storybook/builder-vite' to main.js
32
+ */
33
+ const builderVite = {
34
+ id: 'builder-vite',
35
+
36
+ async check({
37
+ packageManager
38
+ }) {
39
+ const packageJson = packageManager.retrievePackageJson();
40
+ const {
41
+ mainConfig
42
+ } = (0, _getStorybookInfo.getStorybookInfo)(packageJson);
43
+
44
+ if (!mainConfig) {
45
+ logger.warn('Unable to find storybook main.js config');
46
+ return null;
47
+ }
48
+
49
+ const main = await (0, _csfTools.readConfig)(mainConfig);
50
+ const builder = main.getFieldValue(['core', 'builder']);
51
+ const builderName = typeof builder === 'string' ? builder : builder === null || builder === void 0 ? void 0 : builder.name;
52
+
53
+ if (builderName !== 'storybook-builder-vite') {
54
+ logger.info(`Not using community vite builder, skipping`);
55
+ return null;
56
+ }
57
+
58
+ return {
59
+ builder,
60
+ main,
61
+ packageJson
62
+ };
63
+ },
64
+
65
+ prompt({
66
+ builder
67
+ }) {
68
+ const builderFormatted = _chalk.default.cyan(JSON.stringify(builder, null, 2));
69
+
70
+ return (0, _tsDedent.default)`
71
+ We've detected you're using the community vite builder: ${builderFormatted}
72
+
73
+ 'storybook-builder-vite' is deprecated and now located at ${_chalk.default.cyan('@storybook/builder-vite')}.
74
+
75
+ We can upgrade your project to use the new builder automatically.
76
+
77
+ More info: ${_chalk.default.yellow('https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#vite-builder-renamed')}
78
+ `;
79
+ },
80
+
81
+ async run({
82
+ result: {
83
+ builder,
84
+ main,
85
+ packageJson
86
+ },
87
+ packageManager,
88
+ dryRun
89
+ }) {
90
+ const {
91
+ dependencies = {},
92
+ devDependencies = {}
93
+ } = packageJson;
94
+ logger.info(`Removing existing 'storybook-builder-vite' dependency`);
95
+
96
+ if (!dryRun) {
97
+ delete dependencies['storybook-builder-vite'];
98
+ delete devDependencies['storybook-builder-vite'];
99
+ (0, _jsPackageManager.writePackageJson)(packageJson);
100
+ }
101
+
102
+ logger.info(`Adding '@storybook/builder-vite' as dev dependency`);
103
+
104
+ if (!dryRun) {
105
+ packageManager.addDependencies({
106
+ installAsDevDependencies: true
107
+ }, ['@storybook/builder-vite']);
108
+ }
109
+
110
+ logger.info(`Updating main.js to use vite builder`);
111
+
112
+ if (!dryRun) {
113
+ const updatedBuilder = typeof builder === 'string' ? '@storybook/builder-vite' : {
114
+ name: '@storybook/builder-vite',
115
+ options: builder.options
116
+ };
117
+ main.setFieldValue(['core', 'builder'], updatedBuilder);
118
+ await (0, _csfTools.writeConfig)(main);
119
+ }
120
+ }
121
+
122
+ };
123
+ exports.builderVite = builderVite;
@@ -18,6 +18,8 @@ var _mainjsFramework = require("./mainjsFramework");
18
18
 
19
19
  var _eslintPlugin = require("./eslint-plugin");
20
20
 
21
+ var _builderVite = require("./builder-vite");
22
+
21
23
  var _types = require("../types");
22
24
 
23
25
  Object.keys(_types).forEach(function (key) {
@@ -31,5 +33,5 @@ Object.keys(_types).forEach(function (key) {
31
33
  }
32
34
  });
33
35
  });
34
- const fixes = [_cra.cra5, _webpack.webpack5, _angular.angular12, _mainjsFramework.mainjsFramework, _eslintPlugin.eslintPlugin];
36
+ const fixes = [_cra.cra5, _webpack.webpack5, _angular.angular12, _mainjsFramework.mainjsFramework, _eslintPlugin.eslintPlugin, _builderVite.builderVite];
35
37
  exports.fixes = fixes;
@@ -24,8 +24,13 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
24
24
  const read = async url => {
25
25
  const browser = await usePuppeteerBrowser();
26
26
  const page = await browser.newPage();
27
- await page.goto(url);
28
- await page.waitForFunction('window.__STORYBOOK_STORY_STORE__ && window.__STORYBOOK_STORY_STORE__.extract && window.__STORYBOOK_STORY_STORE__.extract()');
27
+ await page.goto(url); // we don't know whether we are running against a new or old storybook
28
+ // FIXME: add tests for both
29
+
30
+ await page.waitForFunction(`
31
+ (window.__STORYBOOK_PREVIEW__ && window.__STORYBOOK_PREVIEW__.extract && window.__STORYBOOK_PREVIEW__.extract()) ||
32
+ (window.__STORYBOOK_STORY_STORE__ && window.__STORYBOOK_STORY_STORE__.extract && window.__STORYBOOK_STORY_STORE__.extract())
33
+ `);
29
34
  const data = JSON.parse(await page.evaluate(async () => {
30
35
  // eslint-disable-next-line no-undef
31
36
  return JSON.stringify(window.__STORYBOOK_STORY_STORE__.getStoriesJsonData(), null, 2);
@@ -1,7 +1,6 @@
1
1
  import { moduleMetadata } from '@storybook/angular';
2
2
  import { CommonModule } from '@angular/common';
3
- // also exported from '@storybook/angular' if you can deal with breaking changes in 6.1
4
- import { Story, Meta } from '@storybook/angular/types-6-0';
3
+ import type { Story, Meta } from '@storybook/angular';
5
4
 
6
5
  import Button from './button.component';
7
6
  import Header from './header.component';
@@ -15,6 +14,10 @@ export default {
15
14
  imports: [CommonModule],
16
15
  }),
17
16
  ],
17
+ parameters: {
18
+ // More on Story layout: https://storybook.js.org/docs/angular/configure/story-layout
19
+ layout: 'fullscreen',
20
+ },
18
21
  } as Meta;
19
22
 
20
23
  const Template: Story<Header> = (args: Header) => ({
@@ -23,7 +26,9 @@ const Template: Story<Header> = (args: Header) => ({
23
26
 
24
27
  export const LoggedIn = Template.bind({});
25
28
  LoggedIn.args = {
26
- user: {},
29
+ user: {
30
+ name: 'Jane Doe',
31
+ },
27
32
  };
28
33
 
29
34
  export const LoggedOut = Template.bind({});
@@ -1,15 +1,18 @@
1
1
  import { moduleMetadata, Story, Meta } from '@storybook/angular';
2
+ import { within, userEvent } from '@storybook/testing-library';
2
3
  import { CommonModule } from '@angular/common';
3
4
 
4
5
  import Button from './button.component';
5
6
  import Header from './header.component';
6
7
  import Page from './page.component';
7
8
 
8
- import * as HeaderStories from './Header.stories';
9
-
10
9
  export default {
11
10
  title: 'Example/Page',
12
11
  component: Page,
12
+ parameters: {
13
+ // More on Story layout: https://storybook.js.org/docs/angular/configure/story-layout
14
+ layout: 'fullscreen',
15
+ },
13
16
  decorators: [
14
17
  moduleMetadata({
15
18
  declarations: [Button, Header],
@@ -22,13 +25,12 @@ const Template: Story<Page> = (args: Page) => ({
22
25
  props: args,
23
26
  });
24
27
 
25
- export const LoggedIn = Template.bind({});
26
- LoggedIn.args = {
27
- // More on composing args: https://storybook.js.org/docs/angular/writing-stories/args#args-composition
28
- ...HeaderStories.LoggedIn.args,
29
- };
30
-
31
28
  export const LoggedOut = Template.bind({});
32
- LoggedOut.args = {
33
- ...HeaderStories.LoggedOut.args,
29
+
30
+ // More on interaction testing: https://storybook.js.org/docs/angular/writing-tests/interaction-testing
31
+ export const LoggedIn = Template.bind({});
32
+ LoggedIn.play = async ({ canvasElement }) => {
33
+ const canvas = within(canvasElement);
34
+ const loginButton = await canvas.getByRole('button', { name: /Log in/i });
35
+ await userEvent.click(loginButton);
34
36
  };
@@ -25,25 +25,36 @@ import { User } from './User';
25
25
  <h1>Acme</h1>
26
26
  </div>
27
27
  <div>
28
- <storybook-button
29
- *ngIf="user"
30
- size="small"
31
- (onClick)="onLogout.emit($event)"
32
- label="Log out"
33
- ></storybook-button>
34
- <storybook-button
35
- *ngIf="!user"
36
- size="small"
37
- (onClick)="onLogin.emit($event)"
38
- label="Log in"
39
- ></storybook-button>
40
- <storybook-button
41
- *ngIf="!user"
42
- primary
43
- size="small"
44
- (onClick)="onCreateAccount.emit($event)"
45
- label="Sign up"
46
- ></storybook-button>
28
+ <div *ngIf="user">
29
+ <span class="welcome">
30
+ Welcome, <b>{{ user.name }}</b
31
+ >!
32
+ </span>
33
+ <storybook-button
34
+ *ngIf="user"
35
+ size="small"
36
+ (onClick)="onLogout.emit($event)"
37
+ label="Log out"
38
+ ></storybook-button>
39
+ </div>
40
+ <div *ngIf="!user">
41
+ <storybook-button
42
+ *ngIf="!user"
43
+ size="small"
44
+ class="margin-left"
45
+ (onClick)="onLogin.emit($event)"
46
+ label="Log in"
47
+ ></storybook-button>
48
+ <storybook-button
49
+ *ngIf="!user"
50
+ primary
51
+ size="small"
52
+ primary="true"
53
+ class="margin-left"
54
+ (onClick)="onCreateAccount.emit($event)"
55
+ label="Sign up"
56
+ ></storybook-button>
57
+ </div>
47
58
  </div>
48
59
  </div>
49
60
  </header>`,