creevey 0.8.1-sb7.1 → 0.8.1-sb7.2

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 (235) hide show
  1. package/lib/cjs/cli.js +5 -0
  2. package/lib/cjs/client/addon/Manager.js +264 -0
  3. package/lib/cjs/client/addon/components/Addon.js +55 -0
  4. package/lib/cjs/client/addon/components/Icons.js +46 -0
  5. package/lib/cjs/client/addon/components/Panel.js +72 -0
  6. package/lib/cjs/client/addon/components/TestSelect.js +65 -0
  7. package/lib/cjs/client/addon/components/Tools.js +97 -0
  8. package/lib/cjs/client/addon/decorator.js +11 -0
  9. package/lib/cjs/client/addon/index.js +31 -0
  10. package/lib/cjs/client/addon/preset.ie11.js +74 -0
  11. package/lib/cjs/client/addon/preset.js +62 -0
  12. package/lib/cjs/client/addon/readyForCapture.js +12 -0
  13. package/lib/cjs/client/addon/register.js +74 -0
  14. package/lib/cjs/client/addon/utils.js +42 -0
  15. package/lib/cjs/client/addon/withCreevey.js +354 -0
  16. package/lib/cjs/client/shared/components/ImagesView/BlendView.js +87 -0
  17. package/lib/cjs/client/shared/components/ImagesView/ImagesView.js +92 -0
  18. package/lib/cjs/client/shared/components/ImagesView/SideBySideView.js +154 -0
  19. package/lib/cjs/client/shared/components/ImagesView/SlideView.js +166 -0
  20. package/lib/cjs/client/shared/components/ImagesView/SwapView.js +91 -0
  21. package/lib/cjs/client/shared/components/ImagesView/index.js +45 -0
  22. package/lib/cjs/client/shared/components/PageFooter/PageFooter.js +50 -0
  23. package/lib/cjs/client/shared/components/PageFooter/Paging.js +94 -0
  24. package/lib/cjs/client/shared/components/PageHeader/ImagePreview.js +82 -0
  25. package/lib/cjs/client/shared/components/PageHeader/PageHeader.js +119 -0
  26. package/lib/cjs/client/shared/components/ResultsPage.js +143 -0
  27. package/lib/cjs/client/shared/creeveyClientApi.js +76 -0
  28. package/lib/cjs/client/shared/helpers.js +411 -0
  29. package/lib/cjs/client/shared/viewMode.js +17 -0
  30. package/lib/cjs/client/web/19.js +1 -0
  31. package/lib/cjs/client/web/632.js +43 -0
  32. package/lib/cjs/client/web/794.js +1 -0
  33. package/lib/cjs/client/web/index.html +19 -0
  34. package/lib/cjs/client/web/main.js +79 -0
  35. package/lib/cjs/client/web/main.js.LICENSE.txt +34 -0
  36. package/lib/cjs/creevey.js +69 -0
  37. package/lib/cjs/index.js +39 -0
  38. package/lib/cjs/server/config.js +93 -0
  39. package/lib/cjs/server/docker.js +146 -0
  40. package/lib/cjs/server/extract.js +46 -0
  41. package/lib/cjs/server/index.js +83 -0
  42. package/lib/cjs/server/loaders/babel/creevey-plugin.js +86 -0
  43. package/lib/cjs/server/loaders/babel/helpers.js +469 -0
  44. package/lib/cjs/server/loaders/babel/register.js +124 -0
  45. package/lib/cjs/server/loaders/hooks/mdx.js +30 -0
  46. package/lib/cjs/server/loaders/hooks/svelte.js +65 -0
  47. package/lib/cjs/server/loaders/webpack/compile.js +269 -0
  48. package/lib/cjs/server/loaders/webpack/creevey-loader.js +172 -0
  49. package/lib/cjs/server/loaders/webpack/dummy-hmr.js +39 -0
  50. package/lib/cjs/server/loaders/webpack/mdx-loader.js +72 -0
  51. package/lib/cjs/server/loaders/webpack/start.js +41 -0
  52. package/lib/cjs/server/logger.js +48 -0
  53. package/lib/cjs/server/master/api.js +71 -0
  54. package/lib/cjs/server/master/index.js +152 -0
  55. package/lib/cjs/server/master/master.js +57 -0
  56. package/lib/cjs/server/master/pool.js +197 -0
  57. package/lib/cjs/server/master/runner.js +281 -0
  58. package/lib/cjs/server/master/server.js +131 -0
  59. package/lib/cjs/server/messages.js +264 -0
  60. package/lib/cjs/server/selenium/browser.js +667 -0
  61. package/lib/cjs/server/selenium/index.js +31 -0
  62. package/lib/cjs/server/selenium/selenoid.js +172 -0
  63. package/lib/cjs/server/stories.js +155 -0
  64. package/lib/cjs/server/storybook/entry.js +55 -0
  65. package/lib/cjs/server/storybook/helpers.js +158 -0
  66. package/lib/cjs/server/storybook/providers/browser.js +76 -0
  67. package/lib/cjs/server/storybook/providers/nodejs.js +239 -0
  68. package/lib/cjs/server/update.js +79 -0
  69. package/lib/cjs/server/utils.js +169 -0
  70. package/lib/cjs/server/worker/chai-image.js +142 -0
  71. package/lib/cjs/server/worker/helpers.js +69 -0
  72. package/lib/cjs/server/worker/index.js +15 -0
  73. package/lib/cjs/server/worker/reporter.js +108 -0
  74. package/lib/cjs/server/worker/worker.js +268 -0
  75. package/lib/cjs/shared/index.js +103 -0
  76. package/lib/cjs/shared/serializeRegExp.js +42 -0
  77. package/lib/cjs/types.js +77 -0
  78. package/lib/esm/cli.js +4 -0
  79. package/lib/esm/client/addon/Manager.js +252 -0
  80. package/lib/esm/client/addon/components/Addon.js +39 -0
  81. package/lib/esm/client/addon/components/Icons.js +31 -0
  82. package/lib/esm/client/addon/components/Panel.js +53 -0
  83. package/lib/esm/client/addon/components/TestSelect.js +51 -0
  84. package/lib/esm/client/addon/components/Tools.js +76 -0
  85. package/lib/esm/client/addon/decorator.js +2 -0
  86. package/lib/esm/client/addon/index.js +2 -0
  87. package/lib/esm/client/addon/preset.ie11.js +59 -0
  88. package/lib/esm/client/addon/preset.js +41 -0
  89. package/lib/esm/client/addon/readyForCapture.js +5 -0
  90. package/lib/esm/client/addon/register.js +53 -0
  91. package/lib/esm/client/addon/utils.js +32 -0
  92. package/lib/esm/client/addon/withCreevey.js +327 -0
  93. package/lib/esm/client/shared/components/ImagesView/BlendView.js +67 -0
  94. package/lib/esm/client/shared/components/ImagesView/ImagesView.js +69 -0
  95. package/lib/esm/client/shared/components/ImagesView/SideBySideView.js +131 -0
  96. package/lib/esm/client/shared/components/ImagesView/SlideView.js +143 -0
  97. package/lib/esm/client/shared/components/ImagesView/SwapView.js +71 -0
  98. package/lib/esm/client/shared/components/ImagesView/index.js +5 -0
  99. package/lib/esm/client/shared/components/PageFooter/PageFooter.js +36 -0
  100. package/lib/esm/client/shared/components/PageFooter/Paging.js +80 -0
  101. package/lib/esm/client/shared/components/PageHeader/ImagePreview.js +68 -0
  102. package/lib/esm/client/shared/components/PageHeader/PageHeader.js +97 -0
  103. package/lib/esm/client/shared/components/ResultsPage.js +115 -0
  104. package/lib/esm/client/shared/creeveyClientApi.js +67 -0
  105. package/lib/esm/client/shared/helpers.js +353 -0
  106. package/lib/esm/client/shared/viewMode.js +6 -0
  107. package/lib/esm/creevey.js +54 -0
  108. package/lib/esm/index.js +3 -0
  109. package/lib/esm/server/config.js +70 -0
  110. package/lib/esm/server/docker.js +123 -0
  111. package/lib/esm/server/extract.js +32 -0
  112. package/lib/esm/server/index.js +64 -0
  113. package/lib/esm/server/loaders/babel/creevey-plugin.js +72 -0
  114. package/lib/esm/server/loaders/babel/helpers.js +452 -0
  115. package/lib/esm/server/loaders/babel/register.js +103 -0
  116. package/lib/esm/server/loaders/hooks/mdx.js +15 -0
  117. package/lib/esm/server/loaders/hooks/svelte.js +49 -0
  118. package/lib/esm/server/loaders/webpack/compile.js +246 -0
  119. package/lib/esm/server/loaders/webpack/creevey-loader.js +152 -0
  120. package/lib/esm/server/loaders/webpack/dummy-hmr.js +32 -0
  121. package/lib/esm/server/loaders/webpack/mdx-loader.js +58 -0
  122. package/lib/esm/server/loaders/webpack/start.js +27 -0
  123. package/lib/esm/server/logger.js +20 -0
  124. package/lib/esm/server/master/api.js +60 -0
  125. package/lib/esm/server/master/index.js +131 -0
  126. package/lib/esm/server/master/master.js +38 -0
  127. package/lib/esm/server/master/pool.js +176 -0
  128. package/lib/esm/server/master/runner.js +259 -0
  129. package/lib/esm/server/master/server.js +107 -0
  130. package/lib/esm/server/messages.js +232 -0
  131. package/lib/esm/server/selenium/browser.js +634 -0
  132. package/lib/esm/server/selenium/index.js +2 -0
  133. package/lib/esm/server/selenium/selenoid.js +149 -0
  134. package/lib/esm/server/stories.js +137 -0
  135. package/lib/esm/server/storybook/entry.js +29 -0
  136. package/lib/esm/server/storybook/helpers.js +99 -0
  137. package/lib/esm/server/storybook/providers/browser.js +60 -0
  138. package/lib/esm/server/storybook/providers/nodejs.js +219 -0
  139. package/lib/esm/server/update.js +61 -0
  140. package/lib/esm/server/utils.js +128 -0
  141. package/lib/esm/server/worker/chai-image.js +130 -0
  142. package/lib/esm/server/worker/helpers.js +60 -0
  143. package/lib/esm/server/worker/index.js +1 -0
  144. package/lib/esm/server/worker/reporter.js +86 -0
  145. package/lib/esm/server/worker/worker.js +238 -0
  146. package/lib/esm/shared/index.js +80 -0
  147. package/lib/esm/shared/serializeRegExp.js +24 -0
  148. package/lib/esm/types.js +46 -0
  149. package/lib/types/cli.d.ts +1 -0
  150. package/lib/types/client/addon/Manager.d.ts +37 -0
  151. package/lib/types/client/addon/components/Addon.d.ts +9 -0
  152. package/lib/types/client/addon/components/Icons.d.ts +8 -0
  153. package/lib/types/client/addon/components/Panel.d.ts +10 -0
  154. package/lib/types/client/addon/components/TestSelect.d.ts +9 -0
  155. package/lib/types/client/addon/components/Tools.d.ts +7 -0
  156. package/lib/types/client/addon/decorator.d.ts +1 -0
  157. package/lib/types/client/addon/index.d.ts +2 -0
  158. package/lib/types/client/addon/preset.d.ts +23 -0
  159. package/lib/types/client/addon/preset.ie11.d.ts +10 -0
  160. package/lib/types/client/addon/readyForCapture.d.ts +6 -0
  161. package/lib/types/client/addon/register.d.ts +3 -0
  162. package/lib/types/client/addon/utils.d.ts +3 -0
  163. package/lib/types/client/addon/withCreevey.d.ts +24 -0
  164. package/lib/types/client/shared/components/ImagesView/BlendView.d.ts +5 -0
  165. package/lib/types/client/shared/components/ImagesView/ImagesView.d.ts +25 -0
  166. package/lib/types/client/shared/components/ImagesView/SideBySideView.d.ts +5 -0
  167. package/lib/types/client/shared/components/ImagesView/SlideView.d.ts +5 -0
  168. package/lib/types/client/shared/components/ImagesView/SwapView.d.ts +5 -0
  169. package/lib/types/client/shared/components/ImagesView/index.d.ts +5 -0
  170. package/lib/types/client/shared/components/PageFooter/PageFooter.d.ts +9 -0
  171. package/lib/types/client/shared/components/PageFooter/Paging.d.ts +8 -0
  172. package/lib/types/client/shared/components/PageHeader/ImagePreview.d.ts +14 -0
  173. package/lib/types/client/shared/components/PageHeader/PageHeader.d.ts +17 -0
  174. package/lib/types/client/shared/components/ResultsPage.d.ts +20 -0
  175. package/lib/types/client/shared/creeveyClientApi.d.ts +9 -0
  176. package/lib/types/client/shared/helpers.d.ts +46 -0
  177. package/lib/types/client/shared/viewMode.d.ts +4 -0
  178. package/lib/types/client/web/CreeveyApp.d.ts +12 -0
  179. package/lib/types/client/web/CreeveyContext.d.ts +11 -0
  180. package/lib/types/client/web/CreeveyLoader.d.ts +3 -0
  181. package/lib/types/client/web/CreeveyView/SideBar/Checkbox.d.ts +22 -0
  182. package/lib/types/client/web/CreeveyView/SideBar/Search.d.ts +7 -0
  183. package/lib/types/client/web/CreeveyView/SideBar/SideBar.d.ts +14 -0
  184. package/lib/types/client/web/CreeveyView/SideBar/SideBarHeader.d.ts +13 -0
  185. package/lib/types/client/web/CreeveyView/SideBar/SuiteLink.d.ts +38 -0
  186. package/lib/types/client/web/CreeveyView/SideBar/TestLink.d.ts +8 -0
  187. package/lib/types/client/web/CreeveyView/SideBar/TestStatusIcon.d.ts +12 -0
  188. package/lib/types/client/web/CreeveyView/SideBar/TestsStatus.d.ts +11 -0
  189. package/lib/types/client/web/CreeveyView/SideBar/Toggle.d.ts +7 -0
  190. package/lib/types/client/web/CreeveyView/SideBar/index.d.ts +1 -0
  191. package/lib/types/client/web/KeyboardEventsContext.d.ts +13 -0
  192. package/lib/types/client/web/index.d.ts +4 -0
  193. package/lib/types/creevey.d.ts +1 -0
  194. package/lib/types/index.d.ts +2 -0
  195. package/lib/types/server/config.d.ts +4 -0
  196. package/lib/types/server/docker.d.ts +7 -0
  197. package/lib/types/server/extract.d.ts +2 -0
  198. package/lib/types/server/index.d.ts +2 -0
  199. package/lib/types/server/loaders/babel/creevey-plugin.d.ts +1 -0
  200. package/lib/types/server/loaders/babel/helpers.d.ts +19 -0
  201. package/lib/types/server/loaders/babel/register.d.ts +5 -0
  202. package/lib/types/server/loaders/hooks/mdx.d.ts +1 -0
  203. package/lib/types/server/loaders/hooks/svelte.d.ts +1 -0
  204. package/lib/types/server/loaders/webpack/compile.d.ts +2 -0
  205. package/lib/types/server/loaders/webpack/creevey-loader.d.ts +4 -0
  206. package/lib/types/server/loaders/webpack/dummy-hmr.d.ts +10 -0
  207. package/lib/types/server/loaders/webpack/mdx-loader.d.ts +6 -0
  208. package/lib/types/server/loaders/webpack/start.d.ts +1 -0
  209. package/lib/types/server/logger.d.ts +10 -0
  210. package/lib/types/server/master/api.d.ts +7 -0
  211. package/lib/types/server/master/index.d.ts +3 -0
  212. package/lib/types/server/master/master.d.ts +7 -0
  213. package/lib/types/server/master/pool.d.ts +31 -0
  214. package/lib/types/server/master/runner.d.ts +26 -0
  215. package/lib/types/server/master/server.d.ts +2 -0
  216. package/lib/types/server/messages.d.ts +29 -0
  217. package/lib/types/server/selenium/browser.d.ts +19 -0
  218. package/lib/types/server/selenium/index.d.ts +2 -0
  219. package/lib/types/server/selenium/selenoid.d.ts +3 -0
  220. package/lib/types/server/stories.d.ts +8 -0
  221. package/lib/types/server/storybook/entry.d.ts +16 -0
  222. package/lib/types/server/storybook/helpers.d.ts +24 -0
  223. package/lib/types/server/storybook/providers/browser.d.ts +2 -0
  224. package/lib/types/server/storybook/providers/nodejs.d.ts +6 -0
  225. package/lib/types/server/update.d.ts +2 -0
  226. package/lib/types/server/utils.d.ts +23 -0
  227. package/lib/types/server/worker/chai-image.d.ts +6 -0
  228. package/lib/types/server/worker/helpers.d.ts +8 -0
  229. package/lib/types/server/worker/index.d.ts +1 -0
  230. package/lib/types/server/worker/reporter.d.ts +8 -0
  231. package/lib/types/server/worker/worker.d.ts +4 -0
  232. package/lib/types/shared/index.d.ts +7 -0
  233. package/lib/types/shared/serializeRegExp.d.ts +9 -0
  234. package/lib/types/types.d.ts +486 -0
  235. package/package.json +1 -1
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Paging = Paging;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _components = require("@storybook/components");
11
+
12
+ var _types = require("../../../../types");
13
+
14
+ var _theming = require("@storybook/theming");
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+
18
+ const StyledButton = (0, _theming.styled)(_components.Button)({
19
+ transform: 'none',
20
+ marginLeft: '8px'
21
+ });
22
+
23
+ function Paging(props) {
24
+ const renderItem = (item, index) => {
25
+ switch (item) {
26
+ case '.':
27
+ {
28
+ return /*#__PURE__*/_react.default.createElement(StyledButton, {
29
+ disabled: true,
30
+ key: "dots".concat(index < 5 ? 'Left' : 'Right')
31
+ }, '...');
32
+ }
33
+
34
+ case 'forward':
35
+ {
36
+ const disabled = props.activePage === props.pagesCount;
37
+ return /*#__PURE__*/_react.default.createElement(StyledButton, {
38
+ outline: true,
39
+ disabled: disabled,
40
+ onClick: disabled ? _types.noop : () => goToPage(props.activePage + 1),
41
+ key: "forward"
42
+ }, /*#__PURE__*/_react.default.createElement("span", null, "Next ", /*#__PURE__*/_react.default.createElement(_components.Icons, {
43
+ icon: "arrowright"
44
+ })));
45
+ }
46
+
47
+ default:
48
+ {
49
+ return /*#__PURE__*/_react.default.createElement(StyledButton, {
50
+ outline: true,
51
+ secondary: props.activePage === item,
52
+ key: item,
53
+ onClick: () => goToPage(item)
54
+ }, item);
55
+ }
56
+ }
57
+ };
58
+
59
+ const goToPage = pageNumber => {
60
+ if (1 <= pageNumber && pageNumber !== props.activePage && pageNumber <= props.pagesCount) {
61
+ props.onPageChange(pageNumber);
62
+ }
63
+ };
64
+
65
+ return /*#__PURE__*/_react.default.createElement("div", null, getItems(props.activePage, props.pagesCount).map(renderItem));
66
+ }
67
+
68
+ function getItems(active, total) {
69
+ const result = [];
70
+ const left = Math.max(Math.min(active - 2, total - 4), 1);
71
+ const right = Math.min(Math.max(5, active + 2), total);
72
+ const hasLeftDots = left > 3;
73
+ const from = hasLeftDots ? left : 1;
74
+ const hasRightDots = right < total - 2;
75
+ const to = hasRightDots ? right : total;
76
+
77
+ if (hasLeftDots) {
78
+ result.push(1, '.');
79
+ }
80
+
81
+ for (let i = from; i <= to; ++i) {
82
+ result.push(i);
83
+ }
84
+
85
+ if (hasRightDots) {
86
+ result.push('.');
87
+ }
88
+
89
+ if (hasRightDots && isFinite(total)) {
90
+ result.push(total);
91
+ }
92
+
93
+ return result.concat('forward');
94
+ }
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ImagePreview = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _theming = require("@storybook/theming");
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ const IMG_SIZE = 64;
15
+ const DIAG_LENGTH = (2 * (IMG_SIZE - 8) ** 2) ** (1 / 2);
16
+
17
+ const Button = _theming.styled.button(_ref => {
18
+ let {
19
+ borderColor
20
+ } = _ref;
21
+ return {
22
+ appearance: 'none',
23
+ background: 'none',
24
+ color: 'inherit',
25
+ font: 'inherit',
26
+ cursor: 'pointer',
27
+ outline: 'none',
28
+ zIndex: 1,
29
+ margin: '0 10px',
30
+ border: '2px solid transparent',
31
+ borderColor: borderColor || 'transparent',
32
+ '&:first-of-type': {
33
+ marginLeft: 0
34
+ }
35
+ };
36
+ });
37
+
38
+ const Image = (0, _theming.withTheme)(_theming.styled.img(_ref2 => {
39
+ let {
40
+ hasBorder,
41
+ backgroundColor,
42
+ theme
43
+ } = _ref2;
44
+ return {
45
+ maxHeight: "".concat(IMG_SIZE, "px"),
46
+ width: "".concat(IMG_SIZE, "px"),
47
+ overflow: 'hidden',
48
+ transform: hasBorder ? 'translateY(2px)' : undefined,
49
+ '&::before': {
50
+ content: "' '",
51
+ display: 'block',
52
+ height: "".concat(IMG_SIZE - 8, "px"),
53
+ width: "".concat(IMG_SIZE - 8, "px"),
54
+ margin: '4px',
55
+ backgroundColor: backgroundColor,
56
+ 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 )")
57
+ }
58
+ };
59
+ }));
60
+ const ImagePreview = (0, _theming.withTheme)(_ref3 => {
61
+ let {
62
+ isActive,
63
+ onClick,
64
+ imageName,
65
+ url,
66
+ theme,
67
+ error
68
+ } = _ref3;
69
+
70
+ const handleClick = () => onClick(imageName);
71
+
72
+ return /*#__PURE__*/_react.default.createElement(Button, {
73
+ onClick: handleClick,
74
+ borderColor: isActive ? theme.barSelectedColor : error ? theme.color.negative : undefined
75
+ }, /*#__PURE__*/_react.default.createElement(Image, {
76
+ hasBorder: isActive || error,
77
+ src: url,
78
+ alt: imageName,
79
+ backgroundColor: theme.background.content
80
+ }));
81
+ });
82
+ exports.ImagePreview = ImagePreview;
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.PageHeader = PageHeader;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _helpers = require("../../helpers");
11
+
12
+ var _components = require("@storybook/components");
13
+
14
+ var _theming = require("@storybook/theming");
15
+
16
+ var _ImagePreview = require("./ImagePreview");
17
+
18
+ var _viewMode = require("../../viewMode");
19
+
20
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
+
22
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
+
24
+ const Container = _theming.styled.div({
25
+ margin: '24px 44px 0'
26
+ });
27
+
28
+ const ErrorContainer = (0, _theming.withTheme)(_theming.styled.div(_ref => {
29
+ let {
30
+ theme
31
+ } = _ref;
32
+ return {
33
+ marginTop: '8px',
34
+ padding: '8px',
35
+ background: theme.background.negative,
36
+ color: theme.color.negative,
37
+ borderRadius: '2px',
38
+ display: 'flex',
39
+ alignItems: 'baseline',
40
+ '& svg': {
41
+ margin: '0 5px',
42
+ width: 8,
43
+ height: 8
44
+ },
45
+ '& pre': {
46
+ margin: '0 4px',
47
+ padding: 0,
48
+ lineHeight: '22px'
49
+ }
50
+ };
51
+ }));
52
+
53
+ const H1 = _theming.styled.h1({
54
+ margin: 0,
55
+ marginBottom: '8px'
56
+ });
57
+
58
+ const HeaderDivider = (0, _theming.withTheme)(_theming.styled.span(_ref2 => {
59
+ let {
60
+ theme
61
+ } = _ref2;
62
+ return {
63
+ padding: '0 8px',
64
+ color: theme.color.mediumdark
65
+ };
66
+ }));
67
+
68
+ const ImagesEntriesContainer = _theming.styled.div({
69
+ display: 'flex',
70
+ margin: '16px 0 8px'
71
+ });
72
+
73
+ function PageHeader(_ref3) {
74
+ var _, _imageEntires$, _images$imageName;
75
+
76
+ let {
77
+ title,
78
+ images = {},
79
+ errorMessage,
80
+ showViewModes,
81
+ showTitle,
82
+ viewMode,
83
+ imagesWithError = [],
84
+ onImageChange,
85
+ onViewModeChange
86
+ } = _ref3;
87
+ const imageEntires = Object.entries(images);
88
+ const [imageName, setImageName] = (0, _react.useState)((_ = ((_imageEntires$ = imageEntires[0]) !== null && _imageEntires$ !== void 0 ? _imageEntires$ : [])[0]) !== null && _ !== void 0 ? _ : '');
89
+
90
+ const handleImageChange = name => (setImageName(name), onImageChange(name));
91
+
92
+ const handleViewModeChange = mode => onViewModeChange(mode);
93
+
94
+ const error = errorMessage || imagesWithError.includes(imageName) ? ((_images$imageName = images[imageName]) === null || _images$imageName === void 0 ? void 0 : _images$imageName.error) || errorMessage : null;
95
+ return showTitle || error || imageEntires.length > 1 || showViewModes ? /*#__PURE__*/_react.default.createElement(Container, null, showTitle && /*#__PURE__*/_react.default.createElement(H1, null, title.flatMap(token => [token, /*#__PURE__*/_react.default.createElement(HeaderDivider, {
96
+ key: token
97
+ }, "/")]).slice(0, -1)), error && /*#__PURE__*/_react.default.createElement(ErrorContainer, null, /*#__PURE__*/_react.default.createElement(_components.Icons, {
98
+ icon: "closeAlt"
99
+ }), /*#__PURE__*/_react.default.createElement("pre", null, error)), imageEntires.length > 1 ? /*#__PURE__*/_react.default.createElement(ImagesEntriesContainer, null, imageEntires.map(_ref4 => {
100
+ let [name, image] = _ref4;
101
+ return /*#__PURE__*/_react.default.createElement(_ImagePreview.ImagePreview, {
102
+ key: name,
103
+ imageName: name,
104
+ url: "".concat((0, _helpers.getImageUrl)(title, name), "/").concat(image.actual),
105
+ isActive: name === imageName,
106
+ onClick: handleImageChange,
107
+ error: imagesWithError.includes(name)
108
+ });
109
+ })) : null, showViewModes && /*#__PURE__*/_react.default.createElement(_components.Tabs, {
110
+ selected: viewMode,
111
+ actions: {
112
+ onSelect: handleViewModeChange
113
+ }
114
+ }, _viewMode.viewModes.map(x => /*#__PURE__*/_react.default.createElement("div", {
115
+ key: x,
116
+ id: x,
117
+ title: x
118
+ })))) : null;
119
+ }
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ResultsPage = void 0;
7
+ exports.ResultsPageInternal = ResultsPageInternal;
8
+
9
+ var _react = _interopRequireWildcard(require("react"));
10
+
11
+ var _ImagesView = require("./ImagesView/ImagesView");
12
+
13
+ var _PageHeader = require("./PageHeader/PageHeader");
14
+
15
+ var _PageFooter = require("./PageFooter/PageFooter");
16
+
17
+ var _helpers = require("../helpers");
18
+
19
+ var _theming = require("@storybook/theming");
20
+
21
+ var _components = require("@storybook/components");
22
+
23
+ var _viewMode = require("../viewMode");
24
+
25
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
26
+
27
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
28
+
29
+ const Wrapper = _theming.styled.div({
30
+ width: '100%',
31
+ height: '100%',
32
+ boxSizing: 'border-box',
33
+ display: 'flex',
34
+ flexDirection: 'column'
35
+ });
36
+
37
+ const ImagesViewContainer = _theming.styled.div(_ref => {
38
+ let {
39
+ theme
40
+ } = _ref;
41
+ return {
42
+ background: theme.base == 'light' ? theme.color.mediumlight : theme.color.darker,
43
+ flexGrow: 1,
44
+ padding: '20px 0'
45
+ };
46
+ });
47
+
48
+ const HeaderContainer = _theming.styled.div({
49
+ position: 'sticky',
50
+ top: 0,
51
+ zIndex: 1
52
+ });
53
+
54
+ const BodyContainer = _theming.styled.div({
55
+ flexGrow: 1
56
+ });
57
+
58
+ const FooterContainer = _theming.styled.div({
59
+ position: 'sticky',
60
+ bottom: 0,
61
+ zIndex: 1
62
+ });
63
+
64
+ const Container = _theming.styled.div(_ref2 => {
65
+ let {
66
+ height = '100vh'
67
+ } = _ref2;
68
+ return {
69
+ height,
70
+ width: '100%',
71
+ overflowY: 'hidden',
72
+ display: 'flex',
73
+ flexDirection: 'column'
74
+ };
75
+ });
76
+
77
+ function ResultsPageInternal(_ref3) {
78
+ var _results, _Object$keys$, _result$images, _result$images2;
79
+
80
+ let {
81
+ id,
82
+ path,
83
+ results = [],
84
+ approved = {},
85
+ theme,
86
+ onImageApprove,
87
+ showTitle = false,
88
+ height
89
+ } = _ref3;
90
+ const [retry, setRetry] = (0, _react.useState)(results.length);
91
+ const result = (_results = results[retry - 1]) !== null && _results !== void 0 ? _results : {};
92
+ const [imageName, setImageName] = (0, _react.useState)((_Object$keys$ = Object.keys((_result$images = result.images) !== null && _result$images !== void 0 ? _result$images : {})[0]) !== null && _Object$keys$ !== void 0 ? _Object$keys$ : '');
93
+ const [viewMode, setViewMode] = (0, _react.useState)((0, _viewMode.getViewMode)());
94
+ (0, _react.useEffect)(() => setRetry(results.length), [results.length]);
95
+ const url = (0, _helpers.getImageUrl)(path, imageName);
96
+ const image = (_result$images2 = result.images) === null || _result$images2 === void 0 ? void 0 : _result$images2[imageName];
97
+ const canApprove = Boolean(image && approved[imageName] != retry - 1 && result.status != 'success');
98
+ const hasDiffAndExpect = canApprove && Boolean((image === null || image === void 0 ? void 0 : image.diff) && image.expect);
99
+ const imagesWithError = result.images ? Object.keys(result.images).filter(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
+ const handleApprove = () => onImageApprove(id, retry - 1, imageName);
106
+
107
+ const handleChangeViewMode = mode => {
108
+ localStorage.setItem(_viewMode.VIEW_MODE_KEY, mode);
109
+ setViewMode(mode);
110
+ };
111
+
112
+ return /*#__PURE__*/_react.default.createElement(Container, {
113
+ height: height
114
+ }, /*#__PURE__*/_react.default.createElement(HeaderContainer, null, /*#__PURE__*/_react.default.createElement(_PageHeader.PageHeader, {
115
+ title: path,
116
+ images: result.images,
117
+ errorMessage: result.error,
118
+ showViewModes: hasDiffAndExpect,
119
+ viewMode: viewMode,
120
+ onViewModeChange: handleChangeViewMode,
121
+ onImageChange: setImageName,
122
+ showTitle: showTitle,
123
+ imagesWithError: imagesWithError
124
+ })), /*#__PURE__*/_react.default.createElement(BodyContainer, null, /*#__PURE__*/_react.default.createElement(_components.ScrollArea, {
125
+ vertical: true
126
+ }, /*#__PURE__*/_react.default.createElement(Wrapper, null, /*#__PURE__*/_react.default.createElement(ImagesViewContainer, {
127
+ theme: theme
128
+ }, image ? /*#__PURE__*/_react.default.createElement(_ImagesView.ImagesView, {
129
+ url: url,
130
+ image: image,
131
+ canApprove: canApprove,
132
+ mode: viewMode
133
+ }) : /*#__PURE__*/_react.default.createElement(_components.Placeholder, null, "Image ".concat(imageName, " not found")))))), results.length ? /*#__PURE__*/_react.default.createElement(FooterContainer, null, /*#__PURE__*/_react.default.createElement(_PageFooter.PageFooter, {
134
+ canApprove: canApprove,
135
+ retry: retry,
136
+ retriesCount: results.length,
137
+ onRetryChange: setRetry,
138
+ onApprove: handleApprove
139
+ })) : null);
140
+ }
141
+
142
+ const ResultsPage = (0, _theming.withTheme)(ResultsPageInternal);
143
+ exports.ResultsPage = ResultsPage;
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.initCreeveyClientApi = initCreeveyClientApi;
7
+
8
+ var _types = require("../../types");
9
+
10
+ var _helpers = require("./helpers");
11
+
12
+ async function initCreeveyClientApi() {
13
+ let clientApiResolver = _types.noop;
14
+ const updateListeners = new Set();
15
+ let statusRequest = null;
16
+ let statusResolver = _types.noop;
17
+ const ws = new WebSocket("ws://".concat((0, _helpers.getConnectionUrl)()));
18
+
19
+ function send(request) {
20
+ ws.send(JSON.stringify(request));
21
+ }
22
+
23
+ ws.addEventListener('open', () => {
24
+ clientApiResolver({
25
+ start(ids) {
26
+ send({
27
+ type: 'start',
28
+ payload: ids
29
+ });
30
+ },
31
+
32
+ stop() {
33
+ send({
34
+ type: 'stop'
35
+ });
36
+ },
37
+
38
+ approve(id, retry, image) {
39
+ send({
40
+ type: 'approve',
41
+ payload: {
42
+ id,
43
+ retry,
44
+ image
45
+ }
46
+ });
47
+ },
48
+
49
+ onUpdate(fn) {
50
+ updateListeners.add(fn);
51
+ return () => updateListeners.delete(fn);
52
+ },
53
+
54
+ get status() {
55
+ if (statusRequest) return statusRequest;
56
+ send({
57
+ type: 'status'
58
+ });
59
+ return statusRequest = new Promise(resolve => statusResolver = resolve);
60
+ }
61
+
62
+ });
63
+ });
64
+ ws.addEventListener('message', message => {
65
+ const data = JSON.parse(message.data);
66
+ if (data.type == 'update') updateListeners.forEach(fn => fn(data.payload));
67
+
68
+ if (data.type == 'status') {
69
+ statusResolver(data.payload);
70
+ statusResolver = _types.noop;
71
+ statusRequest = null;
72
+ }
73
+ }); // TODO Reconnect
74
+
75
+ return new Promise(resolve => clientApiResolver = resolve);
76
+ }