creevey 0.9.0-beta.13 → 0.9.0-beta.14

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 (216) hide show
  1. package/.yarn/install-state.gz +0 -0
  2. package/.yarnrc.yml +1 -0
  3. package/lib/cjs/cli.js +1 -0
  4. package/lib/cjs/client/addon/Manager.js +151 -223
  5. package/lib/cjs/client/addon/components/Addon.js +2 -9
  6. package/lib/cjs/client/addon/components/Icons.js +1 -7
  7. package/lib/cjs/client/addon/components/Panel.js +5 -18
  8. package/lib/cjs/client/addon/components/TestSelect.js +12 -25
  9. package/lib/cjs/client/addon/components/Tools.js +17 -28
  10. package/lib/cjs/client/addon/decorator.js +1 -4
  11. package/lib/cjs/client/addon/index.js +0 -4
  12. package/lib/cjs/client/addon/preset.js +3 -12
  13. package/lib/cjs/client/addon/preview.js +1 -4
  14. package/lib/cjs/client/addon/readyForCapture.js +1 -4
  15. package/lib/cjs/client/addon/register.js +11 -26
  16. package/lib/cjs/client/addon/utils.js +1 -9
  17. package/lib/cjs/client/addon/withCreevey.js +55 -134
  18. package/lib/cjs/client/shared/components/ImagesView/BlendView.js +5 -17
  19. package/lib/cjs/client/shared/components/ImagesView/ImagesView.js +8 -24
  20. package/lib/cjs/client/shared/components/ImagesView/SideBySideView.js +7 -23
  21. package/lib/cjs/client/shared/components/ImagesView/SlideView.js +7 -22
  22. package/lib/cjs/client/shared/components/ImagesView/SwapView.js +5 -17
  23. package/lib/cjs/client/shared/components/ImagesView/index.js +0 -5
  24. package/lib/cjs/client/shared/components/PageFooter/PageFooter.js +1 -8
  25. package/lib/cjs/client/shared/components/PageFooter/Paging.js +2 -19
  26. package/lib/cjs/client/shared/components/PageHeader/ImagePreview.js +21 -17
  27. package/lib/cjs/client/shared/components/PageHeader/PageHeader.js +5 -24
  28. package/lib/cjs/client/shared/components/ResultsPage.js +9 -37
  29. package/lib/cjs/client/shared/creeveyClientApi.js +3 -13
  30. package/lib/cjs/client/shared/helpers.js +21 -75
  31. package/lib/cjs/client/shared/viewMode.js +2 -6
  32. package/lib/cjs/client/web/192.js +1 -0
  33. package/lib/cjs/client/web/632.js +43 -0
  34. package/lib/cjs/client/web/794.js +1 -0
  35. package/lib/cjs/client/web/main.js +78 -1
  36. package/lib/cjs/client/web/main.js.LICENSE.txt +0 -15
  37. package/lib/cjs/creevey.js +5 -21
  38. package/lib/cjs/index.js +0 -15
  39. package/lib/cjs/server/config.js +13 -33
  40. package/lib/cjs/server/docker.js +5 -27
  41. package/lib/cjs/server/index.js +8 -33
  42. package/lib/cjs/server/logger.js +5 -19
  43. package/lib/cjs/server/master/api.js +1 -14
  44. package/lib/cjs/server/master/index.js +15 -46
  45. package/lib/cjs/server/master/master.js +6 -21
  46. package/lib/cjs/server/master/pool.js +2 -37
  47. package/lib/cjs/server/master/runner.js +15 -42
  48. package/lib/cjs/server/master/server.js +5 -27
  49. package/lib/cjs/server/messages.js +7 -53
  50. package/lib/cjs/server/selenium/browser.js +51 -136
  51. package/lib/cjs/server/selenium/index.js +0 -4
  52. package/lib/cjs/server/selenium/selenoid.js +7 -33
  53. package/lib/cjs/server/stories.js +25 -30
  54. package/lib/cjs/server/storybook/providers/browser.js +5 -18
  55. package/lib/cjs/server/storybook/providers/hybrid.js +9 -29
  56. package/lib/cjs/server/testsFiles/parser.js +3 -19
  57. package/lib/cjs/server/testsFiles/register.js +7 -9
  58. package/lib/cjs/server/update.js +3 -20
  59. package/lib/cjs/server/utils.js +9 -41
  60. package/lib/cjs/server/worker/chai-image.js +1 -27
  61. package/lib/cjs/server/worker/helpers.js +2 -12
  62. package/lib/cjs/server/worker/index.js +1 -3
  63. package/lib/cjs/server/worker/reporter.js +8 -24
  64. package/lib/cjs/server/worker/worker.js +5 -49
  65. package/lib/cjs/shared/index.js +22 -36
  66. package/lib/cjs/shared/serializeRegExp.js +0 -8
  67. package/lib/cjs/types.js +4 -14
  68. package/lib/esm/cli.js +1 -1
  69. package/lib/esm/client/addon/Manager.js +151 -214
  70. package/lib/esm/client/addon/components/Panel.js +4 -6
  71. package/lib/esm/client/addon/components/TestSelect.js +11 -17
  72. package/lib/esm/client/addon/components/Tools.js +15 -14
  73. package/lib/esm/client/addon/preset.js +2 -8
  74. package/lib/esm/client/addon/readyForCapture.js +1 -3
  75. package/lib/esm/client/addon/register.js +6 -8
  76. package/lib/esm/client/addon/utils.js +0 -5
  77. package/lib/esm/client/addon/withCreevey.js +54 -116
  78. package/lib/esm/client/shared/components/ImagesView/BlendView.js +1 -1
  79. package/lib/esm/client/shared/components/ImagesView/ImagesView.js +6 -8
  80. package/lib/esm/client/shared/components/ImagesView/SideBySideView.js +3 -4
  81. package/lib/esm/client/shared/components/ImagesView/SlideView.js +3 -3
  82. package/lib/esm/client/shared/components/ImagesView/SwapView.js +1 -1
  83. package/lib/esm/client/shared/components/PageFooter/Paging.js +1 -11
  84. package/lib/esm/client/shared/components/PageHeader/ImagePreview.js +18 -7
  85. package/lib/esm/client/shared/components/PageHeader/PageHeader.js +3 -8
  86. package/lib/esm/client/shared/components/ResultsPage.js +6 -15
  87. package/lib/esm/client/shared/creeveyClientApi.js +3 -10
  88. package/lib/esm/client/shared/helpers.js +21 -47
  89. package/lib/esm/client/web/192.js +1 -0
  90. package/lib/esm/client/web/632.js +43 -0
  91. package/lib/esm/client/web/794.js +1 -0
  92. package/lib/esm/client/web/index.html +19 -0
  93. package/lib/esm/client/web/main.js +79 -0
  94. package/lib/esm/client/web/main.js.LICENSE.txt +34 -0
  95. package/lib/esm/creevey.js +4 -8
  96. package/lib/esm/index.js +0 -1
  97. package/lib/esm/server/config.js +7 -14
  98. package/lib/esm/server/docker.js +4 -12
  99. package/lib/esm/server/index.js +7 -21
  100. package/lib/esm/server/logger.js +0 -1
  101. package/lib/esm/server/master/api.js +0 -9
  102. package/lib/esm/server/master/index.js +15 -32
  103. package/lib/esm/server/master/master.js +2 -7
  104. package/lib/esm/server/master/pool.js +0 -23
  105. package/lib/esm/server/master/runner.js +14 -27
  106. package/lib/esm/server/master/server.js +4 -9
  107. package/lib/esm/server/messages.js +6 -38
  108. package/lib/esm/server/selenium/browser.js +50 -114
  109. package/lib/esm/server/selenium/selenoid.js +6 -17
  110. package/lib/esm/server/stories.js +24 -20
  111. package/lib/esm/server/storybook/providers/browser.js +4 -8
  112. package/lib/esm/server/storybook/providers/hybrid.js +6 -14
  113. package/lib/esm/server/testsFiles/parser.js +0 -6
  114. package/lib/esm/server/testsFiles/register.js +5 -2
  115. package/lib/esm/server/update.js +0 -8
  116. package/lib/esm/server/utils.js +3 -11
  117. package/lib/esm/server/worker/chai-image.js +0 -21
  118. package/lib/esm/server/worker/helpers.js +2 -9
  119. package/lib/esm/server/worker/reporter.js +7 -10
  120. package/lib/esm/server/worker/worker.js +4 -25
  121. package/lib/esm/shared/index.js +24 -25
  122. package/lib/esm/types.js +4 -1
  123. package/lib/types/client/addon/Manager.d.ts +1 -1
  124. package/lib/types/client/addon/components/Addon.d.ts +1 -0
  125. package/lib/types/client/addon/components/Icons.d.ts +1 -0
  126. package/lib/types/client/addon/components/Panel.d.ts +1 -0
  127. package/lib/types/client/addon/components/TestSelect.d.ts +1 -0
  128. package/lib/types/client/addon/components/Tools.d.ts +1 -0
  129. package/lib/types/client/addon/decorator.d.ts +1 -1
  130. package/lib/types/client/addon/preset.d.ts +2 -2
  131. package/lib/types/client/addon/preview.d.ts +1 -1
  132. package/lib/types/client/addon/withCreevey.d.ts +3 -2
  133. package/lib/types/client/shared/components/ImagesView/BlendView.d.ts +3 -1
  134. package/lib/types/client/shared/components/ImagesView/ImagesView.d.ts +1 -0
  135. package/lib/types/client/shared/components/ImagesView/SideBySideView.d.ts +3 -1
  136. package/lib/types/client/shared/components/ImagesView/SlideView.d.ts +3 -1
  137. package/lib/types/client/shared/components/ImagesView/SwapView.d.ts +3 -1
  138. package/lib/types/client/shared/components/PageFooter/PageFooter.d.ts +1 -0
  139. package/lib/types/client/shared/components/PageFooter/Paging.d.ts +1 -0
  140. package/lib/types/client/shared/components/PageHeader/ImagePreview.d.ts +3 -1
  141. package/lib/types/client/shared/components/PageHeader/PageHeader.d.ts +1 -0
  142. package/lib/types/client/shared/components/ResultsPage.d.ts +3 -1
  143. package/lib/types/client/web/CreeveyApp.d.ts +1 -0
  144. package/lib/types/client/web/CreeveyLoader.d.ts +2 -1
  145. package/lib/types/client/web/CreeveyView/SideBar/Checkbox.d.ts +4 -1
  146. package/lib/types/client/web/CreeveyView/SideBar/Search.d.ts +1 -0
  147. package/lib/types/client/web/CreeveyView/SideBar/SideBarHeader.d.ts +1 -0
  148. package/lib/types/client/web/CreeveyView/SideBar/SuiteLink.d.ts +19 -14
  149. package/lib/types/client/web/CreeveyView/SideBar/TestLink.d.ts +1 -0
  150. package/lib/types/client/web/CreeveyView/SideBar/TestStatusIcon.d.ts +3 -1
  151. package/lib/types/client/web/CreeveyView/SideBar/TestsStatus.d.ts +3 -1
  152. package/lib/types/client/web/CreeveyView/SideBar/Toggle.d.ts +1 -0
  153. package/lib/types/shared/index.d.ts +1 -1
  154. package/lib/types/types.d.ts +7 -28
  155. package/package.json +60 -78
  156. package/lib/cjs/client/addon/preset.ie11.js +0 -74
  157. package/lib/cjs/client/addon/preset.sb7.js +0 -19
  158. package/lib/cjs/client/web/142.js +0 -2
  159. package/lib/cjs/client/web/142.js.LICENSE.txt +0 -12
  160. package/lib/cjs/client/web/32.js +0 -1
  161. package/lib/cjs/client/web/551.js +0 -1
  162. package/lib/cjs/client/web/566.js +0 -2
  163. package/lib/cjs/client/web/566.js.LICENSE.txt +0 -31
  164. package/lib/cjs/client/web/691.js +0 -2
  165. package/lib/cjs/client/web/691.js.LICENSE.txt +0 -8
  166. package/lib/cjs/client/web/725.js +0 -1
  167. package/lib/cjs/server/extract.js +0 -46
  168. package/lib/cjs/server/loaders/babel/creevey-plugin.js +0 -86
  169. package/lib/cjs/server/loaders/babel/helpers.js +0 -469
  170. package/lib/cjs/server/loaders/babel/register.js +0 -124
  171. package/lib/cjs/server/loaders/hooks/mdx.js +0 -30
  172. package/lib/cjs/server/loaders/hooks/svelte.js +0 -65
  173. package/lib/cjs/server/loaders/webpack/compile.js +0 -269
  174. package/lib/cjs/server/loaders/webpack/creevey-loader.js +0 -172
  175. package/lib/cjs/server/loaders/webpack/dummy-hmr.js +0 -39
  176. package/lib/cjs/server/loaders/webpack/mdx-loader.js +0 -72
  177. package/lib/cjs/server/loaders/webpack/start.js +0 -41
  178. package/lib/cjs/server/storybook/entry.js +0 -53
  179. package/lib/cjs/server/storybook/helpers.js +0 -158
  180. package/lib/cjs/server/storybook/providers/nodejs.js +0 -239
  181. package/lib/esm/client/addon/preset.ie11.js +0 -59
  182. package/lib/esm/client/addon/preset.sb7.js +0 -8
  183. package/lib/esm/server/extract.js +0 -32
  184. package/lib/esm/server/loaders/babel/creevey-plugin.js +0 -72
  185. package/lib/esm/server/loaders/babel/helpers.js +0 -452
  186. package/lib/esm/server/loaders/babel/register.js +0 -103
  187. package/lib/esm/server/loaders/hooks/mdx.js +0 -15
  188. package/lib/esm/server/loaders/hooks/svelte.js +0 -49
  189. package/lib/esm/server/loaders/webpack/compile.js +0 -246
  190. package/lib/esm/server/loaders/webpack/creevey-loader.js +0 -152
  191. package/lib/esm/server/loaders/webpack/dummy-hmr.js +0 -32
  192. package/lib/esm/server/loaders/webpack/mdx-loader.js +0 -58
  193. package/lib/esm/server/loaders/webpack/start.js +0 -27
  194. package/lib/esm/server/storybook/entry.js +0 -27
  195. package/lib/esm/server/storybook/helpers.js +0 -97
  196. package/lib/esm/server/storybook/providers/nodejs.js +0 -216
  197. package/lib/types/client/addon/preset.ie11.d.ts +0 -10
  198. package/lib/types/client/addon/preset.sb7.d.ts +0 -2
  199. package/lib/types/server/extract.d.ts +0 -2
  200. package/lib/types/server/loaders/babel/creevey-plugin.d.ts +0 -1
  201. package/lib/types/server/loaders/babel/helpers.d.ts +0 -19
  202. package/lib/types/server/loaders/babel/register.d.ts +0 -5
  203. package/lib/types/server/loaders/hooks/mdx.d.ts +0 -1
  204. package/lib/types/server/loaders/hooks/svelte.d.ts +0 -1
  205. package/lib/types/server/loaders/webpack/compile.d.ts +0 -2
  206. package/lib/types/server/loaders/webpack/creevey-loader.d.ts +0 -4
  207. package/lib/types/server/loaders/webpack/dummy-hmr.d.ts +0 -10
  208. package/lib/types/server/loaders/webpack/mdx-loader.d.ts +0 -6
  209. package/lib/types/server/loaders/webpack/start.d.ts +0 -1
  210. package/lib/types/server/storybook/entry.d.ts +0 -17
  211. package/lib/types/server/storybook/helpers.d.ts +0 -24
  212. package/lib/types/server/storybook/providers/nodejs.d.ts +0 -9
  213. package/preset/ie11.js +0 -5
  214. package/preset/index.js +0 -9
  215. package/preset/sb7.js +0 -5
  216. package/types/mdx.d.ts +0 -7
