@storybook/cli 6.5.0-alpha.6 → 6.5.0-alpha.62

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 (156) hide show
  1. package/bin/index.js +1 -0
  2. package/dist/cjs/add.js +3 -3
  3. package/dist/cjs/automigrate/fixes/builder-vite.js +122 -0
  4. package/dist/cjs/automigrate/fixes/index.js +3 -1
  5. package/dist/cjs/automigrate/types.js +5 -1
  6. package/dist/cjs/babel-config.js +1 -1
  7. package/dist/cjs/detect.js +53 -2
  8. package/dist/cjs/extract.js +7 -2
  9. package/dist/cjs/frameworks/angular/Header.stories.ts +8 -3
  10. package/dist/cjs/frameworks/angular/Page.stories.ts +12 -10
  11. package/dist/cjs/frameworks/angular/header.component.ts +30 -19
  12. package/dist/cjs/frameworks/angular/page.component.ts +13 -27
  13. package/dist/cjs/frameworks/common/header.css +6 -0
  14. package/dist/cjs/frameworks/react/js/Header.jsx +6 -1
  15. package/dist/cjs/frameworks/react/js/Header.stories.jsx +7 -1
  16. package/dist/cjs/frameworks/react/js/Page.jsx +61 -63
  17. package/dist/cjs/frameworks/react/js/Page.stories.jsx +12 -9
  18. package/dist/cjs/frameworks/react/ts/Header.stories.tsx +7 -1
  19. package/dist/cjs/frameworks/react/ts/Header.tsx +11 -2
  20. package/dist/cjs/frameworks/react/ts/Page.stories.tsx +12 -9
  21. package/dist/cjs/frameworks/react/ts/Page.tsx +66 -60
  22. package/dist/cjs/frameworks/svelte/Button.stories.js +51 -0
  23. package/dist/cjs/frameworks/svelte/Header.stories.js +29 -0
  24. package/dist/cjs/frameworks/svelte/Page.stories.js +29 -0
  25. package/dist/cjs/frameworks/web-components/js/Page.js +2 -2
  26. package/dist/cjs/frameworks/web-components/ts/Page.ts +2 -2
  27. package/dist/cjs/generators/ANGULAR/angular-helpers.js +5 -5
  28. package/dist/cjs/generators/ANGULAR/index.js +1 -1
  29. package/dist/cjs/generators/ANGULAR/template-csf/.storybook/tsconfig.json +17 -5
  30. package/dist/cjs/generators/AURELIA/template-csf/.storybook/tsconfig.json +16 -5
  31. package/dist/cjs/generators/REACT_NATIVE/template-csf/storybook/addons.js +3 -3
  32. package/dist/cjs/generators/REACT_NATIVE/template-csf/storybook/rn-addons.js +2 -2
  33. package/dist/cjs/generators/REACT_SCRIPTS/index.js +9 -1
  34. package/dist/cjs/generators/SVELTE/index.js +0 -1
  35. package/dist/cjs/generators/baseGenerator.js +38 -4
  36. package/dist/cjs/generators/configure.js +3 -1
  37. package/dist/cjs/helpers.js +9 -8
  38. package/dist/cjs/initiate.js +27 -24
  39. package/dist/cjs/js-package-manager/JsPackageManager.js +2 -2
  40. package/dist/cjs/project_types.js +2 -1
  41. package/dist/cjs/repro-generators/configs.js +51 -8
  42. package/dist/cjs/repro-generators/scripts.js +46 -14
  43. package/dist/cjs/repro.js +3 -2
  44. package/dist/cjs/typings.d.ts +3 -0
  45. package/dist/cjs/upgrade.js +4 -2
  46. package/dist/cjs/versions.js +66 -0
  47. package/dist/cjs/window.d.js +5 -1
  48. package/dist/esm/add.js +3 -3
  49. package/dist/esm/automigrate/fixes/builder-vite.js +122 -0
  50. package/dist/esm/automigrate/fixes/index.js +3 -1
  51. package/dist/esm/automigrate/types.js +5 -1
  52. package/dist/esm/babel-config.js +1 -1
  53. package/dist/esm/detect.js +53 -2
  54. package/dist/esm/extract.js +7 -2
  55. package/dist/esm/frameworks/angular/Header.stories.ts +8 -3
  56. package/dist/esm/frameworks/angular/Page.stories.ts +12 -10
  57. package/dist/esm/frameworks/angular/header.component.ts +30 -19
  58. package/dist/esm/frameworks/angular/page.component.ts +13 -27
  59. package/dist/esm/frameworks/common/header.css +6 -0
  60. package/dist/esm/frameworks/react/js/Header.jsx +6 -1
  61. package/dist/esm/frameworks/react/js/Header.stories.jsx +7 -1
  62. package/dist/esm/frameworks/react/js/Page.jsx +61 -63
  63. package/dist/esm/frameworks/react/js/Page.stories.jsx +12 -9
  64. package/dist/esm/frameworks/react/ts/Header.stories.tsx +7 -1
  65. package/dist/esm/frameworks/react/ts/Header.tsx +11 -2
  66. package/dist/esm/frameworks/react/ts/Page.stories.tsx +12 -9
  67. package/dist/esm/frameworks/react/ts/Page.tsx +66 -60
  68. package/dist/esm/frameworks/svelte/Button.stories.js +51 -0
  69. package/dist/esm/frameworks/svelte/Header.stories.js +29 -0
  70. package/dist/esm/frameworks/svelte/Page.stories.js +29 -0
  71. package/dist/esm/frameworks/web-components/js/Page.js +2 -2
  72. package/dist/esm/frameworks/web-components/ts/Page.ts +2 -2
  73. package/dist/esm/generators/ANGULAR/angular-helpers.js +5 -5
  74. package/dist/esm/generators/ANGULAR/index.js +1 -1
  75. package/dist/esm/generators/ANGULAR/template-csf/.storybook/tsconfig.json +17 -5
  76. package/dist/esm/generators/AURELIA/template-csf/.storybook/tsconfig.json +16 -5
  77. package/dist/esm/generators/REACT_NATIVE/template-csf/storybook/addons.js +3 -3
  78. package/dist/esm/generators/REACT_NATIVE/template-csf/storybook/rn-addons.js +2 -2
  79. package/dist/esm/generators/REACT_SCRIPTS/index.js +9 -1
  80. package/dist/esm/generators/SVELTE/index.js +0 -1
  81. package/dist/esm/generators/baseGenerator.js +38 -4
  82. package/dist/esm/generators/configure.js +3 -1
  83. package/dist/esm/helpers.js +9 -8
  84. package/dist/esm/initiate.js +27 -24
  85. package/dist/esm/js-package-manager/JsPackageManager.js +2 -2
  86. package/dist/esm/project_types.js +2 -1
  87. package/dist/esm/repro-generators/configs.js +51 -8
  88. package/dist/esm/repro-generators/scripts.js +46 -14
  89. package/dist/esm/repro.js +3 -2
  90. package/dist/esm/typings.d.ts +3 -0
  91. package/dist/esm/upgrade.js +4 -2
  92. package/dist/esm/versions.js +66 -0
  93. package/dist/esm/window.d.js +5 -1
  94. package/dist/modern/add.js +3 -3
  95. package/dist/modern/automigrate/fixes/builder-vite.js +122 -0
  96. package/dist/modern/automigrate/fixes/index.js +3 -1
  97. package/dist/modern/automigrate/types.js +5 -1
  98. package/dist/modern/babel-config.js +1 -1
  99. package/dist/modern/detect.js +53 -2
  100. package/dist/modern/extract.js +7 -2
  101. package/dist/modern/frameworks/common/header.css +6 -0
  102. package/dist/modern/frameworks/react/js/Header.jsx +6 -1
  103. package/dist/modern/frameworks/react/js/Header.stories.jsx +7 -1
  104. package/dist/modern/frameworks/react/js/Page.jsx +61 -63
  105. package/dist/modern/frameworks/react/js/Page.stories.jsx +12 -9
  106. package/dist/modern/frameworks/svelte/Button.stories.js +51 -0
  107. package/dist/modern/frameworks/svelte/Header.stories.js +29 -0
  108. package/dist/modern/frameworks/svelte/Page.stories.js +29 -0
  109. package/dist/modern/frameworks/web-components/js/Page.js +2 -2
  110. package/dist/modern/generators/ANGULAR/angular-helpers.js +5 -5
  111. package/dist/modern/generators/ANGULAR/index.js +1 -1
  112. package/dist/modern/generators/ANGULAR/template-csf/.storybook/tsconfig.json +17 -5
  113. package/dist/modern/generators/AURELIA/template-csf/.storybook/tsconfig.json +16 -5
  114. package/dist/modern/generators/REACT_NATIVE/template-csf/storybook/addons.js +3 -3
  115. package/dist/modern/generators/REACT_NATIVE/template-csf/storybook/rn-addons.js +2 -2
  116. package/dist/modern/generators/REACT_SCRIPTS/index.js +9 -1
  117. package/dist/modern/generators/SVELTE/index.js +0 -1
  118. package/dist/modern/generators/baseGenerator.js +38 -4
  119. package/dist/modern/generators/configure.js +3 -1
  120. package/dist/modern/helpers.js +9 -8
  121. package/dist/modern/initiate.js +27 -24
  122. package/dist/modern/js-package-manager/JsPackageManager.js +2 -2
  123. package/dist/modern/project_types.js +2 -1
  124. package/dist/modern/repro-generators/configs.js +51 -8
  125. package/dist/modern/repro-generators/scripts.js +46 -14
  126. package/dist/modern/repro.js +3 -2
  127. package/dist/modern/typings.d.ts +3 -0
  128. package/dist/modern/upgrade.js +4 -2
  129. package/dist/modern/versions.js +66 -0
  130. package/dist/modern/window.d.js +5 -1
  131. package/dist/ts3.4/automigrate/fixes/builder-vite.d.ts +19 -0
  132. package/dist/ts3.4/detect.d.ts +9 -2
  133. package/dist/ts3.4/project_types.d.ts +2 -1
  134. package/dist/ts3.4/repro-generators/configs.d.ts +8 -0
  135. package/dist/ts3.4/versions.d.ts +59 -0
  136. package/dist/ts3.9/automigrate/fixes/builder-vite.d.ts +19 -0
  137. package/dist/ts3.9/detect.d.ts +9 -2
  138. package/dist/ts3.9/project_types.d.ts +2 -1
  139. package/dist/ts3.9/repro-generators/configs.d.ts +9 -1
  140. package/dist/ts3.9/versions.d.ts +59 -0
  141. package/package.json +11 -12
  142. package/dist/cjs/frameworks/svelte/Button.stories.svelte +0 -57
  143. package/dist/cjs/frameworks/svelte/Header.stories.svelte +0 -32
  144. package/dist/cjs/frameworks/svelte/Page.stories.svelte +0 -32
  145. package/dist/cjs/typings.d.js +0 -1
  146. package/dist/cjs/versions.json +0 -59
  147. package/dist/esm/frameworks/svelte/Button.stories.svelte +0 -57
  148. package/dist/esm/frameworks/svelte/Header.stories.svelte +0 -32
  149. package/dist/esm/frameworks/svelte/Page.stories.svelte +0 -32
  150. package/dist/esm/typings.d.js +0 -1
  151. package/dist/esm/versions.json +0 -59
  152. package/dist/modern/frameworks/svelte/Button.stories.svelte +0 -57
  153. package/dist/modern/frameworks/svelte/Header.stories.svelte +0 -32
  154. package/dist/modern/frameworks/svelte/Page.stories.svelte +0 -32
  155. package/dist/modern/typings.d.js +0 -1
  156. package/dist/modern/versions.json +0 -59
