@storybook/cli 6.5.0-alpha.36 → 6.5.0-alpha.40

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 (33) hide show
  1. package/dist/cjs/extract.js +7 -2
  2. package/dist/cjs/frameworks/angular/Header.stories.ts +8 -3
  3. package/dist/cjs/frameworks/angular/Page.stories.ts +12 -10
  4. package/dist/cjs/frameworks/angular/header.component.ts +30 -19
  5. package/dist/cjs/frameworks/angular/page.component.ts +13 -27
  6. package/dist/cjs/generators/REACT_SCRIPTS/index.js +9 -1
  7. package/dist/cjs/generators/baseGenerator.js +1 -1
  8. package/dist/cjs/initiate.js +2 -1
  9. package/dist/cjs/repro-generators/configs.js +9 -7
  10. package/dist/cjs/repro-generators/scripts.js +21 -12
  11. package/dist/cjs/repro.js +1 -0
  12. package/dist/cjs/versions.js +55 -55
  13. package/dist/esm/extract.js +7 -2
  14. package/dist/esm/frameworks/angular/Header.stories.ts +8 -3
  15. package/dist/esm/frameworks/angular/Page.stories.ts +12 -10
  16. package/dist/esm/frameworks/angular/header.component.ts +30 -19
  17. package/dist/esm/frameworks/angular/page.component.ts +13 -27
  18. package/dist/esm/generators/REACT_SCRIPTS/index.js +9 -1
  19. package/dist/esm/generators/baseGenerator.js +1 -1
  20. package/dist/esm/initiate.js +2 -1
  21. package/dist/esm/repro-generators/configs.js +9 -7
  22. package/dist/esm/repro-generators/scripts.js +21 -12
  23. package/dist/esm/repro.js +1 -0
  24. package/dist/esm/versions.js +55 -55
  25. package/dist/modern/extract.js +7 -2
  26. package/dist/modern/generators/REACT_SCRIPTS/index.js +9 -1
  27. package/dist/modern/generators/baseGenerator.js +1 -1
  28. package/dist/modern/initiate.js +2 -1
  29. package/dist/modern/repro-generators/configs.js +9 -7
  30. package/dist/modern/repro-generators/scripts.js +21 -12
  31. package/dist/modern/repro.js +1 -0
  32. package/dist/modern/versions.js +55 -55
  33. package/package.json +7 -7
@@ -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>`,
@@ -1,4 +1,4 @@
1
- import { Component, Input, Output, EventEmitter } from '@angular/core';
1
+ import { Component } from '@angular/core';
2
2
  import { User } from './User';
3
3
 
4
4
  @Component({
@@ -6,9 +6,9 @@ import { User } from './User';
6
6
  template: `<article>
7
7
  <storybook-header
8
8
  [user]="user"
9
- (onLogout)="onLogout.emit($event)"
10
- (onLogin)="onLogin.emit($event)"
11
- (onCreateAccount)="onCreateAccount.emit($event)"
9
+ (onLogout)="doLogout()"
10
+ (onLogin)="doLogin()"
11
+ (onCreateAccount)="doCreateAccount()"
12
12
  ></storybook-header>
13
13
  <section>
14
14
  <h2>Pages in Storybook</h2>
@@ -61,31 +61,17 @@ import { User } from './User';
61
61
  styleUrls: ['./page.css'],
62
62
  })
63
63
  export default class PageComponent {
64
- @Input()
65
64
  user: User | null = null;
66
65
 
67
- @Output()
68
- onLogin = new EventEmitter<Event>();
66
+ doLogout() {
67
+ this.user = null;
68
+ }
69
69
 
70
- @Output()
71
- onLogout = new EventEmitter<Event>();
70
+ doLogin() {
71
+ this.user = { name: 'Jane Doe' };
72
+ }
72
73
 
73
- @Output()
74
- onCreateAccount = new EventEmitter<Event>();
74
+ doCreateAccount() {
75
+ this.user = { name: 'Jane Doe' };
76
+ }
75
77
  }
