creevey 0.9.0-beta.2 → 0.9.0-beta.20

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 (226) hide show
  1. package/.yarn/install-state.gz +0 -0
  2. package/.yarnrc.yml +1 -0
  3. package/CHANGELOG.md +51 -0
  4. package/README.md +9 -1
  5. package/addon/README.md +3 -0
  6. package/addon/package.json +5 -0
  7. package/docs/config.md +29 -26
  8. package/jest.config.js +6 -0
  9. package/lib/cjs/cli.js +1 -0
  10. package/lib/cjs/client/addon/Manager.js +170 -390
  11. package/lib/cjs/client/addon/components/Addon.js +17 -45
  12. package/lib/cjs/client/addon/components/Icons.js +12 -14
  13. package/lib/cjs/client/addon/components/Panel.js +21 -30
  14. package/lib/cjs/client/addon/components/TestSelect.js +20 -31
  15. package/lib/cjs/client/addon/components/Tools.js +35 -65
  16. package/lib/cjs/client/addon/decorator.js +1 -4
  17. package/lib/cjs/client/addon/index.js +27 -0
  18. package/lib/cjs/client/addon/preset.js +3 -76
  19. package/lib/cjs/client/addon/preview.js +11 -0
  20. package/lib/cjs/client/addon/readyForCapture.js +1 -4
  21. package/lib/cjs/client/addon/register.js +43 -82
  22. package/lib/cjs/client/addon/utils.js +4 -8
  23. package/lib/cjs/client/addon/withCreevey.js +145 -404
  24. package/lib/cjs/client/shared/components/ImagesView/BlendView.js +25 -35
  25. package/lib/cjs/client/shared/components/ImagesView/ImagesView.js +29 -41
  26. package/lib/cjs/client/shared/components/ImagesView/SideBySideView.js +46 -83
  27. package/lib/cjs/client/shared/components/ImagesView/SlideView.js +39 -67
  28. package/lib/cjs/client/shared/components/ImagesView/SwapView.js +26 -57
  29. package/lib/cjs/client/shared/components/ImagesView/index.js +9 -14
  30. package/lib/cjs/client/shared/components/PageFooter/PageFooter.js +13 -16
  31. package/lib/cjs/client/shared/components/PageFooter/Paging.js +16 -37
  32. package/lib/cjs/client/shared/components/PageHeader/ImagePreview.js +42 -34
  33. package/lib/cjs/client/shared/components/PageHeader/PageHeader.js +40 -84
  34. package/lib/cjs/client/shared/components/ResultsPage.js +42 -99
  35. package/lib/cjs/client/shared/creeveyClientApi.js +56 -93
  36. package/lib/cjs/client/shared/helpers.js +149 -274
  37. package/lib/cjs/client/shared/viewMode.js +5 -9
  38. package/lib/cjs/client/web/192.js +1 -0
  39. package/lib/cjs/client/web/632.js +43 -0
  40. package/lib/cjs/client/web/794.js +1 -0
  41. package/lib/cjs/client/web/main.js +79 -38
  42. package/lib/cjs/client/web/main.js.LICENSE.txt +34 -0
  43. package/lib/cjs/creevey.js +15 -30
  44. package/lib/cjs/index.js +0 -15
  45. package/lib/cjs/server/config.js +16 -36
  46. package/lib/cjs/server/docker.js +8 -34
  47. package/lib/cjs/server/index.js +9 -34
  48. package/lib/cjs/server/logger.js +7 -20
  49. package/lib/cjs/server/master/api.js +1 -14
  50. package/lib/cjs/server/master/index.js +25 -49
  51. package/lib/cjs/server/master/master.js +6 -21
  52. package/lib/cjs/server/master/pool.js +10 -53
  53. package/lib/cjs/server/master/runner.js +65 -105
  54. package/lib/cjs/server/master/server.js +10 -29
  55. package/lib/cjs/server/messages.js +14 -62
  56. package/lib/cjs/server/selenium/browser.js +149 -185
  57. package/lib/cjs/server/selenium/index.js +0 -4
  58. package/lib/cjs/server/selenium/selenoid.js +18 -44
  59. package/lib/cjs/server/stories.js +35 -57
  60. package/lib/cjs/server/storybook/providers/browser.js +15 -29
  61. package/lib/cjs/server/storybook/providers/hybrid.js +16 -37
  62. package/lib/cjs/server/telemetry.js +167 -0
  63. package/lib/cjs/server/testsFiles/parser.js +3 -19
  64. package/lib/cjs/server/testsFiles/register.js +8 -14
  65. package/lib/cjs/server/update.js +4 -25
  66. package/lib/cjs/server/utils.js +35 -76
  67. package/lib/cjs/server/worker/chai-image.js +1 -27
  68. package/lib/cjs/server/worker/helpers.js +2 -12
  69. package/lib/cjs/server/worker/index.js +1 -3
  70. package/lib/cjs/server/worker/reporter.js +16 -43
  71. package/lib/cjs/server/worker/worker.js +32 -72
  72. package/lib/cjs/shared/index.js +87 -0
  73. package/lib/cjs/shared/serializeRegExp.js +34 -0
  74. package/lib/cjs/types.js +11 -20
  75. package/lib/esm/cli.js +1 -1
  76. package/lib/esm/client/addon/Manager.js +170 -381
  77. package/lib/esm/client/addon/components/Addon.js +15 -34
  78. package/lib/esm/client/addon/components/Icons.js +10 -6
  79. package/lib/esm/client/addon/components/Panel.js +20 -18
  80. package/lib/esm/client/addon/components/TestSelect.js +19 -23
  81. package/lib/esm/client/addon/components/Tools.js +33 -49
  82. package/lib/esm/client/addon/decorator.js +1 -1
  83. package/lib/esm/client/addon/index.js +2 -0
  84. package/lib/esm/client/addon/preset.js +2 -56
  85. package/lib/esm/client/addon/preview.js +5 -0
  86. package/lib/esm/client/addon/readyForCapture.js +1 -3
  87. package/lib/esm/client/addon/register.js +41 -67
  88. package/lib/esm/client/addon/utils.js +3 -7
  89. package/lib/esm/client/addon/withCreevey.js +142 -388
  90. package/lib/esm/client/shared/components/ImagesView/BlendView.js +22 -18
  91. package/lib/esm/client/shared/components/ImagesView/ImagesView.js +27 -25
  92. package/lib/esm/client/shared/components/ImagesView/SideBySideView.js +43 -63
  93. package/lib/esm/client/shared/components/ImagesView/SlideView.js +36 -47
  94. package/lib/esm/client/shared/components/ImagesView/SwapView.js +23 -40
  95. package/lib/esm/client/shared/components/PageFooter/PageFooter.js +12 -8
  96. package/lib/esm/client/shared/components/PageFooter/Paging.js +15 -29
  97. package/lib/esm/client/shared/components/PageHeader/ImagePreview.js +40 -25
  98. package/lib/esm/client/shared/components/PageHeader/PageHeader.js +38 -66
  99. package/lib/esm/client/shared/components/ResultsPage.js +39 -75
  100. package/lib/esm/client/shared/creeveyClientApi.js +56 -90
  101. package/lib/esm/client/shared/helpers.js +133 -230
  102. package/lib/esm/client/shared/viewMode.js +4 -4
  103. package/lib/esm/client/web/192.js +1 -0
  104. package/lib/esm/client/web/632.js +43 -0
  105. package/lib/esm/client/web/794.js +1 -0
  106. package/lib/esm/client/web/index.html +19 -0
  107. package/lib/esm/client/web/main.js +79 -0
  108. package/lib/esm/client/web/main.js.LICENSE.txt +34 -0
  109. package/lib/esm/creevey.js +13 -16
  110. package/lib/esm/index.js +1 -4
  111. package/lib/esm/server/config.js +9 -16
  112. package/lib/esm/server/docker.js +6 -14
  113. package/lib/esm/server/index.js +8 -22
  114. package/lib/esm/server/logger.js +0 -1
  115. package/lib/esm/server/master/api.js +0 -9
  116. package/lib/esm/server/master/index.js +25 -35
  117. package/lib/esm/server/master/master.js +2 -7
  118. package/lib/esm/server/master/pool.js +8 -41
  119. package/lib/esm/server/master/runner.js +64 -90
  120. package/lib/esm/server/master/server.js +9 -11
  121. package/lib/esm/server/messages.js +8 -42
  122. package/lib/esm/server/selenium/browser.js +147 -163
  123. package/lib/esm/server/selenium/selenoid.js +16 -27
  124. package/lib/esm/server/stories.js +34 -46
  125. package/lib/esm/server/storybook/providers/browser.js +12 -17
  126. package/lib/esm/server/storybook/providers/hybrid.js +11 -22
  127. package/lib/esm/server/telemetry.js +160 -0
  128. package/lib/esm/server/testsFiles/parser.js +0 -6
  129. package/lib/esm/server/testsFiles/register.js +6 -7
  130. package/lib/esm/server/update.js +1 -13
  131. package/lib/esm/server/utils.js +20 -41
  132. package/lib/esm/server/worker/chai-image.js +0 -21
  133. package/lib/esm/server/worker/helpers.js +2 -9
  134. package/lib/esm/server/worker/reporter.js +15 -29
  135. package/lib/esm/server/worker/worker.js +31 -48
  136. package/lib/esm/shared/index.js +77 -0
  137. package/lib/esm/shared/serializeRegExp.js +24 -0
  138. package/lib/esm/types.js +5 -1
  139. package/lib/types/client/addon/Manager.d.ts +3 -3
  140. package/lib/types/client/addon/components/Addon.d.ts +1 -0
  141. package/lib/types/client/addon/components/Icons.d.ts +1 -0
  142. package/lib/types/client/addon/components/Panel.d.ts +1 -0
  143. package/lib/types/client/addon/components/Tools.d.ts +1 -0
  144. package/lib/types/client/addon/decorator.d.ts +1 -1
  145. package/lib/types/client/addon/index.d.ts +2 -0
  146. package/lib/types/client/addon/preset.d.ts +2 -24
  147. package/lib/types/client/addon/preview.d.ts +4 -0
  148. package/lib/types/client/addon/utils.d.ts +1 -0
  149. package/lib/types/client/addon/withCreevey.d.ts +4 -3
  150. package/lib/types/client/shared/components/ImagesView/BlendView.d.ts +3 -1
  151. package/lib/types/client/shared/components/ImagesView/SideBySideView.d.ts +3 -1
  152. package/lib/types/client/shared/components/ImagesView/SlideView.d.ts +3 -1
  153. package/lib/types/client/shared/components/ImagesView/SwapView.d.ts +3 -1
  154. package/lib/types/client/shared/components/PageHeader/ImagePreview.d.ts +3 -1
  155. package/lib/types/client/shared/components/ResultsPage.d.ts +3 -1
  156. package/lib/types/client/web/CreeveyLoader.d.ts +1 -1
  157. package/lib/types/client/web/CreeveyView/SideBar/Checkbox.d.ts +6 -3
  158. package/lib/types/client/web/CreeveyView/SideBar/Search.d.ts +1 -0
  159. package/lib/types/client/web/CreeveyView/SideBar/SuiteLink.d.ts +19 -14
  160. package/lib/types/client/web/CreeveyView/SideBar/TestStatusIcon.d.ts +3 -1
  161. package/lib/types/client/web/CreeveyView/SideBar/TestsStatus.d.ts +3 -1
  162. package/lib/types/client/web/CreeveyView/SideBar/Toggle.d.ts +1 -0
  163. package/lib/types/client/web/KeyboardEventsContext.d.ts +4 -2
  164. package/lib/types/index.d.ts +4 -1
  165. package/lib/types/server/logger.d.ts +6 -2
  166. package/lib/types/server/messages.d.ts +14 -12
  167. package/lib/types/server/selenium/browser.d.ts +5 -3
  168. package/lib/types/server/storybook/providers/browser.d.ts +2 -4
  169. package/lib/types/server/storybook/providers/hybrid.d.ts +2 -4
  170. package/lib/types/server/telemetry.d.ts +2 -0
  171. package/lib/types/server/utils.d.ts +5 -1
  172. package/lib/types/shared/index.d.ts +7 -0
  173. package/lib/types/shared/serializeRegExp.d.ts +9 -0
  174. package/lib/types/types.d.ts +29 -36
  175. package/package.json +132 -133
  176. package/types/global.d.ts +5 -0
  177. package/lib/cjs/client/web/1.js +0 -13
  178. package/lib/cjs/client/web/2.js +0 -1
  179. package/lib/cjs/server/extract.js +0 -50
  180. package/lib/cjs/server/loaders/babel/creevey-plugin.js +0 -88
  181. package/lib/cjs/server/loaders/babel/helpers.js +0 -479
  182. package/lib/cjs/server/loaders/babel/register.js +0 -126
  183. package/lib/cjs/server/loaders/hooks/mdx.js +0 -30
  184. package/lib/cjs/server/loaders/hooks/svelte.js +0 -65
  185. package/lib/cjs/server/loaders/webpack/compile.js +0 -286
  186. package/lib/cjs/server/loaders/webpack/creevey-loader.js +0 -174
  187. package/lib/cjs/server/loaders/webpack/dummy-hmr.js +0 -44
  188. package/lib/cjs/server/loaders/webpack/mdx-loader.js +0 -72
  189. package/lib/cjs/server/loaders/webpack/start.js +0 -41
  190. package/lib/cjs/server/storybook/entry.js +0 -68
  191. package/lib/cjs/server/storybook/helpers.js +0 -165
  192. package/lib/cjs/server/storybook/providers/nodejs.js +0 -239
  193. package/lib/cjs/shared.js +0 -124
  194. package/lib/esm/server/extract.js +0 -34
  195. package/lib/esm/server/loaders/babel/creevey-plugin.js +0 -74
  196. package/lib/esm/server/loaders/babel/helpers.js +0 -462
  197. package/lib/esm/server/loaders/babel/register.js +0 -105
  198. package/lib/esm/server/loaders/hooks/mdx.js +0 -15
  199. package/lib/esm/server/loaders/hooks/svelte.js +0 -49
  200. package/lib/esm/server/loaders/webpack/compile.js +0 -263
  201. package/lib/esm/server/loaders/webpack/creevey-loader.js +0 -153
  202. package/lib/esm/server/loaders/webpack/dummy-hmr.js +0 -36
  203. package/lib/esm/server/loaders/webpack/mdx-loader.js +0 -58
  204. package/lib/esm/server/loaders/webpack/start.js +0 -27
  205. package/lib/esm/server/storybook/entry.js +0 -44
  206. package/lib/esm/server/storybook/helpers.js +0 -106
  207. package/lib/esm/server/storybook/providers/nodejs.js +0 -217
  208. package/lib/esm/shared.js +0 -93
  209. package/lib/types/server/extract.d.ts +0 -2
  210. package/lib/types/server/loaders/babel/creevey-plugin.d.ts +0 -1
  211. package/lib/types/server/loaders/babel/helpers.d.ts +0 -19
  212. package/lib/types/server/loaders/babel/register.d.ts +0 -5
  213. package/lib/types/server/loaders/hooks/mdx.d.ts +0 -1
  214. package/lib/types/server/loaders/hooks/svelte.d.ts +0 -1
  215. package/lib/types/server/loaders/webpack/compile.d.ts +0 -2
  216. package/lib/types/server/loaders/webpack/creevey-loader.d.ts +0 -2
  217. package/lib/types/server/loaders/webpack/dummy-hmr.d.ts +0 -10
  218. package/lib/types/server/loaders/webpack/mdx-loader.d.ts +0 -6
  219. package/lib/types/server/loaders/webpack/start.d.ts +0 -1
  220. package/lib/types/server/storybook/entry.d.ts +0 -18
  221. package/lib/types/server/storybook/helpers.d.ts +0 -24
  222. package/lib/types/server/storybook/providers/nodejs.d.ts +0 -9
  223. package/lib/types/shared.d.ts +0 -16
  224. package/preset.js +0 -9
  225. package/storybook-static/stories.json +0 -21
  226. package/types/mdx.d.ts +0 -6
