@cypress-design/react-testresult 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,6 @@
1
+ $ yarn build:module && yarn build:types
2
+ $ rollup -c ./rollup.config.mjs
3
+ 
4
+ ./index.ts → ./dist/index.umd.js, ./dist/index.es.mjs...
5
+ created ./dist/index.umd.js, ./dist/index.es.mjs in 5.2s
6
+ $ tsc --project ./tsconfig.build.json
package/CHANGELOG.md ADDED
@@ -0,0 +1,10 @@
1
+ # @cypress-design/react-testresult
2
+
3
+ ## 0.0.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [#366](https://github.com/cypress-io/cypress-design/pull/366) [`3a48cc3`](https://github.com/cypress-io/cypress-design/commit/3a48cc327666f1a3b067263a24dd13a3ba1f3b1e) Thanks [@ryanjwilke](https://github.com/ryanjwilke)! - create the component
8
+
9
+ - Updated dependencies [[`3a48cc3`](https://github.com/cypress-io/cypress-design/commit/3a48cc327666f1a3b067263a24dd13a3ba1f3b1e)]:
10
+ - @cypress-design/constants-testresult@0.0.2
package/ReadMe.md ADDED
@@ -0,0 +1,75 @@
1
+ # TestResult
2
+
3
+ ## Install
4
+
5
+ ```bash
6
+ npm install @cypress-design/react-testresult
7
+ ```
8
+
9
+ or with yarn
10
+
11
+ ```bash
12
+ yarn add @cypress-design/react-testresult
13
+ ```
14
+
15
+ ## Usage
16
+
17
+ ```ts
18
+ import TestResult from '@cypress-design/react-testresult'
19
+ ```
20
+
21
+ ```tsx live
22
+ import { useState } from 'react'
23
+ import TestResult from '@cypress-design/react-testresult'
24
+ import Button from '@cypress-design/react-button'
25
+ import {
26
+ IconActionTestReplay,
27
+ IconChevronRightSmall,
28
+ } from '@cypress-design/react-icon'
29
+
30
+ export const Demo = () => {
31
+ const [toggled, setToggled] = useState(false)
32
+ return (
33
+ <div className="bg-white p-2">
34
+ <TestResult
35
+ status="passed"
36
+ names={['<TestResults />', 'playground']}
37
+ flaky
38
+ modified
39
+ added
40
+ groups={
41
+ toggled
42
+ ? ['Chrome', 'Firefox'].map((group) => (
43
+ <div className="px-[16px] py-[8px] border border-gray-100 flex">
44
+ <span className="flex-1">{group}</span>
45
+ <Button
46
+ variant="outline-light"
47
+ size="32"
48
+ className="!px-[8px] @lg/test-result:!px-[12px] h-[32px]"
49
+ >
50
+ <IconActionTestReplay />
51
+ <span className="hidden @lg/test-result:inline ml-[8px]">
52
+ Test Replay
53
+ </span>
54
+ </Button>
55
+ </div>
56
+ ))
57
+ : null
58
+ }
59
+ >
60
+ <Button
61
+ variant="outline-light"
62
+ size="32"
63
+ className="!px-[8px] hidden @xl/test-result:inline-block h-[32px]"
64
+ onClick={() => setToggled(!toggled)}
65
+ >
66
+ <IconChevronRightSmall
67
+ stroke-color="gray-500"
68
+ className={`${toggled ? 'rotate-90' : ''} transform transition-transform`}
69
+ />
70
+ </Button>
71
+ </TestResult>
72
+ </div>
73
+ )
74
+ }
75
+ ```
package/TestResult.tsx ADDED
@@ -0,0 +1,142 @@
1
+ import * as React from 'react'
2
+ import clsx from 'clsx'
3
+ import {
4
+ classes,
5
+ type TestResultData,
6
+ } from '@cypress-design/constants-testresult'
7
+ import StatusIcon from '@cypress-design/react-statusicon'
8
+ import {
9
+ IconChevronRightSmall,
10
+ IconStatusFlaky,
11
+ IconDocumentModifiedSquareDot,
12
+ IconDocumentAddedSquarePlus,
13
+ } from '@cypress-design/react-icon'
14
+
15
+ export interface TestResultProps extends TestResultData {
16
+ className?: string
17
+ groups?: React.ReactNode
18
+ }
19
+
20
+ export const TestResult: React.FC<
21
+ TestResultProps & React.HTMLProps<HTMLDivElement>
22
+ > = ({
23
+ status,
24
+ names,
25
+ flaky,
26
+ modified,
27
+ added,
28
+ className,
29
+ groups,
30
+ children,
31
+ ...rest
32
+ }) => {
33
+ return (
34
+ <div
35
+ data-cy="cd-tr-container"
36
+ {...rest}
37
+ className={clsx(classes.container, className)}
38
+ >
39
+ <div data-cy="cd-tr-row" className={classes.row}>
40
+ <div data-cy="cd-tr-list" className={classes.list}>
41
+ <div data-cy="cd-tr-icon" className={classes.icon}>
42
+ <StatusIcon
43
+ size="16"
44
+ variant="solid"
45
+ status={status}
46
+ className={classes.status_icon}
47
+ />
48
+ </div>
49
+ <div
50
+ data-cy="cd-tr-name-container-column"
51
+ className={classes.name.container.column}
52
+ >
53
+ {names.slice(0, -1).length > 0 && (
54
+ <div
55
+ data-cy="cd-tr-name-container-describes"
56
+ className={classes.name.container.describes}
57
+ >
58
+ {names.slice(0, -1).map((name, index) => (
59
+ <React.Fragment key={index}>
60
+ <div
61
+ data-cy="cd-tr-name-item"
62
+ className={clsx({
63
+ [classes.name.item.base]: true,
64
+ [classes.name.item.first]:
65
+ names.length >= 2 && index === 0,
66
+ [classes.name.item.middle]:
67
+ names.length >= 2 &&
68
+ index > 0 &&
69
+ index < names.length - 1,
70
+ })}
71
+ >
72
+ <span
73
+ data-cy="cd-tr-name-item-text"
74
+ className={classes.name.item.text.base}
75
+ >
76
+ {name}
77
+ </span>
78
+ </div>
79
+ {index < names.length - 1 && (
80
+ <div
81
+ data-cy="cd-tr-chevron"
82
+ className={classes.chevron.container}
83
+ >
84
+ <IconChevronRightSmall
85
+ strokeColor="gray-200"
86
+ className="mt-[2px]"
87
+ />
88
+ </div>
89
+ )}
90
+ </React.Fragment>
91
+ ))}
92
+ </div>
93
+ )}
94
+ <div
95
+ data-cy="cd-tr-name-container-it"
96
+ className={classes.name.container.it}
97
+ >
98
+ <span
99
+ data-cy="cd-tr-name-item-text"
100
+ className={[
101
+ classes.name.item.text.base,
102
+ classes.name.item.text.it,
103
+ ].join(' ')}
104
+ >
105
+ {names.at(-1)}
106
+ </span>
107
+ {(flaky || modified || added) && (
108
+ <div
109
+ data-cy="cd-tr-attributes"
110
+ className={classes.attribute.container}
111
+ >
112
+ {flaky && <IconStatusFlaky data-cy="cd-tr-flaky" />}
113
+ {modified && (
114
+ <IconDocumentModifiedSquareDot data-cy="cd-tr-modified" />
115
+ )}
116
+ {added && (
117
+ <IconDocumentAddedSquarePlus data-cy="cd-tr-added" />
118
+ )}
119
+ </div>
120
+ )}
121
+ </div>
122
+ </div>
123
+ {children ? (
124
+ <div data-cy="cd-tr-actions" className={classes.button.container}>
125
+ {children}
126
+ </div>
127
+ ) : null}
128
+ </div>
129
+ {groups ? (
130
+ <div
131
+ data-cy="cd-tr-group-container"
132
+ className={classes.group.container}
133
+ >
134
+ {groups}
135
+ </div>
136
+ ) : null}
137
+ </div>
138
+ </div>
139
+ )
140
+ }
141
+
142
+ export default TestResult
@@ -0,0 +1,92 @@
1
+ /// <reference types="cypress" />
2
+
3
+ import * as React from 'react'
4
+ import { mount } from 'cypress/react18'
5
+ import TestResult from './TestResult'
6
+ import {
7
+ TestResultData,
8
+ TestResults,
9
+ } from '@cypress-design/constants-testresult'
10
+ import Button from '@cypress-design/react-button'
11
+ import {
12
+ IconActionTestReplay,
13
+ IconChevronRightSmall,
14
+ } from '@cypress-design/react-icon'
15
+ import assertions from '../assertions'
16
+ import clsx from 'clsx'
17
+
18
+ const TestResultSut = (result: TestResultData & { groups?: string[] }) => {
19
+ const [showGroupBox, setShowGroupBox] = React.useState(false)
20
+ return (
21
+ <TestResult
22
+ {...result}
23
+ groups={
24
+ showGroupBox ? (
25
+ <div className="flex flex-col">
26
+ {result.groups?.map((group, index) => (
27
+ <div
28
+ key={group + index}
29
+ className="px-[16px] py-[12px] border border-gray-100 flex mb-[-1px] h-[56px]"
30
+ >
31
+ <span className="flex-1">{group}</span>
32
+ <Button
33
+ variant="outline-light"
34
+ size="32"
35
+ className="!px-[8px] @lg/test-result:!px-[12px] h-[32px]"
36
+ >
37
+ <IconActionTestReplay />
38
+ <span className="hidden @lg/test-result:inline ml-[8px]">
39
+ Test Replay
40
+ </span>
41
+ </Button>
42
+ </div>
43
+ ))}
44
+ </div>
45
+ ) : null
46
+ }
47
+ onClick={() => (result.groups ? setShowGroupBox(!showGroupBox) : null)}
48
+ >
49
+ {result.groups ? null : (
50
+ <Button
51
+ variant="outline-light"
52
+ size="32"
53
+ className="!px-[8px] @lg/test-result:!px-[12px]"
54
+ >
55
+ <IconActionTestReplay />
56
+ <span className="hidden @lg/test-result:inline ml-[8px]">
57
+ Test Replay
58
+ </span>
59
+ </Button>
60
+ )}
61
+ <Button
62
+ variant="outline-light"
63
+ size="32"
64
+ className="!px-[8px] hidden @xl/test-result:inline-block"
65
+ onClick={() => (result.groups ? setShowGroupBox(!showGroupBox) : null)}
66
+ >
67
+ <span className="sr-only">Expand Group</span>
68
+ <IconChevronRightSmall
69
+ stroke-color="gray-500"
70
+ className={clsx({
71
+ 'transition-transform transform': true,
72
+ 'rotate-90': showGroupBox,
73
+ })}
74
+ />
75
+ </Button>
76
+ </TestResult>
77
+ )
78
+ }
79
+
80
+ describe('<TestResult/>', () => {
81
+ function mountStory() {
82
+ mount(
83
+ <div className="p-[16px]">
84
+ {TestResults.map((result) => (
85
+ <TestResultSut {...result} key={result.id} />
86
+ ))}
87
+ </div>,
88
+ )
89
+ }
90
+
91
+ assertions(mountStory)
92
+ })
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ import { type TestResultData } from '@cypress-design/constants-testresult';
3
+ export interface TestResultProps extends TestResultData {
4
+ className?: string;
5
+ groups?: React.ReactNode;
6
+ }
7
+ export declare const TestResult: React.FC<TestResultProps & React.HTMLProps<HTMLDivElement>>;
8
+ export default TestResult;
9
+ //# sourceMappingURL=TestResult.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TestResult.d.ts","sourceRoot":"./","sources":["TestResult.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,sCAAsC,CAAA;AAS7C,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACzB;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAC/B,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAuHlD,CAAA;AAED,eAAe,UAAU,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { default } from './TestResult';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"./","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA"}