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