76
-
77
- // export const Page = ({ user, onLogin, onLogout, onCreateAccount }) => (
78
- // <article>
79
- // <Header user={user} onLogin={onLogin} onLogout={onLogout} onCreateAccount={onCreateAccount} />
80
-
81
- // );
82
- // Page.propTypes = {
83
- // user: PropTypes.shape({}),
84
- // onLogin: PropTypes.func.isRequired,
85
- // onLogout: PropTypes.func.isRequired,
86
- // onCreateAccount: PropTypes.func.isRequired,
87
- // };
88
-
89
- // Page.defaultProps = {
90
- // user: null,
91
- // };
@@ -44,7 +44,15 @@ const generator = async (packageManager, npmOptions, options) => {
44
44
  }) : options; // `@storybook/preset-create-react-app` has `@storybook/node-logger` as peerDep
45
45
 
46
46
  const extraPackages = ['@storybook/node-logger'];
47
- if (isCra5) extraPackages.push('webpack'); // preset v3 is compat with older versions of CRA, otherwise let version float
47
+
48
+ if (isCra5) {
49
+ extraPackages.push('webpack'); // Miscellaneous dependency used in `babel-preset-react-app` but not listed as dep there
50
+
51
+ extraPackages.push('babel-plugin-named-exports-order'); // Miscellaneous dependency to add to be sure Storybook + CRA is working fine with Yarn PnP mode
52
+
53
+ extraPackages.push('prop-types');
54
+ } // preset v3 is compat with older versions of CRA, otherwise let version float
55
+
48
56
 
49
57
  const extraAddons = [`@storybook/preset-create-react-app${isCra5 ? '' : '@3'}`];
