creevey 0.9.0-beta.1 → 0.9.0-beta.3

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 (262) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +9 -1
  3. package/addon/README.md +3 -0
  4. package/addon/package.json +4 -0
  5. package/docs/config.md +29 -26
  6. package/jest.config.js +6 -0
  7. package/lib/cjs/cli.js +5 -0
  8. package/lib/cjs/client/addon/Manager.js +264 -0
  9. package/lib/cjs/client/addon/components/Addon.js +55 -0
  10. package/lib/cjs/client/addon/components/Icons.js +46 -0
  11. package/lib/cjs/client/addon/components/Panel.js +72 -0
  12. package/lib/cjs/client/addon/components/TestSelect.js +65 -0
  13. package/lib/cjs/client/addon/components/Tools.js +95 -0
  14. package/lib/cjs/client/addon/decorator.js +11 -0
  15. package/lib/cjs/client/addon/index.js +31 -0
  16. package/lib/cjs/client/addon/preset.ie11.js +74 -0
  17. package/lib/cjs/client/addon/preset.js +62 -0
  18. package/lib/cjs/client/addon/readyForCapture.js +12 -0
  19. package/lib/cjs/client/addon/register.js +72 -0
  20. package/lib/cjs/client/addon/utils.js +42 -0
  21. package/lib/cjs/client/addon/withCreevey.js +350 -0
  22. package/lib/cjs/client/shared/components/ImagesView/BlendView.js +87 -0
  23. package/lib/cjs/client/shared/components/ImagesView/ImagesView.js +92 -0
  24. package/lib/cjs/client/shared/components/ImagesView/SideBySideView.js +154 -0
  25. package/lib/cjs/client/shared/components/ImagesView/SlideView.js +166 -0
  26. package/lib/cjs/client/shared/components/ImagesView/SwapView.js +91 -0
  27. package/lib/cjs/client/shared/components/ImagesView/index.js +45 -0
  28. package/lib/cjs/client/shared/components/PageFooter/PageFooter.js +50 -0
  29. package/lib/cjs/client/shared/components/PageFooter/Paging.js +94 -0
  30. package/lib/cjs/client/shared/components/PageHeader/ImagePreview.js +82 -0
  31. package/lib/cjs/client/shared/components/PageHeader/PageHeader.js +119 -0
  32. package/lib/cjs/client/shared/components/ResultsPage.js +143 -0
  33. package/lib/cjs/client/shared/creeveyClientApi.js +76 -0
  34. package/lib/cjs/client/shared/helpers.js +411 -0
  35. package/lib/cjs/client/shared/viewMode.js +17 -0
  36. package/lib/cjs/client/web/142.js +2 -0
  37. package/lib/cjs/client/web/142.js.LICENSE.txt +12 -0
  38. package/lib/cjs/client/web/32.js +1 -0
  39. package/lib/cjs/client/web/551.js +1 -0
  40. package/lib/cjs/client/web/566.js +2 -0
  41. package/lib/cjs/client/web/566.js.LICENSE.txt +31 -0
  42. package/lib/cjs/client/web/691.js +2 -0
  43. package/lib/cjs/client/web/691.js.LICENSE.txt +8 -0
  44. package/lib/cjs/client/web/725.js +1 -0
  45. package/lib/cjs/client/web/index.html +19 -0
  46. package/lib/cjs/client/web/main.js +2 -38
  47. package/lib/cjs/client/web/main.js.LICENSE.txt +49 -0
  48. package/lib/cjs/creevey.js +69 -0
  49. package/lib/cjs/index.js +62 -0
  50. package/lib/cjs/server/config.js +94 -0
  51. package/lib/cjs/server/docker.js +146 -0
  52. package/lib/cjs/server/extract.js +46 -0
  53. package/lib/cjs/server/index.js +83 -0
  54. package/lib/cjs/server/loaders/babel/creevey-plugin.js +86 -0
  55. package/lib/cjs/server/loaders/babel/helpers.js +469 -0
  56. package/lib/cjs/server/loaders/babel/register.js +124 -0
  57. package/lib/cjs/server/loaders/hooks/mdx.js +30 -0
  58. package/lib/cjs/server/loaders/hooks/svelte.js +65 -0
  59. package/lib/cjs/server/loaders/webpack/compile.js +269 -0
  60. package/lib/cjs/server/loaders/webpack/creevey-loader.js +172 -0
  61. package/lib/cjs/server/loaders/webpack/dummy-hmr.js +39 -0
  62. package/lib/cjs/server/loaders/webpack/mdx-loader.js +72 -0
  63. package/lib/cjs/server/loaders/webpack/start.js +41 -0
  64. package/lib/cjs/server/logger.js +48 -0
  65. package/lib/cjs/server/master/api.js +71 -0
  66. package/lib/cjs/server/master/index.js +146 -0
  67. package/lib/cjs/server/master/master.js +57 -0
  68. package/lib/cjs/server/master/pool.js +197 -0
  69. package/lib/cjs/server/master/runner.js +281 -0
  70. package/lib/cjs/server/master/server.js +131 -0
  71. package/lib/cjs/server/messages.js +264 -0
  72. package/lib/cjs/server/selenium/browser.js +656 -0
  73. package/lib/cjs/server/selenium/index.js +31 -0
  74. package/lib/cjs/server/selenium/selenoid.js +172 -0
  75. package/lib/cjs/server/stories.js +153 -0
  76. package/lib/cjs/server/storybook/entry.js +53 -0
  77. package/lib/cjs/server/storybook/helpers.js +158 -0
  78. package/lib/cjs/server/storybook/providers/browser.js +74 -0
  79. package/lib/cjs/server/storybook/providers/hybrid.js +84 -0
  80. package/lib/cjs/server/storybook/providers/nodejs.js +237 -0
  81. package/lib/cjs/server/testsFiles/parser.js +72 -0
  82. package/lib/cjs/server/testsFiles/register.js +48 -0
  83. package/lib/cjs/server/update.js +79 -0
  84. package/lib/cjs/server/utils.js +176 -0
  85. package/lib/cjs/server/worker/chai-image.js +142 -0
  86. package/lib/cjs/server/worker/helpers.js +69 -0
  87. package/lib/cjs/server/worker/index.js +15 -0
  88. package/lib/cjs/server/worker/reporter.js +108 -0
  89. package/lib/cjs/server/worker/worker.js +268 -0
  90. package/lib/cjs/shared/index.js +101 -0
  91. package/lib/cjs/shared/serializeRegExp.js +42 -0
  92. package/lib/cjs/types.js +74 -0
  93. package/lib/esm/cli.js +4 -0
  94. package/lib/esm/client/addon/Manager.js +248 -0
  95. package/lib/esm/client/addon/components/Addon.js +39 -0
  96. package/lib/esm/client/addon/components/Icons.js +31 -0
  97. package/lib/esm/client/addon/components/Panel.js +53 -0
  98. package/lib/esm/client/addon/components/TestSelect.js +51 -0
  99. package/lib/esm/client/addon/components/Tools.js +74 -0
  100. package/lib/esm/client/addon/decorator.js +2 -0
  101. package/lib/esm/client/addon/index.js +2 -0
  102. package/lib/esm/client/addon/preset.ie11.js +59 -0
  103. package/lib/esm/client/addon/preset.js +41 -0
  104. package/lib/esm/client/addon/readyForCapture.js +5 -0
  105. package/lib/esm/client/addon/register.js +51 -0
  106. package/lib/esm/client/addon/utils.js +32 -0
  107. package/lib/esm/client/addon/withCreevey.js +323 -0
  108. package/lib/esm/client/shared/components/ImagesView/BlendView.js +67 -0
  109. package/lib/esm/client/shared/components/ImagesView/ImagesView.js +69 -0
  110. package/lib/esm/client/shared/components/ImagesView/SideBySideView.js +131 -0
  111. package/lib/esm/client/shared/components/ImagesView/SlideView.js +143 -0
  112. package/lib/esm/client/shared/components/ImagesView/SwapView.js +71 -0
  113. package/lib/esm/client/shared/components/ImagesView/index.js +5 -0
  114. package/lib/esm/client/shared/components/PageFooter/PageFooter.js +36 -0
  115. package/lib/esm/client/shared/components/PageFooter/Paging.js +80 -0
  116. package/lib/esm/client/shared/components/PageHeader/ImagePreview.js +68 -0
  117. package/lib/esm/client/shared/components/PageHeader/PageHeader.js +97 -0
  118. package/lib/esm/client/shared/components/ResultsPage.js +115 -0
  119. package/lib/esm/client/shared/creeveyClientApi.js +67 -0
  120. package/lib/esm/client/shared/helpers.js +353 -0
  121. package/lib/esm/client/shared/viewMode.js +6 -0
  122. package/lib/esm/creevey.js +54 -0
  123. package/lib/esm/index.js +5 -0
  124. package/lib/esm/server/config.js +71 -0
  125. package/lib/esm/server/docker.js +123 -0
  126. package/lib/esm/server/extract.js +32 -0
  127. package/lib/esm/server/index.js +64 -0
  128. package/lib/esm/server/loaders/babel/creevey-plugin.js +72 -0
  129. package/lib/esm/server/loaders/babel/helpers.js +452 -0
  130. package/lib/esm/server/loaders/babel/register.js +103 -0
  131. package/lib/esm/server/loaders/hooks/mdx.js +15 -0
  132. package/lib/esm/server/loaders/hooks/svelte.js +49 -0
  133. package/lib/esm/server/loaders/webpack/compile.js +246 -0
  134. package/lib/esm/server/loaders/webpack/creevey-loader.js +152 -0
  135. package/lib/esm/server/loaders/webpack/dummy-hmr.js +32 -0
  136. package/lib/esm/server/loaders/webpack/mdx-loader.js +58 -0
  137. package/lib/esm/server/loaders/webpack/start.js +27 -0
  138. package/lib/esm/server/logger.js +20 -0
  139. package/lib/esm/server/master/api.js +60 -0
  140. package/lib/esm/server/master/index.js +125 -0
  141. package/lib/esm/server/master/master.js +38 -0
  142. package/lib/esm/server/master/pool.js +176 -0
  143. package/lib/esm/server/master/runner.js +259 -0
  144. package/lib/esm/server/master/server.js +107 -0
  145. package/lib/esm/server/messages.js +232 -0
  146. package/lib/esm/server/selenium/browser.js +623 -0
  147. package/lib/esm/server/selenium/index.js +2 -0
  148. package/lib/esm/server/selenium/selenoid.js +149 -0
  149. package/lib/esm/server/stories.js +135 -0
  150. package/lib/esm/server/storybook/entry.js +27 -0
  151. package/lib/esm/server/storybook/helpers.js +97 -0
  152. package/lib/esm/server/storybook/providers/browser.js +60 -0
  153. package/lib/esm/server/storybook/providers/hybrid.js +64 -0
  154. package/lib/esm/server/storybook/providers/nodejs.js +216 -0
  155. package/lib/esm/server/testsFiles/parser.js +50 -0
  156. package/lib/esm/server/testsFiles/register.js +35 -0
  157. package/lib/esm/server/update.js +61 -0
  158. package/lib/esm/server/utils.js +133 -0
  159. package/lib/esm/server/worker/chai-image.js +130 -0
  160. package/lib/esm/server/worker/helpers.js +60 -0
  161. package/lib/esm/server/worker/index.js +1 -0
  162. package/lib/esm/server/worker/reporter.js +86 -0
  163. package/lib/esm/server/worker/worker.js +238 -0
  164. package/lib/esm/shared/index.js +78 -0
  165. package/lib/esm/shared/serializeRegExp.js +24 -0
  166. package/lib/esm/types.js +43 -0
  167. package/lib/types/cli.d.ts +1 -1
  168. package/lib/types/client/addon/Manager.d.ts +37 -37
  169. package/lib/types/client/addon/components/Addon.d.ts +8 -8
  170. package/lib/types/client/addon/components/Icons.d.ts +7 -7
  171. package/lib/types/client/addon/components/Panel.d.ts +9 -9
  172. package/lib/types/client/addon/components/TestSelect.d.ts +8 -9
  173. package/lib/types/client/addon/components/Tools.d.ts +6 -6
  174. package/lib/types/client/addon/decorator.d.ts +1 -1
  175. package/lib/types/client/addon/index.d.ts +2 -0
  176. package/lib/types/client/addon/preset.d.ts +23 -24
  177. package/lib/types/client/addon/preset.ie11.d.ts +10 -0
  178. package/lib/types/client/addon/readyForCapture.d.ts +6 -6
  179. package/lib/types/client/addon/register.d.ts +3 -3
  180. package/lib/types/client/addon/utils.d.ts +3 -2
  181. package/lib/types/client/addon/withCreevey.d.ts +24 -24
  182. package/lib/types/client/shared/components/ImagesView/BlendView.d.ts +3 -3
  183. package/lib/types/client/shared/components/ImagesView/ImagesView.d.ts +24 -25
  184. package/lib/types/client/shared/components/ImagesView/SideBySideView.d.ts +3 -3
  185. package/lib/types/client/shared/components/ImagesView/SlideView.d.ts +3 -3
  186. package/lib/types/client/shared/components/ImagesView/SwapView.d.ts +3 -3
  187. package/lib/types/client/shared/components/ImagesView/index.d.ts +5 -5
  188. package/lib/types/client/shared/components/PageFooter/PageFooter.d.ts +8 -9
  189. package/lib/types/client/shared/components/PageFooter/Paging.d.ts +7 -8
  190. package/lib/types/client/shared/components/PageHeader/ImagePreview.d.ts +12 -12
  191. package/lib/types/client/shared/components/PageHeader/PageHeader.d.ts +16 -17
  192. package/lib/types/client/shared/components/ResultsPage.d.ts +18 -18
  193. package/lib/types/client/shared/creeveyClientApi.d.ts +9 -9
  194. package/lib/types/client/shared/helpers.d.ts +46 -46
  195. package/lib/types/client/shared/viewMode.d.ts +4 -4
  196. package/lib/types/client/web/CreeveyApp.d.ts +11 -12
  197. package/lib/types/client/web/CreeveyContext.d.ts +11 -11
  198. package/lib/types/client/web/CreeveyLoader.d.ts +2 -3
  199. package/lib/types/client/web/CreeveyView/SideBar/Checkbox.d.ts +19 -19
  200. package/lib/types/client/web/CreeveyView/SideBar/Search.d.ts +6 -6
  201. package/lib/types/client/web/CreeveyView/SideBar/SideBar.d.ts +14 -14
  202. package/lib/types/client/web/CreeveyView/SideBar/SideBarHeader.d.ts +12 -13
  203. package/lib/types/client/web/CreeveyView/SideBar/SuiteLink.d.ts +33 -33
  204. package/lib/types/client/web/CreeveyView/SideBar/TestLink.d.ts +7 -8
  205. package/lib/types/client/web/CreeveyView/SideBar/TestStatusIcon.d.ts +10 -10
  206. package/lib/types/client/web/CreeveyView/SideBar/TestsStatus.d.ts +9 -9
  207. package/lib/types/client/web/CreeveyView/SideBar/Toggle.d.ts +6 -6
  208. package/lib/types/client/web/CreeveyView/SideBar/index.d.ts +1 -1
  209. package/lib/types/client/web/KeyboardEventsContext.d.ts +13 -13
  210. package/lib/types/client/web/index.d.ts +4 -4
  211. package/lib/types/creevey.d.ts +1 -1
  212. package/lib/types/index.d.ts +1 -4
  213. package/lib/types/server/config.d.ts +4 -4
  214. package/lib/types/server/docker.d.ts +7 -7
  215. package/lib/types/server/extract.d.ts +2 -2
  216. package/lib/types/server/index.d.ts +2 -2
  217. package/lib/types/server/loaders/babel/creevey-plugin.d.ts +1 -1
  218. package/lib/types/server/loaders/babel/helpers.d.ts +19 -19
  219. package/lib/types/server/loaders/babel/register.d.ts +5 -5
  220. package/lib/types/server/loaders/hooks/mdx.d.ts +1 -1
  221. package/lib/types/server/loaders/hooks/svelte.d.ts +1 -1
  222. package/lib/types/server/loaders/webpack/compile.d.ts +2 -2
  223. package/lib/types/server/loaders/webpack/creevey-loader.d.ts +4 -2
  224. package/lib/types/server/loaders/webpack/dummy-hmr.d.ts +10 -10
  225. package/lib/types/server/loaders/webpack/mdx-loader.d.ts +6 -6
  226. package/lib/types/server/loaders/webpack/start.d.ts +1 -1
  227. package/lib/types/server/logger.d.ts +10 -6
  228. package/lib/types/server/master/api.d.ts +7 -7
  229. package/lib/types/server/master/index.d.ts +3 -3
  230. package/lib/types/server/master/master.d.ts +7 -7
  231. package/lib/types/server/master/pool.d.ts +31 -31
  232. package/lib/types/server/master/runner.d.ts +26 -26
  233. package/lib/types/server/master/server.d.ts +2 -2
  234. package/lib/types/server/messages.d.ts +27 -27
  235. package/lib/types/server/selenium/browser.d.ts +17 -17
  236. package/lib/types/server/selenium/index.d.ts +2 -2
  237. package/lib/types/server/selenium/selenoid.d.ts +3 -3
  238. package/lib/types/server/stories.d.ts +8 -8
  239. package/lib/types/server/storybook/entry.d.ts +17 -18
  240. package/lib/types/server/storybook/helpers.d.ts +24 -24
  241. package/lib/types/server/storybook/providers/browser.d.ts +4 -4
  242. package/lib/types/server/storybook/providers/hybrid.d.ts +4 -4
  243. package/lib/types/server/storybook/providers/nodejs.d.ts +9 -9
  244. package/lib/types/server/testsFiles/parser.d.ts +12 -12
  245. package/lib/types/server/testsFiles/register.d.ts +2 -2
  246. package/lib/types/server/update.d.ts +2 -2
  247. package/lib/types/server/utils.d.ts +24 -20
  248. package/lib/types/server/worker/chai-image.d.ts +6 -6
  249. package/lib/types/server/worker/helpers.d.ts +8 -8
  250. package/lib/types/server/worker/index.d.ts +1 -1
  251. package/lib/types/server/worker/reporter.d.ts +8 -8
  252. package/lib/types/server/worker/worker.d.ts +4 -4
  253. package/lib/types/{shared.d.ts → shared/index.d.ts} +7 -16
  254. package/lib/types/shared/serializeRegExp.d.ts +9 -0
  255. package/lib/types/types.d.ts +489 -489
  256. package/package.json +114 -102
  257. package/preset/ie11.js +5 -0
  258. package/{preset.js → preset/index.js} +2 -2
  259. package/types/mdx.d.ts +3 -2
  260. package/lib/cjs/client/web/1.js +0 -13
  261. package/lib/cjs/client/web/2.js +0 -1
  262. package/storybook-static/stories.json +0 -21
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SlideView = void 0;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _theming = require("@storybook/theming");
11
+
12
+ var _ImagesView = require("./ImagesView");
13
+
14
+ var _helpers = require("../../helpers");
15
+
16
+ var _components = require("@storybook/components");
17
+
18
+ var _readyForCapture = require("../../../addon/readyForCapture");
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
+ position: 'relative',
26
+ display: 'flex'
27
+ });
28
+
29
+ const Input = _theming.styled.input({
30
+ position: 'absolute',
31
+ cursor: 'ew-resize',
32
+ appearance: 'none',
33
+ background: 'none',
34
+ boxShadow: 'none',
35
+ outline: 'none',
36
+ height: '100%',
37
+ width: '100%',
38
+ margin: '0',
39
+ zIndex: 1,
40
+ '&::-webkit-slider-runnable-track': {
41
+ height: '100%'
42
+ },
43
+ '&::-webkit-slider-thumb': {
44
+ boxShadow: '0 0 0 0.5px #888',
45
+ height: '100%',
46
+ width: '0px',
47
+ appearance: 'none'
48
+ },
49
+ '&::-moz-focus-outer': {
50
+ border: '0'
51
+ },
52
+ '&::-moz-range-track': {
53
+ height: '0'
54
+ },
55
+ '&::-moz-range-thumb': {
56
+ border: 'none',
57
+ boxShadow: '0 0 0 0.5px #888',
58
+ height: '100%',
59
+ width: '0px'
60
+ }
61
+ });
62
+
63
+ const ImageContainer = _theming.styled.div({
64
+ position: 'absolute',
65
+ width: '100%',
66
+ height: '100%',
67
+ overflow: 'hidden'
68
+ });
69
+
70
+ const ImageWrapper = (0, _theming.withTheme)(_theming.styled.div(_ref => {
71
+ let {
72
+ theme
73
+ } = _ref;
74
+ return {
75
+ background: theme.base == 'light' ? theme.color.mediumlight : theme.color.darker,
76
+ position: 'relative',
77
+ width: '100%',
78
+ height: '100%',
79
+ display: 'flex'
80
+ };
81
+ }));
82
+
83
+ const BaseImage = _theming.styled.img(_ref2 => {
84
+ let {
85
+ borderColor
86
+ } = _ref2;
87
+ return {
88
+ boxSizing: 'border-box',
89
+ border: "1px solid ".concat(borderColor),
90
+ maxWidth: '100%'
91
+ };
92
+ });
93
+
94
+ const Image = (0, _theming.styled)(BaseImage)({
95
+ position: 'absolute'
96
+ });
97
+ const DiffImage = (0, _theming.styled)(BaseImage)({
98
+ opacity: '0'
99
+ });
100
+ const SlideView = (0, _theming.withTheme)(_ref3 => {
101
+ let {
102
+ actual,
103
+ diff,
104
+ expect,
105
+ theme
106
+ } = _ref3;
107
+ const [step, setStep] = (0, _react.useState)(0);
108
+ const expectedImageContainerRef = (0, _react.useRef)(null);
109
+ const expectedImageWrapperRef = (0, _react.useRef)(null);
110
+ const expectImageRef = (0, _react.useRef)(null);
111
+ const diffImageRef = (0, _react.useRef)(null);
112
+ const actualImageRef = (0, _react.useRef)(null);
113
+ const loaded = (0, _helpers.useLoadImages)(expect, diff, actual);
114
+ const scale = (0, _helpers.useCalcScale)(diffImageRef, loaded);
115
+ (0, _helpers.useApplyScale)(expectImageRef, scale);
116
+ (0, _helpers.useApplyScale)(actualImageRef, scale);
117
+ const handleSlide = (0, _react.useCallback)(event => {
118
+ if (!expectedImageContainerRef.current || !expectedImageWrapperRef.current) return;
119
+ const offset = Number(event.target.value);
120
+ expectedImageContainerRef.current.style.right = "".concat(100 - offset, "%");
121
+ expectedImageWrapperRef.current.style.left = "".concat(100 - offset, "%");
122
+ }, []);
123
+ (0, _react.useLayoutEffect)(() => {
124
+ if (loaded && diffImageRef.current) setStep(100 / diffImageRef.current.getBoundingClientRect().width);
125
+ }, [loaded, scale]);
126
+ (0, _react.useLayoutEffect)(() => {
127
+ if (loaded && expectedImageContainerRef.current && expectedImageWrapperRef.current) {
128
+ expectedImageContainerRef.current.style.right = '100%';
129
+ expectedImageWrapperRef.current.style.left = '100%';
130
+ }
131
+ }, [loaded]);
132
+ (0, _react.useEffect)(() => {
133
+ if (loaded) (0, _readyForCapture.readyForCapture)();
134
+ }, [loaded]);
135
+ return loaded ? /*#__PURE__*/_react.default.createElement(Container, null, /*#__PURE__*/_react.default.createElement(Input, {
136
+ "data-testid": "slider",
137
+ type: "range",
138
+ min: 0,
139
+ max: 100,
140
+ defaultValue: 0,
141
+ step: step,
142
+ onChange: handleSlide
143
+ }), /*#__PURE__*/_react.default.createElement(ImageContainer, null, /*#__PURE__*/_react.default.createElement(ImageWrapper, null, /*#__PURE__*/_react.default.createElement(Image, {
144
+ ref: actualImageRef,
145
+ borderColor: (0, _ImagesView.getBorderColor)(theme, _ImagesView.themeBorderColors.actual),
146
+ alt: "actual",
147
+ src: actual
148
+ }))), /*#__PURE__*/_react.default.createElement(ImageContainer, {
149
+ ref: expectedImageContainerRef
150
+ }, /*#__PURE__*/_react.default.createElement(ImageWrapper, {
151
+ ref: expectedImageWrapperRef
152
+ }, /*#__PURE__*/_react.default.createElement(Image, {
153
+ ref: expectImageRef,
154
+ borderColor: (0, _ImagesView.getBorderColor)(theme, _ImagesView.themeBorderColors.expect),
155
+ alt: "expect",
156
+ src: expect
157
+ }))), /*#__PURE__*/_react.default.createElement(DiffImage, {
158
+ ref: diffImageRef,
159
+ borderColor: 'transparent',
160
+ alt: "diff",
161
+ src: diff
162
+ })) : /*#__PURE__*/_react.default.createElement(_components.Loader, {
163
+ size: 64
164
+ });
165
+ });
166
+ exports.SlideView = SlideView;
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SwapView = void 0;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _ImagesView = require("./ImagesView");
11
+
12
+ var _theming = require("@storybook/theming");
13
+
14
+ var _helpers = require("../../helpers");
15
+
16
+ var _components = require("@storybook/components");
17
+
18
+ var _readyForCapture = require("../../../addon/readyForCapture");
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
+ position: 'relative',
26
+ display: 'flex'
27
+ });
28
+
29
+ const BaseImage = _theming.styled.img(_ref => {
30
+ let {
31
+ borderColor
32
+ } = _ref;
33
+ return {
34
+ boxSizing: 'border-box',
35
+ border: "1px solid ".concat(borderColor),
36
+ maxWidth: '100%'
37
+ };
38
+ });
39
+
40
+ const Image = (0, _theming.styled)(BaseImage)({
41
+ position: 'absolute'
42
+ });
43
+ const DiffImage = (0, _theming.styled)(BaseImage)({
44
+ cursor: 'pointer',
45
+ outline: 'none',
46
+ opacity: 0,
47
+ zIndex: 1
48
+ });
49
+ const SwapView = (0, _theming.withTheme)(_ref2 => {
50
+ let {
51
+ theme,
52
+ expect,
53
+ actual,
54
+ diff
55
+ } = _ref2;
56
+ const [image, setImage] = (0, _react.useState)('actual');
57
+ const expectImageRef = (0, _react.useRef)(null);
58
+ const diffImageRef = (0, _react.useRef)(null);
59
+ const actualImageRef = (0, _react.useRef)(null);
60
+ const loaded = (0, _helpers.useLoadImages)(expect, diff, actual);
61
+ const scale = (0, _helpers.useCalcScale)(diffImageRef, loaded);
62
+ (0, _helpers.useApplyScale)(expectImageRef, scale, image);
63
+ (0, _helpers.useApplyScale)(actualImageRef, scale, image);
64
+ const handleChangeView = (0, _react.useCallback)(() => setImage(prevImage => prevImage == 'actual' ? 'expect' : 'actual'), []);
65
+ (0, _react.useEffect)(() => {
66
+ if (loaded) (0, _readyForCapture.readyForCapture)();
67
+ }, [loaded]);
68
+ return loaded ? /*#__PURE__*/_react.default.createElement(Container, null, /*#__PURE__*/_react.default.createElement(Image, {
69
+ ref: expectImageRef,
70
+ borderColor: (0, _ImagesView.getBorderColor)(theme, _ImagesView.themeBorderColors.expect),
71
+ alt: 'expect',
72
+ src: expect,
73
+ hidden: image != 'expect'
74
+ }), /*#__PURE__*/_react.default.createElement(DiffImage, {
75
+ ref: diffImageRef,
76
+ borderColor: 'transparent',
77
+ tabIndex: 0,
78
+ alt: "diff",
79
+ src: diff,
80
+ onClick: handleChangeView
81
+ }), /*#__PURE__*/_react.default.createElement(Image, {
82
+ ref: actualImageRef,
83
+ borderColor: (0, _ImagesView.getBorderColor)(theme, _ImagesView.themeBorderColors.actual),
84
+ alt: 'actual',
85
+ src: actual,
86
+ hidden: image != 'actual'
87
+ })) : /*#__PURE__*/_react.default.createElement(_components.Loader, {
88
+ size: 64
89
+ });
90
+ });
91
+ exports.SwapView = SwapView;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "BlendView", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _BlendView.BlendView;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "ImagesView", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _ImagesView.ImagesView;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "SideBySideView", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _SideBySideView.SideBySideView;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "SlideView", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _SlideView.SlideView;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "SwapView", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _SwapView.SwapView;
34
+ }
35
+ });
36
+
37
+ var _ImagesView = require("./ImagesView");
38
+
39
+ var _BlendView = require("./BlendView");
40
+
41
+ var _SideBySideView = require("./SideBySideView");
42
+
43
+ var _SlideView = require("./SlideView");
44
+
45
+ var _SwapView = require("./SwapView");
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.PageFooter = PageFooter;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _Paging = require("./Paging");
11
+
12
+ var _theming = require("@storybook/theming");
13
+
14
+ var _components = require("@storybook/components");
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+
18
+ const Container = (0, _theming.withTheme)(_theming.styled.div(_ref => {
19
+ let {
20
+ theme
21
+ } = _ref;
22
+ return {
23
+ display: 'flex',
24
+ padding: '20px',
25
+ justifyContent: 'space-between',
26
+ background: theme.background.content
27
+ };
28
+ }));
29
+ const StyledButton = (0, _theming.styled)(_components.Button)({
30
+ transform: 'none'
31
+ });
32
+
33
+ function PageFooter(_ref2) {
34
+ let {
35
+ canApprove,
36
+ retriesCount,
37
+ retry,
38
+ onRetryChange,
39
+ onApprove
40
+ } = _ref2;
41
+ return /*#__PURE__*/_react.default.createElement(Container, null, /*#__PURE__*/_react.default.createElement(_Paging.Paging, {
42
+ activePage: retry,
43
+ onPageChange: onRetryChange,
44
+ pagesCount: retriesCount
45
+ }), canApprove ? /*#__PURE__*/_react.default.createElement(StyledButton, {
46
+ secondary: true,
47
+ outline: true,
48
+ onClick: onApprove
49
+ }, 'Approve') : null);
50
+ }
@@ -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
+ }