creevey 0.9.0-beta.2 → 0.9.0-non-webpack.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AUTHORS +15 -15
- package/CHANGELOG.md +1275 -1275
- package/LICENSE +21 -21
- package/README.md +7 -0
- package/addon/README.md +3 -0
- package/addon/package.json +4 -0
- package/docs/config.md +212 -212
- package/docs/grid.md +10 -10
- package/docs/tests.md +63 -63
- package/jest.config.js +6 -0
- package/lib/cjs/client/addon/Manager.js +123 -271
- package/lib/cjs/client/addon/components/Addon.js +17 -38
- package/lib/cjs/client/addon/components/Icons.js +12 -8
- package/lib/cjs/client/addon/components/Panel.js +17 -13
- package/lib/cjs/client/addon/components/TestSelect.js +11 -9
- package/lib/cjs/client/addon/components/Tools.js +21 -40
- package/lib/cjs/client/addon/decorator.js +1 -1
- package/lib/cjs/client/addon/index.js +31 -0
- package/lib/cjs/client/addon/preset.js +13 -32
- package/lib/cjs/client/addon/register.js +46 -70
- package/lib/cjs/client/addon/utils.js +1 -1
- package/lib/cjs/client/addon/withCreevey.js +164 -344
- package/lib/cjs/client/shared/components/ImagesView/BlendView.js +23 -21
- package/lib/cjs/client/shared/components/ImagesView/ImagesView.js +22 -18
- package/lib/cjs/client/shared/components/ImagesView/SideBySideView.js +42 -64
- package/lib/cjs/client/shared/components/ImagesView/SlideView.js +35 -48
- package/lib/cjs/client/shared/components/ImagesView/SwapView.js +24 -43
- package/lib/cjs/client/shared/components/ImagesView/index.js +9 -9
- package/lib/cjs/client/shared/components/PageFooter/PageFooter.js +12 -8
- package/lib/cjs/client/shared/components/PageFooter/Paging.js +14 -18
- package/lib/cjs/client/shared/components/PageHeader/ImagePreview.js +22 -18
- package/lib/cjs/client/shared/components/PageHeader/PageHeader.js +42 -67
- package/lib/cjs/client/shared/components/ResultsPage.js +39 -69
- package/lib/cjs/client/shared/creeveyClientApi.js +55 -82
- package/lib/cjs/client/shared/helpers.js +143 -214
- package/lib/cjs/client/shared/viewMode.js +5 -5
- package/lib/cjs/client/web/142.js +2 -0
- package/lib/cjs/client/web/142.js.LICENSE.txt +12 -0
- package/lib/cjs/client/web/32.js +1 -0
- package/lib/cjs/client/web/551.js +1 -0
- package/lib/cjs/client/web/566.js +2 -0
- package/lib/cjs/client/web/566.js.LICENSE.txt +31 -0
- package/lib/cjs/client/web/691.js +2 -0
- package/lib/cjs/client/web/691.js.LICENSE.txt +8 -0
- package/lib/cjs/client/web/725.js +1 -0
- package/lib/cjs/client/web/index.html +19 -19
- package/lib/cjs/client/web/main.js +2 -38
- package/lib/cjs/client/web/main.js.LICENSE.txt +49 -0
- package/lib/cjs/creevey.js +3 -5
- package/lib/cjs/index.js +4 -4
- package/lib/cjs/server/config.js +1 -1
- package/lib/cjs/server/docker.js +3 -7
- package/lib/cjs/server/index.js +1 -1
- package/lib/cjs/server/loaders/babel/creevey-plugin.js +1 -3
- package/lib/cjs/server/loaders/babel/helpers.js +13 -23
- package/lib/cjs/server/loaders/babel/register.js +1 -3
- package/lib/cjs/server/loaders/webpack/compile.js +31 -24
- package/lib/cjs/server/loaders/webpack/creevey-loader.js +10 -5
- package/lib/cjs/server/loaders/webpack/dummy-hmr.js +2 -7
- package/lib/cjs/server/loaders/webpack/mdx-loader.js +1 -1
- package/lib/cjs/server/loaders/webpack/start.js +1 -1
- package/lib/cjs/server/logger.js +2 -1
- package/lib/cjs/server/master/index.js +2 -2
- package/lib/cjs/server/master/pool.js +9 -18
- package/lib/cjs/server/master/runner.js +53 -66
- package/lib/cjs/server/master/server.js +2 -2
- package/lib/cjs/server/messages.js +8 -10
- package/lib/cjs/server/selenium/browser.js +23 -31
- package/lib/cjs/server/selenium/selenoid.js +5 -7
- package/lib/cjs/server/stories.js +9 -20
- package/lib/cjs/server/storybook/entry.js +5 -3
- package/lib/cjs/server/storybook/helpers.js +15 -21
- package/lib/cjs/server/storybook/providers/browser.js +5 -9
- package/lib/cjs/server/storybook/providers/nodejs.js +4 -4
- package/lib/cjs/server/update.js +1 -5
- package/lib/cjs/server/utils.js +13 -15
- package/lib/cjs/server/worker/reporter.js +8 -20
- package/lib/cjs/server/worker/worker.js +6 -16
- package/lib/cjs/shared/index.js +101 -0
- package/lib/cjs/shared/serializeRegExp.js +42 -0
- package/lib/cjs/types.js +6 -6
- package/lib/esm/client/addon/Manager.js +123 -271
- package/lib/esm/client/addon/components/Addon.js +15 -34
- package/lib/esm/client/addon/components/Icons.js +11 -7
- package/lib/esm/client/addon/components/Panel.js +17 -13
- package/lib/esm/client/addon/components/TestSelect.js +11 -9
- package/lib/esm/client/addon/components/Tools.js +19 -36
- package/lib/esm/client/addon/decorator.js +1 -1
- package/lib/esm/client/addon/index.js +2 -0
- package/lib/esm/client/addon/preset.js +10 -25
- package/lib/esm/client/addon/register.js +42 -66
- package/lib/esm/client/addon/utils.js +1 -1
- package/lib/esm/client/addon/withCreevey.js +157 -341
- package/lib/esm/client/shared/components/ImagesView/BlendView.js +21 -17
- package/lib/esm/client/shared/components/ImagesView/ImagesView.js +21 -17
- package/lib/esm/client/shared/components/ImagesView/SideBySideView.js +40 -60
- package/lib/esm/client/shared/components/ImagesView/SlideView.js +33 -44
- package/lib/esm/client/shared/components/ImagesView/SwapView.js +22 -39
- package/lib/esm/client/shared/components/PageFooter/PageFooter.js +12 -8
- package/lib/esm/client/shared/components/PageFooter/Paging.js +14 -18
- package/lib/esm/client/shared/components/PageHeader/ImagePreview.js +22 -18
- package/lib/esm/client/shared/components/PageHeader/PageHeader.js +37 -60
- package/lib/esm/client/shared/components/ResultsPage.js +36 -64
- package/lib/esm/client/shared/creeveyClientApi.js +57 -84
- package/lib/esm/client/shared/helpers.js +127 -198
- package/lib/esm/client/shared/viewMode.js +4 -4
- package/lib/esm/creevey.js +3 -5
- package/lib/esm/index.js +1 -3
- package/lib/esm/server/docker.js +2 -2
- package/lib/esm/server/index.js +1 -1
- package/lib/esm/server/loaders/babel/creevey-plugin.js +1 -3
- package/lib/esm/server/loaders/babel/helpers.js +12 -22
- package/lib/esm/server/loaders/babel/register.js +1 -3
- package/lib/esm/server/loaders/webpack/compile.js +31 -24
- package/lib/esm/server/loaders/webpack/creevey-loader.js +9 -4
- package/lib/esm/server/loaders/webpack/dummy-hmr.js +2 -6
- package/lib/esm/server/loaders/webpack/start.js +1 -1
- package/lib/esm/server/master/index.js +2 -2
- package/lib/esm/server/master/pool.js +7 -18
- package/lib/esm/server/master/runner.js +53 -66
- package/lib/esm/server/master/server.js +2 -2
- package/lib/esm/server/messages.js +3 -5
- package/lib/esm/server/selenium/browser.js +20 -28
- package/lib/esm/server/selenium/selenoid.js +4 -6
- package/lib/esm/server/stories.js +9 -20
- package/lib/esm/server/storybook/entry.js +4 -2
- package/lib/esm/server/storybook/helpers.js +7 -15
- package/lib/esm/server/storybook/providers/browser.js +4 -5
- package/lib/esm/server/storybook/providers/nodejs.js +3 -3
- package/lib/esm/server/update.js +1 -5
- package/lib/esm/server/utils.js +5 -9
- package/lib/esm/server/worker/reporter.js +8 -20
- package/lib/esm/server/worker/worker.js +6 -16
- package/lib/esm/shared/index.js +78 -0
- package/lib/esm/shared/serializeRegExp.js +24 -0
- package/lib/types/cli.d.ts +1 -1
- package/lib/types/client/addon/Manager.d.ts +37 -37
- package/lib/types/client/addon/components/Addon.d.ts +8 -8
- package/lib/types/client/addon/components/Icons.d.ts +7 -7
- package/lib/types/client/addon/components/Panel.d.ts +9 -9
- package/lib/types/client/addon/components/TestSelect.d.ts +8 -9
- package/lib/types/client/addon/components/Tools.d.ts +6 -6
- package/lib/types/client/addon/decorator.d.ts +1 -1
- package/lib/types/client/addon/index.d.ts +2 -0
- package/lib/types/client/addon/preset.d.ts +23 -24
- package/lib/types/client/addon/readyForCapture.d.ts +6 -6
- package/lib/types/client/addon/register.d.ts +3 -3
- package/lib/types/client/addon/utils.d.ts +2 -2
- package/lib/types/client/addon/withCreevey.d.ts +24 -24
- package/lib/types/client/shared/components/ImagesView/BlendView.d.ts +3 -3
- package/lib/types/client/shared/components/ImagesView/ImagesView.d.ts +24 -25
- package/lib/types/client/shared/components/ImagesView/SideBySideView.d.ts +3 -3
- package/lib/types/client/shared/components/ImagesView/SlideView.d.ts +3 -3
- package/lib/types/client/shared/components/ImagesView/SwapView.d.ts +3 -3
- package/lib/types/client/shared/components/ImagesView/index.d.ts +5 -5
- package/lib/types/client/shared/components/PageFooter/PageFooter.d.ts +8 -9
- package/lib/types/client/shared/components/PageFooter/Paging.d.ts +7 -8
- package/lib/types/client/shared/components/PageHeader/ImagePreview.d.ts +12 -12
- package/lib/types/client/shared/components/PageHeader/PageHeader.d.ts +16 -17
- package/lib/types/client/shared/components/ResultsPage.d.ts +18 -18
- package/lib/types/client/shared/creeveyClientApi.d.ts +9 -9
- package/lib/types/client/shared/helpers.d.ts +46 -46
- package/lib/types/client/shared/viewMode.d.ts +4 -4
- package/lib/types/client/web/CreeveyApp.d.ts +11 -12
- package/lib/types/client/web/CreeveyContext.d.ts +11 -11
- package/lib/types/client/web/CreeveyLoader.d.ts +2 -3
- package/lib/types/client/web/CreeveyView/SideBar/Checkbox.d.ts +19 -19
- package/lib/types/client/web/CreeveyView/SideBar/Search.d.ts +6 -6
- package/lib/types/client/web/CreeveyView/SideBar/SideBar.d.ts +14 -14
- package/lib/types/client/web/CreeveyView/SideBar/SideBarHeader.d.ts +12 -13
- package/lib/types/client/web/CreeveyView/SideBar/SuiteLink.d.ts +33 -33
- package/lib/types/client/web/CreeveyView/SideBar/TestLink.d.ts +7 -8
- package/lib/types/client/web/CreeveyView/SideBar/TestStatusIcon.d.ts +10 -10
- package/lib/types/client/web/CreeveyView/SideBar/TestsStatus.d.ts +9 -9
- package/lib/types/client/web/CreeveyView/SideBar/Toggle.d.ts +6 -6
- package/lib/types/client/web/CreeveyView/SideBar/index.d.ts +1 -1
- package/lib/types/client/web/KeyboardEventsContext.d.ts +13 -13
- package/lib/types/client/web/index.d.ts +4 -4
- package/lib/types/creevey.d.ts +1 -1
- package/lib/types/index.d.ts +0 -1
- package/lib/types/server/config.d.ts +4 -4
- package/lib/types/server/docker.d.ts +7 -7
- package/lib/types/server/extract.d.ts +2 -2
- package/lib/types/server/index.d.ts +2 -2
- package/lib/types/server/loaders/babel/creevey-plugin.d.ts +1 -1
- package/lib/types/server/loaders/babel/helpers.d.ts +19 -19
- package/lib/types/server/loaders/babel/register.d.ts +5 -5
- package/lib/types/server/loaders/hooks/mdx.d.ts +1 -1
- package/lib/types/server/loaders/hooks/svelte.d.ts +1 -1
- package/lib/types/server/loaders/webpack/compile.d.ts +2 -2
- package/lib/types/server/loaders/webpack/creevey-loader.d.ts +4 -2
- package/lib/types/server/loaders/webpack/dummy-hmr.d.ts +10 -10
- package/lib/types/server/loaders/webpack/mdx-loader.d.ts +6 -6
- package/lib/types/server/loaders/webpack/start.d.ts +1 -1
- package/lib/types/server/logger.d.ts +10 -6
- package/lib/types/server/master/api.d.ts +7 -7
- package/lib/types/server/master/index.d.ts +3 -3
- package/lib/types/server/master/master.d.ts +7 -7
- package/lib/types/server/master/pool.d.ts +31 -31
- package/lib/types/server/master/runner.d.ts +26 -26
- package/lib/types/server/master/server.d.ts +2 -2
- package/lib/types/server/messages.d.ts +27 -27
- package/lib/types/server/selenium/browser.d.ts +17 -17
- package/lib/types/server/selenium/index.d.ts +2 -2
- package/lib/types/server/selenium/selenoid.d.ts +3 -3
- package/lib/types/server/stories.d.ts +8 -8
- package/lib/types/server/storybook/entry.d.ts +18 -18
- package/lib/types/server/storybook/helpers.d.ts +24 -24
- package/lib/types/server/storybook/providers/browser.d.ts +4 -4
- package/lib/types/server/storybook/providers/hybrid.d.ts +4 -4
- package/lib/types/server/storybook/providers/nodejs.d.ts +9 -9
- package/lib/types/server/testsFiles/parser.d.ts +12 -12
- package/lib/types/server/testsFiles/register.d.ts +2 -2
- package/lib/types/server/update.d.ts +2 -2
- package/lib/types/server/utils.d.ts +20 -20
- package/lib/types/server/worker/chai-image.d.ts +6 -6
- package/lib/types/server/worker/helpers.d.ts +8 -8
- package/lib/types/server/worker/index.d.ts +1 -1
- package/lib/types/server/worker/reporter.d.ts +8 -8
- package/lib/types/server/worker/worker.d.ts +4 -4
- package/lib/types/{shared.d.ts → shared/index.d.ts} +7 -16
- package/lib/types/shared/serializeRegExp.d.ts +9 -0
- package/lib/types/types.d.ts +490 -489
- package/package.json +115 -102
- package/preset.js +9 -9
- package/types/babel__register.d.ts +1 -1
- package/types/chai.d.ts +12 -12
- package/types/event-source-polyfill.d.ts +6 -6
- package/types/mdx.d.ts +3 -2
- package/types/mocha.d.ts +20 -20
- package/types/png.d.ts +4 -4
- package/lib/cjs/client/web/1.js +0 -13
- package/lib/cjs/client/web/2.js +0 -1
- package/lib/cjs/shared.js +0 -124
- package/lib/esm/shared.js +0 -93
- package/storybook-static/stories.json +0 -21
@@ -3,19 +3,21 @@ import { getBorderColor, themeBorderColors } from './ImagesView';
|
|
3
3
|
import { styled, withTheme } from '@storybook/theming';
|
4
4
|
import { useApplyScale, useCalcScale, useLoadImages } from '../../helpers';
|
5
5
|
import { readyForCapture } from '../../../addon/readyForCapture';
|
6
|
-
|
6
|
+
const Container = styled.div({
|
7
7
|
position: 'relative',
|
8
8
|
display: 'flex',
|
9
9
|
filter: 'invert(100%)'
|
10
10
|
});
|
11
|
-
|
11
|
+
const ImageContainer = styled.div({
|
12
12
|
position: 'absolute',
|
13
13
|
width: '100%',
|
14
14
|
height: '100%',
|
15
15
|
display: 'flex'
|
16
16
|
});
|
17
|
-
|
18
|
-
|
17
|
+
const Image = styled.img(_ref => {
|
18
|
+
let {
|
19
|
+
borderColor
|
20
|
+
} = _ref;
|
19
21
|
return {
|
20
22
|
boxSizing: 'border-box',
|
21
23
|
border: "1px solid ".concat(borderColor),
|
@@ -23,25 +25,27 @@ var Image = styled.img(function (_ref) {
|
|
23
25
|
filter: 'invert(100%)'
|
24
26
|
};
|
25
27
|
});
|
26
|
-
|
28
|
+
const ActualImage = styled(Image)({
|
27
29
|
mixBlendMode: 'difference'
|
28
30
|
});
|
29
|
-
|
31
|
+
const DiffImage = styled(Image)({
|
30
32
|
opacity: '0'
|
31
33
|
});
|
32
|
-
export
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
34
|
+
export const BlendView = withTheme(_ref2 => {
|
35
|
+
let {
|
36
|
+
actual,
|
37
|
+
diff,
|
38
|
+
expect,
|
39
|
+
theme
|
40
|
+
} = _ref2;
|
41
|
+
const expectImageRef = useRef(null);
|
42
|
+
const diffImageRef = useRef(null);
|
43
|
+
const actualImageRef = useRef(null);
|
44
|
+
const loaded = useLoadImages(expect, diff, actual);
|
45
|
+
const scale = useCalcScale(diffImageRef, loaded);
|
42
46
|
useApplyScale(expectImageRef, scale, loaded);
|
43
47
|
useApplyScale(actualImageRef, scale, loaded);
|
44
|
-
useEffect(
|
48
|
+
useEffect(() => {
|
45
49
|
if (loaded) readyForCapture();
|
46
50
|
}, [loaded]);
|
47
51
|
return /*#__PURE__*/React.createElement(Container, null, /*#__PURE__*/React.createElement(ImageContainer, null, /*#__PURE__*/React.createElement(Image, {
|
@@ -4,26 +4,24 @@ import { SwapView } from './SwapView';
|
|
4
4
|
import { SlideView } from './SlideView';
|
5
5
|
import { BlendView } from './BlendView';
|
6
6
|
import { styled, withTheme } from '@storybook/theming';
|
7
|
-
export
|
7
|
+
export const themeBorderColors = {
|
8
8
|
actual: 'negative',
|
9
9
|
expect: 'positive',
|
10
10
|
diff: 'secondary'
|
11
11
|
};
|
12
12
|
|
13
|
-
|
14
|
-
return color in theme.color;
|
15
|
-
};
|
13
|
+
const isColor = (theme, color) => color in theme.color;
|
16
14
|
|
17
15
|
export function getBorderColor(theme, color) {
|
18
16
|
return isColor(theme, color) ? theme.color[color] : color;
|
19
17
|
}
|
20
|
-
|
18
|
+
const views = {
|
21
19
|
'side-by-side': SideBySideView,
|
22
20
|
swap: SwapView,
|
23
21
|
slide: SlideView,
|
24
22
|
blend: BlendView
|
25
23
|
};
|
26
|
-
|
24
|
+
const Container = styled.div({
|
27
25
|
height: '100%',
|
28
26
|
display: 'flex',
|
29
27
|
textAlign: 'center',
|
@@ -31,25 +29,31 @@ var Container = styled.div({
|
|
31
29
|
justifyContent: 'center',
|
32
30
|
padding: '0 20px'
|
33
31
|
});
|
34
|
-
|
32
|
+
const ImageLink = styled.a({
|
35
33
|
lineHeight: 0
|
36
34
|
});
|
37
|
-
|
38
|
-
|
35
|
+
const ActualImage = withTheme(styled.img(_ref => {
|
36
|
+
let {
|
37
|
+
theme
|
38
|
+
} = _ref;
|
39
39
|
return {
|
40
40
|
border: "1px solid ".concat(getBorderColor(theme, themeBorderColors.expect)),
|
41
41
|
maxWidth: '100%'
|
42
42
|
};
|
43
43
|
}));
|
44
44
|
export function ImagesView(_ref2) {
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
45
|
+
let {
|
46
|
+
url,
|
47
|
+
image,
|
48
|
+
canApprove,
|
49
|
+
mode
|
50
|
+
} = _ref2;
|
51
|
+
const ViewComponent = views[mode];
|
52
|
+
const {
|
53
|
+
actual,
|
54
|
+
diff,
|
55
|
+
expect
|
56
|
+
} = image;
|
53
57
|
return /*#__PURE__*/React.createElement(Container, null, canApprove && diff && expect ? /*#__PURE__*/React.createElement(ViewComponent, {
|
54
58
|
actual: "".concat(url, "/").concat(actual),
|
55
59
|
diff: "".concat(url, "/").concat(diff),
|
@@ -1,22 +1,10 @@
|
|
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, { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';
|
14
2
|
import { getBorderColor, themeBorderColors } from './ImagesView';
|
15
3
|
import { styled, withTheme } from '@storybook/theming';
|
16
4
|
import { useApplyScale, useLoadImages, useResizeObserver, getBorderSize } from '../../helpers';
|
17
5
|
import { Loader } from '@storybook/components';
|
18
6
|
import { readyForCapture } from '../../../addon/readyForCapture';
|
19
|
-
|
7
|
+
const Container = styled.div({
|
20
8
|
display: 'flex',
|
21
9
|
flexWrap: 'nowrap',
|
22
10
|
alignItems: 'center',
|
@@ -24,8 +12,10 @@ var Container = styled.div({
|
|
24
12
|
height: '100%',
|
25
13
|
width: '100%'
|
26
14
|
});
|
27
|
-
|
28
|
-
|
15
|
+
const ImagesLayout = styled.div(_ref => {
|
16
|
+
let {
|
17
|
+
layout
|
18
|
+
} = _ref;
|
29
19
|
return {
|
30
20
|
display: 'flex',
|
31
21
|
alignItems: 'flex-start',
|
@@ -37,15 +27,17 @@ var ImagesLayout = styled.div(function (_ref) {
|
|
37
27
|
}
|
38
28
|
};
|
39
29
|
});
|
40
|
-
|
30
|
+
const ImageLink = styled.a({
|
41
31
|
lineHeight: 0,
|
42
32
|
flexShrink: 0
|
43
33
|
});
|
44
|
-
|
34
|
+
const ImageDiffLink = styled.a({
|
45
35
|
lineHeight: 0
|
46
36
|
});
|
47
|
-
|
48
|
-
|
37
|
+
const Image = styled.img(_ref2 => {
|
38
|
+
let {
|
39
|
+
borderColor
|
40
|
+
} = _ref2;
|
49
41
|
return {
|
50
42
|
boxSizing: 'border-box',
|
51
43
|
border: "1px solid ".concat(borderColor),
|
@@ -53,65 +45,53 @@ var Image = styled.img(function (_ref2) {
|
|
53
45
|
flexShrink: 0
|
54
46
|
};
|
55
47
|
});
|
56
|
-
|
48
|
+
const DiffImage = styled(Image)({
|
57
49
|
flexShrink: 1
|
58
50
|
});
|
59
|
-
export
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
var actualImageRef = useRef(null);
|
79
|
-
var loaded = useLoadImages(expect, diff, actual);
|
80
|
-
var calcScale = useCallback(function () {
|
81
|
-
var containerElement = containerRef.current;
|
82
|
-
var expectImage = expectImageRef.current;
|
83
|
-
var diffImage = diffImageRef.current;
|
84
|
-
var actualImage = actualImageRef.current;
|
51
|
+
export const SideBySideView = withTheme(_ref3 => {
|
52
|
+
let {
|
53
|
+
actual,
|
54
|
+
diff,
|
55
|
+
expect,
|
56
|
+
theme
|
57
|
+
} = _ref3;
|
58
|
+
const [layout, setLayout] = useState('horizontal');
|
59
|
+
const [scale, setScale] = useState(1);
|
60
|
+
const containerRef = useRef(null);
|
61
|
+
const expectImageRef = useRef(null);
|
62
|
+
const diffImageRef = useRef(null);
|
63
|
+
const actualImageRef = useRef(null);
|
64
|
+
const loaded = useLoadImages(expect, diff, actual);
|
65
|
+
const calcScale = useCallback(() => {
|
66
|
+
const containerElement = containerRef.current;
|
67
|
+
const expectImage = expectImageRef.current;
|
68
|
+
const diffImage = diffImageRef.current;
|
69
|
+
const actualImage = actualImageRef.current;
|
85
70
|
if (!containerElement || !expectImage || !actualImage || !diffImage || !loaded) return setScale(1);
|
86
|
-
|
71
|
+
const borderSize = getBorderSize(diffImage);
|
87
72
|
|
88
73
|
if (layout == 'vertical') {
|
89
|
-
|
74
|
+
const ratio = (diffImage.getBoundingClientRect().width - borderSize * 2) / diffImage.naturalWidth;
|
90
75
|
setScale(Math.min(1, ratio));
|
91
76
|
}
|
92
77
|
|
93
78
|
if (layout == 'horizontal') {
|
94
|
-
|
95
|
-
(containerElement.getBoundingClientRect().width - 40 - borderSize * 6) / [expectImage, diffImage, actualImage].map(
|
96
|
-
|
97
|
-
}).reduce(function (a, b) {
|
98
|
-
return a + b;
|
99
|
-
}, 0);
|
100
|
-
|
101
|
-
setScale(Math.min(1, _ratio));
|
79
|
+
const ratio = // NOTE: 40px because we have two margins by 20px and 6px for borders
|
80
|
+
(containerElement.getBoundingClientRect().width - 40 - borderSize * 6) / [expectImage, diffImage, actualImage].map(image => image.naturalWidth).reduce((a, b) => a + b, 0);
|
81
|
+
setScale(Math.min(1, ratio));
|
102
82
|
}
|
103
83
|
}, [loaded, layout]);
|
104
84
|
useResizeObserver(containerRef, calcScale);
|
105
85
|
useLayoutEffect(calcScale, [calcScale]);
|
106
|
-
useLayoutEffect(
|
107
|
-
|
86
|
+
useLayoutEffect(() => {
|
87
|
+
const diffImage = diffImageRef.current;
|
108
88
|
if (!diffImage || !loaded) return;
|
109
|
-
|
89
|
+
const ratio = diffImage.naturalWidth / diffImage.naturalHeight;
|
110
90
|
setLayout(ratio >= 2 ? 'vertical' : 'horizontal');
|
111
91
|
}, [loaded]);
|
112
92
|
useApplyScale(expectImageRef, scale);
|
113
93
|
useApplyScale(actualImageRef, scale);
|
114
|
-
useEffect(
|
94
|
+
useEffect(() => {
|
115
95
|
if (loaded) readyForCapture();
|
116
96
|
}, [loaded]);
|
117
97
|
return /*#__PURE__*/React.createElement(Container, {
|
@@ -1,26 +1,14 @@
|
|
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, { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';
|
14
2
|
import { styled, withTheme } from '@storybook/theming';
|
15
3
|
import { getBorderColor, themeBorderColors } from './ImagesView';
|
16
4
|
import { useApplyScale, useCalcScale, useLoadImages } from '../../helpers';
|
17
5
|
import { Loader } from '@storybook/components';
|
18
6
|
import { readyForCapture } from '../../../addon/readyForCapture';
|
19
|
-
|
7
|
+
const Container = styled.div({
|
20
8
|
position: 'relative',
|
21
9
|
display: 'flex'
|
22
10
|
});
|
23
|
-
|
11
|
+
const Input = styled.input({
|
24
12
|
position: 'absolute',
|
25
13
|
cursor: 'ew-resize',
|
26
14
|
appearance: 'none',
|
@@ -53,14 +41,16 @@ var Input = styled.input({
|
|
53
41
|
width: '0px'
|
54
42
|
}
|
55
43
|
});
|
56
|
-
|
44
|
+
const ImageContainer = styled.div({
|
57
45
|
position: 'absolute',
|
58
46
|
width: '100%',
|
59
47
|
height: '100%',
|
60
48
|
overflow: 'hidden'
|
61
49
|
});
|
62
|
-
|
63
|
-
|
50
|
+
const ImageWrapper = withTheme(styled.div(_ref => {
|
51
|
+
let {
|
52
|
+
theme
|
53
|
+
} = _ref;
|
64
54
|
return {
|
65
55
|
background: theme.base == 'light' ? theme.color.mediumlight : theme.color.darker,
|
66
56
|
position: 'relative',
|
@@ -69,56 +59,55 @@ var ImageWrapper = withTheme(styled.div(function (_ref) {
|
|
69
59
|
display: 'flex'
|
70
60
|
};
|
71
61
|
}));
|
72
|
-
|
73
|
-
|
62
|
+
const BaseImage = styled.img(_ref2 => {
|
63
|
+
let {
|
64
|
+
borderColor
|
65
|
+
} = _ref2;
|
74
66
|
return {
|
75
67
|
boxSizing: 'border-box',
|
76
68
|
border: "1px solid ".concat(borderColor),
|
77
69
|
maxWidth: '100%'
|
78
70
|
};
|
79
71
|
});
|
80
|
-
|
72
|
+
const Image = styled(BaseImage)({
|
81
73
|
position: 'absolute'
|
82
74
|
});
|
83
|
-
|
75
|
+
const DiffImage = styled(BaseImage)({
|
84
76
|
opacity: '0'
|
85
77
|
});
|
86
|
-
export
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
var actualImageRef = useRef(null);
|
102
|
-
var loaded = useLoadImages(expect, diff, actual);
|
103
|
-
var scale = useCalcScale(diffImageRef, loaded);
|
78
|
+
export const SlideView = withTheme(_ref3 => {
|
79
|
+
let {
|
80
|
+
actual,
|
81
|
+
diff,
|
82
|
+
expect,
|
83
|
+
theme
|
84
|
+
} = _ref3;
|
85
|
+
const [step, setStep] = useState(0);
|
86
|
+
const expectedImageContainerRef = useRef(null);
|
87
|
+
const expectedImageWrapperRef = useRef(null);
|
88
|
+
const expectImageRef = useRef(null);
|
89
|
+
const diffImageRef = useRef(null);
|
90
|
+
const actualImageRef = useRef(null);
|
91
|
+
const loaded = useLoadImages(expect, diff, actual);
|
92
|
+
const scale = useCalcScale(diffImageRef, loaded);
|
104
93
|
useApplyScale(expectImageRef, scale);
|
105
94
|
useApplyScale(actualImageRef, scale);
|
106
|
-
|
95
|
+
const handleSlide = useCallback(event => {
|
107
96
|
if (!expectedImageContainerRef.current || !expectedImageWrapperRef.current) return;
|
108
|
-
|
97
|
+
const offset = Number(event.target.value);
|
109
98
|
expectedImageContainerRef.current.style.right = "".concat(100 - offset, "%");
|
110
99
|
expectedImageWrapperRef.current.style.left = "".concat(100 - offset, "%");
|
111
100
|
}, []);
|
112
|
-
useLayoutEffect(
|
101
|
+
useLayoutEffect(() => {
|
113
102
|
if (loaded && diffImageRef.current) setStep(100 / diffImageRef.current.getBoundingClientRect().width);
|
114
103
|
}, [loaded, scale]);
|
115
|
-
useLayoutEffect(
|
104
|
+
useLayoutEffect(() => {
|
116
105
|
if (loaded && expectedImageContainerRef.current && expectedImageWrapperRef.current) {
|
117
106
|
expectedImageContainerRef.current.style.right = '100%';
|
118
107
|
expectedImageWrapperRef.current.style.left = '100%';
|
119
108
|
}
|
120
109
|
}, [loaded]);
|
121
|
-
useEffect(
|
110
|
+
useEffect(() => {
|
122
111
|
if (loaded) readyForCapture();
|
123
112
|
}, [loaded]);
|
124
113
|
return loaded ? /*#__PURE__*/React.createElement(Container, null, /*#__PURE__*/React.createElement(Input, {
|
@@ -1,66 +1,49 @@
|
|
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, { useCallback, useEffect, useRef, useState } from 'react';
|
14
2
|
import { getBorderColor, themeBorderColors } from './ImagesView';
|
15
3
|
import { styled, withTheme } from '@storybook/theming';
|
16
4
|
import { useApplyScale, useCalcScale, useLoadImages } from '../../helpers';
|
17
5
|
import { Loader } from '@storybook/components';
|
18
6
|
import { readyForCapture } from '../../../addon/readyForCapture';
|
19
|
-
|
7
|
+
const Container = styled.div({
|
20
8
|
position: 'relative',
|
21
9
|
display: 'flex'
|
22
10
|
});
|
23
|
-
|
24
|
-
|
11
|
+
const BaseImage = styled.img(_ref => {
|
12
|
+
let {
|
13
|
+
borderColor
|
14
|
+
} = _ref;
|
25
15
|
return {
|
26
16
|
boxSizing: 'border-box',
|
27
17
|
border: "1px solid ".concat(borderColor),
|
28
18
|
maxWidth: '100%'
|
29
19
|
};
|
30
20
|
});
|
31
|
-
|
21
|
+
const Image = styled(BaseImage)({
|
32
22
|
position: 'absolute'
|
33
23
|
});
|
34
|
-
|
24
|
+
const DiffImage = styled(BaseImage)({
|
35
25
|
cursor: 'pointer',
|
36
26
|
outline: 'none',
|
37
27
|
opacity: 0,
|
38
28
|
zIndex: 1
|
39
29
|
});
|
40
|
-
export
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
var actualImageRef = useRef(null);
|
54
|
-
var loaded = useLoadImages(expect, diff, actual);
|
55
|
-
var scale = useCalcScale(diffImageRef, loaded);
|
30
|
+
export const SwapView = withTheme(_ref2 => {
|
31
|
+
let {
|
32
|
+
theme,
|
33
|
+
expect,
|
34
|
+
actual,
|
35
|
+
diff
|
36
|
+
} = _ref2;
|
37
|
+
const [image, setImage] = useState('actual');
|
38
|
+
const expectImageRef = useRef(null);
|
39
|
+
const diffImageRef = useRef(null);
|
40
|
+
const actualImageRef = useRef(null);
|
41
|
+
const loaded = useLoadImages(expect, diff, actual);
|
42
|
+
const scale = useCalcScale(diffImageRef, loaded);
|
56
43
|
useApplyScale(expectImageRef, scale, image);
|
57
44
|
useApplyScale(actualImageRef, scale, image);
|
58
|
-
|
59
|
-
|
60
|
-
return prevImage == 'actual' ? 'expect' : 'actual';
|
61
|
-
});
|
62
|
-
}, []);
|
63
|
-
useEffect(function () {
|
45
|
+
const handleChangeView = useCallback(() => setImage(prevImage => prevImage == 'actual' ? 'expect' : 'actual'), []);
|
46
|
+
useEffect(() => {
|
64
47
|
if (loaded) readyForCapture();
|
65
48
|
}, [loaded]);
|
66
49
|
return loaded ? /*#__PURE__*/React.createElement(Container, null, /*#__PURE__*/React.createElement(Image, {
|
@@ -2,8 +2,10 @@ import React from 'react';
|
|
2
2
|
import { Paging } from './Paging';
|
3
3
|
import { styled, withTheme } from '@storybook/theming';
|
4
4
|
import { Button } from '@storybook/components';
|
5
|
-
|
6
|
-
|
5
|
+
const Container = withTheme(styled.div(_ref => {
|
6
|
+
let {
|
7
|
+
theme
|
8
|
+
} = _ref;
|
7
9
|
return {
|
8
10
|
display: 'flex',
|
9
11
|
padding: '20px',
|
@@ -11,15 +13,17 @@ var Container = withTheme(styled.div(function (_ref) {
|
|
11
13
|
background: theme.background.content
|
12
14
|
};
|
13
15
|
}));
|
14
|
-
|
16
|
+
const StyledButton = styled(Button)({
|
15
17
|
transform: 'none'
|
16
18
|
});
|
17
19
|
export function PageFooter(_ref2) {
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
20
|
+
let {
|
21
|
+
canApprove,
|
22
|
+
retriesCount,
|
23
|
+
retry,
|
24
|
+
onRetryChange,
|
25
|
+
onApprove
|
26
|
+
} = _ref2;
|
23
27
|
return /*#__PURE__*/React.createElement(Container, null, /*#__PURE__*/React.createElement(Paging, {
|
24
28
|
activePage: retry,
|
25
29
|
onPageChange: onRetryChange,
|
@@ -2,12 +2,12 @@ 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
|
-
|
5
|
+
const StyledButton = styled(Button)({
|
6
6
|
transform: 'none',
|
7
7
|
marginLeft: '8px'
|
8
8
|
});
|
9
9
|
export function Paging(props) {
|
10
|
-
|
10
|
+
const renderItem = (item, index) => {
|
11
11
|
switch (item) {
|
12
12
|
case '.':
|
13
13
|
{
|
@@ -19,13 +19,11 @@ export function Paging(props) {
|
|
19
19
|
|
20
20
|
case 'forward':
|
21
21
|
{
|
22
|
-
|
22
|
+
const disabled = props.activePage === props.pagesCount;
|
23
23
|
return /*#__PURE__*/React.createElement(StyledButton, {
|
24
24
|
outline: true,
|
25
25
|
disabled: disabled,
|
26
|
-
onClick: disabled ? noop :
|
27
|
-
return goToPage(props.activePage + 1);
|
28
|
-
},
|
26
|
+
onClick: disabled ? noop : () => goToPage(props.activePage + 1),
|
29
27
|
key: "forward"
|
30
28
|
}, /*#__PURE__*/React.createElement("span", null, "Next ", /*#__PURE__*/React.createElement(Icons, {
|
31
29
|
icon: "arrowright"
|
@@ -38,15 +36,13 @@ export function Paging(props) {
|
|
38
36
|
outline: true,
|
39
37
|
secondary: props.activePage === item,
|
40
38
|
key: item,
|
41
|
-
onClick:
|
42
|
-
return goToPage(item);
|
43
|
-
}
|
39
|
+
onClick: () => goToPage(item)
|
44
40
|
}, item);
|
45
41
|
}
|
46
42
|
}
|
47
43
|
};
|
48
44
|
|
49
|
-
|
45
|
+
const goToPage = pageNumber => {
|
50
46
|
if (1 <= pageNumber && pageNumber !== props.activePage && pageNumber <= props.pagesCount) {
|
51
47
|
props.onPageChange(pageNumber);
|
52
48
|
}
|
@@ -56,19 +52,19 @@ export function Paging(props) {
|
|
56
52
|
}
|
57
53
|
|
58
54
|
function getItems(active, total) {
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
55
|
+
const result = [];
|
56
|
+
const left = Math.max(Math.min(active - 2, total - 4), 1);
|
57
|
+
const right = Math.min(Math.max(5, active + 2), total);
|
58
|
+
const hasLeftDots = left > 3;
|
59
|
+
const from = hasLeftDots ? left : 1;
|
60
|
+
const hasRightDots = right < total - 2;
|
61
|
+
const to = hasRightDots ? right : total;
|
66
62
|
|
67
63
|
if (hasLeftDots) {
|
68
64
|
result.push(1, '.');
|
69
65
|
}
|
70
66
|
|
71
|
-
for (
|
67
|
+
for (let i = from; i <= to; ++i) {
|
72
68
|
result.push(i);
|
73
69
|
}
|
74
70
|
|