@storybook/cli 6.5.0-alpha.7 → 6.5.0-beta.1

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 (257) 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/html/js/Header.js +2 -0
  15. package/dist/cjs/frameworks/html/js/Header.stories.js +8 -1
  16. package/dist/cjs/frameworks/html/js/Page.js +29 -2
  17. package/dist/cjs/frameworks/html/js/Page.stories.js +12 -13
  18. package/dist/cjs/frameworks/html/ts/Header.stories.ts +5 -0
  19. package/dist/cjs/frameworks/html/ts/Header.ts +3 -1
  20. package/dist/cjs/frameworks/html/ts/Page.stories.ts +12 -14
  21. package/dist/cjs/frameworks/html/ts/Page.ts +32 -8
  22. package/dist/cjs/frameworks/preact/Header.jsx +6 -1
  23. package/dist/cjs/frameworks/preact/Header.stories.jsx +7 -1
  24. package/dist/cjs/frameworks/preact/Page.jsx +62 -63
  25. package/dist/cjs/frameworks/preact/Page.stories.jsx +12 -9
  26. package/dist/cjs/frameworks/react/js/Header.jsx +6 -1
  27. package/dist/cjs/frameworks/react/js/Header.stories.jsx +7 -1
  28. package/dist/cjs/frameworks/react/js/Page.jsx +61 -63
  29. package/dist/cjs/frameworks/react/js/Page.stories.jsx +12 -9
  30. package/dist/cjs/frameworks/react/ts/Header.stories.tsx +7 -1
  31. package/dist/cjs/frameworks/react/ts/Header.tsx +11 -2
  32. package/dist/cjs/frameworks/react/ts/Page.stories.tsx +12 -9
  33. package/dist/cjs/frameworks/react/ts/Page.tsx +66 -60
  34. package/dist/cjs/frameworks/svelte/Button.stories.js +51 -0
  35. package/dist/cjs/frameworks/svelte/Header.stories.js +35 -0
  36. package/dist/cjs/frameworks/svelte/Header.svelte +3 -0
  37. package/dist/cjs/frameworks/svelte/Page.stories.js +27 -0
  38. package/dist/cjs/frameworks/svelte/Page.svelte +2 -16
  39. package/dist/cjs/frameworks/vue/Header.stories.js +7 -1
  40. package/dist/cjs/frameworks/vue/Header.vue +1 -0
  41. package/dist/cjs/frameworks/vue/Page.stories.js +15 -13
  42. package/dist/cjs/frameworks/vue/Page.vue +7 -7
  43. package/dist/cjs/frameworks/vue3/Header.stories.js +7 -1
  44. package/dist/cjs/frameworks/vue3/Header.vue +1 -0
  45. package/dist/cjs/frameworks/vue3/Page.stories.js +16 -17
  46. package/dist/cjs/frameworks/vue3/Page.vue +18 -8
  47. package/dist/cjs/frameworks/web-components/js/Page.js +2 -2
  48. package/dist/cjs/frameworks/web-components/ts/Page.ts +2 -2
  49. package/dist/cjs/generators/ANGULAR/angular-helpers.js +5 -5
  50. package/dist/cjs/generators/ANGULAR/index.js +2 -2
  51. package/dist/cjs/generators/ANGULAR/template-csf/.storybook/tsconfig.json +17 -5
  52. package/dist/cjs/generators/AURELIA/index.js +1 -1
  53. package/dist/cjs/generators/AURELIA/template-csf/.storybook/tsconfig.json +16 -5
  54. package/dist/cjs/generators/EMBER/index.js +1 -1
  55. package/dist/cjs/generators/HTML/index.js +1 -1
  56. package/dist/cjs/generators/METEOR/index.js +1 -1
  57. package/dist/cjs/generators/MITHRIL/index.js +1 -1
  58. package/dist/cjs/generators/PREACT/index.js +1 -1
  59. package/dist/cjs/generators/RAX/index.js +1 -1
  60. package/dist/cjs/generators/REACT_NATIVE/template-csf/storybook/addons.js +3 -3
  61. package/dist/cjs/generators/REACT_NATIVE/template-csf/storybook/rn-addons.js +2 -2
  62. package/dist/cjs/generators/REACT_SCRIPTS/index.js +9 -1
  63. package/dist/cjs/generators/RIOT/index.js +1 -1
  64. package/dist/cjs/generators/SERVER/index.js +1 -1
  65. package/dist/cjs/generators/SFC_VUE/index.js +1 -1
  66. package/dist/cjs/generators/SVELTE/index.js +0 -1
  67. package/dist/cjs/generators/VUE/index.js +1 -1
  68. package/dist/cjs/generators/VUE3/index.js +1 -1
  69. package/dist/cjs/generators/WEBPACK_REACT/index.js +1 -1
  70. package/dist/cjs/generators/baseGenerator.js +38 -4
  71. package/dist/cjs/generators/configure.js +3 -1
  72. package/dist/cjs/helpers.js +9 -8
  73. package/dist/cjs/initiate.js +27 -24
  74. package/dist/cjs/js-package-manager/JsPackageManager.js +2 -2
  75. package/dist/cjs/project_types.js +2 -1
  76. package/dist/cjs/repro-generators/configs.js +51 -8
  77. package/dist/cjs/repro-generators/scripts.js +46 -14
  78. package/dist/cjs/repro.js +3 -2
  79. package/dist/cjs/typings.d.ts +3 -0
  80. package/dist/cjs/upgrade.js +4 -2
  81. package/dist/cjs/versions.js +66 -0
  82. package/dist/cjs/window.d.js +5 -1
  83. package/dist/esm/add.js +3 -3
  84. package/dist/esm/automigrate/fixes/builder-vite.js +122 -0
  85. package/dist/esm/automigrate/fixes/index.js +3 -1
  86. package/dist/esm/automigrate/types.js +5 -1
  87. package/dist/esm/babel-config.js +1 -1
  88. package/dist/esm/detect.js +53 -2
  89. package/dist/esm/extract.js +7 -2
  90. package/dist/esm/frameworks/angular/Header.stories.ts +8 -3
  91. package/dist/esm/frameworks/angular/Page.stories.ts +12 -10
  92. package/dist/esm/frameworks/angular/header.component.ts +30 -19
  93. package/dist/esm/frameworks/angular/page.component.ts +13 -27
  94. package/dist/esm/frameworks/common/header.css +6 -0
  95. package/dist/esm/frameworks/html/js/Header.js +2 -0
  96. package/dist/esm/frameworks/html/js/Header.stories.js +8 -1
  97. package/dist/esm/frameworks/html/js/Page.js +29 -2
  98. package/dist/esm/frameworks/html/js/Page.stories.js +12 -13
  99. package/dist/esm/frameworks/html/ts/Header.stories.ts +5 -0
  100. package/dist/esm/frameworks/html/ts/Header.ts +3 -1
  101. package/dist/esm/frameworks/html/ts/Page.stories.ts +12 -14
  102. package/dist/esm/frameworks/html/ts/Page.ts +32 -8
  103. package/dist/esm/frameworks/preact/Header.jsx +6 -1
  104. package/dist/esm/frameworks/preact/Header.stories.jsx +7 -1
  105. package/dist/esm/frameworks/preact/Page.jsx +62 -63
  106. package/dist/esm/frameworks/preact/Page.stories.jsx +12 -9
  107. package/dist/esm/frameworks/react/js/Header.jsx +6 -1
  108. package/dist/esm/frameworks/react/js/Header.stories.jsx +7 -1
  109. package/dist/esm/frameworks/react/js/Page.jsx +61 -63
  110. package/dist/esm/frameworks/react/js/Page.stories.jsx +12 -9
  111. package/dist/esm/frameworks/react/ts/Header.stories.tsx +7 -1
  112. package/dist/esm/frameworks/react/ts/Header.tsx +11 -2
  113. package/dist/esm/frameworks/react/ts/Page.stories.tsx +12 -9
  114. package/dist/esm/frameworks/react/ts/Page.tsx +66 -60
  115. package/dist/esm/frameworks/svelte/Button.stories.js +51 -0
  116. package/dist/esm/frameworks/svelte/Header.stories.js +35 -0
  117. package/dist/esm/frameworks/svelte/Header.svelte +3 -0
  118. package/dist/esm/frameworks/svelte/Page.stories.js +27 -0
  119. package/dist/esm/frameworks/svelte/Page.svelte +2 -16
  120. package/dist/esm/frameworks/vue/Header.stories.js +7 -1
  121. package/dist/esm/frameworks/vue/Header.vue +1 -0
  122. package/dist/esm/frameworks/vue/Page.stories.js +15 -13
  123. package/dist/esm/frameworks/vue/Page.vue +7 -7
  124. package/dist/esm/frameworks/vue3/Header.stories.js +7 -1
  125. package/dist/esm/frameworks/vue3/Header.vue +1 -0
  126. package/dist/esm/frameworks/vue3/Page.stories.js +16 -17
  127. package/dist/esm/frameworks/vue3/Page.vue +18 -8
  128. package/dist/esm/frameworks/web-components/js/Page.js +2 -2
  129. package/dist/esm/frameworks/web-components/ts/Page.ts +2 -2
  130. package/dist/esm/generators/ANGULAR/angular-helpers.js +5 -5
  131. package/dist/esm/generators/ANGULAR/index.js +2 -2
  132. package/dist/esm/generators/ANGULAR/template-csf/.storybook/tsconfig.json +17 -5
  133. package/dist/esm/generators/AURELIA/index.js +1 -1
  134. package/dist/esm/generators/AURELIA/template-csf/.storybook/tsconfig.json +16 -5
  135. package/dist/esm/generators/EMBER/index.js +1 -1
  136. package/dist/esm/generators/HTML/index.js +1 -1
  137. package/dist/esm/generators/METEOR/index.js +1 -1
  138. package/dist/esm/generators/MITHRIL/index.js +1 -1
  139. package/dist/esm/generators/PREACT/index.js +1 -1
  140. package/dist/esm/generators/RAX/index.js +1 -1
  141. package/dist/esm/generators/REACT_NATIVE/template-csf/storybook/addons.js +3 -3
  142. package/dist/esm/generators/REACT_NATIVE/template-csf/storybook/rn-addons.js +2 -2
  143. package/dist/esm/generators/REACT_SCRIPTS/index.js +9 -1
  144. package/dist/esm/generators/RIOT/index.js +1 -1
  145. package/dist/esm/generators/SERVER/index.js +1 -1
  146. package/dist/esm/generators/SFC_VUE/index.js +1 -1
  147. package/dist/esm/generators/SVELTE/index.js +0 -1
  148. package/dist/esm/generators/VUE/index.js +1 -1
  149. package/dist/esm/generators/VUE3/index.js +1 -1
  150. package/dist/esm/generators/WEBPACK_REACT/index.js +1 -1
  151. package/dist/esm/generators/baseGenerator.js +38 -4
  152. package/dist/esm/generators/configure.js +3 -1
  153. package/dist/esm/helpers.js +9 -8
  154. package/dist/esm/initiate.js +27 -24
  155. package/dist/esm/js-package-manager/JsPackageManager.js +2 -2
  156. package/dist/esm/project_types.js +2 -1
  157. package/dist/esm/repro-generators/configs.js +51 -8
  158. package/dist/esm/repro-generators/scripts.js +46 -14
  159. package/dist/esm/repro.js +3 -2
  160. package/dist/esm/typings.d.ts +3 -0
  161. package/dist/esm/upgrade.js +4 -2
  162. package/dist/esm/versions.js +66 -0
  163. package/dist/esm/window.d.js +5 -1
  164. package/dist/modern/add.js +3 -3
  165. package/dist/modern/automigrate/fixes/builder-vite.js +122 -0
  166. package/dist/modern/automigrate/fixes/index.js +3 -1
  167. package/dist/modern/automigrate/types.js +5 -1
  168. package/dist/modern/babel-config.js +1 -1
  169. package/dist/modern/detect.js +53 -2
  170. package/dist/modern/extract.js +7 -2
  171. package/dist/modern/frameworks/common/header.css +6 -0
  172. package/dist/modern/frameworks/html/js/Header.js +2 -0
  173. package/dist/modern/frameworks/html/js/Header.stories.js +8 -1
  174. package/dist/modern/frameworks/html/js/Page.js +29 -2
  175. package/dist/modern/frameworks/html/js/Page.stories.js +12 -13
  176. package/dist/modern/frameworks/preact/Header.jsx +6 -1
  177. package/dist/modern/frameworks/preact/Header.stories.jsx +7 -1
  178. package/dist/modern/frameworks/preact/Page.jsx +62 -63
  179. package/dist/modern/frameworks/preact/Page.stories.jsx +12 -9
  180. package/dist/modern/frameworks/react/js/Header.jsx +6 -1
  181. package/dist/modern/frameworks/react/js/Header.stories.jsx +7 -1
  182. package/dist/modern/frameworks/react/js/Page.jsx +61 -63
  183. package/dist/modern/frameworks/react/js/Page.stories.jsx +12 -9
  184. package/dist/modern/frameworks/svelte/Button.stories.js +51 -0
  185. package/dist/modern/frameworks/svelte/Header.stories.js +35 -0
  186. package/dist/modern/frameworks/svelte/Header.svelte +3 -0
  187. package/dist/modern/frameworks/svelte/Page.stories.js +27 -0
  188. package/dist/modern/frameworks/svelte/Page.svelte +2 -16
  189. package/dist/modern/frameworks/vue/Header.stories.js +7 -1
  190. package/dist/modern/frameworks/vue/Header.vue +1 -0
  191. package/dist/modern/frameworks/vue/Page.stories.js +15 -13
  192. package/dist/modern/frameworks/vue/Page.vue +7 -7
  193. package/dist/modern/frameworks/vue3/Header.stories.js +7 -1
  194. package/dist/modern/frameworks/vue3/Header.vue +1 -0
  195. package/dist/modern/frameworks/vue3/Page.stories.js +16 -17
  196. package/dist/modern/frameworks/vue3/Page.vue +18 -8
  197. package/dist/modern/frameworks/web-components/js/Page.js +2 -2
  198. package/dist/modern/generators/ANGULAR/angular-helpers.js +5 -5
  199. package/dist/modern/generators/ANGULAR/index.js +2 -2
  200. package/dist/modern/generators/ANGULAR/template-csf/.storybook/tsconfig.json +17 -5
  201. package/dist/modern/generators/AURELIA/index.js +1 -1
  202. package/dist/modern/generators/AURELIA/template-csf/.storybook/tsconfig.json +16 -5
  203. package/dist/modern/generators/EMBER/index.js +1 -1
  204. package/dist/modern/generators/HTML/index.js +1 -1
  205. package/dist/modern/generators/METEOR/index.js +1 -1
  206. package/dist/modern/generators/MITHRIL/index.js +1 -1
  207. package/dist/modern/generators/PREACT/index.js +1 -1
  208. package/dist/modern/generators/RAX/index.js +1 -1
  209. package/dist/modern/generators/REACT_NATIVE/template-csf/storybook/addons.js +3 -3
  210. package/dist/modern/generators/REACT_NATIVE/template-csf/storybook/rn-addons.js +2 -2
  211. package/dist/modern/generators/REACT_SCRIPTS/index.js +9 -1
  212. package/dist/modern/generators/RIOT/index.js +1 -1
  213. package/dist/modern/generators/SERVER/index.js +1 -1
  214. package/dist/modern/generators/SFC_VUE/index.js +1 -1
  215. package/dist/modern/generators/SVELTE/index.js +0 -1
  216. package/dist/modern/generators/VUE/index.js +1 -1
  217. package/dist/modern/generators/VUE3/index.js +1 -1
  218. package/dist/modern/generators/WEBPACK_REACT/index.js +1 -1
  219. package/dist/modern/generators/baseGenerator.js +38 -4
  220. package/dist/modern/generators/configure.js +3 -1
  221. package/dist/modern/helpers.js +9 -8
  222. package/dist/modern/initiate.js +27 -24
  223. package/dist/modern/js-package-manager/JsPackageManager.js +2 -2
  224. package/dist/modern/project_types.js +2 -1
  225. package/dist/modern/repro-generators/configs.js +51 -8
  226. package/dist/modern/repro-generators/scripts.js +46 -14
  227. package/dist/modern/repro.js +3 -2
  228. package/dist/modern/typings.d.ts +3 -0
  229. package/dist/modern/upgrade.js +4 -2
  230. package/dist/modern/versions.js +66 -0
  231. package/dist/modern/window.d.js +5 -1
  232. package/dist/ts3.4/automigrate/fixes/builder-vite.d.ts +19 -0
  233. package/dist/ts3.4/detect.d.ts +9 -2
  234. package/dist/ts3.4/project_types.d.ts +2 -1
  235. package/dist/ts3.4/repro-generators/configs.d.ts +8 -0
  236. package/dist/ts3.4/versions.d.ts +59 -0
  237. package/dist/ts3.9/automigrate/fixes/builder-vite.d.ts +19 -0
  238. package/dist/ts3.9/detect.d.ts +9 -2
  239. package/dist/ts3.9/project_types.d.ts +2 -1
  240. package/dist/ts3.9/repro-generators/configs.d.ts +9 -1
  241. package/dist/ts3.9/versions.d.ts +59 -0
  242. package/package.json +11 -12
  243. package/dist/cjs/frameworks/svelte/Button.stories.svelte +0 -57
  244. package/dist/cjs/frameworks/svelte/Header.stories.svelte +0 -32
  245. package/dist/cjs/frameworks/svelte/Page.stories.svelte +0 -32
  246. package/dist/cjs/typings.d.js +0 -1
  247. package/dist/cjs/versions.json +0 -59
  248. package/dist/esm/frameworks/svelte/Button.stories.svelte +0 -57
  249. package/dist/esm/frameworks/svelte/Header.stories.svelte +0 -32
  250. package/dist/esm/frameworks/svelte/Page.stories.svelte +0 -32
  251. package/dist/esm/typings.d.js +0 -1
  252. package/dist/esm/versions.json +0 -59
  253. package/dist/modern/frameworks/svelte/Button.stories.svelte +0 -57
  254. package/dist/modern/frameworks/svelte/Header.stories.svelte +0 -32
  255. package/dist/modern/frameworks/svelte/Page.stories.svelte +0 -32
  256. package/dist/modern/typings.d.js +0 -1
  257. package/dist/modern/versions.json +0 -59