@@ -0,0 +1,122 @@
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
+ return null;
55
+ }
56
+
57
+ return {
58
+ builder,
59
+ main,
60
+ packageJson
61
+ };
62
+ },
63
+
64
+ prompt({
65
+ builder
66
+ }) {
67
+ const builderFormatted = _chalk.default.cyan(JSON.stringify(builder, null, 2));
68
+
69
+ return (0, _tsDedent.default)`
70
+ We've detected you're using the community vite builder: ${builderFormatted}
71
+
72
+ 'storybook-builder-vite' is deprecated and now located at ${_chalk.default.cyan('@storybook/builder-vite')}.
73
+
74
+ We can upgrade your project to use the new builder automatically.
75
+
76
+ More info: ${_chalk.default.yellow('https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#vite-builder-renamed')}
77
+ `;
78
+ },
79
+
80
+ async run({
81
+ result: {
82
+ builder,
83
+ main,
84
+ packageJson
85
+ },
86
+ packageManager,
87
+ dryRun
88
+ }) {
89
+ const {
90
+ dependencies = {},
91
+ devDependencies = {}
92
+ } = packageJson;
93
+ logger.info(`Removing existing 'storybook-builder-vite' dependency`);
94
+
95
+ if (!dryRun) {
96
+ delete dependencies['storybook-builder-vite'];
97
+ delete devDependencies['storybook-builder-vite'];
98
+ (0, _jsPackageManager.writePackageJson)(packageJson);
99
+ }
100
+
101
+ logger.info(`Adding '@storybook/builder-vite' as dev dependency`);
102
+
103
+ if (!dryRun) {
104
+ packageManager.addDependencies({
105
+ installAsDevDependencies: true
106
+ }, ['@storybook/builder-vite']);
107
+ }
108
+
109
+ logger.info(`Updating main.js to use vite builder`);
110
+
111
+ if (!dryRun) {
112
+ const updatedBuilder = typeof builder === 'string' ? '@storybook/builder-vite' : {
113
+ name: '@storybook/builder-vite',
114
+ options: builder.options
115
+ };
116
+ main.setFieldValue(['core', 'builder'], updatedBuilder);
117
+ await (0, _csfTools.writeConfig)(main);
118
+ }
119
+ }
120
+
121
+ };
122
+ 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;
@@ -1 +1,5 @@
1
- "use strict";
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.generateStorybookBabelConfig = exports.generateStorybookBabelConfigInCWD = void 0;
6
+ exports.generateStorybookBabelConfigInCWD = exports.generateStorybookBabelConfig = void 0;
7
7
 