@@ -2,83 +2,69 @@ import React from 'react';
2
2
  import { Button, Icons } from '@storybook/components';
3
3
  import { noop } from '../../../../types';
4
4
  import { styled } from '@storybook/theming';
5
- var StyledButton = styled(Button)({
5
+ const StyledButton = styled(Button)({
6
6
  transform: 'none',
7
7
  marginLeft: '8px'
8
8
  });
9
9
  export function Paging(props) {
10
- var renderItem = function renderItem(item, index) {
10
+ const renderItem = (item, index) => {
11
11
  switch (item) {
12
12
  case '.':
13
13
  {
14
14
  return /*#__PURE__*/React.createElement(StyledButton, {
15
15
  disabled: true,
16
- key: "dots".concat(index < 5 ? 'Left' : 'Right')
16
+ key: `dots${index < 5 ? 'Left' : 'Right'}`
17
17
  }, '...');
18
18
  }
19
-
20
19
  case 'forward':
21
20
  {
22
- var disabled = props.activePage === props.pagesCount;
21
+ const disabled = props.activePage === props.pagesCount;
23
22
  return /*#__PURE__*/React.createElement(StyledButton, {
24
23
  outline: true,
25
24
  disabled: disabled,
26
- onClick: disabled ? noop : function () {
27
- return goToPage(props.activePage + 1);
28
- },
25
+ onClick: disabled ? noop : () => goToPage(props.activePage + 1),
29
26
  key: "forward"
30
27
  }, /*#__PURE__*/React.createElement("span", null, "Next ", /*#__PURE__*/React.createElement(Icons, {
31
28
  icon: "arrowright"
32
29
  })));
33
30
  }
34
-
35
31
  default:
36
32
  {
37
33
  return /*#__PURE__*/React.createElement(StyledButton, {
38
34
  outline: true,
39
35
  secondary: props.activePage === item,
40
36
  key: item,
41
- onClick: function onClick() {
42
- return goToPage(item);
43
- }
37
+ onClick: () => goToPage(item)
44
38
  }, item);
45
39
  }
46
40
  }
47
41
  };
48
-
49
- var goToPage = function goToPage(pageNumber) {
42
+ const goToPage = pageNumber => {
50
43
  if (1 <= pageNumber && pageNumber !== props.activePage && pageNumber <= props.pagesCount) {
51
44
  props.onPageChange(pageNumber);
52
45
  }
53
46
  };
54
-
55
47
  return /*#__PURE__*/React.createElement("div", null, getItems(props.activePage, props.pagesCount).map(renderItem));
56
48
  }
57
-
58
49
  function getItems(active, total) {
59
- var result = [];
60
- var left = Math.max(Math.min(active - 2, total - 4), 1);
61
- var right = Math.min(Math.max(5, active + 2), total);
62
- var hasLeftDots = left > 3;
63
- var from = hasLeftDots ? left : 1;
64
- var hasRightDots = right < total - 2;
65
- var to = hasRightDots ? right : total;
66
-
50
+ const result = [];
51
+ const left = Math.max(Math.min(active - 2, total - 4), 1);
52
+ const right = Math.min(Math.max(5, active + 2), total);
53
+ const hasLeftDots = left > 3;
54
+ const from = hasLeftDots ? left : 1;
55
+ const hasRightDots = right < total - 2;
56
+ const to = hasRightDots ? right : total;
67
57
  if (hasLeftDots) {
68
58
  result.push(1, '.');
69
59
  }
70
-
71
- for (var i = from; i <= to; ++i) {
60
+ for (let i = from; i <= to; ++i) {
72
61
  result.push(i);
73
62
  }
74
-
75
63
  if (hasRightDots) {
76
64
  result.push('.');
77
65
  }
78
-
79
66
  if (hasRightDots && isFinite(total)) {
80
67
  result.push(total);
81
68
  }
82
-
83
69
  return result.concat('forward');
84
70
  }
@@ -1,9 +1,11 @@
1
1
  import React from 'react';
2
2
  import { styled, withTheme } from '@storybook/theming';
3
- var IMG_SIZE = 64;
4
- var DIAG_LENGTH = Math.pow(2 * Math.pow(IMG_SIZE - 8, 2), 1 / 2);
5
- var Button = styled.button(function (_ref) {
6
- var borderColor = _ref.borderColor;
3
+ const IMG_SIZE = 64;
4
+ const DIAG_LENGTH = (2 * (IMG_SIZE - 8) ** 2) ** (1 / 2);
5
+ const Button = styled.button(_ref => {
6
+ let {
7
+ borderColor
8
+ } = _ref;
7
9
  return {
8
10
  appearance: 'none',
9
11
  background: 'none',
@@ -20,38 +22,51 @@ var Button = styled.button(function (_ref) {
20
22
  }
21
23
  };
22
24
  });
23
- var Image = withTheme(styled.img(function (_ref2) {
24
- var hasBorder = _ref2.hasBorder,
25
- backgroundColor = _ref2.backgroundColor,
26
- theme = _ref2.theme;
25
+ const Image = withTheme(styled.img(_ref2 => {
26
+ let {
27
+ hasBorder,
28
+ backgroundColor,
29
+ theme
30
+ } = _ref2;
27
31
  return {
28
- maxHeight: "".concat(IMG_SIZE, "px"),
29
- width: "".concat(IMG_SIZE, "px"),
32
+ maxHeight: `${IMG_SIZE}px`,
33
+ width: `${IMG_SIZE}px`,
30
34
  overflow: 'hidden',
31
35
  transform: hasBorder ? 'translateY(2px)' : undefined,
32
36
  '&::before': {
33
37
  content: "' '",
34
38
  display: 'block',
35
- height: "".concat(IMG_SIZE - 8, "px"),
36
- width: "".concat(IMG_SIZE - 8, "px"),
39
+ height: `${IMG_SIZE - 8}px`,
40
+ width: `${IMG_SIZE - 8}px`,
37
41
  margin: '4px',
38
42
  backgroundColor: backgroundColor,
39
- backgroundImage: "linear-gradient(\n 45deg,\n rgba(0, 0, 0, 0) ".concat(DIAG_LENGTH / 2 - 0.5, "px,\n ").concat(theme.color.medium, " ").concat(DIAG_LENGTH / 2 - 0.5, "px,\n ").concat(theme.color.medium, " ").concat(DIAG_LENGTH / 2 + 0.5, "px,\n rgba(0, 0, 0, 0) ").concat(DIAG_LENGTH / 2 + 0.5, "px\n ),\n linear-gradient(\n 315deg,\n rgba(0, 0, 0, 0) ").concat(DIAG_LENGTH / 2 + 0.2, "px,\n ").concat(theme.color.medium, " ").concat(DIAG_LENGTH / 2 + 0.2, "px,\n ").concat(theme.color.medium, " ").concat(DIAG_LENGTH / 2 + 1.2, "px,\n rgba(0, 0, 0, 0) ").concat(DIAG_LENGTH / 2 + 1.2, "px\n )")
43
+ backgroundImage: `linear-gradient(
44
+ 45deg,
45
+ rgba(0, 0, 0, 0) ${DIAG_LENGTH / 2 - 0.5}px,
46
+ ${theme.color.medium} ${DIAG_LENGTH / 2 - 0.5}px,
47
+ ${theme.color.medium} ${DIAG_LENGTH / 2 + 0.5}px,
48
+ rgba(0, 0, 0, 0) ${DIAG_LENGTH / 2 + 0.5}px
49
+ ),
50
+ linear-gradient(
51
+ 315deg,
52
+ rgba(0, 0, 0, 0) ${DIAG_LENGTH / 2 + 0.2}px,
53
+ ${theme.color.medium} ${DIAG_LENGTH / 2 + 0.2}px,
54
+ ${theme.color.medium} ${DIAG_LENGTH / 2 + 1.2}px,
55
+ rgba(0, 0, 0, 0) ${DIAG_LENGTH / 2 + 1.2}px
56
+ )`
40
57
  }
41
58
  };
42
59
  }));
43
- export var ImagePreview = withTheme(function (_ref3) {
44
- var isActive = _ref3.isActive,
45
- onClick = _ref3.onClick,
46
- imageName = _ref3.imageName,
47
- url = _ref3.url,
48
- theme = _ref3.theme,
49
- error = _ref3.error;
50
-
51
- var handleClick = function handleClick() {
52
- return onClick(imageName);
53
- };
54
-
60
+ export const ImagePreview = withTheme(_ref3 => {
61
+ let {
62
+ isActive,
63
+ onClick,
64
+ imageName,
65
+ url,
66
+ theme,
67
+ error
68
+ } = _ref3;
69
+ const handleClick = () => onClick(imageName);
55
70
  return /*#__PURE__*/React.createElement(Button, {
56
71
  onClick: handleClick,
57
72
  borderColor: isActive ? theme.barSelectedColor : error ? theme.color.negative : undefined
@@ -1,26 +1,16 @@
1
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
-
3
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4
-
5
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
6
-
7
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
8
-
9
- function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
10
-
11
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
12
-
13
1
  import React, { useState } from 'react';
14
2
  import { getImageUrl } from '../../helpers';
15
3
  import { Icons, Tabs } from '@storybook/components';
16
4
  import { styled, withTheme } from '@storybook/theming';
17
5
  import { ImagePreview } from './ImagePreview';
18
6
  import { viewModes } from '../../viewMode';
19
- var Container = styled.div({
7
+ const Container = styled.div({
20
8
  margin: '24px 44px 0'
21
9
  });
22
- var ErrorContainer = withTheme(styled.div(function (_ref) {
23
- var theme = _ref.theme;
10
+ const ErrorContainer = withTheme(styled.div(_ref => {
11
+ let {
12
+ theme
13
+ } = _ref;
24
14
  return {
25
15
  marginTop: '8px',
26
16
  padding: '8px',
@@ -41,66 +31,50 @@ var ErrorContainer = withTheme(styled.div(function (_ref) {
41
31
  }
42
32
  };
43
33
  }));
44
- var H1 = styled.h1({
34
+ const H1 = styled.h1({
45
35
  margin: 0,
46
36
  marginBottom: '8px'
47
37
  });
48
- var HeaderDivider = withTheme(styled.span(function (_ref2) {
49
- var theme = _ref2.theme;
38
+ const HeaderDivider = withTheme(styled.span(_ref2 => {
39
+ let {
40
+ theme
41
+ } = _ref2;
50
42
  return {
51
43
  padding: '0 8px',
52
44
  color: theme.color.mediumdark
53
45
  };
54
46
  }));
55
- var ImagesEntriesContainer = styled.div({
47
+ const ImagesEntriesContainer = styled.div({
56
48
  display: 'flex',
57
49
  margin: '16px 0 8px'
58
50
  });
59
51
  export function PageHeader(_ref3) {
60
- var _, _imageEntires$, _images$imageName;
61
-
62
- var title = _ref3.title,
63
- _ref3$images = _ref3.images,
64
- images = _ref3$images === void 0 ? {} : _ref3$images,
65
- errorMessage = _ref3.errorMessage,
66
- showViewModes = _ref3.showViewModes,
67
- showTitle = _ref3.showTitle,
68
- viewMode = _ref3.viewMode,
69
- _ref3$imagesWithError = _ref3.imagesWithError,
70
- imagesWithError = _ref3$imagesWithError === void 0 ? [] : _ref3$imagesWithError,
71
- onImageChange = _ref3.onImageChange,
72
- onViewModeChange = _ref3.onViewModeChange;
73
- var imageEntires = Object.entries(images);
74
-
75
- var _useState = useState((_ = ((_imageEntires$ = imageEntires[0]) !== null && _imageEntires$ !== void 0 ? _imageEntires$ : [])[0]) !== null && _ !== void 0 ? _ : ''),
76
- _useState2 = _slicedToArray(_useState, 2),
77
- imageName = _useState2[0],
78
- setImageName = _useState2[1];
79
-
80
- var handleImageChange = function handleImageChange(name) {
81
- return setImageName(name), onImageChange(name);
82
- };
83
-
84
- var handleViewModeChange = function handleViewModeChange(mode) {
85
- return onViewModeChange(mode);
86
- };
87
-
88
- var error = errorMessage || imagesWithError.includes(imageName) ? ((_images$imageName = images[imageName]) === null || _images$imageName === void 0 ? void 0 : _images$imageName.error) || errorMessage : null;
89
- return showTitle || error || imageEntires.length > 1 || showViewModes ? /*#__PURE__*/React.createElement(Container, null, showTitle && /*#__PURE__*/React.createElement(H1, null, title.flatMap(function (token) {
90
- return [token, /*#__PURE__*/React.createElement(HeaderDivider, {
91
- key: token
92
- }, "/")];
93
- }).slice(0, -1)), error && /*#__PURE__*/React.createElement(ErrorContainer, null, /*#__PURE__*/React.createElement(Icons, {
52
+ let {
53
+ title,
54
+ images = {},
55
+ errorMessage,
56
+ showViewModes,
57
+ showTitle,
58
+ viewMode,
59
+ imagesWithError = [],
60
+ onImageChange,
61
+ onViewModeChange
62
+ } = _ref3;
63
+ const imageEntires = Object.entries(images);
64
+ const [imageName, setImageName] = useState((imageEntires[0] ?? [])[0] ?? '');
65
+ const handleImageChange = name => (setImageName(name), onImageChange(name));
66
+ const handleViewModeChange = mode => onViewModeChange(mode);
67
+ const error = errorMessage || imagesWithError.includes(imageName) ? images[imageName]?.error || errorMessage : null;
68
+ return showTitle || error || imageEntires.length > 1 || showViewModes ? /*#__PURE__*/React.createElement(Container, null, showTitle && /*#__PURE__*/React.createElement(H1, null, title.flatMap(token => [token, /*#__PURE__*/React.createElement(HeaderDivider, {
69
+ key: token
70
+ }, "/")]).slice(0, -1)), error && /*#__PURE__*/React.createElement(ErrorContainer, null, /*#__PURE__*/React.createElement(Icons, {
94
71
  icon: "closeAlt"
95
- }), /*#__PURE__*/React.createElement("pre", null, error)), imageEntires.length > 1 ? /*#__PURE__*/React.createElement(ImagesEntriesContainer, null, imageEntires.map(function (_ref4) {
96
- var _ref5 = _slicedToArray(_ref4, 2),
97
- name = _ref5[0],
98
- image = _ref5[1];
99
-
72
+ }), /*#__PURE__*/React.createElement("pre", null, error)), imageEntires.length > 1 ? /*#__PURE__*/React.createElement(ImagesEntriesContainer, null, imageEntires.map(_ref4 => {
73
+ let [name, image] = _ref4;
100
74
  return /*#__PURE__*/React.createElement(ImagePreview, {
101
75
  key: name,
102
76
  imageName: name,
103
- url: "".concat(getImageUrl(title, name), "/").concat(image.actual),
77
+ url: `${getImageUrl(title, name)}/${image.actual}`,
104
78
  isActive: name === imageName,
105
79
  onClick: handleImageChange,
106
80
  error: imagesWithError.includes(name)
@@ -110,11 +84,9 @@ export function PageHeader(_ref3) {
110
84
  actions: {
111
85
  onSelect: handleViewModeChange
112
86
  }
113
- }, viewModes.map(function (x) {
114
- return /*#__PURE__*/React.createElement("div", {
115
- key: x,
116
- id: x,
117
- title: x
118
- });
119
- }))) : null;
87
+ }, viewModes.map(x => /*#__PURE__*/React.createElement("div", {
88
+ key: x,
89
+ id: x,
90
+ title: x
91
+ })))) : null;
120
92
  }
@@ -1,15 +1,3 @@
1
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
-
3
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4
-
5
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
6
-
7
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
8
-
9
- function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
10
-
11
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
12
-
13
1
  import React, { useState, useEffect } from 'react';
14
2
  import { ImagesView } from './ImagesView/ImagesView';
15
3
  import { PageHeader } from './PageHeader/PageHeader';
@@ -18,39 +6,43 @@ import { getImageUrl } from '../helpers';
18
6
  import { styled, withTheme } from '@storybook/theming';
19
7
  import { Placeholder, ScrollArea } from '@storybook/components';
20
8
  import { getViewMode, VIEW_MODE_KEY } from '../viewMode';
21
- var Wrapper = styled.div({
9
+ const Wrapper = styled.div({
22
10
  width: '100%',
23
11
  height: '100%',
24
12
  boxSizing: 'border-box',
25
13
  display: 'flex',
26
14
  flexDirection: 'column'
27
15
  });
28
- var ImagesViewContainer = styled.div(function (_ref) {
29
- var theme = _ref.theme;
16
+ const ImagesViewContainer = styled.div(_ref => {
17
+ let {
18
+ theme
19
+ } = _ref;
30
20
  return {
31
21
  background: theme.base == 'light' ? theme.color.mediumlight : theme.color.darker,
32
22
  flexGrow: 1,
33
23
  padding: '20px 0'
34
24
  };
35
25
  });
36
- var HeaderContainer = styled.div({
26
+ const HeaderContainer = styled.div({
37
27
  position: 'sticky',
38
28
  top: 0,
39
29
  zIndex: 1
40
30
  });
41
- var BodyContainer = styled.div({
42
- flexGrow: 1
31
+ const BodyContainer = styled.div({
32
+ flexGrow: 1,
33
+ minHeight: 0
43
34
  });
44
- var FooterContainer = styled.div({
35
+ const FooterContainer = styled.div({
45
36
  position: 'sticky',
46
37
  bottom: 0,
47
38
  zIndex: 1
48
39
  });
49
- var Container = styled.div(function (_ref2) {
50
- var _ref2$height = _ref2.height,
51
- height = _ref2$height === void 0 ? '100vh' : _ref2$height;
40
+ const Container = styled.div(_ref2 => {
41
+ let {
42
+ height = '100vh'
43
+ } = _ref2;
52
44
  return {
53
- height: height,
45
+ height,
54
46
  width: '100%',
55
47
  overflowY: 'hidden',
56
48
  display: 'flex',
@@ -58,59 +50,31 @@ var Container = styled.div(function (_ref2) {
58
50
  };
59
51
  });
60
52
  export function ResultsPageInternal(_ref3) {
61
- var _results, _Object$keys$, _result$images, _result$images2;
62
-
63
- var id = _ref3.id,
64
- path = _ref3.path,
65
- _ref3$results = _ref3.results,
66
- results = _ref3$results === void 0 ? [] : _ref3$results,
67
- _ref3$approved = _ref3.approved,
68
- approved = _ref3$approved === void 0 ? {} : _ref3$approved,
69
- theme = _ref3.theme,
70
- onImageApprove = _ref3.onImageApprove,
71
- _ref3$showTitle = _ref3.showTitle,
72
- showTitle = _ref3$showTitle === void 0 ? false : _ref3$showTitle,
73
- height = _ref3.height;
74
-
75
- var _useState = useState(results.length),
76
- _useState2 = _slicedToArray(_useState, 2),
77
- retry = _useState2[0],
78
- setRetry = _useState2[1];
79
-
80
- var result = (_results = results[retry - 1]) !== null && _results !== void 0 ? _results : {};
81
-
82
- var _useState3 = useState((_Object$keys$ = Object.keys((_result$images = result.images) !== null && _result$images !== void 0 ? _result$images : {})[0]) !== null && _Object$keys$ !== void 0 ? _Object$keys$ : ''),
83
- _useState4 = _slicedToArray(_useState3, 2),
84
- imageName = _useState4[0],
85
- setImageName = _useState4[1];
86
-
87
- var _useState5 = useState(getViewMode()),
88
- _useState6 = _slicedToArray(_useState5, 2),
89
- viewMode = _useState6[0],
90
- setViewMode = _useState6[1];
91
-
92
- useEffect(function () {
93
- return setRetry(results.length);
94
- }, [results.length]);
95
- var url = getImageUrl(path, imageName);
96
- var image = (_result$images2 = result.images) === null || _result$images2 === void 0 ? void 0 : _result$images2[imageName];
97
- var canApprove = Boolean(image && approved[imageName] != retry - 1 && result.status != 'success');
98
- var hasDiffAndExpect = canApprove && Boolean((image === null || image === void 0 ? void 0 : image.diff) && image.expect);
99
- var imagesWithError = result.images ? Object.keys(result.images).filter(function (imageName) {
100
- var _imageName;
101
-
102
- return result.status != 'success' && approved[imageName] != retry - 1 && ((_imageName = (result.images || {})[imageName]) === null || _imageName === void 0 ? void 0 : _imageName.error) != null;
103
- }) : [];
104
-
105
- var handleApprove = function handleApprove() {
106
- return onImageApprove(id, retry - 1, imageName);
107
- };
108
-
109
- var handleChangeViewMode = function handleChangeViewMode(mode) {
53
+ let {
54
+ id,
55
+ path,
56
+ results = [],
57
+ approved = {},
58
+ theme,
59
+ onImageApprove,
60
+ showTitle = false,
61
+ height
62
+ } = _ref3;
63
+ const [retry, setRetry] = useState(results.length);
64
+ const result = results[retry - 1] ?? {};
65
+ const [imageName, setImageName] = useState(Object.keys(result.images ?? {})[0] ?? '');
66
+ const [viewMode, setViewMode] = useState(getViewMode());
67
+ useEffect(() => setRetry(results.length), [results.length]);
68
+ const url = getImageUrl(path, imageName);
69
+ const image = result.images?.[imageName];
70
+ const canApprove = Boolean(image && approved[imageName] != retry - 1 && result.status != 'success');
71
+ const hasDiffAndExpect = canApprove && Boolean(image?.diff && image.expect);
72
+ const imagesWithError = result.images ? Object.keys(result.images).filter(imageName => result.status != 'success' && approved[imageName] != retry - 1 && (result.images || {})[imageName]?.error != null) : [];
73
+ const handleApprove = () => onImageApprove(id, retry - 1, imageName);
74
+ const handleChangeViewMode = mode => {
110
75
  localStorage.setItem(VIEW_MODE_KEY, mode);
111
76
  setViewMode(mode);
112
77
  };
113
-
114
78
  return /*#__PURE__*/React.createElement(Container, {
115
79
  height: height
116
80
  }, /*#__PURE__*/React.createElement(HeaderContainer, null, /*#__PURE__*/React.createElement(PageHeader, {
@@ -132,7 +96,7 @@ export function ResultsPageInternal(_ref3) {
132
96
  image: image,
133
97
  canApprove: canApprove,
134
98
  mode: viewMode
135
- }) : /*#__PURE__*/React.createElement(Placeholder, null, "Image ".concat(imageName, " not found")))))), results.length ? /*#__PURE__*/React.createElement(FooterContainer, null, /*#__PURE__*/React.createElement(PageFooter, {
99
+ }) : /*#__PURE__*/React.createElement(Placeholder, null, `Image ${imageName} not found`))))), results.length ? /*#__PURE__*/React.createElement(FooterContainer, null, /*#__PURE__*/React.createElement(PageFooter, {
136
100
  canApprove: canApprove,
137
101
  retry: retry,
138
102
  retriesCount: results.length,
@@ -140,4 +104,4 @@ export function ResultsPageInternal(_ref3) {
140
104
  onApprove: handleApprove
141
105
  })) : null);
142
106
  }
143
- export var ResultsPage = withTheme(ResultsPageInternal);
107
+ export const ResultsPage = withTheme(ResultsPageInternal);
@@ -1,94 +1,60 @@
1
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
2
-
3
- function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
4
-
5
1
  import { noop } from '../../types';
6
2
  import { getConnectionUrl } from './helpers';
7
- export function initCreeveyClientApi() {
8
- return _initCreeveyClientApi.apply(this, arguments);
9
- }
10
-
11
- function _initCreeveyClientApi() {
12
- _initCreeveyClientApi = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
13
- var clientApiResolver, updateListeners, statusRequest, statusResolver, ws, send;
14
- return regeneratorRuntime.wrap(function _callee$(_context) {
15
- while (1) {
16
- switch (_context.prev = _context.next) {
17
- case 0:
18
- send = function _send(request) {
19
- ws.send(JSON.stringify(request));
20
- };
21
-
22
- clientApiResolver = noop;
23
- updateListeners = new Set();
24
- statusRequest = null;
25
- statusResolver = noop;
26
- ws = new WebSocket("ws://".concat(getConnectionUrl()));
27
- ws.addEventListener('open', function () {
28
- clientApiResolver({
29
- start: function start(ids) {
30
- send({
31
- type: 'start',
32
- payload: ids
33
- });
34
- },
35
- stop: function stop() {
36
- send({
37
- type: 'stop'
38
- });
39
- },
40
- approve: function approve(id, retry, image) {
41
- send({
42
- type: 'approve',
43
- payload: {
44
- id: id,
45
- retry: retry,
46
- image: image
47
- }
48
- });
49
- },
50
- onUpdate: function onUpdate(fn) {
51
- updateListeners.add(fn);
52
- return function () {
53
- return updateListeners.delete(fn);
54
- };
55
- },
56
-
57
- get status() {
58
- if (statusRequest) return statusRequest;
59
- send({
60
- type: 'status'
61
- });
62
- return statusRequest = new Promise(function (resolve) {
63
- return statusResolver = resolve;
64
- });
65
- }
66
-
67
- });
68
- });
69
- ws.addEventListener('message', function (message) {
70
- var data = JSON.parse(message.data);
71
- if (data.type == 'update') updateListeners.forEach(function (fn) {
72
- return fn(data.payload);
73
- });
74
-
75
- if (data.type == 'status') {
76
- statusResolver(data.payload);
77
- statusResolver = noop;
78
- statusRequest = null;
79
- }
80
- }); // TODO Reconnect
81
-
82
- return _context.abrupt("return", new Promise(function (resolve) {
83
- return clientApiResolver = resolve;
84
- }));
85
-
86
- case 9:
87
- case "end":
88
- return _context.stop();
89
- }
3
+ export async function initCreeveyClientApi() {
4
+ let clientApiResolver = noop;
5
+ const updateListeners = new Set();
6
+ let statusRequest = null;
7
+ let statusResolver = noop;
8
+ const ws = new WebSocket(`ws://${getConnectionUrl()}`);
9
+ function send(request) {
10
+ ws.send(JSON.stringify(request));
11
+ }
12
+ ws.addEventListener('open', () => {
13
+ clientApiResolver({
14
+ start(ids) {
15
+ send({
16
+ type: 'start',
17
+ payload: ids
18
+ });
19
+ },
20
+ stop() {
21
+ send({
22
+ type: 'stop'
23
+ });
24
+ },
25
+ approve(id, retry, image) {
26
+ send({
27
+ type: 'approve',
28
+ payload: {
29
+ id,
30
+ retry,
31
+ image
32
+ }
33
+ });
34
+ },
35
+ onUpdate(fn) {
36
+ updateListeners.add(fn);
37
+ return () => updateListeners.delete(fn);
38
+ },
39
+ get status() {
40
+ if (statusRequest) return statusRequest;
41
+ send({
42
+ type: 'status'
43
+ });
44
+ return statusRequest = new Promise(resolve => statusResolver = resolve);
90
45
  }
91
- }, _callee);
92
- }));
93
- return _initCreeveyClientApi.apply(this, arguments);
46
+ });
47
+ });
48
+ ws.addEventListener('message', message => {
49
+ const data = JSON.parse(message.data);
50
+ if (data.type == 'update') updateListeners.forEach(fn => fn(data.payload));
51
+ if (data.type == 'status') {
52
+ statusResolver(data.payload);
53
+ statusResolver = noop;
54
+ statusRequest = null;
55
+ }
56
+ });
57
+ // TODO Reconnect
58
+
59
+ return new Promise(resolve => clientApiResolver = resolve);
94
60
  }