@vizzly-testing/cli 0.32.0 → 0.33.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/README.md +67 -50
- package/dist/cli.js +8 -8
- package/dist/client/index.js +2 -1
- package/dist/commands/doctor.js +4 -4
- package/dist/commands/init.js +1 -1
- package/dist/commands/preview.js +3 -3
- package/dist/commands/run.js +1 -1
- package/dist/commands/tdd-daemon.js +1 -1
- package/dist/reporter/reporter-bundle.css +1 -1
- package/dist/reporter/reporter-bundle.iife.js +118 -105
- package/dist/reporter-ssr/ssr-entry.js +88 -88
- package/dist/services/static-report-generator.js +2 -2
- package/dist/tdd/tdd-service.js +14 -14
- package/dist/utils/colors.js +28 -45
- package/dist/utils/global-config.js +1 -1
- package/dist/utils/output.js +16 -16
- package/dist/utils/screenshot-options.js +1 -0
- package/docs/assets/vizzly-mascot-inspector.png +0 -0
- package/package.json +10 -8
|
@@ -16,33 +16,33 @@ function isNewComparisonStatus(status) {
|
|
|
16
16
|
var statusConfig = {
|
|
17
17
|
failed: {
|
|
18
18
|
label: "Changed",
|
|
19
|
-
borderClass: "border-l-
|
|
20
|
-
badgeClass: "bg-
|
|
21
|
-
dotClass: "bg-
|
|
19
|
+
borderClass: "border-l-[var(--accent-danger)]",
|
|
20
|
+
badgeClass: "bg-[var(--accent-danger-muted)] text-[var(--accent-danger)] ring-[color-mix(in_srgb,var(--accent-danger)_30%,transparent)]",
|
|
21
|
+
dotClass: "bg-[var(--accent-danger)]",
|
|
22
22
|
sectionTitle: "Visual Changes",
|
|
23
23
|
sectionIcon: "◐"
|
|
24
24
|
},
|
|
25
25
|
new: {
|
|
26
26
|
label: "New",
|
|
27
|
-
borderClass: "border-l-
|
|
28
|
-
badgeClass: "bg-
|
|
29
|
-
dotClass: "bg-
|
|
27
|
+
borderClass: "border-l-[var(--accent-media)]",
|
|
28
|
+
badgeClass: "bg-[var(--accent-media-muted)] text-[var(--accent-media)] ring-[color-mix(in_srgb,var(--accent-media)_30%,transparent)]",
|
|
29
|
+
dotClass: "bg-[var(--accent-media)]",
|
|
30
30
|
sectionTitle: "New Screenshots",
|
|
31
31
|
sectionIcon: "+"
|
|
32
32
|
},
|
|
33
33
|
passed: {
|
|
34
34
|
label: "Passed",
|
|
35
|
-
borderClass: "border-l-
|
|
36
|
-
badgeClass: "bg-
|
|
37
|
-
dotClass: "bg-
|
|
35
|
+
borderClass: "border-l-[var(--accent-success)]",
|
|
36
|
+
badgeClass: "bg-[var(--accent-success-muted)] text-[var(--accent-success)] ring-[color-mix(in_srgb,var(--accent-success)_30%,transparent)]",
|
|
37
|
+
dotClass: "bg-[var(--accent-success)]",
|
|
38
38
|
sectionTitle: "Passed",
|
|
39
39
|
sectionIcon: "✓"
|
|
40
40
|
},
|
|
41
41
|
error: {
|
|
42
42
|
label: "Error",
|
|
43
|
-
borderClass: "border-l-
|
|
44
|
-
badgeClass: "bg-
|
|
45
|
-
dotClass: "bg-
|
|
43
|
+
borderClass: "border-l-[var(--accent-warning)]",
|
|
44
|
+
badgeClass: "bg-[var(--accent-warning-muted)] text-[var(--accent-warning)] ring-[color-mix(in_srgb,var(--accent-warning)_30%,transparent)]",
|
|
45
|
+
dotClass: "bg-[var(--accent-warning)]",
|
|
46
46
|
sectionTitle: "Errors",
|
|
47
47
|
sectionIcon: "!"
|
|
48
48
|
}
|
|
@@ -57,7 +57,7 @@ function StatusBadge({ status }) {
|
|
|
57
57
|
function DiffBadge({ percentage }) {
|
|
58
58
|
if (percentage === void 0 || percentage === null || percentage === 0) return null;
|
|
59
59
|
return /* @__PURE__ */ jsxs("span", {
|
|
60
|
-
className: "font-mono text-xs text-
|
|
60
|
+
className: "font-mono text-xs text-[var(--accent-danger)] tabular-nums",
|
|
61
61
|
children: [percentage.toFixed(2), "%"]
|
|
62
62
|
});
|
|
63
63
|
}
|
|
@@ -65,7 +65,7 @@ function MetaInfo({ properties }) {
|
|
|
65
65
|
if (!properties) return null;
|
|
66
66
|
let { viewport_width, viewport_height, browser } = properties;
|
|
67
67
|
return /* @__PURE__ */ jsxs("div", {
|
|
68
|
-
className: "flex items-center gap-2 text-xs text-
|
|
68
|
+
className: "flex items-center gap-2 text-xs text-[var(--text-muted)]",
|
|
69
69
|
children: [viewport_width && viewport_height && /* @__PURE__ */ jsxs("span", {
|
|
70
70
|
className: "font-mono tabular-nums",
|
|
71
71
|
children: [
|
|
@@ -74,7 +74,7 @@ function MetaInfo({ properties }) {
|
|
|
74
74
|
viewport_height
|
|
75
75
|
]
|
|
76
76
|
}), browser && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
|
|
77
|
-
className: "text-
|
|
77
|
+
className: "text-[var(--text-muted)]",
|
|
78
78
|
children: "·"
|
|
79
79
|
}), /* @__PURE__ */ jsx("span", {
|
|
80
80
|
className: "capitalize",
|
|
@@ -94,23 +94,23 @@ function FailedComparison({ comparison, isEven }) {
|
|
|
94
94
|
children: [/* @__PURE__ */ jsxs("summary", {
|
|
95
95
|
className: `
|
|
96
96
|
flex items-center gap-4 p-4 cursor-pointer
|
|
97
|
-
${isEven ? "bg-
|
|
98
|
-
hover:bg-
|
|
97
|
+
${isEven ? "bg-[var(--vz-surface)]" : "bg-[var(--vz-elevated)]"}
|
|
98
|
+
hover:bg-[var(--vz-raised)]
|
|
99
99
|
border-l-4 ${config.borderClass}
|
|
100
100
|
rounded-r-lg transition-all duration-150
|
|
101
101
|
list-none [&::-webkit-details-marker]:hidden
|
|
102
|
-
focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-
|
|
102
|
+
focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[color-mix(in_srgb,var(--accent-brand)_50%,transparent)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--vz-bg)]
|
|
103
103
|
`,
|
|
104
104
|
children: [
|
|
105
105
|
/* @__PURE__ */ jsxs("div", {
|
|
106
|
-
className: "relative w-16 h-10 flex-shrink-0 rounded overflow-hidden bg-
|
|
106
|
+
className: "relative w-16 h-10 flex-shrink-0 rounded overflow-hidden bg-[var(--vz-bg)]",
|
|
107
107
|
children: [(current || baseline) && /* @__PURE__ */ jsx("img", {
|
|
108
108
|
src: current || baseline,
|
|
109
109
|
alt: "",
|
|
110
110
|
className: "w-full h-full object-cover object-top"
|
|
111
111
|
}), diff && /* @__PURE__ */ jsx("div", {
|
|
112
|
-
className: "absolute inset-0 bg-
|
|
113
|
-
children: /* @__PURE__ */ jsx("span", { className: "w-2 h-2 bg-
|
|
112
|
+
className: "absolute inset-0 bg-[color-mix(in_srgb,var(--accent-danger)_20%,transparent)] flex items-center justify-center",
|
|
113
|
+
children: /* @__PURE__ */ jsx("span", { className: "w-2 h-2 bg-[var(--accent-danger)] rounded-full animate-pulse" })
|
|
114
114
|
})]
|
|
115
115
|
}),
|
|
116
116
|
/* @__PURE__ */ jsxs("div", {
|
|
@@ -118,7 +118,7 @@ function FailedComparison({ comparison, isEven }) {
|
|
|
118
118
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
119
119
|
className: "flex items-center gap-2",
|
|
120
120
|
children: [/* @__PURE__ */ jsx("span", {
|
|
121
|
-
className: "font-medium text-
|
|
121
|
+
className: "font-medium text-[var(--text-primary)] truncate",
|
|
122
122
|
children: name
|
|
123
123
|
}), /* @__PURE__ */ jsx(DiffBadge, { percentage: diffPercentage })]
|
|
124
124
|
}), /* @__PURE__ */ jsx(MetaInfo, { properties })]
|
|
@@ -126,7 +126,7 @@ function FailedComparison({ comparison, isEven }) {
|
|
|
126
126
|
/* @__PURE__ */ jsxs("div", {
|
|
127
127
|
className: "flex items-center gap-3",
|
|
128
128
|
children: [/* @__PURE__ */ jsx(StatusBadge, { status }), /* @__PURE__ */ jsxs("div", {
|
|
129
|
-
className: "flex items-center gap-1.5 text-
|
|
129
|
+
className: "flex items-center gap-1.5 text-[var(--text-muted)] group-hover:text-[var(--text-tertiary)] transition-colors",
|
|
130
130
|
children: [/* @__PURE__ */ jsx("span", {
|
|
131
131
|
className: "text-xs hidden sm:inline opacity-0 group-hover:opacity-100 transition-opacity",
|
|
132
132
|
children: "Details"
|
|
@@ -147,23 +147,23 @@ function FailedComparison({ comparison, isEven }) {
|
|
|
147
147
|
})
|
|
148
148
|
]
|
|
149
149
|
}), /* @__PURE__ */ jsxs("div", {
|
|
150
|
-
className: "mt-1 p-4 bg-
|
|
150
|
+
className: "mt-1 p-4 bg-[var(--vz-surface)] rounded-lg border border-[var(--vz-border-subtle)] animate-[fadeIn_150ms_ease-out]",
|
|
151
151
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
152
152
|
className: "grid grid-cols-1 lg:grid-cols-2 gap-4",
|
|
153
153
|
children: [baseline && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("div", {
|
|
154
154
|
className: "flex items-center gap-2 mb-2",
|
|
155
155
|
children: [/* @__PURE__ */ jsx("span", {
|
|
156
|
-
className: "text-xs font-medium text-
|
|
156
|
+
className: "text-xs font-medium text-[var(--text-tertiary)] uppercase tracking-wider",
|
|
157
157
|
children: "Baseline"
|
|
158
158
|
}), /* @__PURE__ */ jsx("span", {
|
|
159
|
-
className: "text-xs text-
|
|
159
|
+
className: "text-xs text-[var(--text-muted)]",
|
|
160
160
|
children: "Expected"
|
|
161
161
|
})]
|
|
162
162
|
}), /* @__PURE__ */ jsx("a", {
|
|
163
163
|
href: baseline,
|
|
164
164
|
target: "_blank",
|
|
165
165
|
rel: "noopener noreferrer",
|
|
166
|
-
className: "block rounded-lg overflow-hidden border border-
|
|
166
|
+
className: "block rounded-lg overflow-hidden border border-[var(--vz-border-subtle)] hover:border-[var(--vz-border-strong)] transition-colors",
|
|
167
167
|
children: /* @__PURE__ */ jsx("img", {
|
|
168
168
|
src: baseline,
|
|
169
169
|
alt: `${name} baseline`,
|
|
@@ -172,17 +172,17 @@ function FailedComparison({ comparison, isEven }) {
|
|
|
172
172
|
})] }), current && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("div", {
|
|
173
173
|
className: "flex items-center gap-2 mb-2",
|
|
174
174
|
children: [/* @__PURE__ */ jsx("span", {
|
|
175
|
-
className: "text-xs font-medium text-
|
|
175
|
+
className: "text-xs font-medium text-[var(--text-tertiary)] uppercase tracking-wider",
|
|
176
176
|
children: "Current"
|
|
177
177
|
}), /* @__PURE__ */ jsx("span", {
|
|
178
|
-
className: "text-xs text-
|
|
178
|
+
className: "text-xs text-[var(--text-muted)]",
|
|
179
179
|
children: "Actual"
|
|
180
180
|
})]
|
|
181
181
|
}), /* @__PURE__ */ jsx("a", {
|
|
182
182
|
href: current,
|
|
183
183
|
target: "_blank",
|
|
184
184
|
rel: "noopener noreferrer",
|
|
185
|
-
className: "block rounded-lg overflow-hidden border border-
|
|
185
|
+
className: "block rounded-lg overflow-hidden border border-[var(--vz-border-subtle)] hover:border-[var(--vz-border-strong)] transition-colors",
|
|
186
186
|
children: /* @__PURE__ */ jsx("img", {
|
|
187
187
|
src: current,
|
|
188
188
|
alt: `${name} current`,
|
|
@@ -190,21 +190,21 @@ function FailedComparison({ comparison, isEven }) {
|
|
|
190
190
|
})
|
|
191
191
|
})] })]
|
|
192
192
|
}), diff && /* @__PURE__ */ jsxs("div", {
|
|
193
|
-
className: "mt-4 pt-4 border-t border-
|
|
193
|
+
className: "mt-4 pt-4 border-t border-[var(--vz-border-subtle)]",
|
|
194
194
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
195
195
|
className: "flex items-center gap-2 mb-2",
|
|
196
196
|
children: [/* @__PURE__ */ jsx("span", {
|
|
197
|
-
className: "text-xs font-medium text-
|
|
197
|
+
className: "text-xs font-medium text-[var(--accent-danger)] uppercase tracking-wider",
|
|
198
198
|
children: "Difference"
|
|
199
199
|
}), diffPercentage > 0 && /* @__PURE__ */ jsxs("span", {
|
|
200
|
-
className: "text-xs text-
|
|
200
|
+
className: "text-xs text-[color-mix(in_srgb,var(--accent-danger)_70%,transparent)] font-mono",
|
|
201
201
|
children: [diffPercentage.toFixed(2), "% of pixels changed"]
|
|
202
202
|
})]
|
|
203
203
|
}), /* @__PURE__ */ jsx("a", {
|
|
204
204
|
href: diff,
|
|
205
205
|
target: "_blank",
|
|
206
206
|
rel: "noopener noreferrer",
|
|
207
|
-
className: "block rounded-lg overflow-hidden border border-
|
|
207
|
+
className: "block rounded-lg overflow-hidden border border-[color-mix(in_srgb,var(--accent-danger)_32%,transparent)] hover:border-[color-mix(in_srgb,var(--accent-danger)_52%,transparent)] transition-colors max-w-2xl",
|
|
208
208
|
children: /* @__PURE__ */ jsx("img", {
|
|
209
209
|
src: diff,
|
|
210
210
|
alt: `${name} diff`,
|
|
@@ -227,16 +227,16 @@ function NewComparison({ comparison, isEven }) {
|
|
|
227
227
|
children: [/* @__PURE__ */ jsxs("summary", {
|
|
228
228
|
className: `
|
|
229
229
|
flex items-center gap-4 p-4 cursor-pointer
|
|
230
|
-
${isEven ? "bg-
|
|
231
|
-
hover:bg-
|
|
232
|
-
border-l-4 border-l-
|
|
230
|
+
${isEven ? "bg-[var(--vz-surface)]" : "bg-[var(--vz-elevated)]"}
|
|
231
|
+
hover:bg-[var(--vz-raised)]
|
|
232
|
+
border-l-4 border-l-[var(--accent-media)]
|
|
233
233
|
rounded-r-lg transition-all duration-150
|
|
234
234
|
list-none [&::-webkit-details-marker]:hidden
|
|
235
|
-
focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-
|
|
235
|
+
focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[color-mix(in_srgb,var(--accent-brand)_50%,transparent)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--vz-bg)]
|
|
236
236
|
`,
|
|
237
237
|
children: [
|
|
238
238
|
/* @__PURE__ */ jsx("div", {
|
|
239
|
-
className: "w-16 h-10 flex-shrink-0 rounded overflow-hidden bg-
|
|
239
|
+
className: "w-16 h-10 flex-shrink-0 rounded overflow-hidden bg-[var(--vz-bg)]",
|
|
240
240
|
children: imageSrc && /* @__PURE__ */ jsx("img", {
|
|
241
241
|
src: imageSrc,
|
|
242
242
|
alt: "",
|
|
@@ -246,14 +246,14 @@ function NewComparison({ comparison, isEven }) {
|
|
|
246
246
|
/* @__PURE__ */ jsxs("div", {
|
|
247
247
|
className: "flex-1 min-w-0",
|
|
248
248
|
children: [/* @__PURE__ */ jsx("span", {
|
|
249
|
-
className: "font-medium text-
|
|
249
|
+
className: "font-medium text-[var(--text-primary)] truncate block",
|
|
250
250
|
children: name
|
|
251
251
|
}), /* @__PURE__ */ jsx(MetaInfo, { properties })]
|
|
252
252
|
}),
|
|
253
253
|
/* @__PURE__ */ jsxs("div", {
|
|
254
254
|
className: "flex items-center gap-3",
|
|
255
255
|
children: [/* @__PURE__ */ jsx(StatusBadge, { status: "new" }), /* @__PURE__ */ jsxs("div", {
|
|
256
|
-
className: "flex items-center gap-1.5 text-
|
|
256
|
+
className: "flex items-center gap-1.5 text-[var(--text-muted)] group-hover:text-[var(--text-tertiary)] transition-colors",
|
|
257
257
|
children: [/* @__PURE__ */ jsx("span", {
|
|
258
258
|
className: "text-xs hidden sm:inline opacity-0 group-hover:opacity-100 transition-opacity",
|
|
259
259
|
children: "Preview"
|
|
@@ -274,21 +274,21 @@ function NewComparison({ comparison, isEven }) {
|
|
|
274
274
|
})
|
|
275
275
|
]
|
|
276
276
|
}), /* @__PURE__ */ jsxs("div", {
|
|
277
|
-
className: "mt-1 p-4 bg-
|
|
277
|
+
className: "mt-1 p-4 bg-[var(--vz-surface)] rounded-lg border border-[var(--vz-border-subtle)] animate-[fadeIn_150ms_ease-out]",
|
|
278
278
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
279
279
|
className: "flex items-center gap-2 mb-2",
|
|
280
280
|
children: [/* @__PURE__ */ jsx("span", {
|
|
281
|
-
className: "text-xs font-medium text-
|
|
281
|
+
className: "text-xs font-medium text-[var(--accent-media)] uppercase tracking-wider",
|
|
282
282
|
children: "New Screenshot"
|
|
283
283
|
}), /* @__PURE__ */ jsx("span", {
|
|
284
|
-
className: "text-xs text-
|
|
284
|
+
className: "text-xs text-[var(--text-muted)]",
|
|
285
285
|
children: "No baseline to compare"
|
|
286
286
|
})]
|
|
287
287
|
}), imageSrc && /* @__PURE__ */ jsx("a", {
|
|
288
288
|
href: imageSrc,
|
|
289
289
|
target: "_blank",
|
|
290
290
|
rel: "noopener noreferrer",
|
|
291
|
-
className: "block rounded-lg overflow-hidden border border-
|
|
291
|
+
className: "block rounded-lg overflow-hidden border border-[color-mix(in_srgb,var(--accent-media)_32%,transparent)] hover:border-[color-mix(in_srgb,var(--accent-media)_52%,transparent)] transition-colors max-w-2xl",
|
|
292
292
|
children: /* @__PURE__ */ jsx("img", {
|
|
293
293
|
src: imageSrc,
|
|
294
294
|
alt: name,
|
|
@@ -306,15 +306,15 @@ function PassedComparison({ comparison }) {
|
|
|
306
306
|
return /* @__PURE__ */ jsxs("div", {
|
|
307
307
|
className: `
|
|
308
308
|
flex items-center gap-3 px-4 py-2.5
|
|
309
|
-
bg-
|
|
310
|
-
border-l-4 border-l-
|
|
309
|
+
bg-[var(--vz-surface)] hover:bg-[var(--vz-raised)]
|
|
310
|
+
border-l-4 border-l-[color-mix(in_srgb,var(--accent-success)_50%,transparent)]
|
|
311
311
|
rounded-r-lg transition-colors
|
|
312
312
|
`,
|
|
313
313
|
children: [
|
|
314
314
|
/* @__PURE__ */ jsx("div", {
|
|
315
|
-
className: "w-5 h-5 rounded-full bg-
|
|
315
|
+
className: "w-5 h-5 rounded-full bg-[var(--accent-success-muted)] flex items-center justify-center flex-shrink-0",
|
|
316
316
|
children: /* @__PURE__ */ jsx("svg", {
|
|
317
|
-
className: "w-3 h-3 text-
|
|
317
|
+
className: "w-3 h-3 text-[var(--accent-success)]",
|
|
318
318
|
fill: "currentColor",
|
|
319
319
|
viewBox: "0 0 20 20",
|
|
320
320
|
"aria-hidden": "true",
|
|
@@ -326,7 +326,7 @@ function PassedComparison({ comparison }) {
|
|
|
326
326
|
})
|
|
327
327
|
}),
|
|
328
328
|
/* @__PURE__ */ jsx("span", {
|
|
329
|
-
className: "flex-1 text-sm text-
|
|
329
|
+
className: "flex-1 text-sm text-[var(--text-secondary)] truncate",
|
|
330
330
|
children: name
|
|
331
331
|
}),
|
|
332
332
|
/* @__PURE__ */ jsx(MetaInfo, { properties })
|
|
@@ -346,11 +346,11 @@ function SectionHeader({ title, count, icon, colorClass }) {
|
|
|
346
346
|
children: icon
|
|
347
347
|
}),
|
|
348
348
|
/* @__PURE__ */ jsx("h3", {
|
|
349
|
-
className: "text-sm font-semibold text-
|
|
349
|
+
className: "text-sm font-semibold text-[var(--text-secondary)] uppercase tracking-wider",
|
|
350
350
|
children: title
|
|
351
351
|
}),
|
|
352
352
|
/* @__PURE__ */ jsxs("span", {
|
|
353
|
-
className: "text-sm text-
|
|
353
|
+
className: "text-sm text-[var(--text-muted)] font-mono",
|
|
354
354
|
children: [
|
|
355
355
|
"(",
|
|
356
356
|
count,
|
|
@@ -368,26 +368,26 @@ function SummaryBar({ stats }) {
|
|
|
368
368
|
return /* @__PURE__ */ jsxs("div", {
|
|
369
369
|
className: `
|
|
370
370
|
flex flex-wrap items-center gap-6 p-4 rounded-xl mb-8
|
|
371
|
-
${hasIssues ? "bg-
|
|
371
|
+
${hasIssues ? "bg-[var(--vz-surface)] border border-[var(--vz-border)]" : "bg-[var(--accent-success-muted)] border border-[color-mix(in_srgb,var(--accent-success)_24%,transparent)]"}
|
|
372
372
|
`,
|
|
373
373
|
children: [/* @__PURE__ */ jsx("div", {
|
|
374
374
|
className: "flex items-center gap-3",
|
|
375
375
|
children: hasIssues ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("div", {
|
|
376
|
-
className: "w-10 h-10 rounded-full bg-
|
|
376
|
+
className: "w-10 h-10 rounded-full bg-[var(--accent-warning-muted)] flex items-center justify-center",
|
|
377
377
|
children: /* @__PURE__ */ jsx("span", {
|
|
378
|
-
className: "text-
|
|
378
|
+
className: "text-[var(--accent-warning)] text-lg",
|
|
379
379
|
children: "◐"
|
|
380
380
|
})
|
|
381
381
|
}), /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
|
|
382
|
-
className: "text-
|
|
382
|
+
className: "text-[var(--text-primary)] font-semibold",
|
|
383
383
|
children: "Review Required"
|
|
384
384
|
}), /* @__PURE__ */ jsxs("div", {
|
|
385
|
-
className: "text-sm text-
|
|
385
|
+
className: "text-sm text-[var(--text-tertiary)]",
|
|
386
386
|
children: [stats.failed + (stats.new || 0), " items need attention"]
|
|
387
387
|
})] })] }) : /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("div", {
|
|
388
|
-
className: "w-10 h-10 rounded-full bg-
|
|
388
|
+
className: "w-10 h-10 rounded-full bg-[var(--accent-success-muted)] flex items-center justify-center",
|
|
389
389
|
children: /* @__PURE__ */ jsx("svg", {
|
|
390
|
-
className: "w-5 h-5 text-
|
|
390
|
+
className: "w-5 h-5 text-[var(--accent-success)]",
|
|
391
391
|
fill: "currentColor",
|
|
392
392
|
viewBox: "0 0 20 20",
|
|
393
393
|
"aria-hidden": "true",
|
|
@@ -398,10 +398,10 @@ function SummaryBar({ stats }) {
|
|
|
398
398
|
})
|
|
399
399
|
})
|
|
400
400
|
}), /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
|
|
401
|
-
className: "text-
|
|
401
|
+
className: "text-[var(--text-primary)] font-semibold",
|
|
402
402
|
children: "All Tests Passed"
|
|
403
403
|
}), /* @__PURE__ */ jsx("div", {
|
|
404
|
-
className: "text-sm text-
|
|
404
|
+
className: "text-sm text-[var(--text-tertiary)]",
|
|
405
405
|
children: "No visual changes detected"
|
|
406
406
|
})] })] })
|
|
407
407
|
}), /* @__PURE__ */ jsxs("div", {
|
|
@@ -410,40 +410,40 @@ function SummaryBar({ stats }) {
|
|
|
410
410
|
/* @__PURE__ */ jsxs("div", {
|
|
411
411
|
className: "text-center",
|
|
412
412
|
children: [/* @__PURE__ */ jsx("div", {
|
|
413
|
-
className: "text-2xl font-bold text-
|
|
413
|
+
className: "text-2xl font-bold text-[var(--text-primary)] tabular-nums",
|
|
414
414
|
children: stats.total
|
|
415
415
|
}), /* @__PURE__ */ jsx("div", {
|
|
416
|
-
className: "text-xs text-
|
|
416
|
+
className: "text-xs text-[var(--text-muted)] uppercase tracking-wider",
|
|
417
417
|
children: "Total"
|
|
418
418
|
})]
|
|
419
419
|
}),
|
|
420
420
|
/* @__PURE__ */ jsxs("div", {
|
|
421
421
|
className: "text-center",
|
|
422
422
|
children: [/* @__PURE__ */ jsx("div", {
|
|
423
|
-
className: "text-2xl font-bold text-
|
|
423
|
+
className: "text-2xl font-bold text-[var(--accent-success)] tabular-nums",
|
|
424
424
|
children: stats.passed
|
|
425
425
|
}), /* @__PURE__ */ jsx("div", {
|
|
426
|
-
className: "text-xs text-
|
|
426
|
+
className: "text-xs text-[var(--text-muted)] uppercase tracking-wider",
|
|
427
427
|
children: "Passed"
|
|
428
428
|
})]
|
|
429
429
|
}),
|
|
430
430
|
stats.failed > 0 && /* @__PURE__ */ jsxs("div", {
|
|
431
431
|
className: "text-center",
|
|
432
432
|
children: [/* @__PURE__ */ jsx("div", {
|
|
433
|
-
className: "text-2xl font-bold text-
|
|
433
|
+
className: "text-2xl font-bold text-[var(--accent-danger)] tabular-nums",
|
|
434
434
|
children: stats.failed
|
|
435
435
|
}), /* @__PURE__ */ jsx("div", {
|
|
436
|
-
className: "text-xs text-
|
|
436
|
+
className: "text-xs text-[var(--text-muted)] uppercase tracking-wider",
|
|
437
437
|
children: "Changed"
|
|
438
438
|
})]
|
|
439
439
|
}),
|
|
440
440
|
(stats.new || 0) > 0 && /* @__PURE__ */ jsxs("div", {
|
|
441
441
|
className: "text-center",
|
|
442
442
|
children: [/* @__PURE__ */ jsx("div", {
|
|
443
|
-
className: "text-2xl font-bold text-
|
|
443
|
+
className: "text-2xl font-bold text-[var(--accent-media)] tabular-nums",
|
|
444
444
|
children: stats.new
|
|
445
445
|
}), /* @__PURE__ */ jsx("div", {
|
|
446
|
-
className: "text-xs text-
|
|
446
|
+
className: "text-xs text-[var(--text-muted)] uppercase tracking-wider",
|
|
447
447
|
children: "New"
|
|
448
448
|
})]
|
|
449
449
|
})
|
|
@@ -463,15 +463,15 @@ function formatTimestamp(timestamp) {
|
|
|
463
463
|
}
|
|
464
464
|
function Header({ timestamp }) {
|
|
465
465
|
return /* @__PURE__ */ jsx("header", {
|
|
466
|
-
className: "bg-
|
|
466
|
+
className: "bg-[var(--vz-bg)] border-b border-[var(--vz-border-subtle)] sticky top-0 z-10",
|
|
467
467
|
children: /* @__PURE__ */ jsxs("div", {
|
|
468
468
|
className: "max-w-6xl mx-auto px-6 py-4 flex items-center justify-between",
|
|
469
469
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
470
470
|
className: "flex items-center gap-3",
|
|
471
471
|
children: [/* @__PURE__ */ jsx("div", {
|
|
472
|
-
className: "w-9 h-9 bg-
|
|
472
|
+
className: "w-9 h-9 bg-[var(--accent-brand)] rounded-lg flex items-center justify-center",
|
|
473
473
|
children: /* @__PURE__ */ jsxs("svg", {
|
|
474
|
-
className: "w-5 h-5 text-
|
|
474
|
+
className: "w-5 h-5 text-[var(--vz-bg)]",
|
|
475
475
|
viewBox: "0 0 24 24",
|
|
476
476
|
fill: "currentColor",
|
|
477
477
|
"aria-hidden": "true",
|
|
@@ -482,14 +482,14 @@ function Header({ timestamp }) {
|
|
|
482
482
|
}), /* @__PURE__ */ jsx("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z" })]
|
|
483
483
|
})
|
|
484
484
|
}), /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
|
|
485
|
-
className: "text-lg font-semibold text-
|
|
485
|
+
className: "text-lg font-semibold text-[var(--text-primary)] tracking-tight",
|
|
486
486
|
children: "Vizzly"
|
|
487
487
|
}), /* @__PURE__ */ jsx("div", {
|
|
488
|
-
className: "text-xs text-
|
|
488
|
+
className: "text-xs text-[var(--text-muted)]",
|
|
489
489
|
children: "Visual Test Report"
|
|
490
490
|
})] })]
|
|
491
491
|
}), timestamp && /* @__PURE__ */ jsx("div", {
|
|
492
|
-
className: "text-xs text-
|
|
492
|
+
className: "text-xs text-[var(--text-muted)] tabular-nums",
|
|
493
493
|
children: formatTimestamp(timestamp)
|
|
494
494
|
})]
|
|
495
495
|
})
|
|
@@ -497,14 +497,14 @@ function Header({ timestamp }) {
|
|
|
497
497
|
}
|
|
498
498
|
function StaticReportView({ reportData }) {
|
|
499
499
|
if (!reportData?.comparisons) return /* @__PURE__ */ jsx("div", {
|
|
500
|
-
className: "min-h-screen bg-
|
|
500
|
+
className: "min-h-screen bg-[var(--vz-bg)] text-[var(--text-primary)] flex items-center justify-center",
|
|
501
501
|
children: /* @__PURE__ */ jsxs("div", {
|
|
502
502
|
className: "text-center",
|
|
503
503
|
children: [/* @__PURE__ */ jsx("div", {
|
|
504
504
|
className: "text-xl font-medium mb-2",
|
|
505
505
|
children: "No Report Data"
|
|
506
506
|
}), /* @__PURE__ */ jsx("p", {
|
|
507
|
-
className: "text-
|
|
507
|
+
className: "text-[var(--text-tertiary)]",
|
|
508
508
|
children: "No comparison data available for this report."
|
|
509
509
|
})]
|
|
510
510
|
})
|
|
@@ -522,7 +522,7 @@ function StaticReportView({ reportData }) {
|
|
|
522
522
|
let passed = comparisons.filter((c) => c.status === "passed");
|
|
523
523
|
let errors = comparisons.filter((c) => c.status === "error");
|
|
524
524
|
return /* @__PURE__ */ jsxs("div", {
|
|
525
|
-
className: "min-h-screen bg-
|
|
525
|
+
className: "min-h-screen bg-[var(--vz-bg)] text-[var(--text-primary)]",
|
|
526
526
|
children: [/* @__PURE__ */ jsx(Header, { timestamp: reportData.timestamp }), /* @__PURE__ */ jsxs("main", {
|
|
527
527
|
className: "max-w-6xl mx-auto px-6 py-8",
|
|
528
528
|
children: [
|
|
@@ -533,7 +533,7 @@ function StaticReportView({ reportData }) {
|
|
|
533
533
|
title: "Visual Changes",
|
|
534
534
|
count: failed.length,
|
|
535
535
|
icon: "◐",
|
|
536
|
-
colorClass: "text-
|
|
536
|
+
colorClass: "text-[var(--accent-danger)]"
|
|
537
537
|
}), /* @__PURE__ */ jsx("div", {
|
|
538
538
|
className: "space-y-2",
|
|
539
539
|
children: failed.map((comparison, index) => /* @__PURE__ */ jsx(FailedComparison, {
|
|
@@ -548,7 +548,7 @@ function StaticReportView({ reportData }) {
|
|
|
548
548
|
title: "New Screenshots",
|
|
549
549
|
count: newItems.length,
|
|
550
550
|
icon: "+",
|
|
551
|
-
colorClass: "text-
|
|
551
|
+
colorClass: "text-[var(--accent-media)]"
|
|
552
552
|
}), /* @__PURE__ */ jsx("div", {
|
|
553
553
|
className: "space-y-2",
|
|
554
554
|
children: newItems.map((comparison, index) => /* @__PURE__ */ jsx(NewComparison, {
|
|
@@ -563,7 +563,7 @@ function StaticReportView({ reportData }) {
|
|
|
563
563
|
title: "Errors",
|
|
564
564
|
count: errors.length,
|
|
565
565
|
icon: "!",
|
|
566
|
-
colorClass: "text-
|
|
566
|
+
colorClass: "text-[var(--accent-warning)]"
|
|
567
567
|
}), /* @__PURE__ */ jsx("div", {
|
|
568
568
|
className: "space-y-2",
|
|
569
569
|
children: errors.map((comparison, index) => /* @__PURE__ */ jsx(FailedComparison, {
|
|
@@ -582,15 +582,15 @@ function StaticReportView({ reportData }) {
|
|
|
582
582
|
className: "flex items-center gap-3 mb-3",
|
|
583
583
|
children: [
|
|
584
584
|
/* @__PURE__ */ jsx("span", {
|
|
585
|
-
className: "text-lg font-mono text-
|
|
585
|
+
className: "text-lg font-mono text-[var(--accent-success)]",
|
|
586
586
|
children: "✓"
|
|
587
587
|
}),
|
|
588
588
|
/* @__PURE__ */ jsx("h3", {
|
|
589
|
-
className: "text-sm font-semibold text-
|
|
589
|
+
className: "text-sm font-semibold text-[var(--text-secondary)] uppercase tracking-wider",
|
|
590
590
|
children: "Passed"
|
|
591
591
|
}),
|
|
592
592
|
/* @__PURE__ */ jsxs("span", {
|
|
593
|
-
className: "text-sm text-
|
|
593
|
+
className: "text-sm text-[var(--text-muted)] font-mono",
|
|
594
594
|
children: [
|
|
595
595
|
"(",
|
|
596
596
|
passed.length,
|
|
@@ -598,7 +598,7 @@ function StaticReportView({ reportData }) {
|
|
|
598
598
|
]
|
|
599
599
|
}),
|
|
600
600
|
/* @__PURE__ */ jsx("svg", {
|
|
601
|
-
className: "w-4 h-4 text-
|
|
601
|
+
className: "w-4 h-4 text-[var(--text-muted)] transition-transform group-open:rotate-180 ml-auto",
|
|
602
602
|
fill: "none",
|
|
603
603
|
viewBox: "0 0 24 24",
|
|
604
604
|
stroke: "currentColor",
|
|
@@ -619,15 +619,15 @@ function StaticReportView({ reportData }) {
|
|
|
619
619
|
})
|
|
620
620
|
}),
|
|
621
621
|
/* @__PURE__ */ jsx("footer", {
|
|
622
|
-
className: "mt-12 pt-6 border-t border-
|
|
622
|
+
className: "mt-12 pt-6 border-t border-[var(--vz-border-subtle)] text-center",
|
|
623
623
|
children: /* @__PURE__ */ jsxs("p", {
|
|
624
|
-
className: "text-sm text-
|
|
624
|
+
className: "text-sm text-[var(--text-muted)]",
|
|
625
625
|
children: [
|
|
626
626
|
"Visual regression report generated by",
|
|
627
627
|
" ",
|
|
628
628
|
/* @__PURE__ */ jsx("a", {
|
|
629
629
|
href: "https://vizzly.dev",
|
|
630
|
-
className: "text-
|
|
630
|
+
className: "text-[var(--accent-brand)] hover:text-[var(--accent-brand-hover)] transition-colors",
|
|
631
631
|
children: "Vizzly"
|
|
632
632
|
})
|
|
633
633
|
]
|
|
@@ -25,7 +25,7 @@ function getReporterDistPath() {
|
|
|
25
25
|
if (existsSync(join(distPath, 'reporter-bundle.css'))) {
|
|
26
26
|
return distPath;
|
|
27
27
|
}
|
|
28
|
-
throw new Error('Reporter bundle not found. Run "
|
|
28
|
+
throw new Error('Reporter bundle not found. Run "pnpm run build:reporter" first.');
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
/**
|
|
@@ -43,7 +43,7 @@ function getSSRModulePath() {
|
|
|
43
43
|
if (existsSync(ssrPath)) {
|
|
44
44
|
return ssrPath;
|
|
45
45
|
}
|
|
46
|
-
throw new Error('SSR module not found. Run "
|
|
46
|
+
throw new Error('SSR module not found. Run "pnpm run build:reporter-ssr" first.');
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
/**
|
package/dist/tdd/tdd-service.js
CHANGED
|
@@ -317,8 +317,8 @@ export class TddService {
|
|
|
317
317
|
output.warn('No screenshots found in baseline build');
|
|
318
318
|
return null;
|
|
319
319
|
}
|
|
320
|
-
output.info(`Using baseline from build: ${colors.
|
|
321
|
-
output.info(`Checking ${colors.
|
|
320
|
+
output.info(`Using baseline from build: ${colors.info(baselineBuild.name || 'Unknown')} (${baselineBuild.id || 'Unknown ID'})`);
|
|
321
|
+
output.info(`Checking ${colors.info(buildDetails.screenshots.length)} baseline screenshots...`);
|
|
322
322
|
|
|
323
323
|
// Check existing baseline metadata for SHA comparison
|
|
324
324
|
let existingBaseline = await this.loadBaseline();
|
|
@@ -589,8 +589,8 @@ export class TddService {
|
|
|
589
589
|
output.warn('No screenshots found in baseline build');
|
|
590
590
|
return null;
|
|
591
591
|
}
|
|
592
|
-
output.info(`Using baseline from build: ${colors.
|
|
593
|
-
output.info(`Checking ${colors.
|
|
592
|
+
output.info(`Using baseline from build: ${colors.info(baselineBuild.name || 'Unknown')} (${baselineBuild.id || 'Unknown ID'})`);
|
|
593
|
+
output.info(`Checking ${colors.info(buildDetails.screenshots.length)} baseline screenshots...`);
|
|
594
594
|
|
|
595
595
|
// Check existing baseline metadata for SHA comparison
|
|
596
596
|
let existingBaseline = await this.loadBaseline();
|
|
@@ -899,7 +899,7 @@ export class TddService {
|
|
|
899
899
|
}
|
|
900
900
|
return null;
|
|
901
901
|
} else {
|
|
902
|
-
output.info(`Using existing baseline: ${colors.
|
|
902
|
+
output.info(`Using existing baseline: ${colors.info(baseline.buildName)}`);
|
|
903
903
|
return baseline;
|
|
904
904
|
}
|
|
905
905
|
}
|
|
@@ -1169,9 +1169,9 @@ export class TddService {
|
|
|
1169
1169
|
output.print(`🐻 ${colors.bold(results.total)} screenshot${results.total !== 1 ? 's' : ''} compared`);
|
|
1170
1170
|
output.blank();
|
|
1171
1171
|
|
|
1172
|
-
// Passed section - use
|
|
1172
|
+
// Passed section - use BearDen success color
|
|
1173
1173
|
if (results.passed > 0) {
|
|
1174
|
-
let successColor = colors.brand?.success || colors.
|
|
1174
|
+
let successColor = colors.brand?.success || colors.success;
|
|
1175
1175
|
if (output.isVerbose()) {
|
|
1176
1176
|
// Verbose mode: show each screenshot
|
|
1177
1177
|
for (let comp of passedComparisons) {
|
|
@@ -1184,10 +1184,10 @@ export class TddService {
|
|
|
1184
1184
|
output.blank();
|
|
1185
1185
|
}
|
|
1186
1186
|
|
|
1187
|
-
// Failed comparisons with diff bars - use
|
|
1187
|
+
// Failed comparisons with diff bars - use BearDen warning/danger colors
|
|
1188
1188
|
if (failedComparisons.length > 0) {
|
|
1189
1189
|
let warningColor = colors.brand?.warning || colors.yellow;
|
|
1190
|
-
let dangerColor = colors.brand?.danger || colors.
|
|
1190
|
+
let dangerColor = colors.brand?.danger || colors.error;
|
|
1191
1191
|
output.print(` ${warningColor('◐')} ${warningColor(failedComparisons.length)} visual change${failedComparisons.length !== 1 ? 's' : ''} detected`);
|
|
1192
1192
|
|
|
1193
1193
|
// Find longest name for alignment
|
|
@@ -1208,9 +1208,9 @@ export class TddService {
|
|
|
1208
1208
|
output.blank();
|
|
1209
1209
|
}
|
|
1210
1210
|
|
|
1211
|
-
// New screenshots - use
|
|
1211
|
+
// New screenshots - use BearDen info color
|
|
1212
1212
|
if (newComparisons.length > 0) {
|
|
1213
|
-
let infoColor = colors.brand?.info || colors.
|
|
1213
|
+
let infoColor = colors.brand?.info || colors.info;
|
|
1214
1214
|
let textMuted = colors.brand?.textMuted || colors.dim;
|
|
1215
1215
|
output.print(` ${infoColor('+')} ${infoColor(newComparisons.length)} new screenshot${newComparisons.length !== 1 ? 's' : ''}`);
|
|
1216
1216
|
for (let comp of newComparisons) {
|
|
@@ -1219,9 +1219,9 @@ export class TddService {
|
|
|
1219
1219
|
output.blank();
|
|
1220
1220
|
}
|
|
1221
1221
|
|
|
1222
|
-
// Errors - use
|
|
1222
|
+
// Errors - use BearDen danger color
|
|
1223
1223
|
if (results.errors > 0) {
|
|
1224
|
-
let dangerColor = colors.brand?.danger || colors.
|
|
1224
|
+
let dangerColor = colors.brand?.danger || colors.error;
|
|
1225
1225
|
let errorComparisons = this.comparisons.filter(c => c.status === 'error');
|
|
1226
1226
|
output.print(` ${dangerColor('!')} ${dangerColor(results.errors)} error${results.errors !== 1 ? 's' : ''}`);
|
|
1227
1227
|
for (let comp of errorComparisons) {
|
|
@@ -1232,7 +1232,7 @@ export class TddService {
|
|
|
1232
1232
|
|
|
1233
1233
|
// Dashboard link with prominent styling - detect if server is running
|
|
1234
1234
|
if (hasChanges) {
|
|
1235
|
-
let infoColor = colors.brand?.info || colors.
|
|
1235
|
+
let infoColor = colors.brand?.info || colors.info;
|
|
1236
1236
|
let textTertiary = colors.brand?.textTertiary || colors.dim;
|
|
1237
1237
|
|
|
1238
1238
|
// Check if TDD server is already running
|