8
8
  require("core-js/modules/es.promise.js");
9
9
 
@@ -3,15 +3,18 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.detect = detect;
7
+ exports.detectBuilder = detectBuilder;
6
8
  exports.detectFrameworkPreset = detectFrameworkPreset;
7
- exports.isStorybookInstalled = isStorybookInstalled;
8
9
  exports.detectLanguage = detectLanguage;
9
- exports.detect = detect;
10
+ exports.isStorybookInstalled = isStorybookInstalled;
10
11
 
11
12
  var _path = _interopRequireDefault(require("path"));
12
13
 
13
14
  var _fs = _interopRequireDefault(require("fs"));
14
15
 
16
+ var _findUp = _interopRequireDefault(require("find-up"));
17
+
15
18
  var _project_types = require("./project_types");
16
19
 
17
20
  var _helpers = require("./helpers");
@@ -20,6 +23,8 @@ var _jsPackageManager = require("./js-package-manager");
20
23
 
21
24
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
25
 
26
+ const viteConfigFiles = ['vite.config.ts', 'vite.config.js', 'vite.config.mjs'];
27
+
23
28
  const hasDependency = (packageJson, name, matcher) => {
24
29
  var _packageJson$dependen, _packageJson$devDepen;
25
30
 
@@ -96,6 +101,52 @@ function detectFrameworkPreset(packageJson = {}) {
96
101
  });
