@rstest/browser 0.7.9 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,81 +1,217 @@
1
1
  (()=>{
2
2
  "use strict";
3
3
  var e, t, s, l, o, a, r = {
4
- 8565 (e, t, s) {
5
- var l = s(8525), o = s(8273), a = s(9413), r = s(9279), i = s(9081), n = s(8181), c = s(3227);
6
- let { Text: d } = c.A, p = (e)=>{
4
+ 3174 (e, t, s) {
5
+ var l = s(8525), o = s(3783), a = s(318), r = s(8100), i = s(9081), n = s(8181);
6
+ let c = (e)=>{
7
7
  let { message: t } = e;
8
8
  return (0, l.jsx)("div", {
9
9
  className: "absolute inset-0 z-10 flex items-center justify-center bg-black/[0.02]",
10
- children: (0, l.jsx)(d, {
11
- type: "secondary",
10
+ children: (0, l.jsx)("span", {
11
+ className: "text-sm text-(--muted-foreground)",
12
12
  children: t
13
13
  })
14
14
  });
15
15
  };
16
- var f = s(5422), u = s(2937);
17
- let { Text: x } = c.A, h = (e)=>{
18
- let { token: t, activeDisplayName: s, statusLabel: o, statusColor: a } = e;
16
+ var d = s(883), p = s(8085), f = s(4107), u = s(8754), x = s(7936);
17
+ let h = (e, t)=>{
18
+ if (!t) return e;
19
+ let s = t.endsWith("/") ? t.slice(0, -1) : t;
20
+ if (e.startsWith(s)) {
21
+ let t = e.slice(s.length);
22
+ return t.startsWith("/") ? t.slice(1) : t;
23
+ }
24
+ return e;
25
+ }, g = (e)=>{
26
+ var t;
27
+ null == (t = window.parent) || t.postMessage({
28
+ type: "open-in-editor",
29
+ payload: {
30
+ file: e
31
+ }
32
+ }, "*"), fetch(`/__open-in-editor?file=${encodeURIComponent(e)}`).catch(()=>{});
33
+ };
34
+ var m = s(2060), j = s(4708), v = s(1458), y = s(902), _ = s(3461);
35
+ let C = {
36
+ idle: {
37
+ label: "Idle",
38
+ color: "var(--accents-5)",
39
+ icon: (0, l.jsx)(m.A, {
40
+ size: 14,
41
+ strokeWidth: 2.5
42
+ })
43
+ },
44
+ running: {
45
+ label: "Running",
46
+ color: "var(--ds-amber-700)",
47
+ icon: (0, l.jsx)(j.A, {
48
+ size: 14,
49
+ className: "animate-spin",
50
+ strokeWidth: 2.5
51
+ })
52
+ },
53
+ pass: {
54
+ label: "Pass",
55
+ color: "var(--ds-green-700)",
56
+ icon: (0, l.jsx)(v.A, {
57
+ size: 14,
58
+ strokeWidth: 2.5
59
+ })
60
+ },
61
+ fail: {
62
+ label: "Fail",
63
+ color: "var(--ds-red-800)",
64
+ icon: (0, l.jsx)(y.A, {
65
+ size: 14,
66
+ strokeWidth: 2.5
67
+ })
68
+ }
69
+ }, F = {
70
+ ...C,
71
+ skip: {
72
+ label: "Skip",
73
+ color: "var(--accents-4)",
74
+ icon: (0, l.jsx)(_.A, {
75
+ size: 14,
76
+ strokeWidth: 2.5
77
+ })
78
+ }
79
+ }, k = (e)=>{
80
+ let { token: t, activeFile: s, rootPath: o, status: a } = e, { message: i } = r.A.useApp(), n = a ? C[a] : void 0, c = s ? h(s, o) : "", m = c.split("/"), j = m.pop(), v = m.join("/"), y = async ()=>{
81
+ c && (await navigator.clipboard.writeText(c), i.success("relative path copied"));
82
+ }, _ = "pass" === a ? "green" : "fail" === a ? "red" : "running" === a ? "amber" : null;
19
83
  return (0, l.jsxs)("div", {
20
- className: "flex h-[52px] items-center justify-between px-4",
84
+ className: "flex h-[48px] items-center justify-between px-4",
85
+ "data-testid": "preview-header",
21
86
  style: {
22
87
  background: t.colorBgContainer,
23
- borderBottom: `1px solid ${t.colorBorderSecondary}`
88
+ borderBottom: `1px solid ${t.colorBorder}`
24
89
  },
25
90
  children: [
26
91
  (0, l.jsxs)("div", {
27
- className: "flex items-center gap-2",
92
+ className: "flex items-center gap-2 overflow-hidden",
28
93
  children: [
29
- (0, l.jsx)("div", {
30
- className: "flex h-7 w-7 items-center justify-center",
31
- style: {
32
- border: `1px solid ${t.colorBorder}`,
33
- borderRadius: t.borderRadiusSM
34
- },
35
- children: (0, l.jsx)(u.A, {
36
- size: 14,
37
- fill: t.colorText
38
- })
94
+ (0, l.jsx)(f.A, {
95
+ size: 16,
96
+ strokeWidth: 2,
97
+ className: "shrink-0 text-(--accents-7)"
39
98
  }),
40
99
  (0, l.jsxs)("div", {
41
- className: "flex flex-col",
100
+ className: "flex items-center gap-1.5 overflow-hidden",
42
101
  children: [
43
- (0, l.jsx)(x, {
44
- type: "secondary",
45
- className: "text-[10px]! tracking-wide",
46
- strong: !0,
47
- children: "PREVIEW"
48
- }),
49
- (0, l.jsx)(x, {
50
- strong: !0,
51
- className: "text-[13px]!",
52
- children: s
102
+ v && (0, l.jsxs)(l.Fragment, {
103
+ children: [
104
+ (0, l.jsx)("span", {
105
+ className: "text-[12px] font-mono tracking-tight text-(--accents-5) truncate max-w-[400px] hover:text-(--accents-6) transition-colors cursor-default",
106
+ title: v,
107
+ children: v
108
+ }),
109
+ (0, l.jsx)("span", {
110
+ className: "text-(--accents-3) font-light select-none shrink-0",
111
+ children: "/"
112
+ })
113
+ ]
114
+ }),
115
+ j ? (0, l.jsxs)("div", {
116
+ className: "flex items-center gap-1.5 shrink-0",
117
+ children: [
118
+ (0, l.jsx)("span", {
119
+ className: "text-[12px] font-mono font-semibold tracking-tight text-foreground",
120
+ children: j
121
+ }),
122
+ s && (0, l.jsxs)("div", {
123
+ className: "flex items-center",
124
+ children: [
125
+ (0, l.jsx)(d.A, {
126
+ title: "Copy relative path",
127
+ mouseLeaveDelay: 0,
128
+ children: (0, l.jsx)(p.Ay, {
129
+ type: "text",
130
+ size: "small",
131
+ className: "flex ml-1 h-5 w-5 items-center justify-center rounded-md p-0 text-(--accents-4) hover:text-foreground hover:bg-(--accents-1) transition-all",
132
+ style: {
133
+ color: t.colorTextDescription
134
+ },
135
+ "data-testid": "preview-copy-path",
136
+ icon: (0, l.jsx)(u.A, {
137
+ size: 12,
138
+ strokeWidth: 2.5
139
+ }),
140
+ onClick: y
141
+ })
142
+ }),
143
+ (0, l.jsx)(d.A, {
144
+ title: "Open in Editor",
145
+ mouseLeaveDelay: 0,
146
+ children: (0, l.jsx)(p.Ay, {
147
+ type: "text",
148
+ size: "small",
149
+ className: "flex h-5 w-5 items-center justify-center rounded-md p-0 text-(--accents-4) hover:text-foreground hover:bg-(--accents-1) transition-all",
150
+ "data-testid": "preview-open-editor",
151
+ icon: (0, l.jsx)(x.A, {
152
+ size: 12,
153
+ strokeWidth: 2.5
154
+ }),
155
+ onClick: ()=>g(s),
156
+ style: {
157
+ color: t.colorTextDescription
158
+ }
159
+ })
160
+ })
161
+ ]
162
+ })
163
+ ]
164
+ }) : (0, l.jsx)("span", {
165
+ className: "text-[13px] tracking-tight text-(--accents-4) shrink-0",
166
+ children: "Select a test file"
53
167
  })
54
168
  ]
55
169
  })
56
170
  ]
57
171
  }),
58
- o && a && (0, l.jsx)(f.A, {
59
- bordered: !1,
60
- color: a,
61
- className: "mr-0! font-semibold! text-black!",
62
- children: o.toUpperCase()
172
+ n && _ && (0, l.jsx)("div", {
173
+ className: "flex items-center rounded-md px-2 py-0.5 text-[10px] font-semibold tracking-wider transition-colors shrink-0",
174
+ style: {
175
+ backgroundColor: `var(--ds-${_}-100)`,
176
+ color: `var(--ds-${_}-900)`,
177
+ border: `1px solid var(--ds-${_}-300)`
178
+ },
179
+ children: n.label.toUpperCase()
63
180
  })
64
181
  ]
65
182
  });
66
183
  };
67
- var j = s(3604);
68
- let g = (e)=>{
69
- let { className: t, style: s, direction: o = "horizontal", children: a, autoSaveId: r, ...n } = e, c = i.Children.toArray(a).filter((e)=>i.isValidElement(e) && e.type === m).map((e)=>{
70
- let { defaultSize: t, minSize: s, maxSize: l, children: o } = e.props;
184
+ var b = s(806);
185
+ let S = (e)=>{
186
+ let { className: t, style: s, direction: o = "horizontal", children: a, autoSaveId: r, ...n } = e, c = i.Children.toArray(a).filter((e)=>i.isValidElement(e) && e.type === w), d = i.useCallback(()=>{
187
+ if (!r) return null;
188
+ try {
189
+ let e = localStorage.getItem(r);
190
+ if (e) {
191
+ let t = JSON.parse(e);
192
+ if (Array.isArray(t) && t.length === c.length) return t;
193
+ }
194
+ } catch {}
195
+ return null;
196
+ }, [
197
+ r,
198
+ c.length
199
+ ])(), p = c.map((e, t)=>{
200
+ let { defaultSize: s, minSize: l, maxSize: o, children: a } = e.props, r = (null == d ? void 0 : d[t]) ?? s;
71
201
  return {
72
- defaultSize: t ? `${t}%` : void 0,
73
- min: s ? `${s}%` : void 0,
74
- max: l ? `${l}%` : void 0,
75
- children: o
202
+ defaultSize: r ? `${r}%` : void 0,
203
+ min: l ? `${l}%` : void 0,
204
+ max: o ? `${o}%` : void 0,
205
+ children: a
76
206
  };
77
- });
78
- return (0, l.jsx)(j.A, {
207
+ }), f = i.useCallback((e)=>{
208
+ if (r) try {
209
+ localStorage.setItem(r, JSON.stringify(e));
210
+ } catch {}
211
+ }, [
212
+ r
213
+ ]);
214
+ return (0, l.jsx)(b.A, {
79
215
  layout: "horizontal" === o ? "horizontal" : "vertical",
80
216
  className: t,
81
217
  style: {
@@ -85,20 +221,21 @@
85
221
  margin: 0,
86
222
  ...s
87
223
  },
224
+ onResizeEnd: f,
88
225
  ...n,
89
- children: c.map((e)=>(0, l.jsx)(j.A.Panel, {
226
+ children: p.map((e)=>(0, l.jsx)(b.A.Panel, {
90
227
  ...e,
91
228
  children: e.children
92
229
  }, `panel-${e.defaultSize}-${e.min}-${e.max}`))
93
230
  });
94
- }, m = (e)=>{
231
+ }, w = (e)=>{
95
232
  let { children: t } = e;
96
233
  return (0, l.jsx)(l.Fragment, {
97
234
  children: t
98
235
  });
99
236
  };
100
- var y = s(626), v = s(4130), _ = s(3462), C = s(5053), F = s(878);
101
- let S = (e)=>(0, l.jsxs)("svg", {
237
+ var A = s(4559), N = s(5053), M = s(878);
238
+ let z = (e)=>(0, l.jsxs)("svg", {
102
239
  xmlns: "http://www.w3.org/2000/svg",
103
240
  fill: "none",
104
241
  viewBox: "0 0 217 200",
@@ -991,263 +1128,247 @@
991
1128
  ]
992
1129
  })
993
1130
  ]
994
- });
995
- var b = s(2060), k = s(4708), w = s(1458), A = s(902), M = s(3461);
996
- let N = {
997
- idle: {
998
- label: "Idle",
999
- color: "#d1d5db",
1000
- icon: (0, l.jsx)(b.A, {
1001
- size: 16,
1002
- strokeWidth: 2.1
1003
- })
1004
- },
1005
- running: {
1006
- label: "Running",
1007
- color: "#f2c94c",
1008
- icon: (0, l.jsx)(k.A, {
1009
- size: 16,
1010
- className: "animate-spin",
1011
- strokeWidth: 2.1
1012
- })
1013
- },
1014
- pass: {
1015
- label: "Pass",
1016
- color: "#4f9c6b",
1017
- icon: (0, l.jsx)(w.A, {
1018
- size: 16,
1019
- strokeWidth: 2.1
1020
- })
1021
- },
1022
- fail: {
1023
- label: "Fail",
1024
- color: "#c94a4a",
1025
- icon: (0, l.jsx)(A.A, {
1026
- size: 16,
1027
- strokeWidth: 2.1
1028
- })
1029
- }
1030
- }, O = {
1031
- ...N,
1032
- skip: {
1033
- label: "Skip",
1034
- color: "#9ca3af",
1035
- icon: (0, l.jsx)(M.A, {
1036
- size: 16,
1037
- strokeWidth: 2.1
1038
- })
1039
- }
1040
- }, z = N.pass.color, U = (e)=>{
1041
- let { themeSwitchLabel: t, isDark: s, onThemeToggle: o, isConnected: a, token: r, progressPercent: i, successPercent: n } = e;
1131
+ }), O = (e)=>{
1132
+ let { theme: t, onThemeToggle: s, isConnected: o, token: a, counts: r } = e, [n, c] = (0, i.useState)(0), f = (0, i.useRef)(r);
1133
+ (0, i.useEffect)(()=>{
1134
+ let e = f.current;
1135
+ if (e.pass !== r.pass || e.fail !== r.fail || e.running !== r.running) {
1136
+ let e = setTimeout(()=>{
1137
+ c((e)=>e + 1);
1138
+ }, 100);
1139
+ return ()=>clearTimeout(e);
1140
+ }
1141
+ f.current = r;
1142
+ }, [
1143
+ r
1144
+ ]);
1145
+ let u = r.idle + r.running + r.pass + r.fail + r.skip, x = (e)=>0 === u ? 0 : e / u * 100, h = x(r.pass), g = x(r.fail), m = x(r.running), j = {
1146
+ system: A.A,
1147
+ light: N.A,
1148
+ dark: M.A
1149
+ }[t];
1042
1150
  return (0, l.jsxs)("div", {
1043
- className: "relative flex h-[52px] items-center justify-between px-3",
1151
+ className: "relative flex h-[48px] items-center justify-between px-4",
1152
+ "data-testid": "sidebar-header",
1044
1153
  style: {
1045
- background: r.colorBgContainer
1154
+ background: a.colorBgContainer
1046
1155
  },
1047
1156
  children: [
1048
- (0, l.jsx)(S, {
1049
- className: "h-7"
1050
- }),
1051
1157
  (0, l.jsxs)("div", {
1052
1158
  className: "flex items-center gap-2",
1053
1159
  children: [
1054
- (0, l.jsx)(y.A, {
1055
- title: a ? "Connected" : "Connecting...",
1160
+ (0, l.jsx)(z, {
1161
+ className: "h-6 transition-all"
1162
+ }),
1163
+ (0, l.jsxs)("div", {
1164
+ className: "flex flex-col leading-none",
1165
+ children: [
1166
+ (0, l.jsx)("span", {
1167
+ className: "text-[13px] font-bold tracking-tight",
1168
+ children: "Rstest"
1169
+ }),
1170
+ (0, l.jsx)("span", {
1171
+ className: "font-mono text-[9px] opacity-40 uppercase tracking-widest",
1172
+ children: "Browser"
1173
+ })
1174
+ ]
1175
+ })
1176
+ ]
1177
+ }),
1178
+ (0, l.jsxs)("div", {
1179
+ className: "flex items-center gap-3",
1180
+ children: [
1181
+ (0, l.jsx)(d.A, {
1182
+ title: o ? "Connected" : "Connecting...",
1056
1183
  mouseLeaveDelay: 0,
1057
1184
  children: (0, l.jsx)("span", {
1058
- className: "inline-flex h-1.5 w-1.5 cursor-default rounded-full",
1185
+ className: "inline-flex h-2 w-2 cursor-default rounded-full",
1059
1186
  style: {
1060
- backgroundColor: a ? z : "#9ca3af",
1061
- boxShadow: a ? `0 0 4px 1px ${z}80` : void 0
1187
+ backgroundColor: o ? "var(--ds-green-700)" : "var(--accents-4)"
1062
1188
  }
1063
1189
  })
1064
1190
  }),
1065
- (0, l.jsx)(y.A, {
1066
- title: t,
1191
+ (0, l.jsx)(d.A, {
1192
+ title: {
1193
+ system: "Theme: System",
1194
+ light: "Theme: Light",
1195
+ dark: "Theme: Dark"
1196
+ }[t],
1067
1197
  mouseLeaveDelay: 0,
1068
- children: (0, l.jsx)(v.Ay, {
1198
+ children: (0, l.jsx)(p.Ay, {
1069
1199
  type: "text",
1070
1200
  size: "small",
1071
- shape: "circle",
1072
- icon: s ? (0, l.jsx)(C.A, {
1073
- size: 14
1074
- }) : (0, l.jsx)(F.A, {
1075
- size: 14
1201
+ className: "flex h-8 w-8 items-center justify-center rounded-md p-0",
1202
+ "data-testid": "theme-toggle",
1203
+ icon: (0, l.jsx)(j, {
1204
+ size: 15,
1205
+ strokeWidth: 2.5
1076
1206
  }),
1077
- onClick: ()=>o(!s)
1207
+ onClick: ()=>{
1208
+ "system" === t ? s("light") : "light" === t ? s("dark") : s("system");
1209
+ },
1210
+ style: {
1211
+ color: a.colorTextDescription
1212
+ }
1078
1213
  })
1079
1214
  })
1080
1215
  ]
1081
1216
  }),
1082
- (0, l.jsx)(_.A, {
1083
- percent: i,
1084
- success: {
1085
- percent: n
1217
+ (0, l.jsxs)("div", {
1218
+ className: "absolute inset-x-0 bottom-0 h-[1px] overflow-hidden",
1219
+ style: {
1220
+ background: "var(--accents-2)"
1086
1221
  },
1087
- showInfo: !1,
1088
- strokeWidth: 2,
1089
- size: "small",
1090
- strokeLinecap: "square",
1091
- strokeColor: "#f87171",
1092
- className: "absolute! inset-x-0 bottom-0 m-0! translate-y-[calc(50%-2px)]"
1222
+ children: [
1223
+ (0, l.jsx)("div", {
1224
+ className: `absolute inset-y-0 left-0 h-full transition-all duration-500 ease-[cubic-bezier(0.4,0,0.2,1)] ${n > 0 ? "progress-flash-active" : ""}`,
1225
+ style: {
1226
+ width: `${h}%`,
1227
+ background: "var(--ds-green-700)",
1228
+ zIndex: 3,
1229
+ color: "var(--ds-green-700)"
1230
+ }
1231
+ }, `pass-${n}`),
1232
+ (0, l.jsx)("div", {
1233
+ className: `absolute inset-y-0 left-0 h-full transition-all duration-500 ease-[cubic-bezier(0.4,0,0.2,1)] ${n > 0 ? "progress-flash-active" : ""}`,
1234
+ style: {
1235
+ width: `${h + g}%`,
1236
+ background: "var(--ds-red-800)",
1237
+ zIndex: 2,
1238
+ color: "var(--ds-red-800)"
1239
+ }
1240
+ }, `fail-${n}`),
1241
+ (0, l.jsx)("div", {
1242
+ className: `absolute inset-y-0 left-0 h-full transition-all duration-500 ease-[cubic-bezier(0.4,0,0.2,1)] ${n > 0 ? "progress-flash-active" : ""}`,
1243
+ style: {
1244
+ width: `${h + g + m}%`,
1245
+ background: "var(--ds-amber-700)",
1246
+ zIndex: 1,
1247
+ color: "var(--ds-amber-700)"
1248
+ }
1249
+ }, `run-${n}`)
1250
+ ]
1093
1251
  })
1094
1252
  ]
1095
1253
  });
1096
1254
  };
1097
- var E = s(7556), P = s(8647), R = s(5862), T = s(1675), B = s(9559);
1098
- let $ = (e)=>{
1099
- let { color: t, isEmpty: s } = e;
1255
+ var U = s(9036), E = s(8647), P = s(5862), R = s(1675), T = s(9559), B = s(8477);
1256
+ let $ = (0, i.memo)((e)=>{
1257
+ let { counts: t, isRunning: s } = e, o = s && 0 === t.running;
1100
1258
  return (0, l.jsx)("div", {
1101
- className: "transition-all duration-150",
1102
- style: {
1103
- width: 3,
1104
- height: 11,
1105
- backgroundColor: s ? "currentColor" : t,
1106
- opacity: s ? .08 : 1,
1107
- borderRadius: 1.5
1108
- }
1109
- });
1110
- }, Z = (e)=>{
1111
- let { counts: t } = e, s = t.idle + t.running + t.pass + t.fail + t.skip, o = 0 === s ? 4 : Math.min(6, Math.max(4, Math.ceil(s / 5))), a = [];
1112
- if (0 === s) for(let e = 0; e < o; e++)a.push({
1113
- color: O.idle.color,
1114
- status: "empty",
1115
- isEmpty: !0
1116
- });
1117
- else {
1118
- let e = [
1119
- "pass",
1120
- "fail",
1121
- "running",
1122
- "skip",
1123
- "idle"
1124
- ], l = {
1125
- pass: 0,
1126
- fail: 0,
1127
- running: 0,
1128
- skip: 0,
1129
- idle: 0
1130
- };
1131
- for (let a of e)l[a] = Math.floor(t[a] / s * o);
1132
- let r = o - Object.values(l).reduce((e, t)=>e + t, 0);
1133
- for (let { status: a } of e.filter((e)=>t[e] > 0).map((e)=>({
1134
- status: e,
1135
- fraction: t[e] / s * o % 1
1136
- })).sort((e, t)=>t.fraction - e.fraction)){
1137
- if (r <= 0) break;
1138
- l[a]++, r--;
1139
- }
1140
- for (let s of e)if (t[s] > 0 && 0 === l[s]) {
1141
- let t = e.filter((e)=>l[e] > 1).sort((e, t)=>l[t] - l[e])[0];
1142
- t && (l[t]--, l[s]++);
1143
- }
1144
- for (let t of e){
1145
- let e = O[t];
1146
- for(let s = 0; s < l[t]; s++)a.push({
1147
- color: e.color,
1148
- status: t
1149
- });
1150
- }
1151
- }
1152
- let r = [
1153
- t.pass > 0 ? `${t.pass} passed` : null,
1154
- t.fail > 0 ? `${t.fail} failed` : null,
1155
- t.running > 0 ? `${t.running} running` : null,
1156
- t.skip > 0 ? `${t.skip} skipped` : null,
1157
- t.idle > 0 ? `${t.idle} pending` : null
1158
- ].filter(Boolean), i = 0 === s ? "No tests" : r.join(" \xb7 "), n = t.fail > 0 ? O.fail.color : t.running > 0 ? O.running.color : t.pass > 0 ? O.pass.color : O.idle.color;
1159
- return (0, l.jsx)(y.A, {
1160
- title: i,
1161
- mouseLeaveDelay: 0,
1162
- children: (0, l.jsxs)("div", {
1163
- className: "flex h-5 cursor-default select-none items-center gap-2",
1259
+ className: "flex h-6 cursor-default select-none items-center",
1260
+ children: (0, l.jsx)("div", {
1261
+ className: "flex items-center gap-1.5",
1164
1262
  children: [
1165
- (0, l.jsx)("div", {
1166
- className: "flex items-center gap-[2px]",
1167
- children: a.map((e, t)=>(0, l.jsx)($, {
1168
- color: e.color,
1169
- isEmpty: e.isEmpty
1170
- }, `${e.status}-${t}`))
1171
- }),
1172
- s > 0 && (0, l.jsxs)("div", {
1173
- className: "flex items-center gap-0.5 font-mono text-xs leading-none tracking-tight",
1263
+ {
1264
+ key: "pass",
1265
+ label: "passed",
1266
+ color: "green"
1267
+ },
1268
+ {
1269
+ key: "fail",
1270
+ label: "failed",
1271
+ color: "red"
1272
+ },
1273
+ {
1274
+ key: "running",
1275
+ label: "running",
1276
+ color: "amber"
1277
+ }
1278
+ ].map((e)=>{
1279
+ let s = t[e.key] || 0, a = "running" === e.key;
1280
+ return (0, l.jsxs)(B.A, {
1281
+ className: `m-0 flex items-center gap-1 px-2 py-0 border-0 ${a && o ? "animate-pulse" : ""}`,
1282
+ style: {
1283
+ display: "flex",
1284
+ alignItems: "center",
1285
+ backgroundColor: `var(--ds-${e.color}-200)`,
1286
+ color: `var(--ds-${e.color}-900)`,
1287
+ borderRadius: "100px",
1288
+ fontSize: "11px",
1289
+ height: "20px",
1290
+ lineHeight: "normal",
1291
+ fontWeight: 700
1292
+ },
1174
1293
  children: [
1175
1294
  (0, l.jsx)("span", {
1295
+ className: "font-mono",
1176
1296
  style: {
1177
- color: n,
1178
- fontWeight: 600,
1179
- fontFeatureSettings: '"tnum"'
1180
- },
1181
- children: t.pass
1182
- }),
1183
- (0, l.jsx)("span", {
1184
- style: {
1185
- opacity: .2
1297
+ fontVariantNumeric: "tabular-nums",
1298
+ fontWeight: "inherit"
1186
1299
  },
1187
- children: "/"
1300
+ children: s
1188
1301
  }),
1189
1302
  (0, l.jsx)("span", {
1303
+ className: "text-[10px] uppercase tracking-wider",
1190
1304
  style: {
1191
- opacity: .45,
1192
- fontFeatureSettings: '"tnum"'
1305
+ fontWeight: "inherit"
1193
1306
  },
1194
- children: s
1307
+ children: e.label
1195
1308
  })
1196
1309
  ]
1197
- })
1198
- ]
1310
+ }, e.label);
1311
+ })
1199
1312
  })
1200
1313
  });
1201
- }, D = (e)=>{
1202
- let { token: t, filterText: s, onFilterChange: o, isAllExpanded: a, onToggleExpandAll: r, onRerun: i, counts: n } = e;
1314
+ }), D = (e)=>{
1315
+ let { token: t, filterText: s, onFilterChange: o, isAllExpanded: a, onToggleExpandAll: r, onRerun: i, counts: n, isRunning: c } = e;
1203
1316
  return (0, l.jsxs)("div", {
1204
- className: "flex flex-col gap-2 px-3 py-2",
1317
+ className: "flex flex-col gap-3 px-4 py-3",
1318
+ "data-testid": "test-files-header",
1205
1319
  style: {
1206
- borderTop: `1px solid ${t.colorBorderSecondary}`,
1207
1320
  background: t.colorBgContainer
1208
1321
  },
1209
1322
  children: [
1210
1323
  (0, l.jsxs)("div", {
1211
1324
  className: "flex items-center justify-between",
1212
1325
  children: [
1213
- (0, l.jsx)(Z, {
1214
- counts: n
1326
+ (0, l.jsx)("div", {
1327
+ children: (0, l.jsx)($, {
1328
+ counts: n,
1329
+ isRunning: c
1330
+ })
1215
1331
  }),
1216
1332
  (0, l.jsxs)("div", {
1217
1333
  className: "flex items-center gap-1",
1218
1334
  children: [
1219
- (0, l.jsx)(y.A, {
1335
+ (0, l.jsx)(d.A, {
1220
1336
  title: a ? "Collapse all" : "Expand all",
1221
1337
  mouseLeaveDelay: 0,
1222
- children: (0, l.jsx)(v.Ay, {
1338
+ children: (0, l.jsx)(p.Ay, {
1223
1339
  type: "text",
1224
1340
  size: "small",
1225
- icon: a ? (0, l.jsx)(P.A, {
1226
- size: 14
1227
- }) : (0, l.jsx)(R.A, {
1228
- size: 14
1341
+ icon: a ? (0, l.jsx)(E.A, {
1342
+ size: 13,
1343
+ strokeWidth: 2.5
1344
+ }) : (0, l.jsx)(P.A, {
1345
+ size: 13,
1346
+ strokeWidth: 2.5
1229
1347
  }),
1230
1348
  onClick: r,
1231
- className: "inline-flex! h-5! w-5! items-center justify-center p-0!",
1349
+ className: "flex h-8 w-8 items-center justify-center rounded-md p-0",
1350
+ "data-testid": "test-files-toggle-expand",
1232
1351
  style: {
1233
- color: t.colorTextSecondary
1352
+ color: t.colorTextDescription
1234
1353
  }
1235
1354
  })
1236
1355
  }),
1237
- (0, l.jsx)(y.A, {
1356
+ (0, l.jsx)(d.A, {
1238
1357
  title: "Re-run all tests",
1239
1358
  mouseLeaveDelay: 0,
1240
- children: (0, l.jsx)(v.Ay, {
1359
+ children: (0, l.jsx)(p.Ay, {
1241
1360
  type: "text",
1242
1361
  size: "small",
1243
- icon: (0, l.jsx)(T.A, {
1244
- size: 14
1362
+ icon: (0, l.jsx)(R.A, {
1363
+ size: 15,
1364
+ strokeWidth: 2.5
1245
1365
  }),
1246
1366
  onClick: i,
1247
1367
  disabled: !i,
1248
- className: "inline-flex! h-5! w-5! items-center justify-center p-0!",
1368
+ className: "flex h-8 w-8 items-center justify-center rounded-md p-0",
1369
+ "data-testid": "test-files-rerun-all",
1249
1370
  style: {
1250
- color: t.colorTextSecondary
1371
+ color: t.colorTextDescription
1251
1372
  }
1252
1373
  })
1253
1374
  })
@@ -1255,145 +1376,157 @@
1255
1376
  })
1256
1377
  ]
1257
1378
  }),
1258
- (0, l.jsx)(E.A, {
1259
- placeholder: "Filter tests...",
1260
- prefix: (0, l.jsx)(B.A, {
1379
+ (0, l.jsx)(U.A, {
1380
+ placeholder: "Search tests...",
1381
+ prefix: (0, l.jsx)(T.A, {
1261
1382
  size: 14,
1262
- className: "text-gray-400"
1383
+ strokeWidth: 2.5,
1384
+ className: "opacity-40"
1263
1385
  }),
1264
1386
  value: s,
1265
1387
  onChange: (e)=>o(e.target.value),
1266
1388
  allowClear: !0,
1267
- size: "small"
1389
+ className: "rounded-md py-1.5",
1390
+ "data-testid": "test-files-search"
1268
1391
  })
1269
1392
  ]
1270
1393
  });
1271
1394
  };
1272
- var L = s(7824), G = s(1690), I = s(851), W = s(8777), q = s(1835);
1273
- let J = [
1395
+ var W = s(1066), Z = s(354), L = s(3232), G = s(8777), I = s(1835);
1396
+ let q = [
1274
1397
  "pass",
1275
1398
  "fail",
1276
1399
  "skip"
1277
- ], K = (e)=>{
1278
- let { icon: t, iconColor: s, status: o, label: a, onRerun: r, buttonTextColor: n } = e, c = (0, i.useRef)(null), [d, p] = (0, i.useState)(0), f = J.includes(o);
1400
+ ], J = (e)=>{
1401
+ let { icon: t, iconColor: s, status: o, label: a, caseId: r, onRerun: n, buttonTextColor: c } = e, f = (0, i.useRef)(null), [u, x] = (0, i.useState)(0), h = q.includes(o);
1279
1402
  return (0, i.useEffect)(()=>{
1280
- f && null !== c.current && c.current !== o && p((e)=>e + 1), c.current = o;
1403
+ h && null !== f.current && f.current !== o && x((e)=>e + 1), f.current = o;
1281
1404
  }, [
1282
1405
  o,
1283
- f
1406
+ h
1284
1407
  ]), (0, l.jsxs)("div", {
1285
1408
  className: "group grid w-full grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-2",
1409
+ "data-testid": "test-case-title",
1410
+ "data-test-case": r,
1286
1411
  children: [
1287
1412
  t && (0, l.jsx)("span", {
1288
- className: `flex shrink-0 ${d > 0 ? "status-icon-flash" : ""}`,
1413
+ className: `flex w-[16px] shrink-0 items-center justify-center ${u > 0 ? "status-icon-flash" : ""}`,
1289
1414
  style: {
1290
1415
  color: s
1291
1416
  },
1292
1417
  children: t
1293
- }, d),
1294
- (0, l.jsx)(y.A, {
1418
+ }, u),
1419
+ (0, l.jsx)(d.A, {
1295
1420
  title: a,
1296
1421
  mouseLeaveDelay: 0,
1297
1422
  children: (0, l.jsx)("span", {
1298
- className: "truncate text-[13px]",
1423
+ className: "truncate text-[13px] tracking-tight opacity-70",
1299
1424
  children: a
1300
1425
  })
1301
1426
  }),
1302
1427
  (0, l.jsx)("div", {
1303
1428
  className: "opacity-0 transition-opacity duration-200 group-hover:opacity-100",
1304
- children: (0, l.jsx)(y.A, {
1429
+ children: (0, l.jsx)(d.A, {
1305
1430
  title: "Re-run this test",
1306
1431
  mouseLeaveDelay: 0,
1307
- children: (0, l.jsx)(v.Ay, {
1432
+ children: (0, l.jsx)(p.Ay, {
1308
1433
  type: "text",
1309
1434
  size: "small",
1310
- icon: (0, l.jsx)(T.A, {
1311
- size: 14
1435
+ icon: (0, l.jsx)(R.A, {
1436
+ size: 14,
1437
+ strokeWidth: 2.5
1312
1438
  }),
1313
- disabled: !r,
1439
+ disabled: !n,
1314
1440
  onClick: (e)=>{
1315
- e.stopPropagation(), null == r || r();
1441
+ e.stopPropagation(), null == n || n();
1316
1442
  },
1317
- className: "inline-flex! h-5! w-5! items-center justify-center p-0!",
1443
+ className: "inline-flex h-5 w-5 items-center justify-center p-0",
1444
+ "data-testid": "test-case-rerun",
1318
1445
  style: {
1319
- color: n
1446
+ color: c
1320
1447
  }
1321
1448
  })
1322
1449
  })
1323
1450
  })
1324
1451
  ]
1325
1452
  });
1326
- };
1327
- var V = s(7936);
1328
- let H = [
1453
+ }, H = [
1329
1454
  "pass",
1330
1455
  "fail"
1331
- ], Q = (e)=>{
1332
- let { icon: t, iconColor: s, status: o, relativePath: a, onOpen: r, onRerun: n, textColor: c } = e, d = (0, i.useRef)(null), [p, f] = (0, i.useState)(0), u = H.includes(o);
1456
+ ], K = (e)=>{
1457
+ let { icon: t, iconColor: s, status: o, relativePath: a, filePath: r, onOpen: n, onRerun: c, textColor: f } = e, u = (0, i.useRef)(null), [h, g] = (0, i.useState)(0), m = H.includes(o);
1333
1458
  return (0, i.useEffect)(()=>{
1334
- u && null !== d.current && d.current !== o && f((e)=>e + 1), d.current = o;
1459
+ m && null !== u.current && u.current !== o && g((e)=>e + 1), u.current = o;
1335
1460
  }, [
1336
1461
  o,
1337
- u
1462
+ m
1338
1463
  ]), (0, l.jsxs)("div", {
1339
1464
  className: "group grid w-full grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-2",
1465
+ "data-testid": "test-file-title",
1466
+ "data-test-file": r,
1340
1467
  children: [
1341
1468
  (0, l.jsx)("span", {
1342
- className: `flex w-[18px] shrink-0 ${p > 0 ? "status-icon-flash" : ""}`,
1469
+ className: `flex w-[16px] shrink-0 items-center justify-center ${h > 0 ? "status-icon-flash" : ""}`,
1343
1470
  style: {
1344
1471
  color: s
1345
1472
  },
1346
1473
  children: t
1347
- }, p),
1348
- (0, l.jsx)(y.A, {
1474
+ }, h),
1475
+ (0, l.jsx)(d.A, {
1349
1476
  title: a,
1350
- overlayInnerStyle: {
1351
- whiteSpace: "nowrap",
1352
- maxWidth: "none"
1477
+ styles: {
1478
+ container: {
1479
+ whiteSpace: "nowrap",
1480
+ maxWidth: "none"
1481
+ }
1353
1482
  },
1354
1483
  mouseLeaveDelay: 0,
1355
1484
  children: (0, l.jsx)("span", {
1356
- className: "truncate text-[13px] font-semibold",
1485
+ className: "truncate font-mono text-[12px] font-medium tracking-tight opacity-90",
1357
1486
  children: a
1358
1487
  })
1359
1488
  }),
1360
1489
  (0, l.jsxs)("div", {
1361
1490
  className: "flex items-center gap-1 opacity-0 transition-opacity duration-200 group-hover:opacity-100",
1362
1491
  children: [
1363
- (0, l.jsx)(y.A, {
1492
+ (0, l.jsx)(d.A, {
1364
1493
  title: "Open in editor",
1365
1494
  mouseLeaveDelay: 0,
1366
- children: (0, l.jsx)(v.Ay, {
1495
+ children: (0, l.jsx)(p.Ay, {
1367
1496
  type: "text",
1368
1497
  size: "small",
1369
- icon: (0, l.jsx)(V.A, {
1370
- size: 14
1498
+ icon: (0, l.jsx)(x.A, {
1499
+ size: 14,
1500
+ strokeWidth: 2.5
1371
1501
  }),
1372
1502
  onClick: (e)=>{
1373
- e.stopPropagation(), r();
1503
+ e.stopPropagation(), n();
1374
1504
  },
1375
- className: "inline-flex! h-5! w-5! items-center justify-center p-0!",
1505
+ className: "inline-flex h-5 w-5 items-center justify-center p-0",
1506
+ "data-testid": "test-file-open-editor",
1376
1507
  style: {
1377
- color: c
1508
+ color: f
1378
1509
  }
1379
1510
  })
1380
1511
  }),
1381
- (0, l.jsx)(y.A, {
1512
+ (0, l.jsx)(d.A, {
1382
1513
  title: "Re-run this file",
1383
1514
  mouseLeaveDelay: 0,
1384
- children: (0, l.jsx)(v.Ay, {
1515
+ children: (0, l.jsx)(p.Ay, {
1385
1516
  type: "text",
1386
1517
  size: "small",
1387
- icon: (0, l.jsx)(T.A, {
1388
- size: 14
1518
+ icon: (0, l.jsx)(R.A, {
1519
+ size: 14,
1520
+ strokeWidth: 2.5
1389
1521
  }),
1390
- disabled: !n,
1522
+ disabled: !c,
1391
1523
  onClick: (e)=>{
1392
- e.stopPropagation(), null == n || n();
1524
+ e.stopPropagation(), null == c || c();
1393
1525
  },
1394
- className: "inline-flex! h-5! w-5! items-center justify-center p-0!",
1526
+ className: "inline-flex h-5 w-5 items-center justify-center p-0",
1527
+ "data-testid": "test-file-rerun",
1395
1528
  style: {
1396
- color: c
1529
+ color: f
1397
1530
  }
1398
1531
  })
1399
1532
  })
@@ -1401,61 +1534,65 @@
1401
1534
  })
1402
1535
  ]
1403
1536
  });
1404
- }, X = [
1537
+ }, V = [
1405
1538
  "pass",
1406
1539
  "fail",
1407
1540
  "skip"
1408
- ], Y = (e)=>{
1409
- let { icon: t, iconColor: s, status: o, name: a, onRerun: r, buttonTextColor: n } = e, c = (0, i.useRef)(null), [d, p] = (0, i.useState)(0), f = X.includes(o);
1541
+ ], Q = (e)=>{
1542
+ let { icon: t, iconColor: s, status: o, name: a, fullName: r, onRerun: n, buttonTextColor: c } = e, f = (0, i.useRef)(null), [u, x] = (0, i.useState)(0), h = V.includes(o);
1410
1543
  return (0, i.useEffect)(()=>{
1411
- f && null !== c.current && c.current !== o && p((e)=>e + 1), c.current = o;
1544
+ h && null !== f.current && f.current !== o && x((e)=>e + 1), f.current = o;
1412
1545
  }, [
1413
1546
  o,
1414
- f
1547
+ h
1415
1548
  ]), (0, l.jsxs)("div", {
1416
1549
  className: "group grid w-full grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-2",
1550
+ "data-testid": "test-suite-title",
1551
+ "data-test-suite": r,
1417
1552
  children: [
1418
1553
  t && (0, l.jsx)("span", {
1419
- className: `flex shrink-0 ${d > 0 ? "status-icon-flash" : ""}`,
1554
+ className: `flex w-[16px] shrink-0 items-center justify-center ${u > 0 ? "status-icon-flash" : ""}`,
1420
1555
  style: {
1421
1556
  color: s
1422
1557
  },
1423
1558
  children: t
1424
- }, d),
1425
- (0, l.jsx)(y.A, {
1559
+ }, u),
1560
+ (0, l.jsx)(d.A, {
1426
1561
  title: a,
1427
1562
  mouseLeaveDelay: 0,
1428
1563
  children: (0, l.jsx)("span", {
1429
- className: "truncate text-[13px] font-medium",
1564
+ className: "truncate text-[13px] font-medium tracking-tight opacity-80",
1430
1565
  children: a
1431
1566
  })
1432
1567
  }),
1433
1568
  (0, l.jsx)("div", {
1434
1569
  className: "opacity-0 transition-opacity duration-200 group-hover:opacity-100",
1435
- children: (0, l.jsx)(y.A, {
1570
+ children: (0, l.jsx)(d.A, {
1436
1571
  title: "Re-run this suite",
1437
1572
  mouseLeaveDelay: 0,
1438
- children: (0, l.jsx)(v.Ay, {
1573
+ children: (0, l.jsx)(p.Ay, {
1439
1574
  type: "text",
1440
1575
  size: "small",
1441
- icon: (0, l.jsx)(T.A, {
1442
- size: 14
1576
+ icon: (0, l.jsx)(R.A, {
1577
+ size: 14,
1578
+ strokeWidth: 2.5
1443
1579
  }),
1444
- disabled: !r,
1580
+ disabled: !n,
1445
1581
  onClick: (e)=>{
1446
- e.stopPropagation(), null == r || r();
1582
+ e.stopPropagation(), null == n || n();
1447
1583
  },
1448
- className: "inline-flex! h-5! w-5! items-center justify-center p-0!",
1584
+ className: "inline-flex h-5 w-5 items-center justify-center p-0",
1585
+ "data-testid": "test-suite-rerun",
1449
1586
  style: {
1450
- color: n
1587
+ color: c
1451
1588
  }
1452
1589
  })
1453
1590
  })
1454
1591
  })
1455
1592
  ]
1456
1593
  });
1457
- }, { Text: ee } = c.A, et = (e)=>{
1458
- let { testFiles: t, statusMap: s, caseMap: o, rootPath: a, projects: r, loading: n, connected: c, openFiles: d, activeFile: p, token: f, filterText: u, onExpandChange: x, onSelect: h, onRerunFile: j, onRerunTestCase: g } = e, { filteredTestFiles: m, filteredCaseMap: y } = (0, i.useMemo)(()=>{
1594
+ }, X = (e)=>{
1595
+ let { testFiles: t, statusMap: s, caseMap: o, rootPath: a, projects: r, loading: n, connected: c, openFiles: d, activeFile: p, token: f, filterText: u, onExpandChange: x, onSelect: m, onRerunFile: j, onRerunTestCase: v } = e, { filteredTestFiles: y, filteredCaseMap: _ } = (0, i.useMemo)(()=>{
1459
1596
  if (!u.trim()) return {
1460
1597
  filteredTestFiles: t,
1461
1598
  filteredCaseMap: o
@@ -1474,13 +1611,12 @@
1474
1611
  t,
1475
1612
  o,
1476
1613
  u
1477
- ]), v = (0, i.useCallback)((e, t)=>{
1614
+ ]), k = (0, i.useCallback)((e, t)=>{
1478
1615
  if (0 === t.length) return [
1479
1616
  {
1480
1617
  key: `${e}::__empty`,
1481
- title: (0, l.jsx)(ee, {
1482
- type: "secondary",
1483
- className: "text-xs",
1618
+ title: (0, l.jsx)("span", {
1619
+ className: "text-xs text-(--muted-foreground)",
1484
1620
  children: "No test cases reported yet"
1485
1621
  }),
1486
1622
  isLeaf: !0,
@@ -1516,16 +1652,17 @@
1516
1652
  }, a = (t, s)=>{
1517
1653
  let r = [];
1518
1654
  for (let i of t.children.values()){
1519
- let t = o(i), n = O[t], d = `${s}::suite::${i.fullPath.join("::")}`, p = i.fullPath.join(" ");
1655
+ let t = o(i), n = F[t], d = `${s}::suite::${i.fullPath.join("::")}`, p = i.fullPath.join(" ");
1520
1656
  r.push({
1521
1657
  key: d,
1522
- title: (0, l.jsx)(Y, {
1658
+ title: (0, l.jsx)(Q, {
1523
1659
  icon: n.icon,
1524
1660
  iconColor: n.color,
1525
1661
  status: t,
1526
1662
  name: i.name,
1663
+ fullName: p,
1527
1664
  onRerun: c ? ()=>{
1528
- g(e, p);
1665
+ v(e, p);
1529
1666
  } : void 0,
1530
1667
  buttonTextColor: f.colorTextSecondary
1531
1668
  }),
@@ -1534,16 +1671,17 @@
1534
1671
  });
1535
1672
  }
1536
1673
  for (let o of t.cases){
1537
- let t = O[o.status];
1674
+ let t = F[o.status];
1538
1675
  r.push({
1539
1676
  key: `${s}::case::${o.id}`,
1540
- title: (0, l.jsx)(K, {
1677
+ title: (0, l.jsx)(J, {
1541
1678
  icon: t.icon,
1542
1679
  iconColor: t.color,
1543
1680
  status: o.status,
1544
1681
  label: o.name,
1682
+ caseId: o.id,
1545
1683
  onRerun: c ? ()=>{
1546
- g(e, o.fullName);
1684
+ v(e, o.fullName);
1547
1685
  } : void 0,
1548
1686
  buttonTextColor: f.colorTextSecondary
1549
1687
  }),
@@ -1556,61 +1694,49 @@
1556
1694
  return a(s, e);
1557
1695
  }, [
1558
1696
  c,
1559
- g,
1697
+ v,
1560
1698
  f.colorTextSecondary
1561
- ]), _ = (0, i.useMemo)(()=>{
1699
+ ]), b = (0, i.useMemo)(()=>{
1562
1700
  let e = [
1563
- ...new Set(m.map((e)=>e.projectName))
1701
+ ...new Set(y.map((e)=>e.projectName))
1564
1702
  ], t = new Map;
1565
1703
  for (let e of r)t.set(e.name, e.projectRoot);
1566
1704
  let o = (e, t)=>{
1567
- let o = e.testPath, r = s[o] ?? "idle", i = N[r], n = ((e, t)=>{
1568
- if (!t) return e;
1569
- let s = t.endsWith("/") ? t.slice(0, -1) : t;
1570
- if (e.startsWith(s)) {
1571
- let t = e.slice(s.length);
1572
- return t.startsWith("/") ? t.slice(1) : t;
1573
- }
1574
- return e;
1575
- })(o, t ?? a), d = Object.values(y[o] ?? {});
1705
+ let o = e.testPath, r = s[o] ?? "idle", i = C[r], n = h(o, t ?? a), d = Object.values(_[o] ?? {});
1576
1706
  return {
1577
1707
  key: o,
1578
- title: (0, l.jsx)(Q, {
1708
+ title: (0, l.jsx)(K, {
1579
1709
  icon: i.icon,
1580
1710
  iconColor: i.color,
1581
1711
  status: r,
1582
1712
  relativePath: n,
1583
- onOpen: ()=>{
1584
- var e;
1585
- null == (e = window.parent) || e.postMessage({
1586
- type: "open-in-editor",
1587
- payload: {
1588
- file: o
1589
- }
1590
- }, "*"), fetch(`/__open-in-editor?file=${encodeURIComponent(o)}`).catch(()=>{});
1591
- },
1713
+ filePath: o,
1714
+ onOpen: ()=>g(o),
1592
1715
  onRerun: c ? ()=>{
1593
1716
  j(o);
1594
1717
  } : void 0,
1595
1718
  textColor: f.colorTextSecondary
1596
1719
  }),
1597
- children: v(o, d)
1720
+ children: k(o, d)
1598
1721
  };
1599
1722
  };
1600
1723
  return e.length > 1 ? e.map((e)=>{
1601
- let a = m.filter((t)=>t.projectName === e), r = `__project__${e}`, i = t.get(e), n = a.map((e)=>s[e.testPath] ?? "idle"), c = "idle";
1724
+ let a = y.filter((t)=>t.projectName === e), r = `__project__${e}`, i = t.get(e), n = a.map((e)=>s[e.testPath] ?? "idle"), c = "idle";
1602
1725
  n.some((e)=>"fail" === e) ? c = "fail" : n.some((e)=>"running" === e) ? c = "running" : n.length > 0 && n.every((e)=>"pass" === e) && (c = "pass");
1603
- let d = N[c];
1726
+ let d = C[c];
1604
1727
  return {
1605
1728
  key: r,
1606
1729
  title: (0, l.jsxs)("div", {
1607
1730
  className: "flex items-center gap-1.5",
1731
+ "data-testid": "test-project-title",
1732
+ "data-test-project": e,
1608
1733
  children: [
1609
- (0, l.jsx)(I.A, {
1734
+ (0, l.jsx)(L.A, {
1610
1735
  size: 14,
1611
1736
  style: {
1612
1737
  color: d.color
1613
1738
  },
1739
+ strokeWidth: 2.5,
1614
1740
  className: "shrink-0"
1615
1741
  }),
1616
1742
  (0, l.jsx)("span", {
@@ -1625,16 +1751,16 @@
1625
1751
  children: a.map((e)=>o(e, i)),
1626
1752
  selectable: !1
1627
1753
  };
1628
- }) : m.map((e)=>o(e));
1754
+ }) : y.map((e)=>o(e));
1629
1755
  }, [
1630
- v,
1631
- y,
1756
+ k,
1757
+ _,
1632
1758
  c,
1633
1759
  j,
1634
1760
  r,
1635
1761
  a,
1636
1762
  s,
1637
- m,
1763
+ y,
1638
1764
  f
1639
1765
  ]);
1640
1766
  return n ? (0, l.jsx)("div", {
@@ -1646,12 +1772,12 @@
1646
1772
  ].map((e)=>(0, l.jsxs)("div", {
1647
1773
  className: "flex items-center gap-2",
1648
1774
  children: [
1649
- (0, l.jsx)(L.A.Avatar, {
1775
+ (0, l.jsx)(W.A.Avatar, {
1650
1776
  active: !0,
1651
1777
  size: "small",
1652
1778
  shape: "circle"
1653
1779
  }),
1654
- (0, l.jsx)(L.A.Input, {
1780
+ (0, l.jsx)(W.A.Input, {
1655
1781
  active: !0,
1656
1782
  size: "small",
1657
1783
  style: {
@@ -1662,23 +1788,26 @@
1662
1788
  }, e))
1663
1789
  }) : c ? 0 === t.length ? (0, l.jsx)("div", {
1664
1790
  className: "flex h-full items-center justify-center",
1665
- children: (0, l.jsx)(ee, {
1666
- type: "secondary",
1791
+ children: (0, l.jsx)("span", {
1792
+ className: "text-(--muted-foreground)",
1667
1793
  children: "No test files detected"
1668
1794
  })
1669
- }) : 0 === m.length ? (0, l.jsx)("div", {
1795
+ }) : 0 === y.length ? (0, l.jsx)("div", {
1670
1796
  className: "flex h-full items-center justify-center",
1671
- children: (0, l.jsx)(ee, {
1672
- type: "secondary",
1797
+ children: (0, l.jsx)("span", {
1798
+ className: "text-(--muted-foreground)",
1673
1799
  children: "No matching tests found"
1674
1800
  })
1675
- }) : (0, l.jsx)(G.A, {
1801
+ }) : (0, l.jsx)(Z.A, {
1676
1802
  blockNode: !0,
1803
+ "data-testid": "test-files-tree",
1677
1804
  showLine: !1,
1678
- switcherIcon: (e)=>e.expanded ? (0, l.jsx)(W.A, {
1679
- size: 12
1680
- }) : (0, l.jsx)(q.A, {
1681
- size: 12
1805
+ switcherIcon: (e)=>e.expanded ? (0, l.jsx)(G.A, {
1806
+ size: 12,
1807
+ strokeWidth: 2.5
1808
+ }) : (0, l.jsx)(I.A, {
1809
+ size: 12,
1810
+ strokeWidth: 2.5
1682
1811
  }),
1683
1812
  showIcon: !0,
1684
1813
  expandAction: "click",
@@ -1688,45 +1817,46 @@
1688
1817
  ] : [],
1689
1818
  onExpand: (e)=>x(e.filter((e)=>"string" == typeof e)),
1690
1819
  onSelect: (e, t)=>{
1691
- let s = t.node.key, l = m.map((e)=>e.testPath);
1692
- "string" == typeof s && l.includes(s) && h(s);
1820
+ let s = t.node.key, l = y.map((e)=>e.testPath);
1821
+ "string" == typeof s && l.includes(s) && m(s);
1693
1822
  },
1694
- treeData: _,
1695
- className: "m-1! bg-transparent"
1823
+ treeData: b,
1824
+ className: "bg-transparent",
1825
+ style: {
1826
+ marginLeft: "16px"
1827
+ }
1696
1828
  }) : (0, l.jsx)("div", {
1697
1829
  className: "flex h-full flex-col items-center justify-center gap-2",
1698
- children: (0, l.jsx)(ee, {
1699
- type: "warning",
1830
+ children: (0, l.jsx)("span", {
1831
+ className: "text-(--warning)",
1700
1832
  children: "Reconnecting..."
1701
1833
  })
1702
1834
  });
1703
1835
  };
1704
- var es = s(9800);
1705
- let el = function() {
1836
+ var Y = s(9800);
1837
+ let ee = function() {
1706
1838
  for(var e, t = arguments.length, s = Array(t), l = 0; l < t; l++)s[l] = arguments[l];
1707
1839
  (null == (e = window.__RSTEST_BROWSER_OPTIONS__) ? void 0 : e.debug) === !0 && console.log(...s);
1708
- }, eo = [
1840
+ }, et = [
1709
1841
  1e3,
1710
1842
  2e3,
1711
1843
  4e3,
1712
1844
  8e3,
1713
1845
  16e3,
1714
1846
  3e4
1715
- ], ea = (e)=>{
1716
- let t = e.split("/");
1717
- return t[t.length - 1] || e;
1718
- }, er = (e, t, s)=>{
1847
+ ], es = (e, t, s)=>{
1719
1848
  let l = new URL("/runner.html", t || window.location.origin);
1720
1849
  return l.searchParams.set("testFile", e), s && l.searchParams.set("testNamePattern", s), l.toString();
1721
- }, ei = (e)=>{
1722
- let { options: t, theme: s, setTheme: a } = e, { token: r } = o.A.useToken(), [n, c] = (0, i.useState)([]), [d, f] = (0, i.useState)(null), [u, x] = (0, i.useState)({}), [j, y] = (0, i.useState)({}), [v, _] = (0, i.useState)([]), [C, F] = (0, i.useState)(""), S = (0, i.useCallback)((e, s)=>{
1723
- el("[Container] handleReloadTestFile called:", e, s);
1724
- let l = document.querySelector(`iframe[data-test-file="${e}"]`);
1725
- if (el("[Container] Found iframe:", l), l) {
1726
- x((t)=>({
1850
+ }, el = (e)=>{
1851
+ var t, s;
1852
+ let { options: a, theme: r, setTheme: n } = e, { token: d } = o.A.useToken(), [p, f] = (0, i.useState)([]), [u, x] = (0, i.useState)(null), [h, g] = (0, i.useState)({}), [m, j] = (0, i.useState)({}), [v, y] = (0, i.useState)([]), [_, C] = (0, i.useState)(""), F = (0, i.useCallback)((e, t)=>{
1853
+ ee("[Container] handleReloadTestFile called:", e, t);
1854
+ let s = document.querySelector(`iframe[data-test-file="${e}"]`);
1855
+ if (ee("[Container] Found iframe:", s), s) {
1856
+ g((t)=>({
1727
1857
  ...t,
1728
1858
  [e]: "running"
1729
- })), y((t)=>{
1859
+ })), j((t)=>{
1730
1860
  let s = t[e] ?? {}, l = {};
1731
1861
  for (let [e, t] of Object.entries(s))l[e] = {
1732
1862
  ...t,
@@ -1737,12 +1867,12 @@
1737
1867
  [e]: l
1738
1868
  };
1739
1869
  });
1740
- let o = er(e, t.runnerUrl, s);
1741
- el("[Container] Setting iframe.src to:", o), l.src = o;
1870
+ let l = es(e, a.runnerUrl, t);
1871
+ ee("[Container] Setting iframe.src to:", l), s.src = l;
1742
1872
  }
1743
1873
  }, [
1744
- t.runnerUrl
1745
- ]), { rpc: b, loading: k, connected: w } = ((e, t, s)=>{
1874
+ a.runnerUrl
1875
+ ]), { rpc: b, loading: A, connected: N } = ((e, t, s)=>{
1746
1876
  let [l, o] = (0, i.useState)(null), [a, r] = (0, i.useState)(!0), [n, c] = (0, i.useState)(!1), d = (0, i.useRef)(e), p = (0, i.useRef)(s), f = (0, i.useRef)(null);
1747
1877
  return (0, i.useEffect)(()=>{
1748
1878
  d.current = e;
@@ -1760,17 +1890,17 @@
1760
1890
  f.current = e = new WebSocket(`${n}//${window.location.hostname}:${t}`);
1761
1891
  let u = {
1762
1892
  onTestFileUpdate (e) {
1763
- el("[Container RPC] onTestFileUpdate called:", e), d.current(e);
1893
+ ee("[Container RPC] onTestFileUpdate called:", e), d.current(e);
1764
1894
  },
1765
1895
  reloadTestFile (e, t) {
1766
1896
  var s;
1767
- el("[Container RPC] reloadTestFile called:", e, t), null == (s = p.current) || s.call(p, e, t);
1897
+ ee("[Container RPC] reloadTestFile called:", e, t), null == (s = p.current) || s.call(p, e, t);
1768
1898
  }
1769
1899
  };
1770
1900
  e.onopen = ()=>{
1771
1901
  if (!a || !e) return;
1772
- el("[Container] WebSocket connected"), s = 0, c(!0);
1773
- let t = (0, es.L4)(u, {
1902
+ ee("[Container] WebSocket connected"), s = 0, c(!0);
1903
+ let t = (0, Y.L4)(u, {
1774
1904
  post: (t)=>{
1775
1905
  (null == e ? void 0 : e.readyState) === WebSocket.OPEN && e.send(JSON.stringify(t));
1776
1906
  },
@@ -1790,13 +1920,13 @@
1790
1920
  });
1791
1921
  }, e.onclose = ()=>{
1792
1922
  if (f.current !== e || !a) return;
1793
- el("[Container] WebSocket disconnected"), o(null), c(!1);
1794
- let t = eo[Math.min(s, eo.length - 1)];
1795
- el(`[Container] Reconnecting in ${t}ms (attempt ${s + 1})`), s++, l = setTimeout(()=>{
1923
+ ee("[Container] WebSocket disconnected"), o(null), c(!1);
1924
+ let t = et[Math.min(s, et.length - 1)];
1925
+ ee(`[Container] Reconnecting in ${t}ms (attempt ${s + 1})`), s++, l = setTimeout(()=>{
1796
1926
  a && i();
1797
1927
  }, t);
1798
1928
  }, e.onerror = ()=>{
1799
- a && el("[Container] WebSocket error");
1929
+ a && ee("[Container] WebSocket error");
1800
1930
  };
1801
1931
  };
1802
1932
  return i(), ()=>{
@@ -1809,30 +1939,30 @@
1809
1939
  loading: a,
1810
1940
  connected: n
1811
1941
  };
1812
- })(c, null == t ? void 0 : t.wsPort, S);
1942
+ })(f, null == a ? void 0 : a.wsPort, F);
1813
1943
  (0, i.useEffect)(()=>{
1814
- x((e)=>{
1944
+ g((e)=>{
1815
1945
  let t = {};
1816
- for (let s of n)t[s.testPath] = e[s.testPath] ?? "idle";
1946
+ for (let s of p)t[s.testPath] = e[s.testPath] ?? "idle";
1817
1947
  return t;
1818
- }), y((e)=>{
1948
+ }), j((e)=>{
1819
1949
  let t = {};
1820
- for (let s of n)t[s.testPath] = e[s.testPath] ?? {};
1950
+ for (let s of p)t[s.testPath] = e[s.testPath] ?? {};
1821
1951
  return t;
1822
1952
  });
1823
- let e = n.map((e)=>e.testPath);
1824
- _((t)=>t.filter((t)=>e.includes(t))), f((t)=>!t && n.length > 0 || t && !e.includes(t) && n.length > 0 ? n[0].testPath : t);
1953
+ let e = p.map((e)=>e.testPath);
1954
+ y((t)=>t.filter((t)=>e.includes(t))), x((t)=>!t && p.length > 0 || t && !e.includes(t) && p.length > 0 ? p[0].testPath : t);
1825
1955
  }, [
1826
- n
1956
+ p
1827
1957
  ]);
1828
- let A = (0, i.useCallback)((e)=>"pass" === e ? "pass" : "fail" === e ? "fail" : "skip" === e || "todo" === e ? "skip" : "running", []), M = (0, i.useCallback)((e)=>{
1829
- f(e);
1830
- }, []), O = (0, i.useCallback)((e, t)=>{
1958
+ let M = (0, i.useCallback)((e)=>"pass" === e ? "pass" : "fail" === e ? "fail" : "skip" === e || "todo" === e ? "skip" : "running", []), z = (0, i.useCallback)((e)=>{
1959
+ x(e);
1960
+ }, []), U = (0, i.useCallback)((e, t)=>{
1831
1961
  let s = (t.parentNames ?? []).filter(Boolean), l = [
1832
1962
  ...s,
1833
1963
  t.name
1834
1964
  ].join(" ") || t.name;
1835
- y((o)=>{
1965
+ j((o)=>{
1836
1966
  let a = o[e] ?? {};
1837
1967
  return {
1838
1968
  ...o,
@@ -1843,7 +1973,7 @@
1843
1973
  name: t.name,
1844
1974
  parentNames: s,
1845
1975
  fullName: l,
1846
- status: A(t.status),
1976
+ status: M(t.status),
1847
1977
  filePath: t.testPath || e,
1848
1978
  location: t.location
1849
1979
  }
@@ -1851,23 +1981,23 @@
1851
1981
  };
1852
1982
  });
1853
1983
  }, [
1854
- A
1855
- ]), z = (0, i.useCallback)((e)=>{
1856
- b && w && b.rerunTest(e);
1984
+ M
1985
+ ]), E = (0, i.useCallback)((e)=>{
1986
+ x(e), b && N && b.rerunTest(e);
1857
1987
  }, [
1858
1988
  b,
1859
- w
1860
- ]), E = (0, i.useCallback)((e, t)=>{
1861
- b && w && b.rerunTest(e, t);
1989
+ N
1990
+ ]), P = (0, i.useCallback)((e, t)=>{
1991
+ x(e), b && N && b.rerunTest(e, t);
1862
1992
  }, [
1863
1993
  b,
1864
- w
1865
- ]), P = (0, i.useCallback)(()=>{
1866
- if (b && w) for (let e of n)b.rerunTest(e.testPath);
1994
+ N
1995
+ ]), R = (0, i.useCallback)(()=>{
1996
+ if (b && N) for (let e of p)b.rerunTest(e.testPath);
1867
1997
  }, [
1868
- n,
1998
+ p,
1869
1999
  b,
1870
- w
2000
+ N
1871
2001
  ]);
1872
2002
  (0, i.useEffect)(()=>{
1873
2003
  let e = (e)=>{
@@ -1876,10 +2006,10 @@
1876
2006
  let t = e.data.payload;
1877
2007
  if ((null == t ? void 0 : t.type) === "file-start") {
1878
2008
  let e = t.payload, s = e.testPath;
1879
- "string" == typeof s && (x((e)=>({
2009
+ "string" == typeof s && (g((e)=>({
1880
2010
  ...e,
1881
2011
  [s]: "running"
1882
- })), y((e)=>{
2012
+ })), j((e)=>{
1883
2013
  let t = e[s] ?? {}, l = {};
1884
2014
  for (let [e, s] of Object.entries(t))l[e] = {
1885
2015
  ...s,
@@ -1895,15 +2025,15 @@
1895
2025
  }));
1896
2026
  } else if ((null == t ? void 0 : t.type) === "case-result") {
1897
2027
  let e = t.payload;
1898
- (null == e ? void 0 : e.testPath) && (O(e.testPath, e), null == b || b.onTestCaseResult(e));
2028
+ (null == e ? void 0 : e.testPath) && (U(e.testPath, e), null == b || b.onTestCaseResult(e));
1899
2029
  } else if ((null == t ? void 0 : t.type) === "file-complete") {
1900
2030
  let e = t.payload, s = e.testPath;
1901
2031
  if ("string" == typeof s) {
1902
2032
  let t = "pass" === e.status || "skip" === e.status;
1903
- x((e)=>({
2033
+ g((e)=>({
1904
2034
  ...e,
1905
2035
  [s]: t ? "pass" : "fail"
1906
- })), y((t)=>{
2036
+ })), j((t)=>{
1907
2037
  let l = {};
1908
2038
  for (let t of e.results ?? [])if (null == t ? void 0 : t.testId) {
1909
2039
  let e = (t.parentNames ?? []).filter(Boolean), o = [
@@ -1915,7 +2045,7 @@
1915
2045
  name: t.name,
1916
2046
  parentNames: e,
1917
2047
  fullName: o,
1918
- status: A(t.status),
2048
+ status: M(t.status),
1919
2049
  filePath: t.testPath || s,
1920
2050
  location: t.location
1921
2051
  };
@@ -1927,9 +2057,9 @@
1927
2057
  }), null == b || b.onTestFileComplete(e);
1928
2058
  }
1929
2059
  } else if ((null == t ? void 0 : t.type) === "fatal") {
1930
- d && x((e)=>({
2060
+ u && g((e)=>({
1931
2061
  ...e,
1932
- [d]: "fail"
2062
+ [u]: "fail"
1933
2063
  }));
1934
2064
  let e = t.payload;
1935
2065
  null == b || b.onFatal(e);
@@ -1977,13 +2107,13 @@
1977
2107
  };
1978
2108
  return window.addEventListener("message", e), ()=>window.removeEventListener("message", e);
1979
2109
  }, [
1980
- d,
1981
- O,
1982
- A,
2110
+ u,
2111
+ U,
2112
+ M,
1983
2113
  b
1984
2114
  ]);
1985
- let R = (0, i.useMemo)(()=>{
1986
- let e = Object.values(j).flatMap((e)=>Object.values(e));
2115
+ let T = (0, i.useMemo)(()=>{
2116
+ let e = Object.values(m).flatMap((e)=>Object.values(e));
1987
2117
  return {
1988
2118
  idle: e.filter((e)=>"idle" === e.status).length,
1989
2119
  running: e.filter((e)=>"running" === e.status).length,
@@ -1992,23 +2122,18 @@
1992
2122
  skip: e.filter((e)=>"skip" === e.status).length
1993
2123
  };
1994
2124
  }, [
1995
- j
1996
- ]), T = (0, i.useMemo)(()=>({
1997
- idle: Object.values(u).filter((e)=>"idle" === e).length,
1998
- running: Object.values(u).filter((e)=>"running" === e).length,
1999
- pass: Object.values(u).filter((e)=>"pass" === e).length,
2000
- fail: Object.values(u).filter((e)=>"fail" === e).length
2001
- }), [
2002
- u
2003
- ]), B = (0, i.useMemo)(()=>{
2125
+ m
2126
+ ]), B = (0, i.useMemo)(()=>Object.values(h).some((e)=>"running" === e), [
2127
+ h
2128
+ ]), $ = (0, i.useMemo)(()=>{
2004
2129
  let e = [], t = [
2005
- ...new Set(n.map((e)=>e.projectName))
2130
+ ...new Set(p.map((e)=>e.projectName))
2006
2131
  ];
2007
2132
  if (t.length > 1) for (let s of t)e.push(`__project__${s}`);
2008
- for (let t of n){
2133
+ for (let t of p){
2009
2134
  let s = t.testPath;
2010
2135
  e.push(s);
2011
- let l = Object.values(j[s] ?? {}), o = new Set;
2136
+ let l = Object.values(m[s] ?? {}), o = new Set;
2012
2137
  for (let e of l){
2013
2138
  let t = e.parentNames;
2014
2139
  for(let e = 1; e <= t.length; e++){
@@ -2029,120 +2154,122 @@
2029
2154
  ...new Set(e)
2030
2155
  ];
2031
2156
  }, [
2032
- n,
2033
- j
2034
- ]), $ = T.pass + T.fail, Z = 0 === $ ? 0 : T.pass / $ * 100, L = "dark" === s;
2157
+ p,
2158
+ m
2159
+ ]), W = (null == (s = a.projects) || null == (t = s[0]) ? void 0 : t.name) || a.rootPath.split("/").filter(Boolean).pop() || "default", Z = `rstest-split-${W}`;
2035
2160
  return (0, l.jsx)("div", {
2036
2161
  className: "m-0 h-screen w-full overflow-hidden p-0",
2037
2162
  style: {
2038
- background: r.colorBgContainer
2163
+ background: d.colorBgContainer
2039
2164
  },
2040
- children: (0, l.jsxs)(g, {
2165
+ children: (0, l.jsxs)(S, {
2041
2166
  direction: "horizontal",
2042
2167
  className: "h-full w-full",
2043
- autoSaveId: "rstest-split",
2168
+ autoSaveId: Z,
2044
2169
  children: [
2045
- (0, l.jsx)(m, {
2170
+ (0, l.jsx)(w, {
2046
2171
  defaultSize: 32,
2047
2172
  minSize: 20,
2048
2173
  maxSize: 50,
2049
2174
  children: (0, l.jsxs)("div", {
2050
2175
  className: "flex h-full flex-col overflow-hidden",
2051
2176
  style: {
2052
- borderRight: `1px solid ${r.colorBorderSecondary}`,
2053
- background: r.colorBgContainer
2177
+ background: d.colorBgContainer
2054
2178
  },
2055
2179
  children: [
2056
- (0, l.jsx)(U, {
2057
- themeSwitchLabel: L ? "Switch to light theme" : "Switch to dark theme",
2058
- isDark: L,
2059
- onThemeToggle: (e)=>a(e ? "dark" : "light"),
2060
- isConnected: w,
2061
- token: r,
2062
- progressPercent: 100 * (0 !== $),
2063
- successPercent: Z
2180
+ (0, l.jsx)(O, {
2181
+ theme: r,
2182
+ onThemeToggle: n,
2183
+ isConnected: N,
2184
+ token: d,
2185
+ counts: T
2064
2186
  }),
2065
2187
  (0, l.jsx)(D, {
2066
- token: r,
2067
- filterText: C,
2068
- onFilterChange: F,
2069
- isAllExpanded: B.length > 0 && B.every((e)=>v.includes(e)),
2188
+ token: d,
2189
+ filterText: _,
2190
+ onFilterChange: C,
2191
+ isAllExpanded: $.length > 0 && $.every((e)=>v.includes(e)),
2070
2192
  onToggleExpandAll: ()=>{
2071
- B.length > 0 && B.every((e)=>v.includes(e)) ? _([]) : _(B);
2193
+ $.length > 0 && $.every((e)=>v.includes(e)) ? y([]) : y($);
2072
2194
  },
2073
- onRerun: w ? P : void 0,
2074
- counts: R
2195
+ onRerun: N ? R : void 0,
2196
+ counts: T,
2197
+ isRunning: B
2075
2198
  }),
2076
2199
  (0, l.jsx)("div", {
2077
2200
  className: "flex-1 overflow-x-hidden overflow-y-auto",
2078
2201
  style: {
2079
- background: r.colorBgContainer
2202
+ background: d.colorBgContainer
2080
2203
  },
2081
- children: (0, l.jsx)(et, {
2082
- testFiles: n,
2083
- statusMap: u,
2084
- caseMap: j,
2085
- rootPath: t.rootPath,
2086
- projects: t.projects,
2087
- loading: k,
2088
- connected: w,
2204
+ children: (0, l.jsx)(X, {
2205
+ testFiles: p,
2206
+ statusMap: h,
2207
+ caseMap: m,
2208
+ rootPath: a.rootPath,
2209
+ projects: a.projects,
2210
+ loading: A,
2211
+ connected: N,
2089
2212
  openFiles: v,
2090
- activeFile: d,
2091
- token: r,
2092
- filterText: C,
2093
- onExpandChange: _,
2094
- onSelect: M,
2095
- onRerunFile: z,
2096
- onRerunTestCase: E
2213
+ activeFile: u,
2214
+ token: d,
2215
+ filterText: _,
2216
+ onExpandChange: y,
2217
+ onSelect: z,
2218
+ onRerunFile: E,
2219
+ onRerunTestCase: P
2097
2220
  })
2098
2221
  })
2099
2222
  ]
2100
2223
  })
2101
2224
  }),
2102
- (0, l.jsx)(m, {
2225
+ (0, l.jsx)(w, {
2103
2226
  defaultSize: 68,
2104
2227
  minSize: 40,
2105
2228
  children: (0, l.jsxs)("div", {
2106
2229
  className: "flex h-full flex-col overflow-hidden",
2107
2230
  style: {
2108
- background: r.colorBgLayout
2231
+ background: d.colorBgLayout
2109
2232
  },
2110
2233
  children: [
2111
- (0, l.jsx)(h, {
2112
- token: r,
2113
- activeDisplayName: d ? ea(d) : "Select a test file",
2114
- statusLabel: d ? N[u[d] ?? "idle"].label : void 0,
2115
- statusColor: d ? N[u[d] ?? "idle"].color : void 0
2234
+ (0, l.jsx)(k, {
2235
+ token: d,
2236
+ activeFile: u ?? void 0,
2237
+ rootPath: a.rootPath,
2238
+ status: u ? h[u] ?? "idle" : void 0
2116
2239
  }),
2117
2240
  (0, l.jsxs)("div", {
2118
2241
  className: "relative min-h-0 flex-1",
2119
2242
  style: {
2120
- background: r.colorBgContainer
2243
+ background: d.colorBgContainer
2121
2244
  },
2122
2245
  children: [
2123
- !d && (0, l.jsx)(p, {
2246
+ !u && (0, l.jsx)(c, {
2124
2247
  message: "Select a test file on the left to view its run output"
2125
2248
  }),
2126
- n.map((e)=>(0, l.jsx)("iframe", {
2249
+ p.map((e)=>{
2250
+ var t;
2251
+ let s;
2252
+ return (0, l.jsx)("iframe", {
2127
2253
  "data-test-file": e.testPath,
2128
- title: `Test runner for ${ea(e.testPath)}`,
2129
- src: er(e.testPath, t.runnerUrl),
2254
+ title: `Test runner for ${(s = (t = e.testPath).split("/"))[s.length - 1] || t}`,
2255
+ src: es(e.testPath, a.runnerUrl),
2130
2256
  className: "h-full w-full border-0",
2131
2257
  style: {
2132
- display: e.testPath === d ? "block" : "none",
2133
- background: r.colorBgContainer
2258
+ display: e.testPath === u ? "block" : "none",
2259
+ background: d.colorBgContainer
2134
2260
  },
2135
- onLoad: (s)=>{
2136
- let l = s.currentTarget;
2137
- l.contentWindow && l.contentWindow.postMessage({
2261
+ onLoad: (t)=>{
2262
+ let s = t.currentTarget;
2263
+ s.contentWindow && s.contentWindow.postMessage({
2138
2264
  type: "RSTEST_CONFIG",
2139
2265
  payload: {
2140
- ...t,
2266
+ ...a,
2141
2267
  testFile: e.testPath
2142
2268
  }
2143
2269
  }, "*");
2144
2270
  }
2145
- }, e.testPath))
2271
+ }, e.testPath);
2272
+ })
2146
2273
  ]
2147
2274
  })
2148
2275
  ]
@@ -2151,49 +2278,67 @@
2151
2278
  ]
2152
2279
  })
2153
2280
  });
2154
- }, en = ()=>{
2155
- let e = window.__RSTEST_BROWSER_OPTIONS__, [t, s] = (0, i.useState)("dark");
2156
- if ((0, i.useEffect)(()=>{
2281
+ }, eo = ()=>{
2282
+ let e = window.__RSTEST_BROWSER_OPTIONS__, [t, s] = (0, i.useState)("dark"), [n, c] = (0, i.useState)("dark");
2283
+ (0, i.useEffect)(()=>{
2284
+ let e = window.matchMedia("(prefers-color-scheme: dark)"), t = (e)=>c(e.matches ? "dark" : "light");
2285
+ return c(e.matches ? "dark" : "light"), e.addEventListener("change", t), ()=>e.removeEventListener("change", t);
2286
+ }, []), (0, i.useEffect)(()=>{
2157
2287
  try {
2158
2288
  let e = window.localStorage.getItem("rstest-theme");
2159
- ("light" === e || "dark" === e) && s(e);
2289
+ ("light" === e || "dark" === e || "system" === e) && s(e);
2160
2290
  } catch {}
2161
- }, []), (0, i.useEffect)(()=>{
2162
- document.body.dataset.theme = t;
2291
+ }, []);
2292
+ let d = "system" === t ? n : t;
2293
+ if ((0, i.useEffect)(()=>{
2294
+ document.body.dataset.theme = d;
2163
2295
  try {
2164
2296
  window.localStorage.setItem("rstest-theme", t);
2165
2297
  } catch {}
2166
2298
  }, [
2299
+ d,
2167
2300
  t
2168
2301
  ]), !e) return (0, l.jsx)("div", {
2169
2302
  className: "flex h-screen w-full items-center justify-center bg-zinc-950 text-white",
2170
2303
  children: "Missing browser options"
2171
2304
  });
2172
- let n = "dark" === t;
2173
- return (0, l.jsx)(a.Ay, {
2305
+ let p = "dark" === d;
2306
+ return (0, i.useEffect)(()=>{
2307
+ var t, s;
2308
+ let l = (null == (s = e.projects) || null == (t = s[0]) ? void 0 : t.name) || e.rootPath.split("/").filter(Boolean).pop() || "rstest";
2309
+ document.title = `${l} [RSTEST BROWSER]`;
2310
+ }, [
2311
+ e
2312
+ ]), (0, l.jsx)(a.Ay, {
2174
2313
  componentSize: "small",
2175
2314
  theme: {
2176
- algorithm: n ? o.A.darkAlgorithm : o.A.defaultAlgorithm,
2315
+ algorithm: p ? o.A.darkAlgorithm : o.A.defaultAlgorithm,
2177
2316
  token: {
2178
- fontFamily: '"Space Grotesk","Inter",system-ui,-apple-system,"Segoe UI",sans-serif',
2179
- colorInfo: n ? "#ffffff" : "#0f0f0f"
2317
+ fontFamily: '"Inter",system-ui,-apple-system,"Segoe UI",sans-serif',
2318
+ fontFamilyCode: '"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace',
2319
+ colorInfo: "#0070f3",
2320
+ colorPrimary: "#0070f3",
2321
+ colorSuccess: "#45a557",
2322
+ colorError: p ? "#d93036" : "#da2f35",
2323
+ colorWarning: "#ffb224",
2324
+ borderRadius: 6
2180
2325
  }
2181
2326
  },
2182
2327
  children: (0, l.jsx)(r.A, {
2183
- children: (0, l.jsx)(ei, {
2328
+ children: (0, l.jsx)(el, {
2184
2329
  options: e,
2185
2330
  theme: t,
2186
2331
  setTheme: s
2187
2332
  })
2188
2333
  })
2189
2334
  });
2190
- }, ec = ()=>{
2335
+ }, ea = ()=>{
2191
2336
  let e = document.getElementById("root");
2192
2337
  e && n.createRoot(e).render((0, l.jsx)(i.StrictMode, {
2193
- children: (0, l.jsx)(en, {})
2338
+ children: (0, l.jsx)(eo, {})
2194
2339
  }));
2195
2340
  };
2196
- "loading" === document.readyState ? document.addEventListener("DOMContentLoaded", ec) : ec();
2341
+ "loading" === document.readyState ? document.addEventListener("DOMContentLoaded", ea) : ea();
2197
2342
  }
2198
2343
  }, i = {};
2199
2344
  function n(e) {
@@ -2204,12 +2349,7 @@
2204
2349
  };
2205
2350
  return r[e](s, s.exports, n), s.exports;
2206
2351
  }
2207
- n.m = r, n.n = (e)=>{
2208
- var t = e && e.__esModule ? ()=>e.default : ()=>e;
2209
- return n.d(t, {
2210
- a: t
2211
- }), t;
2212
- }, t = Object.getPrototypeOf ? (e)=>Object.getPrototypeOf(e) : (e)=>e.__proto__, n.t = function(s, l) {
2352
+ n.m = r, t = Object.getPrototypeOf ? (e)=>Object.getPrototypeOf(e) : (e)=>e.__proto__, n.t = function(s, l) {
2213
2353
  if (1 & l && (s = this(s)), 8 & l || "object" == typeof s && s && (4 & l && s.__esModule || 16 & l && "function" == typeof s.then)) return s;
2214
2354
  var o = Object.create(null);
2215
2355
  n.r(o);
@@ -2229,14 +2369,7 @@
2229
2369
  enumerable: !0,
2230
2370
  get: t[s]
2231
2371
  });
2232
- }, n.g = (()=>{
2233
- if ("object" == typeof globalThis) return globalThis;
2234
- try {
2235
- return this || Function("return this")();
2236
- } catch (e) {
2237
- if ("object" == typeof window) return window;
2238
- }
2239
- })(), n.o = (e, t)=>Object.prototype.hasOwnProperty.call(e, t), n.r = (e)=>{
2372
+ }, n.o = (e, t)=>Object.prototype.hasOwnProperty.call(e, t), n.r = (e)=>{
2240
2373
  "u" > typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {
2241
2374
  value: "Module"
2242
2375
  }), Object.defineProperty(e, "__esModule", {
@@ -2275,7 +2408,7 @@
2275
2408
  }, (a = self.webpackChunk_rstest_browser_ui = self.webpackChunk_rstest_browser_ui || []).forEach(o.bind(null, 0)), a.push = o.bind(null, a.push.bind(a));
2276
2409
  var c = n.O(void 0, [
2277
2410
  "783",
2278
- "916"
2279
- ], ()=>n(8565));
2411
+ "837"
2412
+ ], ()=>n(3174));
2280
2413
  c = n.O(c);
2281
2414
  })();