creevey 0.9.1 → 0.10.0-beta.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/chromatic.config.json +5 -0
- package/dist/client/addon/components/Addon.d.ts +1 -0
- package/dist/client/addon/components/Addon.js.map +1 -1
- package/dist/client/addon/components/Icons.d.ts +1 -0
- package/dist/client/addon/components/Icons.js.map +1 -1
- package/dist/client/addon/components/Panel.d.ts +1 -0
- package/dist/client/addon/components/Panel.js.map +1 -1
- package/dist/client/addon/components/TestSelect.d.ts +1 -0
- package/dist/client/addon/components/TestSelect.js +4 -3
- package/dist/client/addon/components/TestSelect.js.map +1 -1
- package/dist/client/addon/components/Tools.d.ts +1 -0
- package/dist/client/addon/components/Tools.js +7 -8
- package/dist/client/addon/components/Tools.js.map +1 -1
- package/dist/client/addon/controller.d.ts +1 -1
- package/dist/client/addon/controller.js.map +1 -1
- package/dist/client/addon/decorator.d.ts +1 -1
- package/dist/client/addon/manager.js +3 -2
- package/dist/client/addon/manager.js.map +1 -1
- package/dist/client/addon/preview.d.ts +1 -1
- package/dist/client/addon/withCreevey.d.ts +6 -8
- package/dist/client/addon/withCreevey.js +21 -19
- package/dist/client/addon/withCreevey.js.map +1 -1
- package/dist/client/shared/components/ImagesView/BlendView.d.ts +1 -1
- package/dist/client/shared/components/ImagesView/BlendView.js.map +1 -1
- package/dist/client/shared/components/ImagesView/ImagesView.d.ts +1 -0
- package/dist/client/shared/components/ImagesView/ImagesView.js.map +1 -1
- package/dist/client/shared/components/ImagesView/SideBySideView.d.ts +1 -1
- package/dist/client/shared/components/ImagesView/SideBySideView.js.map +1 -1
- package/dist/client/shared/components/ImagesView/SlideView.d.ts +1 -1
- package/dist/client/shared/components/ImagesView/SlideView.js.map +1 -1
- package/dist/client/shared/components/ImagesView/SwapView.d.ts +1 -1
- package/dist/client/shared/components/ImagesView/SwapView.js.map +1 -1
- package/dist/client/shared/components/PageFooter/PageFooter.d.ts +1 -0
- package/dist/client/shared/components/PageFooter/PageFooter.js +1 -1
- package/dist/client/shared/components/PageFooter/PageFooter.js.map +1 -1
- package/dist/client/shared/components/PageFooter/Paging.d.ts +2 -2
- package/dist/client/shared/components/PageFooter/Paging.js +8 -6
- package/dist/client/shared/components/PageFooter/Paging.js.map +1 -1
- package/dist/client/shared/components/PageHeader/ImagePreview.js.map +1 -1
- package/dist/client/shared/components/PageHeader/PageHeader.d.ts +1 -0
- package/dist/client/shared/components/PageHeader/PageHeader.js +2 -1
- package/dist/client/shared/components/PageHeader/PageHeader.js.map +1 -1
- package/dist/client/shared/components/ResultsPage.d.ts +2 -2
- package/dist/client/shared/components/ResultsPage.js.map +1 -1
- package/dist/client/web/CreeveyApp.d.ts +1 -0
- package/dist/client/web/CreeveyApp.js.map +1 -1
- package/dist/client/web/CreeveyLoader.d.ts +1 -0
- package/dist/client/web/CreeveyLoader.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/Checkbox.d.ts +1 -1
- package/dist/client/web/CreeveyView/SideBar/Checkbox.js +4 -4
- package/dist/client/web/CreeveyView/SideBar/Checkbox.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/Search.d.ts +1 -0
- package/dist/client/web/CreeveyView/SideBar/Search.js +4 -4
- package/dist/client/web/CreeveyView/SideBar/Search.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/SideBar.d.ts +1 -1
- package/dist/client/web/CreeveyView/SideBar/SideBar.js +1 -7
- package/dist/client/web/CreeveyView/SideBar/SideBar.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/SideBarFooter.d.ts +1 -0
- package/dist/client/web/CreeveyView/SideBar/SideBarFooter.js +5 -4
- package/dist/client/web/CreeveyView/SideBar/SideBarFooter.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/SideBarHeader.d.ts +1 -0
- package/dist/client/web/CreeveyView/SideBar/SideBarHeader.js +4 -3
- package/dist/client/web/CreeveyView/SideBar/SideBarHeader.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/SuiteLink.d.ts +3 -7
- package/dist/client/web/CreeveyView/SideBar/SuiteLink.js +6 -5
- package/dist/client/web/CreeveyView/SideBar/SuiteLink.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/TestLink.d.ts +1 -0
- package/dist/client/web/CreeveyView/SideBar/TestLink.js +5 -1
- package/dist/client/web/CreeveyView/SideBar/TestLink.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/TestStatusIcon.js +15 -8
- package/dist/client/web/CreeveyView/SideBar/TestStatusIcon.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/TestsStatus.js +5 -4
- package/dist/client/web/CreeveyView/SideBar/TestsStatus.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/Toggle.d.ts +1 -0
- package/dist/client/web/CreeveyView/SideBar/Toggle.js.map +1 -1
- package/dist/client/web/KeyboardEventsContext.d.ts +3 -4
- package/dist/client/web/KeyboardEventsContext.js.map +1 -1
- package/dist/client/web/assets/index-DkmZfG9C.js +591 -0
- package/dist/client/web/index.html +1 -1
- package/dist/client/web/index.js +5 -6
- package/dist/client/web/index.js.map +1 -1
- package/dist/creevey.js +21 -9
- package/dist/creevey.js.map +1 -1
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/server/config.d.ts +1 -1
- package/dist/server/config.js +9 -5
- package/dist/server/config.js.map +1 -1
- package/dist/server/docker.d.ts +2 -2
- package/dist/server/docker.js +46 -40
- package/dist/server/docker.js.map +1 -1
- package/dist/server/index.js +54 -15
- package/dist/server/index.js.map +1 -1
- package/dist/server/master/master.d.ts +1 -5
- package/dist/server/master/master.js +3 -3
- package/dist/server/master/master.js.map +1 -1
- package/dist/server/master/pool.d.ts +2 -1
- package/dist/server/master/pool.js +13 -7
- package/dist/server/master/pool.js.map +1 -1
- package/dist/server/master/runner.d.ts +1 -1
- package/dist/server/master/runner.js +4 -2
- package/dist/server/master/runner.js.map +1 -1
- package/dist/server/master/server.js +1 -0
- package/dist/server/master/server.js.map +1 -1
- package/dist/server/master/start.d.ts +3 -0
- package/dist/server/master/{index.js → start.js} +6 -9
- package/dist/server/master/start.js.map +1 -0
- package/dist/server/messages.d.ts +4 -10
- package/dist/server/messages.js +4 -58
- package/dist/server/messages.js.map +1 -1
- package/dist/server/playwright/docker-file.d.ts +1 -0
- package/dist/server/playwright/docker-file.js +26 -0
- package/dist/server/playwright/docker-file.js.map +1 -0
- package/dist/server/playwright/docker.d.ts +1 -0
- package/dist/server/playwright/docker.js +31 -0
- package/dist/server/playwright/docker.js.map +1 -0
- package/dist/server/playwright/internal.d.ts +25 -0
- package/dist/server/playwright/internal.js +319 -0
- package/dist/server/playwright/internal.js.map +1 -0
- package/dist/server/playwright/webdriver.d.ts +16 -0
- package/dist/server/playwright/webdriver.js +105 -0
- package/dist/server/playwright/webdriver.js.map +1 -0
- package/dist/server/providers/browser.d.ts +2 -0
- package/dist/server/{storybook/providers → providers}/browser.js +6 -7
- package/dist/server/providers/browser.js.map +1 -0
- package/dist/server/providers/hybrid.d.ts +2 -0
- package/dist/server/{storybook/providers → providers}/hybrid.js +8 -8
- package/dist/server/providers/hybrid.js.map +1 -0
- package/dist/server/reporter.d.ts +26 -0
- package/dist/server/{worker/reporter.js → reporter.js} +34 -56
- package/dist/server/reporter.js.map +1 -0
- package/dist/server/selenium/internal.d.ts +31 -0
- package/dist/server/selenium/internal.js +606 -0
- package/dist/server/selenium/internal.js.map +1 -0
- package/dist/server/selenium/selenoid.js +6 -13
- package/dist/server/selenium/selenoid.js.map +1 -1
- package/dist/server/selenium/webdriver.d.ts +24 -0
- package/dist/server/selenium/webdriver.js +106 -0
- package/dist/server/selenium/webdriver.js.map +1 -0
- package/dist/server/stories.js +16 -9
- package/dist/server/stories.js.map +1 -1
- package/dist/server/telemetry.d.ts +1 -1
- package/dist/server/telemetry.js +4 -4
- package/dist/server/telemetry.js.map +1 -1
- package/dist/server/utils.d.ts +3 -4
- package/dist/server/utils.js +10 -9
- package/dist/server/utils.js.map +1 -1
- package/dist/server/webdriver.d.ts +19 -0
- package/dist/server/webdriver.js +79 -0
- package/dist/server/webdriver.js.map +1 -0
- package/dist/server/worker/chai-image.d.ts +2 -5
- package/dist/server/worker/chai-image.js +14 -102
- package/dist/server/worker/chai-image.js.map +1 -1
- package/dist/server/worker/match-image.d.ts +14 -0
- package/dist/server/worker/match-image.js +231 -0
- package/dist/server/worker/match-image.js.map +1 -0
- package/dist/server/worker/start.d.ts +2 -0
- package/dist/server/worker/start.js +258 -0
- package/dist/server/worker/start.js.map +1 -0
- package/dist/types.d.ts +127 -64
- package/dist/types.js +15 -9
- package/dist/types.js.map +1 -1
- package/package.json +108 -110
- package/src/client/addon/components/Addon.tsx +1 -1
- package/src/client/addon/components/Icons.tsx +1 -1
- package/src/client/addon/components/Panel.tsx +1 -1
- package/src/client/addon/components/TestSelect.tsx +5 -5
- package/src/client/addon/components/Tools.tsx +9 -9
- package/src/client/addon/controller.ts +1 -1
- package/src/client/addon/manager.ts +4 -4
- package/src/client/addon/withCreevey.ts +26 -28
- package/src/client/shared/components/ImagesView/BlendView.tsx +1 -1
- package/src/client/shared/components/ImagesView/ImagesView.tsx +2 -2
- package/src/client/shared/components/ImagesView/SideBySideView.tsx +1 -1
- package/src/client/shared/components/ImagesView/SlideView.tsx +1 -1
- package/src/client/shared/components/ImagesView/SwapView.tsx +1 -1
- package/src/client/shared/components/PageFooter/PageFooter.tsx +2 -2
- package/src/client/shared/components/PageFooter/Paging.tsx +13 -13
- package/src/client/shared/components/PageHeader/ImagePreview.tsx +1 -1
- package/src/client/shared/components/PageHeader/PageHeader.tsx +4 -3
- package/src/client/shared/components/ResultsPage.tsx +1 -1
- package/src/client/web/CreeveyApp.tsx +1 -1
- package/src/client/web/CreeveyLoader.tsx +1 -1
- package/src/client/web/CreeveyView/SideBar/Checkbox.tsx +6 -7
- package/src/client/web/CreeveyView/SideBar/Search.tsx +4 -4
- package/src/client/web/CreeveyView/SideBar/SideBar.tsx +3 -10
- package/src/client/web/CreeveyView/SideBar/SideBarFooter.tsx +7 -6
- package/src/client/web/CreeveyView/SideBar/SideBarHeader.tsx +7 -6
- package/src/client/web/CreeveyView/SideBar/SuiteLink.tsx +8 -6
- package/src/client/web/CreeveyView/SideBar/TestLink.tsx +8 -3
- package/src/client/web/CreeveyView/SideBar/TestStatusIcon.tsx +18 -10
- package/src/client/web/CreeveyView/SideBar/TestsStatus.tsx +7 -10
- package/src/client/web/CreeveyView/SideBar/Toggle.tsx +1 -2
- package/src/client/web/KeyboardEventsContext.tsx +3 -4
- package/src/client/web/index.html +1 -1
- package/src/client/web/index.tsx +4 -3
- package/src/creevey.ts +25 -8
- package/src/index.ts +4 -2
- package/src/server/config.ts +12 -8
- package/src/server/docker.ts +58 -44
- package/src/server/index.ts +57 -18
- package/src/server/master/master.ts +3 -6
- package/src/server/master/pool.ts +25 -9
- package/src/server/master/runner.ts +4 -2
- package/src/server/master/server.ts +1 -0
- package/src/server/master/{index.ts → start.ts} +13 -11
- package/src/server/messages.ts +11 -75
- package/src/server/playwright/docker-file.ts +21 -0
- package/src/server/playwright/docker.ts +41 -0
- package/src/server/playwright/internal.ts +387 -0
- package/src/server/playwright/webdriver.ts +126 -0
- package/src/server/{storybook/providers → providers}/browser.ts +7 -8
- package/src/server/{storybook/providers → providers}/hybrid.ts +19 -19
- package/src/server/{worker/reporter.ts → reporter.ts} +40 -72
- package/src/server/selenium/internal.ts +785 -0
- package/src/server/selenium/selenoid.ts +12 -17
- package/src/server/selenium/webdriver.ts +136 -0
- package/src/server/stories.ts +18 -11
- package/src/server/telemetry.ts +2 -2
- package/src/server/utils.ts +9 -9
- package/src/server/webdriver.ts +127 -0
- package/src/server/worker/chai-image.ts +21 -133
- package/src/server/worker/match-image.ts +303 -0
- package/src/server/worker/start.ts +303 -0
- package/src/types.ts +162 -60
- package/dist/client/web/202.js +0 -1
- package/dist/client/web/270.js +0 -43
- package/dist/client/web/752.js +0 -1
- package/dist/client/web/main.js +0 -79
- package/dist/client/web/main.js.LICENSE.txt +0 -34
- package/dist/server/master/index.d.ts +0 -3
- package/dist/server/master/index.js.map +0 -1
- package/dist/server/selenium/browser.d.ts +0 -19
- package/dist/server/selenium/browser.js +0 -640
- package/dist/server/selenium/browser.js.map +0 -1
- package/dist/server/selenium/index.d.ts +0 -2
- package/dist/server/selenium/index.js +0 -19
- package/dist/server/selenium/index.js.map +0 -1
- package/dist/server/storybook/providers/browser.d.ts +0 -2
- package/dist/server/storybook/providers/browser.js.map +0 -1
- package/dist/server/storybook/providers/hybrid.d.ts +0 -2
- package/dist/server/storybook/providers/hybrid.js.map +0 -1
- package/dist/server/worker/helpers.d.ts +0 -8
- package/dist/server/worker/helpers.js +0 -57
- package/dist/server/worker/helpers.js.map +0 -1
- package/dist/server/worker/index.d.ts +0 -1
- package/dist/server/worker/index.js +0 -6
- package/dist/server/worker/index.js.map +0 -1
- package/dist/server/worker/reporter.d.ts +0 -8
- package/dist/server/worker/reporter.js.map +0 -1
- package/dist/server/worker/worker.d.ts +0 -4
- package/dist/server/worker/worker.js +0 -212
- package/dist/server/worker/worker.js.map +0 -1
- package/src/server/selenium/browser.ts +0 -840
- package/src/server/selenium/index.ts +0 -2
- package/src/server/worker/helpers.ts +0 -61
- package/src/server/worker/index.ts +0 -1
- package/src/server/worker/worker.ts +0 -240
- package/types/mocha.d.ts +0 -20
@@ -1,16 +1,14 @@
|
|
1
|
-
import React from 'react';
|
1
|
+
import React, { JSX } from 'react';
|
2
2
|
import { TabButton } from '@storybook/components';
|
3
3
|
|
4
4
|
export interface PagingProps {
|
5
|
-
activePage:
|
5
|
+
activePage: string;
|
6
6
|
onPageChange: (pageNumber: number) => void;
|
7
7
|
pagesCount: number;
|
8
8
|
}
|
9
9
|
|
10
|
-
export type ItemType = number | '.';
|
11
|
-
|
12
10
|
export function Paging(props: PagingProps): JSX.Element {
|
13
|
-
const renderItem = (item:
|
11
|
+
const renderItem = (item: string, index: number): JSX.Element => {
|
14
12
|
switch (item) {
|
15
13
|
case '.': {
|
16
14
|
return (
|
@@ -49,17 +47,19 @@ export function Paging(props: PagingProps): JSX.Element {
|
|
49
47
|
}
|
50
48
|
};
|
51
49
|
|
52
|
-
const goToPage = (pageNumber:
|
53
|
-
|
54
|
-
|
50
|
+
const goToPage = (pageNumber: string): void => {
|
51
|
+
const newPage = Number(pageNumber);
|
52
|
+
if (1 <= newPage && pageNumber !== props.activePage && newPage <= props.pagesCount) {
|
53
|
+
props.onPageChange(newPage);
|
55
54
|
}
|
56
55
|
};
|
57
56
|
|
58
57
|
return <div>{getItems(props.activePage, props.pagesCount).map(renderItem)}</div>;
|
59
58
|
}
|
60
59
|
|
61
|
-
function getItems(
|
62
|
-
const
|
60
|
+
function getItems(activePage: string, total: number): string[] {
|
61
|
+
const active = Number(activePage);
|
62
|
+
const result: string[] = [];
|
63
63
|
|
64
64
|
const left = Math.max(Math.min(active - 2, total - 4), 1);
|
65
65
|
const right = Math.min(Math.max(5, active + 2), total);
|
@@ -71,11 +71,11 @@ function getItems(active: number, total: number): ItemType[] {
|
|
71
71
|
const to = hasRightDots ? right : total;
|
72
72
|
|
73
73
|
if (hasLeftDots) {
|
74
|
-
result.push(1, '.');
|
74
|
+
result.push('1', '.');
|
75
75
|
}
|
76
76
|
|
77
77
|
for (let i = from; i <= to; ++i) {
|
78
|
-
result.push(i);
|
78
|
+
result.push(`${i}`);
|
79
79
|
}
|
80
80
|
|
81
81
|
if (hasRightDots) {
|
@@ -83,7 +83,7 @@ function getItems(active: number, total: number): ItemType[] {
|
|
83
83
|
}
|
84
84
|
|
85
85
|
if (hasRightDots && isFinite(total)) {
|
86
|
-
result.push(total);
|
86
|
+
result.push(`${total}`);
|
87
87
|
}
|
88
88
|
|
89
89
|
return result;
|
@@ -1,5 +1,6 @@
|
|
1
|
-
import React, { useEffect } from 'react';
|
2
|
-
import {
|
1
|
+
import React, { JSX, useEffect } from 'react';
|
2
|
+
import { Tabs } from '@storybook/components';
|
3
|
+
import { CloseAltIcon } from '@storybook/icons';
|
3
4
|
import { styled, withTheme, Theme } from '@storybook/theming';
|
4
5
|
import { ImagesViewMode, Images } from '../../../../types.js';
|
5
6
|
import { getImageUrl } from '../../helpers.js';
|
@@ -99,7 +100,7 @@ export function PageHeader({
|
|
99
100
|
<H1>{title.flatMap((token) => [token, <HeaderDivider key={token}>/</HeaderDivider>]).slice(0, -1)}</H1>
|
100
101
|
{error && (
|
101
102
|
<ErrorContainer>
|
102
|
-
<
|
103
|
+
<CloseAltIcon />
|
103
104
|
<pre>{error}</pre>
|
104
105
|
</ErrorContainer>
|
105
106
|
)}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import React, { useState } from 'react';
|
1
|
+
import React, { JSX, useState } from 'react';
|
2
2
|
import { Placeholder, ScrollArea } from '@storybook/components';
|
3
3
|
import { styled, withTheme, Theme } from '@storybook/theming';
|
4
4
|
import { ImagesView } from './ImagesView/ImagesView.js';
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
1
|
+
import React, { JSX, useCallback, useEffect, useMemo, useState } from 'react';
|
2
2
|
import { useImmer } from 'use-immer';
|
3
3
|
import { ensure, styled, ThemeProvider, themes, withTheme } from '@storybook/theming';
|
4
4
|
import { CreeveyUpdate, CreeveySuite, isDefined, CreeveyTest } from '../../types.js';
|
@@ -1,7 +1,6 @@
|
|
1
|
-
import React from 'react';
|
2
|
-
|
1
|
+
import React, { JSX } from 'react';
|
3
2
|
import { styled, Theme, withTheme } from '@storybook/theming';
|
4
|
-
import {
|
3
|
+
import { CircleIcon, CheckIcon } from '@storybook/icons';
|
5
4
|
import { transparentize } from 'polished';
|
6
5
|
|
7
6
|
const Label = withTheme(
|
@@ -51,12 +50,12 @@ const Box = withTheme(
|
|
51
50
|
})),
|
52
51
|
);
|
53
52
|
|
54
|
-
const
|
53
|
+
const CircleIconStyled = styled(CircleIcon)({
|
55
54
|
margin: '4px',
|
56
55
|
verticalAlign: 'baseline',
|
57
56
|
});
|
58
57
|
|
59
|
-
const
|
58
|
+
const CheckIconStyled = styled(CheckIcon)({
|
60
59
|
margin: '2px',
|
61
60
|
verticalAlign: 'baseline',
|
62
61
|
});
|
@@ -105,9 +104,9 @@ export class Checkbox extends React.Component<CheckboxProps, CheckboxState> {
|
|
105
104
|
/>
|
106
105
|
<Box>
|
107
106
|
{indeterminate ? (
|
108
|
-
<
|
107
|
+
<CircleIconStyled width="8" height="8" />
|
109
108
|
) : checked ? (
|
110
|
-
<
|
109
|
+
<CheckIconStyled width="12" height="12" />
|
111
110
|
) : (
|
112
111
|
' '
|
113
112
|
)}
|
@@ -1,6 +1,6 @@
|
|
1
|
-
import {
|
1
|
+
import React, { JSX, ChangeEvent, useContext, useRef, useState } from 'react';
|
2
|
+
import { SearchIcon, CloseAltIcon } from '@storybook/icons';
|
2
3
|
import { styled, Theme, withTheme } from '@storybook/theming';
|
3
|
-
import React, { ChangeEvent, useContext, useRef, useState } from 'react';
|
4
4
|
import { KeyboardEventsContext } from '../../KeyboardEventsContext.js';
|
5
5
|
|
6
6
|
interface SearchProps {
|
@@ -131,9 +131,9 @@ export const Search = ({ onChange, value }: SearchProps): JSX.Element => {
|
|
131
131
|
placeholder="search by status or substring"
|
132
132
|
value={value}
|
133
133
|
/>
|
134
|
-
<
|
134
|
+
<SearchIcon />
|
135
135
|
<CancelButton tabIndex={-1} type="reset" value="reset" title="Clear search">
|
136
|
-
<
|
136
|
+
<CloseAltIcon />
|
137
137
|
</CancelButton>
|
138
138
|
</FilterForm>
|
139
139
|
);
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import React, { createContext } from 'react';
|
1
|
+
import React, { JSX, createContext } from 'react';
|
2
2
|
import { transparentize } from 'polished';
|
3
3
|
import { ScrollArea } from '@storybook/components';
|
4
4
|
import { styled, Theme, withTheme } from '@storybook/theming';
|
@@ -47,12 +47,6 @@ const ScrollContainer = styled.div({
|
|
47
47
|
left: '0',
|
48
48
|
});
|
49
49
|
|
50
|
-
const StyledScrollArea = styled(ScrollArea)({
|
51
|
-
'& > div > div': {
|
52
|
-
height: 'calc(100% - 8px)',
|
53
|
-
},
|
54
|
-
});
|
55
|
-
|
56
50
|
const Shadow = withTheme(
|
57
51
|
styled.div<{ theme: Theme; position: 'top' | 'bottom' }>(({ theme, position }) => ({
|
58
52
|
[position]: '0px',
|
@@ -69,7 +63,6 @@ const SelectAllContainer = styled.div({
|
|
69
63
|
|
70
64
|
const TestsContainer = styled.div({
|
71
65
|
position: 'relative',
|
72
|
-
paddingBottom: '8px',
|
73
66
|
height: '100%',
|
74
67
|
});
|
75
68
|
|
@@ -108,7 +101,7 @@ export function SideBar({ rootSuite, testId, onOpenTest, filter, setFilter }: Si
|
|
108
101
|
canStart={countCheckedTests !== 0}
|
109
102
|
/>
|
110
103
|
<ScrollContainer>
|
111
|
-
<
|
104
|
+
<ScrollArea vertical>
|
112
105
|
<Shadow position="top" />
|
113
106
|
<TestsContainer>
|
114
107
|
<Divider position="top" />
|
@@ -126,7 +119,7 @@ export function SideBar({ rootSuite, testId, onOpenTest, filter, setFilter }: Si
|
|
126
119
|
)}
|
127
120
|
</TestsContainer>
|
128
121
|
<Divider position="bottom" />
|
129
|
-
</
|
122
|
+
</ScrollArea>
|
130
123
|
<Shadow position="bottom" />
|
131
124
|
</ScrollContainer>
|
132
125
|
<SideBarFooter />
|
@@ -1,11 +1,12 @@
|
|
1
|
-
import React from 'react';
|
1
|
+
import React, { JSX } from 'react';
|
2
2
|
import { styled, withTheme } from '@storybook/theming';
|
3
|
-
import { Button
|
3
|
+
import { Button } from '@storybook/components';
|
4
|
+
import { ChevronRightIcon } from '@storybook/icons';
|
4
5
|
import { useCreeveyContext } from '../../CreeveyContext.js';
|
5
6
|
|
6
7
|
const Sticky = withTheme(
|
7
8
|
styled.div(({ theme }) => ({
|
8
|
-
padding: '24px
|
9
|
+
padding: '24px 32px 8px',
|
9
10
|
background: theme.background.content,
|
10
11
|
height: '50px',
|
11
12
|
zIndex: 5,
|
@@ -25,11 +26,11 @@ export function SideBarFooter(): JSX.Element {
|
|
25
26
|
return (
|
26
27
|
<Sticky>
|
27
28
|
<Container>
|
28
|
-
<Button
|
29
|
+
<Button variant="solid" size="medium" onClick={onImageApprove} disabled={!onImageApprove}>
|
29
30
|
Approve
|
30
|
-
<
|
31
|
+
<ChevronRightIcon />
|
31
32
|
</Button>
|
32
|
-
<Button
|
33
|
+
<Button variant="outline" size="medium" onClick={onApproveAll}>
|
33
34
|
Approve all
|
34
35
|
</Button>
|
35
36
|
</Container>
|
@@ -1,5 +1,6 @@
|
|
1
|
-
import React, { useContext, useState } from 'react';
|
2
|
-
import { Button as NativeButton
|
1
|
+
import React, { JSX, useContext, useState } from 'react';
|
2
|
+
import { Button as NativeButton } from '@storybook/components';
|
3
|
+
import { StopIcon, PlayIcon } from '@storybook/icons';
|
3
4
|
import { styled, withTheme } from '@storybook/theming';
|
4
5
|
import { CreeveyContext } from '../../CreeveyContext.js';
|
5
6
|
import { TestsStatus, TestsStatusProps } from './TestsStatus.js';
|
@@ -119,12 +120,12 @@ export function SideBarHeader({
|
|
119
120
|
{isReport ? null : (
|
120
121
|
<MarginContainer top="10px">
|
121
122
|
{isRunning ? (
|
122
|
-
<Button outline
|
123
|
-
<
|
123
|
+
<Button variant="outline" onClick={onStop}>
|
124
|
+
<StopIcon />
|
124
125
|
</Button>
|
125
126
|
) : (
|
126
|
-
<Button outline
|
127
|
-
<
|
127
|
+
<Button variant="outline" onClick={onStart} disabled={!canStart}>
|
128
|
+
<PlayIcon />
|
128
129
|
</Button>
|
129
130
|
)}
|
130
131
|
</MarginContainer>
|
@@ -1,5 +1,5 @@
|
|
1
|
-
import React, { useRef, useContext, useEffect, useMemo } from 'react';
|
2
|
-
import {
|
1
|
+
import React, { JSX, useRef, useContext, useEffect, useMemo } from 'react';
|
2
|
+
import { ChevronDownIcon, ChevronRightIcon } from '@storybook/icons';
|
3
3
|
import { styled, withTheme, Theme } from '@storybook/theming';
|
4
4
|
import { Checkbox, CheckboxContainer } from './Checkbox.js';
|
5
5
|
import { TestStatusIcon } from './TestStatusIcon.js';
|
@@ -53,13 +53,16 @@ export const Button = withTheme(
|
|
53
53
|
})),
|
54
54
|
);
|
55
55
|
|
56
|
-
const
|
56
|
+
const iconStyles = {
|
57
57
|
paddingRight: '4px',
|
58
58
|
display: 'inline-block',
|
59
59
|
width: '12px',
|
60
60
|
height: '18px',
|
61
61
|
verticalAlign: 'unset',
|
62
|
-
}
|
62
|
+
};
|
63
|
+
|
64
|
+
const ChevronDownIconStyled = styled(ChevronDownIcon)(iconStyles);
|
65
|
+
const ChevronRightIconStyled = styled(ChevronRightIcon)(iconStyles);
|
63
66
|
|
64
67
|
export const SuiteContainer = styled.span<{ padding: number }>(({ padding }) => ({
|
65
68
|
paddingLeft: padding,
|
@@ -126,8 +129,7 @@ export function SuiteLink({ title, suite, 'data-testid': dataTid }: SuiteLinkPro
|
|
126
129
|
<Button onClick={handleOpen} onFocus={handleFocus} data-testid={dataTid} ref={buttonRef}>
|
127
130
|
<SuiteContainer padding={(suite.path.length - 1) * 8}>
|
128
131
|
{isTest(suite) ||
|
129
|
-
(Boolean(suite.path.length) &&
|
130
|
-
(suite.opened ? <ArrowIcon icon="arrowdown" /> : <ArrowIcon icon="arrowright" />))}
|
132
|
+
(Boolean(suite.path.length) && (suite.opened ? <ChevronDownIconStyled /> : <ChevronRightIconStyled />))}
|
131
133
|
<TestStatusIcon status={suite.status} skip={suite.skip} />
|
132
134
|
<SuiteTitle>{title}</SuiteTitle>
|
133
135
|
</SuiteContainer>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import React, { useEffect, useCallback, useContext, useMemo, useRef } from 'react';
|
1
|
+
import React, { JSX, useEffect, useCallback, useContext, useMemo, useRef } from 'react';
|
2
2
|
import { CreeveyTest } from '../../../../types.js';
|
3
3
|
import { TestStatusIcon } from './TestStatusIcon.js';
|
4
4
|
import { CreeveyContext } from '../../CreeveyContext.js';
|
@@ -7,6 +7,7 @@ import { KeyboardEventsContext } from '../../KeyboardEventsContext.js';
|
|
7
7
|
import { Button, Container, SuiteContainer, SuiteTitle } from './SuiteLink.js';
|
8
8
|
import { Checkbox, CheckboxContainer } from './Checkbox.js';
|
9
9
|
import { getTestPath } from '../../../shared/helpers.js';
|
10
|
+
import { styled } from '@storybook/theming';
|
10
11
|
|
11
12
|
export interface TestLinkProps {
|
12
13
|
title: string;
|
@@ -14,6 +15,10 @@ export interface TestLinkProps {
|
|
14
15
|
test: CreeveyTest;
|
15
16
|
}
|
16
17
|
|
18
|
+
const TestContainer = styled(SuiteContainer)({
|
19
|
+
gridTemplateColumns: 'min-content auto',
|
20
|
+
});
|
21
|
+
|
17
22
|
export function TestLink({ title, opened, test }: TestLinkProps): JSX.Element {
|
18
23
|
const { onSuiteToggle } = useContext(CreeveyContext);
|
19
24
|
const { onOpenTest } = useContext(SideBarContext);
|
@@ -59,10 +64,10 @@ export function TestLink({ title, opened, test }: TestLinkProps): JSX.Element {
|
|
59
64
|
/>
|
60
65
|
</CheckboxContainer>
|
61
66
|
<Button onClick={handleOpen} disabled={emptyResults} ref={buttonRef}>
|
62
|
-
<
|
67
|
+
<TestContainer padding={(testPath.length + 1) * 8}>
|
63
68
|
<TestStatusIcon inverted={opened} status={test.status} skip={test.skip} />
|
64
69
|
<SuiteTitle>{title}</SuiteTitle>
|
65
|
-
</
|
70
|
+
</TestContainer>
|
66
71
|
</Button>
|
67
72
|
</Container>
|
68
73
|
);
|
@@ -1,6 +1,7 @@
|
|
1
|
-
import React from 'react';
|
1
|
+
import React, { JSX } from 'react';
|
2
2
|
import { styled, withTheme, Theme } from '@storybook/theming';
|
3
|
-
import {
|
3
|
+
import { Loader } from '@storybook/components';
|
4
|
+
import { CrossIcon, CheckIcon, CircleHollowIcon, ThumbsUpIcon, AlertIcon, TimeIcon } from '@storybook/icons';
|
4
5
|
import { TestStatus } from '../../../../types.js';
|
5
6
|
|
6
7
|
export interface TestStatusIconProps {
|
@@ -17,11 +18,18 @@ const Container = styled.span({
|
|
17
18
|
display: 'inline-block',
|
18
19
|
});
|
19
20
|
|
20
|
-
const
|
21
|
+
const iconStyles = {
|
21
22
|
position: 'relative',
|
22
23
|
top: '1px',
|
23
24
|
verticalAlign: 'baseline',
|
24
|
-
}
|
25
|
+
} as const;
|
26
|
+
|
27
|
+
const CrossIconStyled = styled(CrossIcon)(iconStyles);
|
28
|
+
const CheckIconStyled = styled(CheckIcon)(iconStyles);
|
29
|
+
const ThumbsUpIconStyled = styled(ThumbsUpIcon)(iconStyles);
|
30
|
+
const AlertIconStyled = styled(AlertIcon)(iconStyles);
|
31
|
+
const TimeIconStyled = styled(TimeIcon)(iconStyles);
|
32
|
+
const CircleHollowIconStyled = styled(CircleHollowIcon)(iconStyles);
|
25
33
|
|
26
34
|
const Spinner = styled(Loader)({
|
27
35
|
top: '12px',
|
@@ -34,15 +42,15 @@ export const TestStatusIcon = withTheme(
|
|
34
42
|
let icon = null;
|
35
43
|
switch (status) {
|
36
44
|
case 'failed': {
|
37
|
-
icon = <
|
45
|
+
icon = <CrossIconStyled color={inverted ? theme.color.lightest : theme.color.negative} />;
|
38
46
|
break;
|
39
47
|
}
|
40
48
|
case 'success': {
|
41
|
-
icon = <
|
49
|
+
icon = <CheckIconStyled color={inverted ? theme.color.lightest : theme.color.green} />;
|
42
50
|
break;
|
43
51
|
}
|
44
52
|
case 'approved': {
|
45
|
-
icon = <
|
53
|
+
icon = <ThumbsUpIconStyled color={inverted ? theme.color.lightest : theme.color.mediumdark} />;
|
46
54
|
break;
|
47
55
|
}
|
48
56
|
case 'running': {
|
@@ -50,12 +58,12 @@ export const TestStatusIcon = withTheme(
|
|
50
58
|
break;
|
51
59
|
}
|
52
60
|
case 'pending': {
|
53
|
-
icon = <
|
61
|
+
icon = <TimeIconStyled color={inverted ? theme.color.lightest : theme.color.mediumdark} />;
|
54
62
|
break;
|
55
63
|
}
|
56
64
|
default: {
|
57
|
-
if (skip) icon = <
|
58
|
-
else icon = <
|
65
|
+
if (skip) icon = <AlertIconStyled color={inverted ? theme.color.lightest : undefined} />;
|
66
|
+
else icon = <CircleHollowIconStyled color={inverted ? theme.color.lightest : undefined} />;
|
59
67
|
break;
|
60
68
|
}
|
61
69
|
}
|
@@ -1,5 +1,6 @@
|
|
1
|
-
import React from 'react';
|
2
|
-
import { IconButton
|
1
|
+
import React, { JSX } from 'react';
|
2
|
+
import { IconButton } from '@storybook/components';
|
3
|
+
import { TimeIcon, CheckIcon, CrossIcon, ThumbsUpIcon } from '@storybook/icons';
|
3
4
|
import { styled, withTheme, Theme } from '@storybook/theming';
|
4
5
|
import { TestStatus } from '../../../../types.js';
|
5
6
|
import { CreeveyTestsStatus } from '../../../shared/helpers.js';
|
@@ -59,48 +60,44 @@ export const TestsStatus = withTheme(
|
|
59
60
|
}: TestsStatusProps): JSX.Element => {
|
60
61
|
return (
|
61
62
|
<Container>
|
62
|
-
{/* @ts-expect-error Fixed in https://github.com/storybookjs/storybook/pull/26623 */}
|
63
63
|
<Button
|
64
64
|
onClick={() => {
|
65
65
|
onClickByStatus('pending');
|
66
66
|
}}
|
67
67
|
>
|
68
68
|
<IconContainer color={theme?.color.mediumdark}>
|
69
|
-
<
|
69
|
+
<TimeIcon />
|
70
70
|
{pendingCount}
|
71
71
|
</IconContainer>
|
72
72
|
</Button>
|
73
73
|
<Divider />
|
74
|
-
{/* @ts-expect-error Fixed in https://github.com/storybookjs/storybook/pull/26623 */}
|
75
74
|
<Button
|
76
75
|
onClick={() => {
|
77
76
|
onClickByStatus('success');
|
78
77
|
}}
|
79
78
|
>
|
80
79
|
<IconContainer color={theme?.color.green}>
|
81
|
-
<
|
80
|
+
<CheckIcon /> {successCount}
|
82
81
|
</IconContainer>
|
83
82
|
</Button>
|
84
83
|
<Divider />
|
85
|
-
{/* @ts-expect-error Fixed in https://github.com/storybookjs/storybook/pull/26623 */}
|
86
84
|
<Button
|
87
85
|
onClick={() => {
|
88
86
|
onClickByStatus('failed');
|
89
87
|
}}
|
90
88
|
>
|
91
89
|
<IconContainer color={theme?.color.negative}>
|
92
|
-
<
|
90
|
+
<CrossIcon /> {failedCount}
|
93
91
|
</IconContainer>
|
94
92
|
</Button>
|
95
93
|
<Divider />
|
96
|
-
{/* @ts-expect-error Fixed in https://github.com/storybookjs/storybook/pull/26623 */}
|
97
94
|
<Button
|
98
95
|
onClick={() => {
|
99
96
|
onClickByStatus('approved');
|
100
97
|
}}
|
101
98
|
>
|
102
99
|
<IconContainer color={theme?.color.defaultText}>
|
103
|
-
<
|
100
|
+
<ThumbsUpIcon /> {approvedCount}
|
104
101
|
</IconContainer>
|
105
102
|
</Button>
|
106
103
|
</Container>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import React, { useState, useEffect, useCallback, useContext } from 'react';
|
1
|
+
import React, { JSX, useState, useEffect, useCallback, useContext, PropsWithChildren } from 'react';
|
2
2
|
import { CreeveySuite, isTest, noop } from '../../types.js';
|
3
3
|
import { CreeveyViewFilter, filterTests, flattenSuite, getSuiteByPath, getTestPath } from '../shared/helpers.js';
|
4
4
|
import { CreeveyContext } from './CreeveyContext.js';
|
@@ -20,11 +20,10 @@ export const KeyboardEvents = ({
|
|
20
20
|
children,
|
21
21
|
rootSuite,
|
22
22
|
filter,
|
23
|
-
}: {
|
23
|
+
}: PropsWithChildren<{
|
24
24
|
rootSuite: CreeveySuite;
|
25
25
|
filter: CreeveyViewFilter;
|
26
|
-
|
27
|
-
}): JSX.Element => {
|
26
|
+
}>): JSX.Element => {
|
28
27
|
const [sidebarFocusedItem, setSidebarFocusedItem] = useState<FocusableItem>([]);
|
29
28
|
|
30
29
|
const { onSuiteOpen, onSuiteToggle } = useContext(CreeveyContext);
|
package/src/client/web/index.tsx
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
import React, { Suspense } from 'react';
|
2
|
-
import
|
2
|
+
import { createRoot } from 'react-dom/client';
|
3
3
|
import { CreeveyApp } from './CreeveyApp.js';
|
4
4
|
|
5
5
|
import { initCreeveyClientApi, CreeveyClientApi } from '../shared/creeveyClientApi.js';
|
@@ -55,9 +55,10 @@ const CreeveyAppAsync = React.lazy(async () => {
|
|
55
55
|
};
|
56
56
|
});
|
57
57
|
|
58
|
-
|
58
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
59
|
+
const root = createRoot(document.getElementById('root')!);
|
60
|
+
root.render(
|
59
61
|
<Suspense fallback={<CreeveyLoader />}>
|
60
62
|
<CreeveyAppAsync />
|
61
63
|
</Suspense>,
|
62
|
-
document.getElementById('root'),
|
63
64
|
);
|
package/src/creevey.ts
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
import cluster from 'cluster';
|
2
2
|
import minimist from 'minimist';
|
3
3
|
import creevey from './server/index.js';
|
4
|
-
import {
|
4
|
+
import { Options } from './types.js';
|
5
5
|
import { emitWorkerMessage } from './server/messages.js';
|
6
|
-
import { isShuttingDown,
|
6
|
+
import { isShuttingDown, shutdownWorkers } from './server/utils.js';
|
7
7
|
import Logger from 'loglevel';
|
8
8
|
import { logger } from './server/logger.js';
|
9
9
|
|
@@ -15,22 +15,39 @@ function shutdownOnException(reason: unknown): void {
|
|
15
15
|
logger.error(error);
|
16
16
|
|
17
17
|
process.exitCode = -1;
|
18
|
-
if (cluster.isWorker) emitWorkerMessage({ type: 'error', payload: { error } });
|
18
|
+
if (cluster.isWorker) emitWorkerMessage({ type: 'error', payload: { subtype: 'unknown', error } });
|
19
19
|
if (cluster.isPrimary) void shutdownWorkers();
|
20
20
|
}
|
21
21
|
|
22
22
|
process.on('uncaughtException', shutdownOnException);
|
23
23
|
process.on('unhandledRejection', shutdownOnException);
|
24
|
-
|
25
|
-
|
24
|
+
process.on('SIGINT', () => {
|
25
|
+
isShuttingDown.current = true;
|
26
|
+
});
|
26
27
|
|
27
28
|
const argv = minimist<Options>(process.argv.slice(2), {
|
28
|
-
string: ['browser', 'config', 'reporter', 'reportDir', 'screenDir', 'storybookUrl'],
|
29
|
-
boolean: ['debug', 'trace', 'ui', '
|
30
|
-
default: { port: 3000
|
29
|
+
string: ['browser', 'config', 'reporter', 'reportDir', 'screenDir', 'gridUrl', 'storybookUrl'],
|
30
|
+
boolean: ['debug', 'trace', 'ui', 'odiff'],
|
31
|
+
default: { port: 3000 },
|
31
32
|
alias: { port: 'p', config: 'c', debug: 'd', update: 'u' },
|
32
33
|
});
|
33
34
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
36
|
+
if (cluster.isPrimary && argv.reporter) {
|
37
|
+
logger.warn(`--reporter option has been removed please describe reporter in config file:
|
38
|
+
import { reporters } from 'mocha';
|
39
|
+
|
40
|
+
const config = {
|
41
|
+
reporter: reporters.${
|
42
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
43
|
+
argv.reporter
|
44
|
+
},
|
45
|
+
};
|
46
|
+
|
47
|
+
export default config;
|
48
|
+
`);
|
49
|
+
}
|
50
|
+
|
34
51
|
// @ts-expect-error: define log level for storybook
|
35
52
|
global.LOGLEVEL = argv.trace ? 'trace' : argv.debug ? 'debug' : 'warn';
|
36
53
|
if (argv.trace) {
|
package/src/index.ts
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
export * from './types.js';
|
2
|
-
export { loadStories as browserStoriesProvider } from './server/
|
3
|
-
export { loadStories as hybridStoriesProvider } from './server/
|
2
|
+
export { loadStories as browserStoriesProvider } from './server/providers/browser.js';
|
3
|
+
export { loadStories as hybridStoriesProvider } from './server/providers/hybrid.js';
|
4
|
+
export { PlaywrightWebdriver } from './server/playwright/webdriver.js';
|
5
|
+
export { SeleniumWebdriver } from './server/selenium/webdriver.js';
|
4
6
|
export * from './server/testsFiles/parser.js';
|