97
102
  return result ? result.preset : _project_types.ProjectType.UNDETECTED;
98
103
  }
104
+ /**
105
+ * Attempts to detect which builder to use, by searching for a vite config file. If one is found, the vite builder
106
+ * will be used, otherwise, webpack4 is the default.
107
+ *
108
+ * @returns CoreBuilder
109
+ */
110
+
111
+
112
+ function detectBuilder(packageManager) {
113
+ const viteConfig = _findUp.default.sync(viteConfigFiles);
114
+
115
+ if (viteConfig) {
116
+ (0, _helpers.paddedLog)('Detected vite project, setting builder to @storybook/builder-vite');
117
+ return _project_types.CoreBuilder.Vite;
118
+ }
119
+
120
+ try {
121
+ let out = '';
122
+
123
+ if (packageManager.type === 'npm') {
124
+ try {
125
+ // npm <= v7
126
+ out = packageManager.executeCommand('npm', ['ls', 'webpack']);
127
+ } catch (e2) {
128
+ // npm >= v8
129
+ out = packageManager.executeCommand('npm', ['why', 'webpack']);
130
+ }
131
+ } else {
132
+ out = packageManager.executeCommand('yarn', ['why', 'webpack']);
133
+ } // if the user has BOTH webpack 4 and 5 installed already, we'll pick the safest options (4)
134
+
135
+
136
+ if (out.includes('webpack@4') || out.includes('webpack@npm:4')) {
137
+ return _project_types.CoreBuilder.Webpack5;
138
+ } // the user has webpack 4 installed, but not 5
139
+
140
+
141
+ if (out.includes('webpack@5') || out.includes('webpack@npm:5')) {
142
+ return _project_types.CoreBuilder.Webpack5;
143
+ }
144
+ } catch (err) {//
145
+ } // Fallback to webpack4
146
+
147
+
148
+ return _project_types.CoreBuilder.Webpack4;
149
+ }
99
150
 