50
58
  await (0, _baseGenerator.baseGenerator)(packageManager, npmOptions, updatedOptions, 'react', {
@@ -51,7 +51,7 @@ const builderDependencies = builder => {
51
51
 
52
52
  const stripVersions = addons => addons.map(addon => (0, _jsPackageManager.getPackageDetails)(addon)[0]);
53
53
 
54
- const hasInteractiveStories = framework => ['react'].includes(framework);
54
+ const hasInteractiveStories = framework => ['react', 'angular'].includes(framework);
55
55
 
56
56
  async function baseGenerator(packageManager, npmOptions, {
57
57
  language,
@@ -282,11 +282,12 @@ async function initiate(options, pkg) {
282
282
  } catch (ex) {
283
283
  done(ex.message);
284
284
  process.exit(1);
285
+ return;
285
286
  }
286
287
 
287
288
  done();
288
289
  await installStorybook(projectType, Object.assign({}, options, isEsm ? {
289
290
  commonJs: true
290
291
  } : undefined));
291
- return (0, _automigrate.automigrate)();
292
+ await (0, _automigrate.automigrate)();
292
293
  }
@@ -14,16 +14,16 @@ const cra = {
14
14
  framework: 'react',
15
15
  name: 'cra',
16
16
  version: 'latest',
17
- generator: [// Force npm otherwise we have a mess between Yarn 1 and Yarn 2
18
- 'npx create-react-app@{{version}} {{appName}} --use-npm', 'cd {{appName}}', 'echo "FAST_REFRESH=true" > .env', 'echo "SKIP_PREFLIGHT_CHECK=true" > .env'].join(' && ')
17
+ generator: [// Force npm otherwise we have a mess between Yarn 1, Yarn 2 and NPM
18
+ 'npm_config_user_agent=npm npx -p create-react-app@{{version}} create-react-app {{appName}}', 'cd {{appName}}', 'echo "FAST_REFRESH=true" > .env', 'echo "SKIP_PREFLIGHT_CHECK=true" > .env'].join(' && ')
19
19
  };
20
20
  exports.cra = cra;
21
21
  const cra_typescript = {
22
22
  framework: 'react',
23
23
  name: 'cra_typescript',
24
24
  version: 'latest',
25
- generator: [// Force npm otherwise we have a mess between Yarn 1 and Yarn 2
26
- 'npx create-react-app@{{version}} {{appName}} --template typescript --use-npm'].join(' && ')
25
+ generator: [// Force npm otherwise we have a mess between Yarn 1, Yarn 2 and NPM
26
+ 'npm_config_user_agent=npm npx -p create-react-app@{{version}} create-react-app {{appName}} --template typescript'].join(' && ')
27
27
  };
28
28
  exports.cra_typescript = cra_typescript;
29
29
  const react = {
@@ -62,7 +62,7 @@ const baseAngular = {
62
62
  framework: 'angular',
63
63
  name: 'angular',
64
64
  version: 'latest',
65
- generator: `npx --package @angular/cli@{{version}} ng new {{appName}} --routing=true --minimal=true --style=scss --skipInstall=true --strict`
65
+ generator: `npx -p @angular/cli@{{version}} ng new {{appName}} --routing=true --minimal=true --style=scss --skipInstall=true --strict`
66
66
  };
67
67
  const angular10 = Object.assign({}, baseAngular, {
68
68
  name: 'angular10',
@@ -117,7 +117,8 @@ exports.web_components_lit2 = web_components_lit2;
117
117
  const vue = {
118
118
  framework: 'vue',
119
119
  name: 'vue',
120
- version: 'latest',
120
+ // Be careful here, the latest versions of vue cli are bootstrapping a vue 3 project
121
+ version: '4',
121
122
  generator: [// Force npm otherwise we have a mess between Yarn 1 and Yarn 2
122
123
  `npx -p @vue/cli@{{version}} vue create {{appName}} --default --packageManager=npm --no-git --force`].join(' && ')
123
124
  };
@@ -151,7 +152,8 @@ const sfcVue = {
151
152
  framework: 'vue',
152
153
  name: 'sfcVue',
153
154
  version: 'latest',
154
- generator: fromDeps('vue', 'vue-loader', 'vue-template-compiler', 'webpack@webpack-4')
155
+ //
156
+ generator: fromDeps('vue@2.6', 'vue-loader@15.9', 'vue-template-compiler@2.6', 'webpack@webpack-4')
155
157
  };
156
158
  exports.sfcVue = sfcVue;
157
159
  const svelte = {
@@ -15,6 +15,8 @@ var _shelljs = _interopRequireDefault(require("shelljs"));
15
15
 
16
16
  var _chalk = _interopRequireDefault(require("chalk"));
17
17
 
18
+ var _configs = require("./configs");
19
+
18
20
  const _excluded = ["name", "version"];
19
21
 
20
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -38,17 +40,18 @@ const exec = async (command, options = {}, {
38
40
  silent: true
39
41
  };
40
42
 
41
- _shelljs.default.exec(command, Object.assign({}, defaultOptions, options), (code, stdout, stderr) => {
43
+ const child = _shelljs.default.exec(command, Object.assign({}, defaultOptions, options, {
44
+ async: true
45
+ }));
46
+
47
+ child.stderr.pipe(process.stderr);
48
+ child.stdout.pipe(process.stdout);
49
+ child.on('exit', code => {
42
50
  if (code === 0) {
43
51
  resolve(undefined);
44
52
  } else {
45
53
  logger.error(_chalk.default.red(`An error occurred while executing: \`${command}\``));
46
- logger.error(`Command output was:${_chalk.default.yellow(`\n${stdout}\n${stderr}`)}`);
47
-
48
- if (errorMessage) {
49
- logger.error(errorMessage);
50
- }
51
-
54
+ logger.log(errorMessage);
52
55
  reject(new Error(`command exited with code: ${code}: `));
53
56
  }
54
57
  });
@@ -59,10 +62,18 @@ exports.exec = exec;
59
62
 
60
63
  const installYarn2 = async ({
61
64
  cwd,
62
- pnp
65
+ pnp,
66
+ name
63
67
  }) => {
64
- const command = [`yarn set version berry`, `yarn config set enableGlobalCache true`, `yarn config set nodeLinker ${pnp ? 'pnp' : 'node-modules'}`].join(' && ');
65
- await exec(command, {
68
+ const command = [`yarn set version berry`, `yarn config set enableGlobalCache true`, `yarn config set nodeLinker ${pnp ? 'pnp' : 'node-modules'}`]; // FIXME: Some dependencies used by CRA aren't listed in its package.json
69
+ // Next line is a hack to remove as soon as CRA will have added these missing deps
70
+ // for details see https://github.com/facebook/create-react-app/pull/11751
71
+
72
+ if ([_configs.cra.name, _configs.cra_typescript.name].includes(name)) {
73
+ command.push(`yarn config set packageExtensions --json '{ "babel-preset-react-app@10.0.x": { "dependencies": { "@babel/plugin-proposal-private-property-in-object": "^7.16.0" } } }'`);
74
+ }
75
+
76
+ await exec(command.join(' && '), {
66
77
  cwd
67
78
  }, {
68
79
  startMessage: `🧶 Installing Yarn 2`,
@@ -198,8 +209,6 @@ const createAndInit = async (cwd, _ref, {
198
209
  logger.log();
199
210
  logger.info(`🏃 Starting for ${name} ${version}`);
200
211
  logger.log();
201
- logger.debug(options);
202
- logger.log();
203
212
  await doTask(generate, Object.assign({}, options, {
204
213
  cwd: options.creationPath
205
214
  }));
package/dist/cjs/repro.js CHANGED
@@ -169,6 +169,7 @@ const repro = async ({
169
169
  }));
170
170
  } catch (error) {
171
171
  logger.error('🚨 Failed to create repro');
172
+ throw new Error(error);
172
173
  }
173
174
  };
174
175
 
@@ -6,60 +6,60 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  // auto generated file, do not edit
8
8
  var _default = {
9
- "@storybook/addon-a11y": "6.5.0-alpha.36",
10
- "@storybook/addon-actions": "6.5.0-alpha.36",
11
- "@storybook/addon-backgrounds": "6.5.0-alpha.36",
12
- "@storybook/addon-controls": "6.5.0-alpha.36",
13
- "@storybook/addon-docs": "6.5.0-alpha.36",
14
- "@storybook/addon-essentials": "6.5.0-alpha.36",
15
- "@storybook/addon-interactions": "6.5.0-alpha.36",
16
- "@storybook/addon-jest": "6.5.0-alpha.36",
17
- "@storybook/addon-links": "6.5.0-alpha.36",
18
- "@storybook/addon-measure": "6.5.0-alpha.36",
19
- "@storybook/addon-outline": "6.5.0-alpha.36",
20
- "@storybook/addon-storyshots": "6.5.0-alpha.36",
21
- "@storybook/addon-storyshots-puppeteer": "6.5.0-alpha.36",
22
- "@storybook/addon-storysource": "6.5.0-alpha.36",
23
- "@storybook/addon-toolbars": "6.5.0-alpha.36",
24
- "@storybook/addon-viewport": "6.5.0-alpha.36",
25
- "@storybook/addons": "6.5.0-alpha.36",
26
- "@storybook/angular": "6.5.0-alpha.36",
27
- "@storybook/api": "6.5.0-alpha.36",
28
- "@storybook/builder-webpack4": "6.5.0-alpha.36",
29
- "@storybook/builder-webpack5": "6.5.0-alpha.36",
30
- "@storybook/channel-postmessage": "6.5.0-alpha.36",
31
- "@storybook/channel-websocket": "6.5.0-alpha.36",
32
- "@storybook/channels": "6.5.0-alpha.36",
33
- "@storybook/cli": "6.5.0-alpha.36",
34
- "@storybook/client-api": "6.5.0-alpha.36",
35
- "@storybook/client-logger": "6.5.0-alpha.36",
36
- "@storybook/codemod": "6.5.0-alpha.36",
37
- "@storybook/components": "6.5.0-alpha.36",
38
- "@storybook/core": "6.5.0-alpha.36",
39
- "@storybook/core-client": "6.5.0-alpha.36",
40
- "@storybook/core-common": "6.5.0-alpha.36",
41
- "@storybook/core-events": "6.5.0-alpha.36",
42
- "@storybook/core-server": "6.5.0-alpha.36",
43
- "@storybook/csf-tools": "6.5.0-alpha.36",
44
- "@storybook/ember": "6.5.0-alpha.36",
45
- "@storybook/html": "6.5.0-alpha.36",
46
- "@storybook/instrumenter": "6.5.0-alpha.36",
47
- "@storybook/manager-webpack4": "6.5.0-alpha.36",
48
- "@storybook/manager-webpack5": "6.5.0-alpha.36",
49
- "@storybook/node-logger": "6.5.0-alpha.36",
50
- "@storybook/postinstall": "6.5.0-alpha.36",
51
- "@storybook/preact": "6.5.0-alpha.36",
52
- "@storybook/preview-web": "6.5.0-alpha.36",
53
- "@storybook/react": "6.5.0-alpha.36",
54
- "@storybook/router": "6.5.0-alpha.36",
55
- "@storybook/server": "6.5.0-alpha.36",
56
- "@storybook/source-loader": "6.5.0-alpha.36",
57
- "@storybook/store": "6.5.0-alpha.36",
58
- "@storybook/svelte": "6.5.0-alpha.36",
59
- "@storybook/theming": "6.5.0-alpha.36",
60
- "@storybook/ui": "6.5.0-alpha.36",
61
- "@storybook/vue": "6.5.0-alpha.36",
62
- "@storybook/vue3": "6.5.0-alpha.36",
63
- "@storybook/web-components": "6.5.0-alpha.36"
9
+ "@storybook/addon-a11y": "6.5.0-alpha.40",
10
+ "@storybook/addon-actions": "6.5.0-alpha.40",
11
+ "@storybook/addon-backgrounds": "6.5.0-alpha.40",
12
+ "@storybook/addon-controls": "6.5.0-alpha.40",
13
+ "@storybook/addon-docs": "6.5.0-alpha.40",
14
+ "@storybook/addon-essentials": "6.5.0-alpha.40",
15
+ "@storybook/addon-interactions": "6.5.0-alpha.40",
16
+ "@storybook/addon-jest": "6.5.0-alpha.40",
17
+ "@storybook/addon-links": "6.5.0-alpha.40",
18
+ "@storybook/addon-measure": "6.5.0-alpha.40",
19
+ "@storybook/addon-outline": "6.5.0-alpha.40",
20
+ "@storybook/addon-storyshots": "6.5.0-alpha.40",
21
+ "@storybook/addon-storyshots-puppeteer": "6.5.0-alpha.40",
22
+ "@storybook/addon-storysource": "6.5.0-alpha.40",
23
+ "@storybook/addon-toolbars": "6.5.0-alpha.40",
24
+ "@storybook/addon-viewport": "6.5.0-alpha.40",
25
+ "@storybook/addons": "6.5.0-alpha.40",
26
+ "@storybook/angular": "6.5.0-alpha.40",
27
+ "@storybook/api": "6.5.0-alpha.40",
28
+ "@storybook/builder-webpack4": "6.5.0-alpha.40",
29
+ "@storybook/builder-webpack5": "6.5.0-alpha.40",
30
+ "@storybook/channel-postmessage": "6.5.0-alpha.40",
31
+ "@storybook/channel-websocket": "6.5.0-alpha.40",
32
+ "@storybook/channels": "6.5.0-alpha.40",
33
+ "@storybook/cli": "6.5.0-alpha.40",
34
+ "@storybook/client-api": "6.5.0-alpha.40",
35
+ "@storybook/client-logger": "6.5.0-alpha.40",
36
+ "@storybook/codemod": "6.5.0-alpha.40",
37
+ "@storybook/components": "6.5.0-alpha.40",
38
+ "@storybook/core": "6.5.0-alpha.40",
39
+ "@storybook/core-client": "6.5.0-alpha.40",
40
+ "@storybook/core-common": "6.5.0-alpha.40",
41
+ "@storybook/core-events": "6.5.0-alpha.40",
42
+ "@storybook/core-server": "6.5.0-alpha.40",
43
+ "@storybook/csf-tools": "6.5.0-alpha.40",
44
+ "@storybook/ember": "6.5.0-alpha.40",
45
+ "@storybook/html": "6.5.0-alpha.40",
46
+ "@storybook/instrumenter": "6.5.0-alpha.40",
47
+ "@storybook/manager-webpack4": "6.5.0-alpha.40",
48
+ "@storybook/manager-webpack5": "6.5.0-alpha.40",
49
+ "@storybook/node-logger": "6.5.0-alpha.40",
50
+ "@storybook/postinstall": "6.5.0-alpha.40",
51
+ "@storybook/preact": "6.5.0-alpha.40",
52
+ "@storybook/preview-web": "6.5.0-alpha.40",
53
+ "@storybook/react": "6.5.0-alpha.40",
54
+ "@storybook/router": "6.5.0-alpha.40",
55
+ "@storybook/server": "6.5.0-alpha.40",
56
+ "@storybook/source-loader": "6.5.0-alpha.40",
57
+ "@storybook/store": "6.5.0-alpha.40",
58
+ "@storybook/svelte": "6.5.0-alpha.40",
59
+ "@storybook/theming": "6.5.0-alpha.40",
60
+ "@storybook/ui": "6.5.0-alpha.40",
61
+ "@storybook/vue": "6.5.0-alpha.40",
62
+ "@storybook/vue3": "6.5.0-alpha.40",
63
+ "@storybook/web-components": "6.5.0-alpha.40"
64
64
  };
65
65
  exports.default = _default;
@@ -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>`,