@@ -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
- // };
@@ -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
+ }
@@ -26,6 +26,8 @@ export const createHeader = ({ user, onLogout, onLogin, onCreateAccount }) => {
26
26
 
27
27
  const account = document.createElement('div');
28
28
  if (user) {
29
+ const welcomeMessage = `<span class="welcome">Welcome, <b>${user.name}</b>!</span>`;
30
+ account.innerHTML = welcomeMessage;
29
31
  account.appendChild(createButton({ size: 'small', label: 'Log out', onClick: onLogout }));
30
32
  } else {
31
33
  account.appendChild(createButton({ size: 'small', label: 'Log in', onClick: onLogin }));
@@ -2,6 +2,11 @@ import { createHeader } from './Header';
2
2
 
3
3
  export default {
4
4
  title: 'Example/Header',
5
+ parameters: {
6
+ // More on Story layout: https://storybook.js.org/docs/html/configure/story-layout
7
+ layout: 'fullscreen',
8
+ },
9
+ // More on argTypes: https://storybook.js.org/docs/html/api/argtypes
5
10
  argTypes: {
6
11
  onLogin: { action: 'onLogin' },
7
12
  onLogout: { action: 'onLogout' },
@@ -13,7 +18,9 @@ const Template = (args) => createHeader(args);
13
18
 
14
19
  export const LoggedIn = Template.bind({});
15
20
  LoggedIn.args = {
16
- user: {},
21
+ user: {
22
+ name: 'Jane Doe',
23
+ },
17
24
  };
18
25
 
19
26
  export const LoggedOut = Template.bind({});
@@ -1,11 +1,38 @@
1
1
  import './page.css';
2
2
  import { createHeader } from './Header';
3
3
 
4
- export const createPage = ({ user, onLogout, onLogin, onCreateAccount }) => {
4
+ export const createPage = () => {
5
5
  const article = document.createElement('article');
6
+ let user = null;
7
+ let header = null;
6
8
 
7
- const header = createHeader({ onLogin, onLogout, onCreateAccount, user });
9
+ const rerenderHeader = () => {
10
+ const wrapper = document.getElementsByTagName('article')[0];
11
+ wrapper.replaceChild(createHeaderElement(), wrapper.firstChild);
12
+ };
13
+
14
+ const onLogin = () => {
15
+ user = { name: 'Jane Doe' };
16
+ rerenderHeader();
17
+ };
18
+
19
+ const onLogout = () => {
20
+ user = null;
21
+ rerenderHeader();
22
+ };
23
+
24
+ const onCreateAccount = () => {
25
+ user = { name: 'Jane Doe' };
26
+ rerenderHeader();
27
+ };
28
+
29
+ const createHeaderElement = () => {
30
+ return createHeader({ onLogin, onLogout, onCreateAccount, user });
31
+ };
32
+
33
+ header = createHeaderElement();
8
34
  article.appendChild(header);
35
+
9
36
  const section = `
10
37
  <section>
11
38
  <h2>Pages in Storybook</h2>
@@ -1,24 +1,23 @@
1
+ import { within, userEvent } from '@storybook/testing-library';
1
2
  import { createPage } from './Page';
2
- import * as HeaderStories from './Header.stories';
3
3
 
4
4
  export default {
5
5
  title: 'Example/Page',
6
- argTypes: {
7
- onLogin: { action: 'onLogin' },
8
- onLogout: { action: 'onLogout' },
9
- onCreateAccount: { action: 'onCreateAccount' },
6
+ parameters: {
7
+ // More on Story layout: https://storybook.js.org/docs/html/configure/story-layout
8
+ layout: 'fullscreen',
10
9
  },
11
10
  };
12
11
 
13
- const Template = (args) => createPage(args);
12
+ const Template = () => createPage();
13
+
14
+ export const LoggedOut = Template.bind({});
14
15
 
15
16
  export const LoggedIn = Template.bind({});
16
- LoggedIn.args = {
17
- // More on composing args: https://storybook.js.org/docs/html/writing-stories/args#args-composition
18
- ...HeaderStories.LoggedIn.args,
19
- };
20
17
 
21
- export const LoggedOut = Template.bind({});
22
- LoggedOut.args = {
23
- ...HeaderStories.LoggedOut.args,
18
+ // More on interaction testing: https://storybook.js.org/docs/html/writing-tests/interaction-testing
19
+ LoggedIn.play = async ({ canvasElement }) => {
20
+ const canvas = within(canvasElement);
21
+ const loginButton = await canvas.getByRole('button', { name: /Log in/i });
22
+ await userEvent.click(loginButton);
24
23
  };
@@ -3,6 +3,11 @@ import { createHeader, HeaderProps } from './Header';
3
3
 
4
4
  export default {
5
5
  title: 'Example/Header',
6
+ parameters: {
7
+ // More on Story layout: https://storybook.js.org/docs/html/configure/story-layout
8
+ layout: 'fullscreen',
9
+ },
10
+ // More on argTypes: https://storybook.js.org/docs/html/api/argtypes
6
11
  argTypes: {
7
12
  onLogin: { action: 'onLogin' },
8
13
  onLogout: { action: 'onLogout' },
@@ -2,7 +2,7 @@ import './header.css';
2
2
  import { createButton } from './Button';
3
3
 
4
4
  export interface HeaderProps {
5
- user?: {};
5
+ user?: { name: string };
6
6
  onLogin: () => void;
7
7
  onLogout: () => void;
8
8
  onCreateAccount: () => void;
@@ -33,6 +33,8 @@ export const createHeader = ({ user, onLogout, onLogin, onCreateAccount }: Heade
33
33
 
34
34
  const account = document.createElement('div');
35
35
  if (user) {
36
+ const welcomeMessage = `<span class="welcome">Welcome, <b>${user.name}</b>!</span>`;
37
+ account.innerHTML = welcomeMessage;
36
38
  account.appendChild(createButton({ size: 'small', label: 'Log out', onClick: onLogout }));
37
39
  } else {
38
40
  account.appendChild(createButton({ size: 'small', label: 'Log in', onClick: onLogin }));
@@ -1,26 +1,24 @@
1
+ import { within, userEvent } from '@storybook/testing-library';
1
2
  import { Story, Meta } from '@storybook/html';
2
3
  import { createPage } from './Page';
3
- import * as HeaderStories from './Header.stories';
4
- import { HeaderProps } from './Header';
5
4
 
6
5
  export default {
7
6
  title: 'Example/Page',
8
- argTypes: {
9
- onLogin: { action: 'onLogin' },
10
- onLogout: { action: 'onLogout' },
11
- onCreateAccount: { action: 'onCreateAccount' },
7
+ parameters: {
8
+ // More on Story layout: https://storybook.js.org/docs/html/configure/story-layout
9
+ layout: 'fullscreen',
12
10
  },
13
11
  } as Meta;
14
12
 
15
- const Template: Story<HeaderProps> = (args) => createPage(args);
13
+ const Template: Story = () => createPage();
14
+
15
+ export const LoggedOut = Template.bind({});
16
16
 
17
17
  export const LoggedIn = Template.bind({});
18
- LoggedIn.args = {
19
- // More on composing args: https://storybook.js.org/docs/html/writing-stories/args#args-composition
20
- ...HeaderStories.LoggedIn.args,
21
- };
22
18
 
23
- export const LoggedOut = Template.bind({});
24
- LoggedOut.args = {
25
- ...HeaderStories.LoggedOut.args,
19
+ // More on interaction testing: https://storybook.js.org/docs/html/writing-tests/interaction-testing
20
+ LoggedIn.play = async ({ canvasElement }) => {
21
+ const canvas = within(canvasElement);
22
+ const loginButton = await canvas.getByRole('button', { name: /Log in/i });
23
+ await userEvent.click(loginButton);
26
24
  };
@@ -1,18 +1,42 @@
1
1
  import './page.css';
2
2
  import { createHeader } from './Header';
3
3
 
4
- export interface PageProps {
5
- user?: {};
6
- onLogin: () => void;
7
- onLogout: () => void;
8
- onCreateAccount: () => void;
9
- }
4
+ type User = {
5
+ name: string;
6
+ };
10
7
 
11
- export const createPage = ({ user, onLogout, onLogin, onCreateAccount }: PageProps) => {
8
+ export const createPage = () => {
12
9
  const article = document.createElement('article');
10
+ let user: User = null;
11
+ let header = null;
12
+
13
+ const rerenderHeader = () => {
14
+ const wrapper = document.getElementsByTagName('article')[0];
15
+ wrapper.replaceChild(createHeaderElement(), wrapper.firstChild);
16
+ };
17
+
18
+ const onLogin = () => {
19
+ user = { name: 'Jane Doe' };
20
+ rerenderHeader();
21
+ };
22
+
23
+ const onLogout = () => {
24
+ user = null;
25
+ rerenderHeader();
26
+ };
13
27
 
14
- const header = createHeader({ onLogin, onLogout, onCreateAccount, user });
28
+ const onCreateAccount = () => {
29
+ user = { name: 'Jane Doe' };
30
+ rerenderHeader();
31
+ };
32
+
33
+ const createHeaderElement = () => {
34
+ return createHeader({ onLogin, onLogout, onCreateAccount, user });
35
+ };
36
+
37
+ header = createHeaderElement();
15
38
  article.appendChild(header);
39
+
16
40
  const section = `
17
41
  <section>
18
42
  <h2>Pages in Storybook</h2>
@@ -29,7 +29,12 @@ export const Header = ({ user, onLogin, onLogout, onCreateAccount }) => (
29
29
  </div>
30
30
  <div>
31
31
  {user ? (
32
- <Button size="small" onClick={onLogout} label="Log out" />
32
+ <Fragment>
33
+ <span className="welcome">
34
+ Welcome, <b>{user.name}</b>!
35
+ </span>
36
+ <Button size="small" onClick={onLogout} label="Log out" />
37
+ </Fragment>
33
38
  ) : (
34
39
  <Fragment>
35
40
  <Button size="small" onClick={onLogin} label="Log in" />
@@ -5,6 +5,10 @@ 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/preact/configure/story-layout
10
+ layout: 'fullscreen',
11
+ },
8
12
  argTypes: {
9
13
  onLogin: { action: 'onLogin' },
10
14
  onLogout: { action: 'onLogout' },
@@ -16,7 +20,9 @@ const Template = (args) => <Header {...args} />;
16
20
 
17
21
  export const LoggedIn = Template.bind({});
18
22
  LoggedIn.args = {
19
- user: {},
23
+ user: {
24
+ name: 'Jane Doe',
25
+ },
20
26
  };
21
27
 
22
28
  export const LoggedOut = Template.bind({});
@@ -1,72 +1,71 @@
1
1
  /** @jsx h */
2
2
  import { h } from 'preact';
3
- import PropTypes from 'prop-types';
3
+ import { useState } from 'preact/hooks';
4
4
 
5
5
  import { Header } from './Header';
6
6
  import './page.css';
7
7
 
8
- export const Page = ({ user, onLogin, onLogout, onCreateAccount }) => (
9
- <article>
10
- <Header user={user} onLogin={onLogin} onLogout={onLogout} onCreateAccount={onCreateAccount} />
8
+ export const Page = () => {
9
+ const [user, setUser] = useState();
11
10
 
12
- <section>
13
- <h2>Pages in Storybook</h2>
14
- <p>
15
- We recommend building UIs with a{' '}
16
- <a href="https://componentdriven.org" target="_blank" rel="noopener noreferrer">
17
- <strong>component-driven</strong>
18
- </a>{' '}
19
- process starting with atomic components and ending with pages.
20
- </p>
21
- <p>
22
- Render pages with mock data. This makes it easy to build and review page states without
23
- needing to navigate to them in your app. Here are some handy patterns for managing page data
24
- in Storybook:
25
- </p>
26
- <ul>
27
- <li>
28
- Use a higher-level connected component. Storybook helps you compose such data from the
29
- "args" of child component stories
30
- </li>
31
- <li>
32
- Assemble data in the page component from your services. You can mock these services out
33
- using Storybook.
34
- </li>
35
- </ul>
36
- <p>
37
- Get a guided tutorial on component-driven development at{' '}
38
- <a href="https://storybook.js.org/tutorials/" target="_blank" rel="noopener noreferrer">
39
- Storybook tutorials
40
- </a>
41
- . Read more in the{' '}
42
- <a href="https://storybook.js.org/docs" target="_blank" rel="noopener noreferrer">
43
- docs
44
- </a>
45
- .
46
- </p>
47
- <div className="tip-wrapper">
48
- <span className="tip">Tip</span> Adjust the width of the canvas with the{' '}
49
- <svg width="10" height="10" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg">
50
- <g fill="none" fillRule="evenodd">
51
- <path
52
- 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"
53
- id="a"
54
- fill="#999"
55
- />
56
- </g>
57
- </svg>
58
- Viewports addon in the toolbar
59
- </div>
60
- </section>
61
- </article>
62
- );
63
- Page.propTypes = {
64
- user: PropTypes.shape({}),
65
- onLogin: PropTypes.func.isRequired,
66
- onLogout: PropTypes.func.isRequired,
67
- onCreateAccount: PropTypes.func.isRequired,
68
- };
11
+ return (
12
+ <article>
13
+ <Header
14
+ user={user}
15
+ onLogin={() => setUser({ name: 'Jane Doe' })}
16
+ onLogout={() => setUser(undefined)}
17
+ onCreateAccount={() => setUser({ name: 'Jane Doe' })}
18
+ />
69
19
 
70
- Page.defaultProps = {
71
- user: null,
20
+ <section>
21
+ <h2>Pages in Storybook</h2>
22
+ <p>
23
+ We recommend building UIs with a{' '}
24
+ <a href="https://componentdriven.org" target="_blank" rel="noopener noreferrer">
25
+ <strong>component-driven</strong>
26
+ </a>{' '}
27
+ process starting with atomic components and ending with pages.
28
+ </p>
29
+ <p>
30
+ Render pages with mock data. This makes it easy to build and review page states without
31
+ needing to navigate to them in your app. Here are some handy patterns for managing page
32
+ data in Storybook:
33
+ </p>
34
+ <ul>
35
+ <li>
36
+ Use a higher-level connected component. Storybook helps you compose such data from the
37
+ "args" of child component stories
38
+ </li>
39
+ <li>
40
+ Assemble data in the page component from your services. You can mock these services out
41
+ using Storybook.
42
+ </li>
43
+ </ul>
44
+ <p>
45
+ Get a guided tutorial on component-driven development at{' '}
46
+ <a href="https://storybook.js.org/tutorials/" target="_blank" rel="noopener noreferrer">
47
+ Storybook tutorials
48
+ </a>
49
+ . Read more in the{' '}
50
+ <a href="https://storybook.js.org/docs" target="_blank" rel="noopener noreferrer">
51
+ docs
52
+ </a>
53
+ .
54
+ </p>
55
+ <div className="tip-wrapper">
56
+ <span className="tip">Tip</span> Adjust the width of the canvas with the{' '}
57
+ <svg width="10" height="10" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg">
58
+ <g fill="none" fillRule="evenodd">
59
+ <path
60
+ 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"
61
+ id="a"
62
+ fill="#999"
63
+ />
64
+ </g>
65
+ </svg>
66
+ Viewports addon in the toolbar
67
+ </div>
68
+ </section>
69
+ </article>
70
+ );
72
71
  };
@@ -1,23 +1,26 @@
1
1
  /** @jsx h */
2
2
  import { h } from 'preact';
3
+ import { within, userEvent } from '@storybook/testing-library';
3
4
 
4
5
  import { Page } from './Page';
5
- import * as HeaderStories from './Header.stories';
6
6
 
7
7
  export default {
8
8
  title: 'Example/Page',
9
9
  component: Page,
10
+ parameters: {
11
+ // More on Story layout: https://storybook.js.org/docs/preact/configure/story-layout
12
+ layout: 'fullscreen',
13
+ },
10
14
  };
11
15
 
12
16
  const Template = (args) => <Page {...args} />;
13
17
 
14
- export const LoggedIn = Template.bind({});
15
- LoggedIn.args = {
16
- // More on composing args: https://storybook.js.org/docs/preact/writing-stories/args#args-composition
17
- ...HeaderStories.LoggedIn.args,
18
- };
19
-
20
18
  export const LoggedOut = Template.bind({});
21
- LoggedOut.args = {
22
- ...HeaderStories.LoggedOut.args,
19
+
20
+ // More on interaction testing: https://storybook.js.org/docs/preact/writing-tests/interaction-testing
21
+ export const LoggedIn = Template.bind({});
22
+ LoggedIn.play = async ({ canvasElement }) => {
23
+ const canvas = within(canvasElement);
24
+ const loginButton = await canvas.getByRole('button', { name: /Log in/i });
25
+ await userEvent.click(loginButton);
23
26
  };
@@ -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({});