@@ -14,9 +14,7 @@ const LinkIconContainer = styled.span(_ref => {
14
14
  };
15
15
  });
16
16
  export default function TestSelect(props) {
17
- var _props$tests$find$tes, _props$tests$find;
18
-
19
- const testName = (_props$tests$find$tes = (_props$tests$find = props.tests.find(x => x.id === props.selectedTestId)) === null || _props$tests$find === void 0 ? void 0 : _props$tests$find.testName) !== null && _props$tests$find$tes !== void 0 ? _props$tests$find$tes : '';
17
+ const testName = props.tests.find(x => x.id === props.selectedTestId)?.testName ?? '';
20
18
  return /*#__PURE__*/React.createElement(WithTooltip, {
21
19
  trigger: "click",
22
20
  placement: "bottom",
@@ -26,20 +24,16 @@ export default function TestSelect(props) {
26
24
  onHide
27
25
  } = _ref2;
28
26
  return /*#__PURE__*/React.createElement(TooltipLinkList, {
29
- links: props.tests.map(x => {
30
- var _x$testName;
31
-
32
- return {
33
- id: x.id,
34
- title: (_x$testName = x.testName) !== null && _x$testName !== void 0 ? _x$testName : '',
35
- active: props.selectedTestId === x.id,
36
- onClick: () => {
37
- props.onChangeTest(x.id);
38
- onHide();
39
- },
40
- left: /*#__PURE__*/React.createElement(LinkIconContainer, null, getEmojiByTestStatus(x.status, x.skip))
41
- };
42
- })
27
+ links: props.tests.map(x => ({
28
+ id: x.id,
29
+ title: x.testName ?? '',
30
+ active: props.selectedTestId === x.id,
31
+ onClick: () => {
32
+ props.onChangeTest(x.id);
33
+ onHide();
34
+ },
35
+ left: /*#__PURE__*/React.createElement(LinkIconContainer, null, getEmojiByTestStatus(x.status, x.skip))
36
+ }))
43
37
  });
44
38
  }
45
39
  }, /*#__PURE__*/React.createElement(Button, {
@@ -38,29 +38,30 @@ export const Tools = _ref => {
38
38
  return unsubscribe;
39
39
  }, [manager]);
40
40
  if (!test) return null;
41
-
42
41
  function renderButton(type, title, onClick, icon) {
43
42
  const handleClick = () => {
44
43
  setButtonClicked(type);
45
44
  onClick();
46
45
  };
47
-
48
46
  const disabled = isRunning && buttonClicked != null && buttonClicked !== type;
49
- return /*#__PURE__*/React.createElement(Button, {
50
- onClick: () => {
51
- isRunning ? manager.onStop() : handleClick();
52
- },
53
- title: disabled ? '' : title,
54
- disabled: disabled
55
- }, buttonClicked === type && isRunning ? /*#__PURE__*/React.createElement(Icons, {
56
- icon: 'stop'
57
- }) : icon);
47
+ return (
48
+ /*#__PURE__*/
49
+ // @ts-expect-error Fixed in https://github.com/storybookjs/storybook/pull/26623
50
+ React.createElement(Button, {
51
+ onClick: () => {
52
+ isRunning ? manager.onStop() : handleClick();
53
+ },
54
+ title: disabled ? '' : title,
55
+ disabled: disabled
56
+ }, buttonClicked === type && isRunning ? /*#__PURE__*/React.createElement(Icons, {
57
+ icon: 'stop'
58
+ }) : icon)
59
+ );
58
60
  }
59
-
60
61
  return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement(IconButton, {
61
- href: "http://localhost:".concat(__CREEVEY_CLIENT_PORT__ || __CREEVEY_SERVER_PORT__ || 3000, "/?").concat(stringify({
62
+ href: `http://localhost:${__CREEVEY_CLIENT_PORT__ || __CREEVEY_SERVER_PORT__ || 3000}/?${stringify({
62
63
  testPath: getTestPath(test)
63
- })),
64
+ })}`,
64
65
  target: "_blank",
65
66
  title: "Show in Creevey UI"
66
67
  }, /*#__PURE__*/React.createElement(Icons, {
@@ -1,8 +1,2 @@
1
- export function config() {
2
- let entry = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
3
- return [...entry, require.resolve('./decorator')];
4
- }
5
- export function managerEntries() {
6
- let entry = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
7
- return [...entry, require.resolve('./register')];
8
- }
1
+ export const previewAnnotations = [require.resolve('./preview')];
2
+ export const managerEntries = [require.resolve('./register')];
@@ -1,5 +1,3 @@
1
1
  export function readyForCapture() {
2
- var _window$__CREEVEY_SET, _window;
3
-
4
- (_window$__CREEVEY_SET = (_window = window).__CREEVEY_SET_READY_FOR_CAPTURE__) === null || _window$__CREEVEY_SET === void 0 ? void 0 : _window$__CREEVEY_SET.call(_window);
2
+ window.__CREEVEY_SET_READY_FOR_CAPTURE__?.();
5
3
  }
@@ -1,4 +1,4 @@
1
- import { addons, types } from '@storybook/addons';
1
+ import { addons, types } from '@storybook/manager-api';
2
2
  import React from 'react';
3
3
  import { Addon } from './components/Addon';
4
4
  import { Tools } from './components/Tools';
@@ -9,8 +9,8 @@ addons.register(ADDON_ID, api => {
9
9
  });
10
10
  export async function registerCreeveyPanels(storybookApi) {
11
11
  const manager = new CreeveyManager(storybookApi);
12
- addons.addPanel("".concat(ADDON_ID, "/panel/run"), {
13
- title: "Creevey/Run",
12
+ addons.add(`${ADDON_ID}/panel/run`, {
13
+ title: `Creevey/Run`,
14
14
  match: _ref => {
15
15
  let {
16
16
  viewMode
@@ -26,9 +26,9 @@ export async function registerCreeveyPanels(storybookApi) {
26
26
  await manager.initAll();
27
27
  const browsers = manager.getBrowsers();
28
28
  browsers.forEach(browser => {
29
- const panelId = "".concat(ADDON_ID, "/panel/").concat(browser);
29
+ const panelId = `${ADDON_ID}/panel/${browser}`;
30
30
  const title = manager.getTabTitle(browser);
31
- addons.addPanel(panelId, {
31
+ addons.add(panelId, {
32
32
  title,
33
33
  type: types.PANEL,
34
34
  paramKey: browser,
@@ -36,12 +36,10 @@ export async function registerCreeveyPanels(storybookApi) {
36
36
  // eslint-disable-next-line react/display-name
37
37
  render: _ref2 => {
38
38
  let {
39
- active,
40
- key
39
+ active
41
40
  } = _ref2;
42
41
  return /*#__PURE__*/React.createElement(Addon, {
43
42
  active,
44
- key,
45
43
  manager,
46
44
  browser
47
45
  });
@@ -1,27 +1,22 @@
1
1
  export function getEmojiByTestStatus(status) {
2
2
  let skip = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
3
-
4
3
  switch (status) {
5
4
  case 'failed':
6
5
  {
7
6
  return '❌';
8
7
  }
9
-
10
8
  case 'success':
11
9
  {
12
10
  return '✔';
13
11
  }
14
-
15
12
  case 'running':
16
13
  {
17
14
  return '🟡';
18
15
  }
19
-
20
16
  case 'pending':
21
17
  {
22
18
  return '🕗';
23
19
  }
24
-
25
20
  default:
26
21
  {
27
22
  if (skip) return '⏸';
@@ -1,26 +1,21 @@
1
1
  import * as Events from '@storybook/core-events';
2
- import * as polyfill from 'event-source-polyfill';
3
- // import { buildQueries, within } from '@storybook/testing-library';
4
- import { addons, makeDecorator } from '@storybook/addons';
2
+ import { makeDecorator } from '@storybook/preview-api';
5
3
  import { isObject, noop } from '../../types';
6
- import { denormalizeStoryParameters, serializeRawStories } from '../../shared';
7
- import { getConnectionUrl } from '../shared/helpers'; // import { isInternetExplorer } from './utils';
8
-
9
- if (typeof process != 'object' || typeof process.version != 'string') {
10
- // NOTE If you don't use babel-polyfill or any other polyfills that add EventSource for IE11
11
- // You don't get hot reload in IE11. So put polyfill for that to better UX
12
- // Don't load in nodejs environment
13
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
14
- const {
15
- NativeEventSource,
16
- EventSourcePolyfill
17
- } = polyfill; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
18
-
19
- window.EventSource = NativeEventSource || EventSourcePolyfill;
4
+ import { serializeRawStories } from '../../shared';
5
+ import { getConnectionUrl } from '../shared/helpers';
6
+ const disableAnimationsStyles = `
7
+ *,
8
+ *:hover,
9
+ *::before,
10
+ *::after {
11
+ animation-delay: -0.0001ms !important;
12
+ animation-duration: 0s !important;
13
+ animation-play-state: paused !important;
14
+ cursor: none !important;
15
+ caret-color: transparent !important;
16
+ transition: 0s !important;
20
17
  }
21
-
22
- const disableAnimationsStyles = "\n*,\n*:hover,\n*::before,\n*::after {\n animation-delay: -0.0001ms !important;\n animation-duration: 0s !important;\n animation-play-state: paused !important;\n cursor: none !important;\n caret-color: transparent !important;\n transition: 0s !important;\n}\n";
23
-
18
+ `;
24
19
  async function resetCurrentStory(channel) {
25
20
  setTimeout(() => channel.emit(Events.SET_CURRENT_STORY, {
26
21
  storyId: true,
@@ -29,11 +24,9 @@ async function resetCurrentStory(channel) {
29
24
  }), 0);
30
25
  return new Promise(resolve => channel.once(Events.STORY_MISSING, resolve));
31
26
  }
32
-
33
27
  function catchRenderError(channel) {
34
28
  let rejectCallback;
35
29
  const promise = new Promise((_resolve, reject) => rejectCallback = reject);
36
-
37
30
  function errorHandler(_ref) {
38
31
  let {
39
32
  title,
@@ -44,65 +37,51 @@ function catchRenderError(channel) {
44
37
  stack: description
45
38
  });
46
39
  }
47
-
48
40
  function exceptionHandler(exception) {
49
41
  rejectCallback(exception);
50
42
  }
51
-
52
43
  function removeHandlers() {
53
44
  channel.off(Events.STORY_ERRORED, errorHandler);
54
45
  channel.off(Events.STORY_THREW_EXCEPTION, errorHandler);
55
46
  }
56
-
57
47
  channel.once(Events.STORY_ERRORED, errorHandler);
58
48
  channel.once(Events.STORY_THREW_EXCEPTION, exceptionHandler);
59
49
  return Object.assign(promise, {
60
50
  cancel: removeHandlers
61
51
  });
62
52
  }
63
-
64
53
  function waitForStoryRendered(channel) {
65
54
  let resolveCallback;
66
55
  const promise = new Promise(resolve => resolveCallback = resolve);
67
-
68
56
  function renderHandler() {
69
57
  resolveCallback();
70
58
  }
71
-
72
59
  function removeHandlers() {
73
60
  channel.off(Events.STORY_RENDERED, renderHandler);
74
61
  }
75
-
76
62
  channel.once(Events.STORY_RENDERED, renderHandler);
77
63
  return Object.assign(promise, {
78
64
  cancel: removeHandlers
79
65
  });
80
66
  }
81
-
82
67
  function waitForFontsLoaded() {
83
68
  if (!document.fonts) return;
84
69
  const areFontsLoading = Array.from(document.fonts).some(font => font.status == 'loading');
85
-
86
70
  if (areFontsLoading) {
87
71
  return new Promise(resolve => {
88
72
  const fontsLoadedHandler = () => {
89
73
  document.fonts.removeEventListener('loadingdone', fontsLoadedHandler);
90
74
  resolve();
91
75
  };
92
-
93
76
  document.fonts.addEventListener('loadingdone', fontsLoadedHandler);
94
77
  });
95
78
  }
96
79
  }
97
-
98
80
  function waitForCaptureCall() {
99
81
  return new Promise(resolve => captureResolver = resolve);
100
82
  }
101
-
102
83
  function initCreeveyState() {
103
- var _window$localStorage$;
104
-
105
- const prevState = JSON.parse((_window$localStorage$ = window.localStorage.getItem('Creevey_Tests')) !== null && _window$localStorage$ !== void 0 ? _window$localStorage$ : '{}');
84
+ const prevState = JSON.parse(window.localStorage.getItem('Creevey_Tests') ?? '{}');
106
85
  if (prevState.creeveyHost) window.__CREEVEY_SERVER_HOST__ = prevState.creeveyHost;
107
86
  if (prevState.creeveyPort) window.__CREEVEY_SERVER_PORT__ = prevState.creeveyPort;
108
87
  if (prevState.setStoriesCounter) setStoriesCounter = prevState.setStoriesCounter;
@@ -116,17 +95,16 @@ function initCreeveyState() {
116
95
  }));
117
96
  });
118
97
  }
119
-
120
98
  let isTestBrowser = false;
121
99
  let captureResolver;
122
100
  let waitForCreevey;
123
101
  let creeveyReady;
124
102
  let setStoriesCounter = 0;
125
103
  export function withCreevey() {
104
+ const addonsChannel = () => window.__STORYBOOK_ADDONS_CHANNEL__;
126
105
  let currentStory = '';
127
106
  let isAnimationDisabled = false;
128
107
  initCreeveyState();
129
-
130
108
  function disableAnimation() {
131
109
  isAnimationDisabled = true;
132
110
  const style = document.createElement('style');
@@ -135,46 +113,30 @@ export function withCreevey() {
135
113
  style.appendChild(textNode);
136
114
  document.head.appendChild(style);
137
115
  }
138
-
139
116
  async function getStories() {
140
- var _window$__STORYBOOK_S;
141
-
142
- const storiesPromise = new Promise(resolve => addons.getChannel().once(Events.SET_STORIES, data => resolve(serializeRawStories(denormalizeStoryParameters(data)))));
143
- const store = (_window$__STORYBOOK_S = window.__STORYBOOK_STORY_STORE__) !== null && _window$__STORYBOOK_S !== void 0 ? _window$__STORYBOOK_S : {};
144
-
145
- if (store.cacheAllCSFFiles) {
146
- await store.cacheAllCSFFiles();
147
- addons.getChannel().emit(Events.SET_STORIES, store.getSetStoriesPayload());
148
- } else return;
149
-
150
- addons.getChannel().on(Events.SET_STORIES, data => {
151
- // TODO Figure out how to get only updated stories
152
- // TODO Subscribe on hmr? like use dummy-hmr
153
- setStoriesCounter += 1;
154
- const stories = serializeRawStories(denormalizeStoryParameters(data));
155
- const storiesByFiles = new Map();
156
- Object.values(stories).forEach(story => {
157
- const storiesFromFile = storiesByFiles.get(story.parameters.fileName);
158
- if (storiesFromFile) storiesFromFile.push(story);else storiesByFiles.set(story.parameters.fileName, [story]);
159
- });
160
- void fetch("http://".concat(getConnectionUrl(), "/stories"), {
161
- method: 'POST',
162
- headers: {
163
- 'Content-Type': 'application/json'
164
- },
165
- body: JSON.stringify({
166
- setStoriesCounter,
167
- stories: [...storiesByFiles.entries()]
168
- })
169
- });
117
+ const stories = serializeRawStories(await window.__STORYBOOK_PREVIEW__.extract());
118
+ const storiesByFiles = new Map();
119
+ Object.values(stories).forEach(story => {
120
+ const fileName = story.parameters.fileName;
121
+ const storiesFromFile = storiesByFiles.get(fileName);
122
+ if (storiesFromFile) storiesFromFile.push(story);else storiesByFiles.set(fileName, [story]);
123
+ });
124
+ void fetch(`http://${getConnectionUrl()}/stories`, {
125
+ method: 'POST',
126
+ headers: {
127
+ 'Content-Type': 'application/json'
128
+ },
129
+ body: JSON.stringify({
130
+ setStoriesCounter,
131
+ stories: [...storiesByFiles.entries()]
132
+ })
170
133
  });
171
- return storiesPromise;
134
+ return stories;
172
135
  }
173
-
174
136
  async function selectStory(storyId, kind, name, shouldWaitForReady, callback) {
175
137
  if (!isAnimationDisabled) disableAnimation();
176
138
  isTestBrowser = true;
177
- const channel = addons.getChannel();
139
+ const channel = addonsChannel();
178
140
  const waitForReady = shouldWaitForReady ? new Promise(resolve => window.__CREEVEY_SET_READY_FOR_CAPTURE__ = resolve) : Promise.resolve();
179
141
  if (storyId == currentStory) await resetCurrentStory(channel);else currentStory = storyId;
180
142
  let isCaptureCalled = false;
@@ -186,7 +148,6 @@ export function withCreevey() {
186
148
  name,
187
149
  kind
188
150
  }), 0);
189
-
190
151
  try {
191
152
  await Promise.race([(async () => {
192
153
  await Promise.race([renderPromise, capturePromise]);
@@ -195,45 +156,48 @@ export function withCreevey() {
195
156
  })(), errorPromise]);
196
157
  callback([null, isCaptureCalled]);
197
158
  } catch (reason) {
198
- var _reason$stack;
199
-
200
159
  // NOTE Event `STORY_THREW_EXCEPTION` triggered only in react and vue frameworks and return Error instance
201
160
  // NOTE Event `STORY_ERRORED` return error-like object without `name` field
202
- const errorMessage = reason instanceof Error ? (_reason$stack = reason.stack) !== null && _reason$stack !== void 0 ? _reason$stack : reason.message : isObject(reason) ? "".concat(reason.message, "\n ").concat(reason.stack) : reason;
161
+ const errorMessage = reason instanceof Error ? reason.stack ?? reason.message : isObject(reason) ? `${reason.message}\n ${reason.stack}` : reason;
203
162
  callback([errorMessage]);
204
163
  } finally {
205
164
  renderPromise.cancel();
206
165
  errorPromise.cancel();
207
166
  }
208
167
  }
209
-
210
168
  function updateGlobals(globals) {
211
- addons.getChannel().emit(Events.UPDATE_GLOBALS, {
169
+ addonsChannel().emit(Events.UPDATE_GLOBALS, {
212
170
  globals
213
171
  });
214
172
  }
215
-
216
173
  function insertIgnoreStyles(ignoreSelectors) {
217
174
  const stylesElement = document.createElement('style');
218
175
  stylesElement.setAttribute('type', 'text/css');
219
176
  document.head.appendChild(stylesElement);
220
177
  ignoreSelectors.forEach(selector => {
221
- stylesElement.innerHTML += "\n ".concat(selector, " {\n background: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n outline: 0 !important;\n color: rgba(0,0,0,0) !important;\n }\n ").concat(selector, " *, ").concat(selector, "::before, ").concat(selector, "::after {\n visibility: hidden !important;\n }\n ");
178
+ stylesElement.innerHTML += `
179
+ ${selector} {
180
+ background: #000 !important;
181
+ box-shadow: none !important;
182
+ text-shadow: none !important;
183
+ outline: 0 !important;
184
+ color: rgba(0,0,0,0) !important;
185
+ }
186
+ ${selector} *, ${selector}::before, ${selector}::after {
187
+ visibility: hidden !important;
188
+ }
189
+ `;
222
190
  });
223
191
  return stylesElement;
224
192
  }
225
-
226
193
  function removeIgnoreStyles(ignoreStyles) {
227
- var _ignoreStyles$parentN;
228
-
229
- (_ignoreStyles$parentN = ignoreStyles.parentNode) === null || _ignoreStyles$parentN === void 0 ? void 0 : _ignoreStyles$parentN.removeChild(ignoreStyles);
194
+ ignoreStyles.parentNode?.removeChild(ignoreStyles);
230
195
  }
231
-
232
196
  function hasPlayCompletedYet(callback) {
233
197
  creeveyReady();
234
198
  let isCaptureCalled = false;
235
199
  let isPlayCompleted = false;
236
- const channel = addons.getChannel();
200
+ const channel = addonsChannel();
237
201
  void waitForStoryRendered(channel).then(() => {
238
202
  if (isCaptureCalled) return;
239
203
  isPlayCompleted = true;
@@ -245,61 +209,35 @@ export function withCreevey() {
245
209
  callback(false);
246
210
  });
247
211
  }
248
-
249
212
  window.__CREEVEY_GET_STORIES__ = getStories;
250
213
  window.__CREEVEY_SELECT_STORY__ = selectStory;
251
214
  window.__CREEVEY_UPDATE_GLOBALS__ = updateGlobals;
252
215
  window.__CREEVEY_INSERT_IGNORE_STYLES__ = insertIgnoreStyles;
253
216
  window.__CREEVEY_REMOVE_IGNORE_STYLES__ = removeIgnoreStyles;
254
217
  window.__CREEVEY_HAS_PLAY_COMPLETED_YET__ = hasPlayCompletedYet;
255
- window.__CREEVEY_SET_READY_FOR_CAPTURE__ = noop; // const queryAllByQuery = (container: HTMLElement, query: string): HTMLElement[] =>
256
- // [...container.querySelectorAll(query)].filter((e) => e instanceof HTMLElement) as HTMLElement[];
257
- // const getMultipleError = (_: Element | null, query: string): string => `Found multiple elements by query: ${query}`;
258
- // const getMissingError = (_: Element | null, query: string): string => `Unable to find an element by query: ${query}`;
259
- // const [queryByQuery, getAllByQuery, getByQuery, findAllByQuery, findByQuery] = buildQueries(
260
- // queryAllByQuery,
261
- // getMultipleError,
262
- // getMissingError,
263
- // );
264
- // const queries = {
265
- // queryByQuery,
266
- // getAllByQuery,
267
- // getByQuery,
268
- // findAllByQuery,
269
- // findByQuery,
270
- // };
271
-
218
+ window.__CREEVEY_SET_READY_FOR_CAPTURE__ = noop;
272
219
  return makeDecorator({
273
220
  name: 'withCreevey',
274
221
  parameterName: 'creevey',
275
222
  wrapper: (getStory, context) => {
276
- var _ref2;
277
-
278
223
  // TODO Define proper types, like captureElement is a promise
279
224
  const {
280
225
  captureElement
281
- } = context.parameters.creevey = (_ref2 = context.parameters.creevey) !== null && _ref2 !== void 0 ? _ref2 : {};
226
+ } = context.parameters.creevey = context.parameters.creevey ?? {};
282
227
  Object.defineProperty(context.parameters.creevey, 'captureElement', {
283
228
  get() {
284
229
  switch (true) {
285
230
  case captureElement === undefined:
286
231
  return Promise.resolve(context.canvasElement);
287
-
288
232
  case captureElement === null:
289
233
  return Promise.resolve(document.documentElement);
290
-
291
234
  case typeof captureElement == 'string':
292
235
  return Promise.resolve(context.canvasElement.querySelector(captureElement));
293
- // return isInternetExplorer // some code from testing-library makes IE hang
294
- // ? Promise.resolve(context.canvasElement.querySelector(captureElement as string))
295
- // : within<typeof queries>(context.canvasElement, queries).findByQuery(captureElement as string);
296
-
297
236
  case typeof captureElement == 'function':
298
237
  // TODO Define type for it
299
238
  return Promise.resolve(captureElement(context));
300
239
  }
301
240
  },
302
-
303
241
  enumerable: true,
304
242
  configurable: true
305
243
  });
@@ -311,7 +249,7 @@ export async function capture(options) {
311
249
  if (!isTestBrowser) return;
312
250
  captureResolver();
313
251
  waitForCreevey = new Promise(resolve => creeveyReady = resolve);
314
- await fetch("http://".concat(getConnectionUrl(), "/capture"), {
252
+ await fetch(`http://${getConnectionUrl()}/capture`, {
315
253
  method: 'POST',
316
254
  headers: {
317
255
  'Content-Type': 'application/json'
@@ -20,7 +20,7 @@ const Image = styled.img(_ref => {
20
20
  } = _ref;
21
21
  return {
22
22
  boxSizing: 'border-box',
23
- border: "1px solid ".concat(borderColor),
23
+ border: `1px solid ${borderColor}`,
24
24
  maxWidth: '100%',
25
25
  filter: 'invert(100%)'
26
26
  };
@@ -9,9 +9,7 @@ export const themeBorderColors = {
9
9
  expect: 'positive',
10
10
  diff: 'secondary'
11
11
  };
12
-
13
12
  const isColor = (theme, color) => color in theme.color;
14
-
15
13
  export function getBorderColor(theme, color) {
16
14
  return isColor(theme, color) ? theme.color[color] : color;
17
15
  }
@@ -37,7 +35,7 @@ const ActualImage = withTheme(styled.img(_ref => {
37
35
  theme
38
36
  } = _ref;
39
37
  return {
40
- border: "1px solid ".concat(getBorderColor(theme, themeBorderColors.expect)),
38
+ border: `1px solid ${getBorderColor(theme, themeBorderColors.expect)}`,
41
39
  maxWidth: '100%'
42
40
  };
43
41
  }));
@@ -55,15 +53,15 @@ export function ImagesView(_ref2) {
55
53
  expect
56
54
  } = image;
57
55
  return /*#__PURE__*/React.createElement(Container, null, canApprove && diff && expect ? /*#__PURE__*/React.createElement(ViewComponent, {
58
- actual: "".concat(url, "/").concat(actual),
59
- diff: "".concat(url, "/").concat(diff),
60
- expect: "".concat(url, "/").concat(expect)
56
+ actual: `${url}/${actual}`,
57
+ diff: `${url}/${diff}`,
58
+ expect: `${url}/${expect}`
61
59
  }) : /*#__PURE__*/React.createElement(ImageLink, {
62
- href: "".concat(url, "/").concat(actual),
60
+ href: `${url}/${actual}`,
63
61
  target: "_blank",
64
62
  rel: "noopener noreferrer"
65
63
  }, /*#__PURE__*/React.createElement(ActualImage, {
66
64
  alt: "actual",
67
- src: "".concat(url, "/").concat(actual)
65
+ src: `${url}/${actual}`
68
66
  })));
69
67
  }
@@ -40,7 +40,7 @@ const Image = styled.img(_ref2 => {
40
40
  } = _ref2;
41
41
  return {
42
42
  boxSizing: 'border-box',
43
- border: "1px solid ".concat(borderColor),
43
+ border: `1px solid ${borderColor}`,
44
44
  maxWidth: '100%',
45
45
  flexShrink: 0
46
46
  };
@@ -69,14 +69,13 @@ export const SideBySideView = withTheme(_ref3 => {
69
69
  const actualImage = actualImageRef.current;
70
70
  if (!containerElement || !expectImage || !actualImage || !diffImage || !loaded) return setScale(1);
71
71
  const borderSize = getBorderSize(diffImage);
72
-
73
72
  if (layout == 'vertical') {
74
73
  const ratio = (diffImage.getBoundingClientRect().width - borderSize * 2) / diffImage.naturalWidth;
75
74
  setScale(Math.min(1, ratio));
76
75
  }
77
-
78
76
  if (layout == 'horizontal') {
79
- const ratio = // NOTE: 40px because we have two margins by 20px and 6px for borders
77
+ const ratio =
78
+ // NOTE: 40px because we have two margins by 20px and 6px for borders
80
79
  (containerElement.getBoundingClientRect().width - 40 - borderSize * 6) / [expectImage, diffImage, actualImage].map(image => image.naturalWidth).reduce((a, b) => a + b, 0);
81
80
  setScale(Math.min(1, ratio));
82
81
  }
@@ -65,7 +65,7 @@ const BaseImage = styled.img(_ref2 => {
65
65
  } = _ref2;
66
66
  return {
67
67
  boxSizing: 'border-box',
68
- border: "1px solid ".concat(borderColor),
68
+ border: `1px solid ${borderColor}`,
69
69
  maxWidth: '100%'
70
70
  };
71
71
  });
@@ -95,8 +95,8 @@ export const SlideView = withTheme(_ref3 => {
95
95
  const handleSlide = useCallback(event => {
96
96
  if (!expectedImageContainerRef.current || !expectedImageWrapperRef.current) return;
97
97
  const offset = Number(event.target.value);
98
- expectedImageContainerRef.current.style.right = "".concat(100 - offset, "%");
99
- expectedImageWrapperRef.current.style.left = "".concat(100 - offset, "%");
98
+ expectedImageContainerRef.current.style.right = `${100 - offset}%`;
99
+ expectedImageWrapperRef.current.style.left = `${100 - offset}%`;
100
100
  }, []);
101
101
  useLayoutEffect(() => {
102
102
  if (loaded && diffImageRef.current) setStep(100 / diffImageRef.current.getBoundingClientRect().width);
@@ -14,7 +14,7 @@ const BaseImage = styled.img(_ref => {
14
14
  } = _ref;
15
15
  return {
16
16
  boxSizing: 'border-box',
17
- border: "1px solid ".concat(borderColor),
17
+ border: `1px solid ${borderColor}`,
18
18
  maxWidth: '100%'
19
19
  };
20
20
  });