100
151
  function isStorybookInstalled(dependencies, force) {
101
152
  if (!dependencies) {
@@ -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);
@@ -24,3 +24,9 @@ h1 {
24
24
  button + button {
25
25
  margin-left: 10px;
26
26
  }
27
+
28
+ .welcome {
29
+ color: #333;
30
+ font-size: 14px;
31
+ margin-right: 10px;
32
+ }
@@ -28,7 +28,12 @@ export const Header = ({ user, onLogin, onLogout, onCreateAccount }) => (
28
28
  </div>
29
29
  <div>
30
30
  {user ? (
31
- <Button size="small" onClick={onLogout} label="Log out" />
31
+ <>
32
+ <span className="welcome">
33
+ Welcome, <b>{user.name}</b>!
34
+ </span>
35
+ <Button size="small" onClick={onLogout} label="Log out" />
36
+ </>
32
37
  ) : (
33
38
  <>
34
39
  <Button size="small" onClick={onLogin} label="Log in" />
@@ -5,13 +5,19 @@ import { Header } from './Header';
5
5
  export default {
6
6
  title: 'Example/Header',
7
7
  component: Header,
8
+ parameters: {
9
+ // More on Story layout: https://storybook.js.org/docs/react/configure/story-layout
10
+ layout: 'fullscreen',
11
+ },
8
12
  };
9
13
 
10
14
  const Template = (args) => <Header {...args} />;
11
15
 
12
16
  export const LoggedIn = Template.bind({});
13
17
  LoggedIn.args = {
14
- user: {},
18
+ user: {
19
+ name: 'Jane Doe',
20
+ },
15
21
  };
16
22
 
17
23
  export const LoggedOut = Template.bind({});
@@ -1,71 +1,69 @@
1
1
  import React from 'react';
2
- import PropTypes from 'prop-types';
3
2
 
4
3
  import { Header } from './Header';
5
4
  import './page.css';
6
5
 
7
- export const Page = ({ user, onLogin, onLogout, onCreateAccount }) => (
8
- <article>
9
- <Header user={user} onLogin={onLogin} onLogout={onLogout} onCreateAccount={onCreateAccount} />
6
+ export const Page = () => {
7
+ const [user, setUser] = React.useState();
10
8
 
11
- <section>
12
- <h2>Pages in Storybook</h2>
13
- <p>
14
- We recommend building UIs with a{' '}
15
- <a href="https://componentdriven.org" target="_blank" rel="noopener noreferrer">
16
- <strong>component-driven</strong>
17
- </a>{' '}
18
- process starting with atomic components and ending with pages.
19
- </p>
20
- <p>
21
- Render pages with mock data. This makes it easy to build and review page states without
22
- needing to navigate to them in your app. Here are some handy patterns for managing page data
23
- in Storybook:
24
- </p>
25
- <ul>
26
- <li>
27
- Use a higher-level connected component. Storybook helps you compose such data from the
28
- "args" of child component stories
29
- </li>
30
- <li>
31
- Assemble data in the page component from your services. You can mock these services out
32
- using Storybook.
33
- </li>
34
- </ul>
35
- <p>
36
- Get a guided tutorial on component-driven development at{' '}
37
- <a href="https://storybook.js.org/tutorials/" target="_blank" rel="noopener noreferrer">
38
- Storybook tutorials
39
- </a>
40
- . Read more in the{' '}
41
- <a href="https://storybook.js.org/docs" target="_blank" rel="noopener noreferrer">
42
- docs
43
- </a>
44
- .
45
- </p>
46
- <div className="tip-wrapper">
47
- <span className="tip">Tip</span> Adjust the width of the canvas with the{' '}
48
- <svg width="10" height="10" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg">
49
- <g fill="none" fillRule="evenodd">
50
- <path
51
- 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"
52
- id="a"
53
- fill="#999"
54
- />
55
- </g>
56
- </svg>
57
- Viewports addon in the toolbar
58
- </div>
59
- </section>
60
- </article>
61
- );
62
- Page.propTypes = {
63
- user: PropTypes.shape({}),
64
- onLogin: PropTypes.func.isRequired,
65
- onLogout: PropTypes.func.isRequired,
66
- onCreateAccount: PropTypes.func.isRequired,
67
- };
9
+ return (
10
+ <article>
11
+ <Header
12
+ user={user}
13
+ onLogin={() => setUser({ name: 'Jane Doe' })}
14
+ onLogout={() => setUser(undefined)}
15
+ onCreateAccount={() => setUser({ name: 'Jane Doe' })}
16
+ />
68
17
 
69
- Page.defaultProps = {
70
- user: null,
18
+ <section>
19
+ <h2>Pages in Storybook</h2>
20
+ <p>
21
+ We recommend building UIs with a{' '}
22
+ <a href="https://componentdriven.org" target="_blank" rel="noopener noreferrer">
23
+ <strong>component-driven</strong>
24
+ </a>{' '}
25
+ process starting with atomic components and ending with pages.
26
+ </p>
27
+ <p>
28
+ Render pages with mock data. This makes it easy to build and review page states without
29
+ needing to navigate to them in your app. Here are some handy patterns for managing page
30
+ data in Storybook:
31
+ </p>
32
+ <ul>
33
+ <li>
34
+ Use a higher-level connected component. Storybook helps you compose such data from the
35
+ "args" of child component stories
36
+ </li>
37
+ <li>
38
+ Assemble data in the page component from your services. You can mock these services out
39
+ using Storybook.
40
+ </li>
41
+ </ul>
42
+ <p>
43
+ Get a guided tutorial on component-driven development at{' '}
44
+ <a href="https://storybook.js.org/tutorials/" target="_blank" rel="noopener noreferrer">
45
+ Storybook tutorials
46
+ </a>
47
+ . Read more in the{' '}
48
+ <a href="https://storybook.js.org/docs" target="_blank" rel="noopener noreferrer">
49
+ docs
50
+ </a>
51
+ .
52
+ </p>
53
+ <div className="tip-wrapper">
54
+ <span className="tip">Tip</span> Adjust the width of the canvas with the{' '}
55
+ <svg width="10" height="10" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg">
56
+ <g fill="none" fillRule="evenodd">
57
+ <path
58
+ 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"
59
+ id="a"
60
+ fill="#999"
61
+ />
62
+ </g>
63
+ </svg>
64
+ Viewports addon in the toolbar
65
+ </div>
66
+ </section>
67
+ </article>
68
+ );
71
69
  };
@@ -1,22 +1,25 @@
1
1
  import React from 'react';
2
+ import { within, userEvent } from '@storybook/testing-library';
2
3
 
3
4
  import { Page } from './Page';
4
- import * as HeaderStories from './Header.stories';
5
5
 
6
6
  export default {
7
7
  title: 'Example/Page',
8
8
  component: Page,
9
+ parameters: {
10
+ // More on Story layout: https://storybook.js.org/docs/react/configure/story-layout
11
+ layout: 'fullscreen',
12
+ },
9
13
  };
10
14
 
11
15
  const Template = (args) => <Page {...args} />;
12
16
 
13
- export const LoggedIn = Template.bind({});
14
- LoggedIn.args = {
15
- // More on composing args: https://storybook.js.org/docs/react/writing-stories/args#args-composition
16
- ...HeaderStories.LoggedIn.args,
17
- };
18
-
17
+ // More on interaction testing: https://storybook.js.org/docs/react/writing-tests/interaction-testing
19
18
  export const LoggedOut = Template.bind({});
20
- LoggedOut.args = {
21
- ...HeaderStories.LoggedOut.args,
19
+
20
+ export const LoggedIn = Template.bind({});
21
+ LoggedIn.play = async ({ canvasElement }) => {
22
+ const canvas = within(canvasElement);
23
+ const loginButton = await canvas.getByRole('button', { name: /Log in/i });
24
+ await userEvent.click(loginButton);
22
25
  };
@@ -0,0 +1,51 @@
1
+ import Button from './Button.svelte';
2
+
3
+ // More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
4
+ // More on argTypes: https://storybook.js.org/docs/svelte/api/argtypes
5
+ export default {
6
+ title: 'Example/Button',
7
+ component: Button,
8
+ argTypes: {
9
+ backgroundColor: { control: 'color' },
10
+ label: { control: 'text' },
11
+ onClick: { action: 'onClick' },
12
+ primary: { control: 'boolean' },
13
+ size: {
14
+ control: { type: 'select' },
15
+ options: ['small', 'medium', 'large'],
16
+ },
17
+ },
18
+ };
19
+
20
+ // More on component templates: https://storybook.js.org/docs/svelte/writing-stories/introduction#using-args
21
+ const Template = (args) => ({
22
+ Component: Button,
23
+ props: args,
24
+ on: {
25
+ click: args.onClick,
26
+ },
27
+ });
28
+
29
+ // More on args: https://storybook.js.org/docs/svelte/writing-stories/args
30
+ export const Primary = Template.bind({});
31
+ Primary.args = {
32
+ primary: true,
33
+ label: 'Button',
34
+ };
35
+
36
+ export const Secondary = Template.bind({});
37
+ Secondary.args = {
38
+ label: 'Button',
39
+ };
40
+
41
+ export const Large = Template.bind({});
42
+ Large.args = {
43
+ size: 'large',
44
+ label: 'Button',
45
+ };
46
+
47
+ export const Small = Template.bind({});
48
+ Small.args = {
49
+ size: 'small',
50
+ label: 'Button',
51
+ };
@@ -0,0 +1,29 @@
1
+ import Header from './Header.svelte';
2
+
3
+ export default {
4
+ title: 'Example/Header',
5
+ component: Header,
6
+ argTypes: {
7
+ onLogin: { action: 'onLogin' },
8
+ onLogout: { action: 'onLogout' },
9
+ onCreateAccount: { action: 'onCreateAccount' },
10
+ },
11
+ };
12
+
13
+ const Template = (args) => ({
14
+ Component: Header,
15
+ props: args,
16
+ on: {
17
+ login: args.onLogin,
18
+ logout: args.onLogout,
19
+ createAccount: args.onCreateAccount,
20
+ },
21
+ });
22
+
23
+ export const LoggedIn = Template.bind({});
24
+ LoggedIn.args = {
25
+ user: {},
26
+ };
27
+
28
+ export const LoggedOut = Template.bind({});
29
+ LoggedOut.args = {};
@@ -0,0 +1,29 @@
1
+ import Page from './Page.svelte';
2
+
3
+ export default {
4
+ title: 'Example/Page',
5
+ component: Page,
6
+ argTypes: {
7
+ onLogin: { action: 'onLogin' },
8
+ onLogout: { action: 'onLogout' },
9
+ onCreateAccount: { action: 'onCreateAccount' },
10
+ },
11
+ };
12
+
13
+ const Template = (args) => ({
14
+ Component: Page,
15
+ props: args,
16
+ on: {
17
+ login: args.onLogin,
18
+ logout: args.onLogout,
19
+ createAccount: args.onCreateAccount,
20
+ },
21
+ });
22
+
23
+ export const LoggedIn = Template.bind({});
24
+ LoggedIn.args = {
25
+ user: {},
26
+ };
27
+
28
+ export const LoggedOut = Template.bind({});
29
+ LoggedOut.args = {};
@@ -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
@@ -3,11 +3,11 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getAngularAppTsConfigPath = getAngularAppTsConfigPath;
7
- exports.getAngularAppTsConfigJson = getAngularAppTsConfigJson;
8
6
  exports.editStorybookTsConfig = editStorybookTsConfig;
9
- exports.isDefaultProjectSet = isDefaultProjectSet;
7
+ exports.getAngularAppTsConfigJson = getAngularAppTsConfigJson;
8
+ exports.getAngularAppTsConfigPath = getAngularAppTsConfigPath;
10
9
  exports.getBaseTsConfigName = getBaseTsConfigName;
10
+ exports.isDefaultProjectSet = isDefaultProjectSet;
11
11
 
12
12
  require("core-js/modules/es.promise.js");
13
13
 
@@ -19,9 +19,9 @@ var _fsExtra = require("fs-extra");
19
19
 
20
20
  var _helpers = require("../../helpers");
21
21
 
22
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
22
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
23
 
24
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
24
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
25
 
26
26
  function getAngularAppTsConfigPath() {
27
27
  const angularJson = (0, _helpers.readFileAsJson)('angular.json', true);
@@ -56,7 +56,7 @@ const generator = async (packageManager, npmOptions, options) => {
56
56
  builder: _project_types.CoreBuilder.Webpack5
57
57
  }) : options;
58
58
  (0, _baseGenerator.baseGenerator)(packageManager, npmOptions, updatedOptions, 'angular', {
59
- extraPackages: ['@compodoc/compodoc', '@angular/elements', '@webcomponents/custom-elements'],
59
+ extraPackages: ['@compodoc/compodoc'],
60
60
  addScripts: false
61
61
  });
62
62
  (0, _helpers.copyTemplate)(__dirname);
@@ -1,9 +1,21 @@
1
1
  {
2
2
  "extends": "%SET_DURING_SB_INIT%",
3
3
  "compilerOptions": {
4
- "types": ["node"]
4
+ "types": [
5
+ "node"
6
+ ],
7
+ "allowSyntheticDefaultImports": true
5
8
  },
6
- "exclude": ["../src/test.ts", "../src/**/*.spec.ts", "../projects/**/*.spec.ts"],
7
- "include": ["../src/**/*", "../projects/**/*"],
8
- "files": ["./typings.d.ts"]
9
- }
9
+ "exclude": [
10
+ "../src/test.ts",
11
+ "../src/**/*.spec.ts",
12
+ "../projects/**/*.spec.ts"
13
+ ],
14
+ "include": [
15
+ "../src/**/*",
16
+ "../projects/**/*"
17
+ ],
18
+ "files": [
19
+ "./typings.d.ts"
20
+ ]
21
+ }