@rstest/browser 0.8.5 → 0.9.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.
Files changed (84) hide show
  1. package/LICENSE-APACHE-2.0 +202 -0
  2. package/NOTICE +11 -0
  3. package/dist/361.js +8 -0
  4. package/dist/augmentExpect.d.ts +73 -0
  5. package/dist/browser-container/container-static/css/index.5c72297783.css +1 -0
  6. package/dist/browser-container/container-static/js/{565.226c9ef5.js → 101.36a8ccdf84.js} +4024 -3856
  7. package/dist/browser-container/container-static/js/101.36a8ccdf84.js.LICENSE.txt +1 -0
  8. package/dist/browser-container/container-static/js/{index.c1d17467.js → index.28d833de0b.js} +732 -675
  9. package/dist/browser-container/container-static/js/{lib-react.97ee79b0.js → lib-react.dcf2a5e57a.js} +10 -10
  10. package/dist/browser-container/container-static/js/lib-react.dcf2a5e57a.js.LICENSE.txt +1 -0
  11. package/dist/browser-container/index.html +1 -1
  12. package/dist/browser.d.ts +2 -0
  13. package/dist/browser.js +583 -0
  14. package/dist/browserRpcRegistry.d.ts +18 -0
  15. package/dist/client/api.d.ts +3 -0
  16. package/dist/client/browserRpc.d.ts +2 -0
  17. package/dist/client/dispatchTransport.d.ts +11 -0
  18. package/dist/client/entry.d.ts +1 -5
  19. package/dist/client/locator.d.ts +125 -0
  20. package/dist/client/snapshot.d.ts +0 -6
  21. package/dist/concurrency.d.ts +12 -0
  22. package/dist/dispatchCapabilities.d.ts +34 -0
  23. package/dist/dispatchRouter.d.ts +20 -0
  24. package/dist/headedSerialTaskQueue.d.ts +8 -0
  25. package/dist/headlessLatestRerunScheduler.d.ts +19 -0
  26. package/dist/headlessTransport.d.ts +12 -0
  27. package/dist/hostController.d.ts +16 -0
  28. package/dist/index.js +1790 -296
  29. package/dist/protocol.d.ts +44 -33
  30. package/dist/providers/index.d.ts +79 -0
  31. package/dist/providers/playwright/compileLocator.d.ts +3 -0
  32. package/dist/providers/playwright/dispatchBrowserRpc.d.ts +13 -0
  33. package/dist/providers/playwright/expectUtils.d.ts +24 -0
  34. package/dist/providers/playwright/implementation.d.ts +2 -0
  35. package/dist/providers/playwright/index.d.ts +1 -0
  36. package/dist/providers/playwright/runtime.d.ts +5 -0
  37. package/dist/providers/playwright/textMatcher.d.ts +8 -0
  38. package/dist/rpcProtocol.d.ts +145 -0
  39. package/dist/runSession.d.ts +33 -0
  40. package/dist/sessionRegistry.d.ts +34 -0
  41. package/dist/sourceMap/sourceMapLoader.d.ts +14 -0
  42. package/dist/watchCliShortcuts.d.ts +6 -0
  43. package/dist/watchRerunPlanner.d.ts +21 -0
  44. package/package.json +17 -12
  45. package/src/AGENTS.md +128 -0
  46. package/src/augmentExpect.ts +62 -0
  47. package/src/browser.ts +3 -0
  48. package/src/browserRpcRegistry.ts +57 -0
  49. package/src/client/AGENTS.md +82 -0
  50. package/src/client/api.ts +213 -0
  51. package/src/client/browserRpc.ts +86 -0
  52. package/src/client/dispatchTransport.ts +178 -0
  53. package/src/client/entry.ts +96 -33
  54. package/src/client/locator.ts +452 -0
  55. package/src/client/snapshot.ts +32 -97
  56. package/src/client/sourceMapSupport.ts +26 -37
  57. package/src/concurrency.ts +62 -0
  58. package/src/dispatchCapabilities.ts +162 -0
  59. package/src/dispatchRouter.ts +82 -0
  60. package/src/env.d.ts +8 -1
  61. package/src/headedSerialTaskQueue.ts +19 -0
  62. package/src/headlessLatestRerunScheduler.ts +76 -0
  63. package/src/headlessTransport.ts +28 -0
  64. package/src/hostController.ts +1538 -384
  65. package/src/protocol.ts +66 -31
  66. package/src/providers/index.ts +103 -0
  67. package/src/providers/playwright/compileLocator.ts +130 -0
  68. package/src/providers/playwright/dispatchBrowserRpc.ts +372 -0
  69. package/src/providers/playwright/expectUtils.ts +57 -0
  70. package/src/providers/playwright/implementation.ts +33 -0
  71. package/src/providers/playwright/index.ts +1 -0
  72. package/src/providers/playwright/runtime.ts +32 -0
  73. package/src/providers/playwright/textMatcher.ts +10 -0
  74. package/src/rpcProtocol.ts +220 -0
  75. package/src/runSession.ts +110 -0
  76. package/src/sessionRegistry.ts +89 -0
  77. package/src/sourceMap/sourceMapLoader.ts +96 -0
  78. package/src/watchCliShortcuts.ts +77 -0
  79. package/src/watchRerunPlanner.ts +77 -0
  80. package/dist/browser-container/container-static/css/index.5a71c757.css +0 -1
  81. package/dist/browser-container/container-static/js/565.226c9ef5.js.LICENSE.txt +0 -1
  82. package/dist/browser-container/container-static/js/lib-react.97ee79b0.js.LICENSE.txt +0 -1
  83. package/dist/browser-container/container-static/js/scheduler.5accca0c.js +0 -407
  84. package/dist/browser-container/scheduler.html +0 -19
@@ -1,9 +1,11 @@
1
1
  (()=>{
2
2
  "use strict";
3
- var e, t, s, l, o, a, r = {
4
- 2976 (e, t, s) {
5
- var l = s(6730), o = s(1675), a = s(4869), r = s(4831), i = s(162), n = s(2739);
6
- let c = (e)=>{
3
+ var e, t, s, l, r, o, a = {
4
+ 7723 (e, t, s) {
5
+ var l = s(6730);
6
+ let r = "__rstest_dispatch_response__";
7
+ var o = s(8593), a = s(5466), i = s(7603), n = s(162), c = s(2739);
8
+ let d = (e)=>{
7
9
  let { message: t } = e;
8
10
  return (0, l.jsx)("div", {
9
11
  className: "absolute inset-0 z-10 flex items-center justify-center bg-black/[0.02]",
@@ -13,8 +15,8 @@
13
15
  })
14
16
  });
15
17
  };
16
- var d = s(4548), p = s(5666), h = s(4048), u = s(5671), f = s(8779);
17
- let x = (e, t)=>{
18
+ var u = s(2591), p = s(2238), h = s(7385), f = s(6624), x = s(2310);
19
+ let m = (e, t)=>{
18
20
  if (!t) return e;
19
21
  let s = t.endsWith("/") ? t.slice(0, -1) : t;
20
22
  if (e.startsWith(s)) {
@@ -22,21 +24,20 @@
22
24
  return t.startsWith("/") ? t.slice(1) : t;
23
25
  }
24
26
  return e;
25
- }, m = (e)=>{
26
- var t;
27
- null == (t = window.parent) || t.postMessage({
27
+ }, g = (e)=>{
28
+ window.parent?.postMessage({
28
29
  type: "open-in-editor",
29
30
  payload: {
30
31
  file: e
31
32
  }
32
33
  }, "*"), fetch(`/__open-in-editor?file=${encodeURIComponent(e)}`).catch(()=>{});
33
34
  };
34
- var g = s(337), j = s(673), v = s(5911), y = s(5791), _ = s(5894);
35
- let w = {
35
+ var j = s(5162), v = s(7410), y = s(1544), _ = s(7400), w = s(567);
36
+ let C = {
36
37
  idle: {
37
38
  label: "Idle",
38
39
  color: "var(--accents-5)",
39
- icon: (0, l.jsx)(g.A, {
40
+ icon: (0, l.jsx)(j.A, {
40
41
  size: 14,
41
42
  strokeWidth: 2.5
42
43
  })
@@ -44,7 +45,7 @@
44
45
  running: {
45
46
  label: "Running",
46
47
  color: "var(--ds-amber-700)",
47
- icon: (0, l.jsx)(j.A, {
48
+ icon: (0, l.jsx)(v.A, {
48
49
  size: 14,
49
50
  className: "animate-spin",
50
51
  strokeWidth: 2.5
@@ -53,7 +54,7 @@
53
54
  pass: {
54
55
  label: "Pass",
55
56
  color: "var(--ds-green-700)",
56
- icon: (0, l.jsx)(v.A, {
57
+ icon: (0, l.jsx)(y.A, {
57
58
  size: 14,
58
59
  strokeWidth: 2.5
59
60
  })
@@ -61,140 +62,150 @@
61
62
  fail: {
62
63
  label: "Fail",
63
64
  color: "var(--ds-red-800)",
64
- icon: (0, l.jsx)(y.A, {
65
+ icon: (0, l.jsx)(_.A, {
65
66
  size: 14,
66
67
  strokeWidth: 2.5
67
68
  })
68
69
  }
69
- }, C = {
70
- ...w,
70
+ }, b = {
71
+ ...C,
71
72
  skip: {
72
73
  label: "Skip",
73
74
  color: "var(--accents-4)",
74
- icon: (0, l.jsx)(_.A, {
75
+ icon: (0, l.jsx)(w.A, {
75
76
  size: 14,
76
77
  strokeWidth: 2.5
77
78
  })
78
79
  }
79
80
  };
80
- var b = s(8062), k = s(3002), F = s(9193), S = s(904), N = s(3809), A = s(9606), M = s(7009), z = s(7351);
81
- let P = [
82
- {
83
- id: "iPhoneSE",
84
- label: "iPhone SE",
81
+ var k = s(1668), S = s(5735), F = s(1396), N = s(91), A = s(2604), P = s(8149), M = s(1162), z = s(462);
82
+ let R = {
83
+ iPhoneSE: {
85
84
  width: 375,
86
85
  height: 667
87
86
  },
88
- {
89
- id: "iPhoneXR",
90
- label: "iPhone XR",
87
+ iPhoneXR: {
91
88
  width: 414,
92
89
  height: 896
93
90
  },
94
- {
95
- id: "iPhone12Pro",
96
- label: "iPhone 12 Pro",
91
+ iPhone12Pro: {
97
92
  width: 390,
98
93
  height: 844
99
94
  },
100
- {
101
- id: "iPhone14ProMax",
102
- label: "iPhone 14 Pro Max",
95
+ iPhone14ProMax: {
103
96
  width: 430,
104
97
  height: 932
105
98
  },
106
- {
107
- id: "Pixel7",
108
- label: "Pixel 7",
99
+ Pixel7: {
109
100
  width: 412,
110
101
  height: 915
111
102
  },
112
- {
113
- id: "SamsungGalaxyS8Plus",
114
- label: "Samsung Galaxy S8+",
103
+ SamsungGalaxyS8Plus: {
115
104
  width: 360,
116
105
  height: 740
117
106
  },
118
- {
119
- id: "SamsungGalaxyS20Ultra",
120
- label: "Samsung Galaxy S20 Ultra",
107
+ SamsungGalaxyS20Ultra: {
121
108
  width: 412,
122
109
  height: 915
123
110
  },
124
- {
125
- id: "iPadMini",
126
- label: "iPad Mini",
111
+ iPadMini: {
127
112
  width: 768,
128
113
  height: 1024
129
114
  },
130
- {
131
- id: "iPadAir",
132
- label: "iPad Air",
115
+ iPadAir: {
133
116
  width: 820,
134
117
  height: 1180
135
118
  },
136
- {
137
- id: "iPadPro",
138
- label: "iPad Pro",
119
+ iPadPro: {
139
120
  width: 1024,
140
121
  height: 1366
141
122
  },
142
- {
143
- id: "SurfacePro7",
144
- label: "Surface Pro 7",
123
+ SurfacePro7: {
145
124
  width: 912,
146
125
  height: 1368
147
126
  },
148
- {
149
- id: "SurfaceDuo",
150
- label: "Surface Duo",
127
+ SurfaceDuo: {
151
128
  width: 540,
152
129
  height: 720
153
130
  },
154
- {
155
- id: "GalaxyZFold5",
156
- label: "Galaxy Z Fold 5",
131
+ GalaxyZFold5: {
157
132
  width: 344,
158
133
  height: 882
159
134
  },
160
- {
161
- id: "AsusZenbookFold",
162
- label: "Asus Zenbook Fold",
135
+ AsusZenbookFold: {
163
136
  width: 853,
164
137
  height: 1280
165
138
  },
166
- {
167
- id: "SamsungGalaxyA51A71",
168
- label: "Samsung Galaxy A51/71",
139
+ SamsungGalaxyA51A71: {
169
140
  width: 412,
170
141
  height: 914
171
142
  },
172
- {
173
- id: "NestHub",
174
- label: "Nest Hub",
143
+ NestHub: {
175
144
  width: 1024,
176
145
  height: 600
177
146
  },
178
- {
179
- id: "NestHubMax",
180
- label: "Nest Hub Max",
147
+ NestHubMax: {
181
148
  width: 1280,
182
149
  height: 800
183
150
  }
184
- ], O = new Set(P.map((e)=>e.id)), R = (e)=>"string" == typeof e && O.has(e), U = (e)=>{
185
- let t = P.find((t)=>t.id === e);
151
+ }, O = {
152
+ iPhoneSE: "iPhone SE",
153
+ iPhoneXR: "iPhone XR",
154
+ iPhone12Pro: "iPhone 12 Pro",
155
+ iPhone14ProMax: "iPhone 14 Pro Max",
156
+ Pixel7: "Pixel 7",
157
+ SamsungGalaxyS8Plus: "Samsung Galaxy S8+",
158
+ SamsungGalaxyS20Ultra: "Samsung Galaxy S20 Ultra",
159
+ iPadMini: "iPad Mini",
160
+ iPadAir: "iPad Air",
161
+ iPadPro: "iPad Pro",
162
+ SurfacePro7: "Surface Pro 7",
163
+ SurfaceDuo: "Surface Duo",
164
+ GalaxyZFold5: "Galaxy Z Fold 5",
165
+ AsusZenbookFold: "Asus Zenbook Fold",
166
+ SamsungGalaxyA51A71: "Samsung Galaxy A51/71",
167
+ NestHub: "Nest Hub",
168
+ NestHubMax: "Nest Hub Max"
169
+ }, U = [
170
+ "iPhoneSE",
171
+ "iPhoneXR",
172
+ "iPhone12Pro",
173
+ "iPhone14ProMax",
174
+ "Pixel7",
175
+ "SamsungGalaxyS8Plus",
176
+ "SamsungGalaxyS20Ultra",
177
+ "iPadMini",
178
+ "iPadAir",
179
+ "iPadPro",
180
+ "SurfacePro7",
181
+ "SurfaceDuo",
182
+ "GalaxyZFold5",
183
+ "AsusZenbookFold",
184
+ "SamsungGalaxyA51A71",
185
+ "NestHub",
186
+ "NestHubMax"
187
+ ].map((e)=>{
188
+ let t = R[e];
189
+ return {
190
+ id: e,
191
+ label: O[e],
192
+ width: t.width,
193
+ height: t.height
194
+ };
195
+ }), E = new Set(U.map((e)=>e.id)), $ = (e)=>"string" == typeof e && E.has(e), T = (e)=>{
196
+ let t = U.find((t)=>t.id === e);
186
197
  if (!t) throw Error(`Unknown device preset: ${e}`);
187
198
  return t;
188
- }, E = (e, t, s)=>Math.min(s, Math.max(t, e)), T = (e)=>{
189
- let { token: t, value: s, onChange: o } = e, [a, r] = (0, i.useState)(!1), n = (0, i.useRef)({
199
+ }, B = (e, t, s)=>Math.min(s, Math.max(t, e)), I = (e)=>{
200
+ let { token: t, value: s, onChange: r } = e, [o, a] = (0, n.useState)(!1), i = (0, n.useRef)({
190
201
  width: 800,
191
202
  height: 600
192
203
  });
193
- "responsive" === s.mode && (n.current = {
204
+ "responsive" === s.mode && (i.current = {
194
205
  width: s.width,
195
206
  height: s.height
196
207
  });
197
- let c = "full" === s.mode ? "full" : "responsive" === s.mode ? "responsive" : s.preset, h = (0, i.useMemo)(()=>[
208
+ let c = "full" === s.mode ? "full" : "responsive" === s.mode ? "responsive" : s.preset, d = (0, n.useMemo)(()=>[
198
209
  {
199
210
  value: "full",
200
211
  label: "Full"
@@ -203,23 +214,23 @@
203
214
  value: "responsive",
204
215
  label: "Responsive"
205
216
  },
206
- ...P.map((e)=>{
217
+ ...U.map((e)=>{
207
218
  let t;
208
219
  return {
209
220
  value: e.id,
210
- label: (t = U(e.id), `${t.label} (${t.width} x ${t.height})`)
221
+ label: (t = T(e.id), `${t.label} (${t.width} x ${t.height})`)
211
222
  };
212
223
  })
213
- ], []), u = (0, l.jsxs)("div", {
224
+ ], []), h = (0, l.jsxs)("div", {
214
225
  className: "w-[280px]",
215
226
  "data-testid": "viewport-popover",
216
227
  children: [
217
228
  (0, l.jsxs)("div", {
218
229
  className: "flex items-center gap-2",
219
230
  children: [
220
- (0, l.jsx)(b.A, {
231
+ (0, l.jsx)(k.A, {
221
232
  value: c,
222
- options: h,
233
+ options: d,
223
234
  listHeight: 280,
224
235
  dropdownStyle: {
225
236
  maxHeight: 280,
@@ -227,29 +238,29 @@
227
238
  },
228
239
  onChange: (e)=>{
229
240
  if ("full" === e) {
230
- o({
241
+ r({
231
242
  mode: "full"
232
- }), r(!1);
243
+ }), a(!1);
233
244
  return;
234
245
  }
235
- "responsive" === e ? o({
246
+ "responsive" === e ? r({
236
247
  mode: "responsive",
237
248
  ..."responsive" === s.mode ? {
238
249
  width: s.width,
239
250
  height: s.height
240
- } : n.current
241
- }) : (o({
251
+ } : i.current
252
+ }) : (r({
242
253
  mode: "preset",
243
254
  preset: e,
244
255
  orientation: "preset" === s.mode && s.preset === e ? s.orientation : "portrait"
245
- }), r(!1));
256
+ }), a(!1));
246
257
  },
247
258
  size: "small",
248
259
  className: "flex-1",
249
260
  popupMatchSelectWidth: !1,
250
261
  "data-testid": "viewport-preset-select"
251
262
  }),
252
- (0, l.jsx)(d.A, {
263
+ (0, l.jsx)(u.A, {
253
264
  title: "Rotate",
254
265
  mouseLeaveDelay: 0,
255
266
  children: (0, l.jsx)(p.Ay, {
@@ -271,13 +282,13 @@
271
282
  width: s.height,
272
283
  height: s.width
273
284
  };
274
- n.current = {
285
+ i.current = {
275
286
  width: e.width,
276
287
  height: e.height
277
- }, o(e);
288
+ }, r(e);
278
289
  return;
279
290
  }
280
- o({
291
+ r({
281
292
  mode: "preset",
282
293
  preset: s.preset,
283
294
  orientation: "portrait" === s.orientation ? "landscape" : "portrait"
@@ -292,18 +303,18 @@
292
303
  className: "mt-3 flex items-center gap-2",
293
304
  "data-testid": "viewport-inputs",
294
305
  children: [
295
- (0, l.jsx)(k.A, {
306
+ (0, l.jsx)(S.A, {
296
307
  min: 1,
297
308
  max: 1e4,
298
309
  step: 1,
299
310
  controls: !1,
300
311
  value: s.width,
301
312
  onChange: (e)=>{
302
- let t = E(Number(e ?? s.width), 1, 1e4);
303
- n.current = {
313
+ let t = B(Number(e ?? s.width), 1, 1e4);
314
+ i.current = {
304
315
  width: t,
305
316
  height: s.height
306
- }, o({
317
+ }, r({
307
318
  mode: "responsive",
308
319
  width: t,
309
320
  height: s.height
@@ -318,18 +329,18 @@
318
329
  className: "text-(--accents-4) select-none",
319
330
  children: "x"
320
331
  }),
321
- (0, l.jsx)(k.A, {
332
+ (0, l.jsx)(S.A, {
322
333
  min: 1,
323
334
  max: 1e4,
324
335
  step: 1,
325
336
  controls: !1,
326
337
  value: s.height,
327
338
  onChange: (e)=>{
328
- let t = E(Number(e ?? s.height), 1, 1e4);
329
- n.current = {
339
+ let t = B(Number(e ?? s.height), 1, 1e4);
340
+ i.current = {
330
341
  width: s.width,
331
342
  height: t
332
- }, o({
343
+ }, r({
333
344
  mode: "responsive",
334
345
  width: s.width,
335
346
  height: t
@@ -345,10 +356,10 @@
345
356
  ]
346
357
  });
347
358
  return (0, l.jsx)(F.A, {
348
- content: u,
359
+ content: h,
349
360
  trigger: "click",
350
- open: a,
351
- onOpenChange: r,
361
+ open: o,
362
+ onOpenChange: a,
352
363
  placement: "bottomRight",
353
364
  children: (0, l.jsxs)(p.Ay, {
354
365
  type: "text",
@@ -360,16 +371,16 @@
360
371
  (0, l.jsx)("span", {
361
372
  className: "flex h-4 w-4 items-center justify-center text-(--accents-5)",
362
373
  children: ((e)=>{
363
- if ("full" === e.mode) return (0, l.jsx)(S.A, {
374
+ if ("full" === e.mode) return (0, l.jsx)(N.A, {
364
375
  size: 14,
365
376
  strokeWidth: 2.2
366
377
  });
367
- if ("responsive" === e.mode) return (0, l.jsx)(N.A, {
378
+ if ("responsive" === e.mode) return (0, l.jsx)(A.A, {
368
379
  size: 14,
369
380
  strokeWidth: 2.2
370
381
  });
371
- let t = U(e.preset).label;
372
- return t.startsWith("iPad") || t.startsWith("Surface") || t.startsWith("Nest Hub") || t.includes("Fold") ? (0, l.jsx)(A.A, {
382
+ let t = T(e.preset).label;
383
+ return t.startsWith("iPad") || t.startsWith("Surface") || t.startsWith("Nest Hub") || t.includes("Fold") ? (0, l.jsx)(P.A, {
373
384
  size: 14,
374
385
  strokeWidth: 2.2
375
386
  }) : (0, l.jsx)(M.A, {
@@ -383,15 +394,15 @@
383
394
  style: {
384
395
  color: t.colorTextSecondary
385
396
  },
386
- children: "full" === s.mode ? "Full" : "responsive" === s.mode ? `${s.width} x ${s.height}` : U(s.preset).label
397
+ children: "full" === s.mode ? "Full" : "responsive" === s.mode ? `${s.width} x ${s.height}` : T(s.preset).label
387
398
  })
388
399
  ]
389
400
  })
390
401
  });
391
- }, B = (e)=>{
392
- let { token: t, activeFile: s, rootPath: o, status: a, viewport: i, onViewportChange: n } = e, { message: c } = r.A.useApp(), g = a ? w[a] : void 0, j = s ? x(s, o) : "", v = j.split("/"), y = v.pop(), _ = v.join("/"), C = async ()=>{
402
+ }, D = (e)=>{
403
+ let { token: t, activeFile: s, rootPath: r, status: o, viewport: a, onViewportChange: n } = e, { message: c } = i.A.useApp(), d = o ? C[o] : void 0, j = s ? m(s, r) : "", v = j.split("/"), y = v.pop(), _ = v.join("/"), w = async ()=>{
393
404
  j && (await navigator.clipboard.writeText(j), c.success("relative path copied"));
394
- }, b = "pass" === a ? "green" : "fail" === a ? "red" : "running" === a ? "amber" : null;
405
+ }, b = "pass" === o ? "green" : "fail" === o ? "red" : "running" === o ? "amber" : null;
395
406
  return (0, l.jsxs)("div", {
396
407
  className: "flex h-[48px] items-center justify-between px-4",
397
408
  "data-testid": "preview-header",
@@ -434,7 +445,7 @@
434
445
  s && (0, l.jsxs)("div", {
435
446
  className: "flex items-center",
436
447
  children: [
437
- (0, l.jsx)(d.A, {
448
+ (0, l.jsx)(u.A, {
438
449
  title: "Copy relative path",
439
450
  mouseLeaveDelay: 0,
440
451
  children: (0, l.jsx)(p.Ay, {
@@ -445,14 +456,14 @@
445
456
  color: t.colorTextDescription
446
457
  },
447
458
  "data-testid": "preview-copy-path",
448
- icon: (0, l.jsx)(u.A, {
459
+ icon: (0, l.jsx)(f.A, {
449
460
  size: 12,
450
461
  strokeWidth: 2.5
451
462
  }),
452
- onClick: C
463
+ onClick: w
453
464
  })
454
465
  }),
455
- (0, l.jsx)(d.A, {
466
+ (0, l.jsx)(u.A, {
456
467
  title: "Open in Editor",
457
468
  mouseLeaveDelay: 0,
458
469
  children: (0, l.jsx)(p.Ay, {
@@ -460,11 +471,11 @@
460
471
  size: "small",
461
472
  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",
462
473
  "data-testid": "preview-open-editor",
463
- icon: (0, l.jsx)(f.A, {
474
+ icon: (0, l.jsx)(x.A, {
464
475
  size: 12,
465
476
  strokeWidth: 2.5
466
477
  }),
467
- onClick: ()=>m(s),
478
+ onClick: ()=>g(s),
468
479
  style: {
469
480
  color: t.colorTextDescription
470
481
  }
@@ -484,31 +495,31 @@
484
495
  (0, l.jsxs)("div", {
485
496
  className: "flex items-center gap-3 shrink-0",
486
497
  children: [
487
- i && n && (0, l.jsx)(T, {
498
+ a && n && (0, l.jsx)(I, {
488
499
  token: t,
489
- value: i,
500
+ value: a,
490
501
  onChange: n
491
502
  }),
492
- g && b && (0, l.jsx)("div", {
503
+ d && b && (0, l.jsx)("div", {
493
504
  className: "flex items-center rounded-md px-2 py-0.5 text-[10px] font-semibold tracking-wider transition-colors shrink-0",
494
505
  style: {
495
506
  backgroundColor: `var(--ds-${b}-100)`,
496
507
  color: `var(--ds-${b}-900)`,
497
508
  border: `1px solid var(--ds-${b}-300)`
498
509
  },
499
- children: g.label.toUpperCase()
510
+ children: d.label.toUpperCase()
500
511
  })
501
512
  ]
502
513
  })
503
514
  ]
504
515
  });
505
516
  };
506
- var $ = s(2400);
507
- let W = (e)=>{
508
- 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 === D), d = i.useCallback(()=>{
509
- if (!r) return null;
517
+ var W = s(4772);
518
+ let G = (e)=>{
519
+ let { className: t, style: s, direction: r = "horizontal", children: o, autoSaveId: a, ...i } = e, c = n.Children.toArray(o).filter((e)=>n.isValidElement(e) && e.type === Z), d = n.useCallback(()=>{
520
+ if (!a) return null;
510
521
  try {
511
- let e = localStorage.getItem(r);
522
+ let e = localStorage.getItem(a);
512
523
  if (e) {
513
524
  let t = JSON.parse(e);
514
525
  if (Array.isArray(t) && t.length === c.length) return t;
@@ -516,25 +527,25 @@
516
527
  } catch {}
517
528
  return null;
518
529
  }, [
519
- r,
530
+ a,
520
531
  c.length
521
- ])(), p = c.map((e, t)=>{
522
- let { defaultSize: s, minSize: l, maxSize: o, children: a } = e.props, r = (null == d ? void 0 : d[t]) ?? s;
532
+ ])(), u = c.map((e, t)=>{
533
+ let { defaultSize: s, minSize: l, maxSize: r, children: o } = e.props, a = d?.[t] ?? s;
523
534
  return {
524
- defaultSize: r ? `${r}%` : void 0,
535
+ defaultSize: a ? `${a}%` : void 0,
525
536
  min: l ? `${l}%` : void 0,
526
- max: o ? `${o}%` : void 0,
527
- children: a
537
+ max: r ? `${r}%` : void 0,
538
+ children: o
528
539
  };
529
- }), h = i.useCallback((e)=>{
530
- if (r) try {
531
- localStorage.setItem(r, JSON.stringify(e));
540
+ }), p = n.useCallback((e)=>{
541
+ if (a) try {
542
+ localStorage.setItem(a, JSON.stringify(e));
532
543
  } catch {}
533
544
  }, [
534
- r
545
+ a
535
546
  ]);
536
- return (0, l.jsx)($.A, {
537
- layout: "horizontal" === o ? "horizontal" : "vertical",
547
+ return (0, l.jsx)(W.A, {
548
+ layout: "horizontal" === r ? "horizontal" : "vertical",
538
549
  className: t,
539
550
  style: {
540
551
  height: "100%",
@@ -543,21 +554,21 @@
543
554
  margin: 0,
544
555
  ...s
545
556
  },
546
- onResizeEnd: h,
547
- ...n,
548
- children: p.map((e)=>(0, l.jsx)($.A.Panel, {
557
+ onResizeEnd: p,
558
+ ...i,
559
+ children: u.map((e)=>(0, l.jsx)(W.A.Panel, {
549
560
  ...e,
550
561
  children: e.children
551
562
  }, `panel-${e.defaultSize}-${e.min}-${e.max}`))
552
563
  });
553
- }, D = (e)=>{
564
+ }, Z = (e)=>{
554
565
  let { children: t } = e;
555
566
  return (0, l.jsx)(l.Fragment, {
556
567
  children: t
557
568
  });
558
569
  };
559
- var Z = s(4114), G = s(6518), L = s(8219);
560
- let I = (e)=>(0, l.jsxs)("svg", {
570
+ var L = s(8073), q = s(2927), H = s(4944);
571
+ let J = (e)=>(0, l.jsxs)("svg", {
561
572
  xmlns: "http://www.w3.org/2000/svg",
562
573
  fill: "none",
563
574
  viewBox: "0 0 217 200",
@@ -1450,36 +1461,36 @@
1450
1461
  ]
1451
1462
  })
1452
1463
  ]
1453
- }), H = (e)=>{
1454
- let { theme: t, onThemeToggle: s, isConnected: o, token: a, counts: r } = e, [n, c] = (0, i.useState)(0), h = (0, i.useRef)(r);
1455
- (0, i.useEffect)(()=>{
1456
- let e = h.current;
1457
- if (e.pass !== r.pass || e.fail !== r.fail || e.running !== r.running) {
1464
+ }), V = (e)=>{
1465
+ let { theme: t, onThemeToggle: s, isConnected: r, token: o, counts: a } = e, [i, c] = (0, n.useState)(0), d = (0, n.useRef)(a);
1466
+ (0, n.useEffect)(()=>{
1467
+ let e = d.current;
1468
+ if (e.pass !== a.pass || e.fail !== a.fail || e.running !== a.running) {
1458
1469
  let e = setTimeout(()=>{
1459
1470
  c((e)=>e + 1);
1460
1471
  }, 100);
1461
1472
  return ()=>clearTimeout(e);
1462
1473
  }
1463
- h.current = r;
1474
+ d.current = a;
1464
1475
  }, [
1465
- r
1476
+ a
1466
1477
  ]);
1467
- let u = r.idle + r.running + r.pass + r.fail + r.skip, f = (e)=>0 === u ? 0 : e / u * 100, x = f(r.pass), m = f(r.fail), g = f(r.running), j = {
1468
- system: Z.A,
1469
- light: G.A,
1470
- dark: L.A
1478
+ let h = a.idle + a.running + a.pass + a.fail + a.skip, f = (e)=>0 === h ? 0 : e / h * 100, x = f(a.pass), m = f(a.fail), g = f(a.running), j = {
1479
+ system: L.A,
1480
+ light: q.A,
1481
+ dark: H.A
1471
1482
  }[t];
1472
1483
  return (0, l.jsxs)("div", {
1473
1484
  className: "relative flex h-[48px] items-center justify-between px-4",
1474
1485
  "data-testid": "sidebar-header",
1475
1486
  style: {
1476
- background: a.colorBgContainer
1487
+ background: o.colorBgContainer
1477
1488
  },
1478
1489
  children: [
1479
1490
  (0, l.jsxs)("div", {
1480
1491
  className: "flex items-center gap-2",
1481
1492
  children: [
1482
- (0, l.jsx)(I, {
1493
+ (0, l.jsx)(J, {
1483
1494
  className: "h-6 transition-all"
1484
1495
  }),
1485
1496
  (0, l.jsxs)("div", {
@@ -1500,17 +1511,17 @@
1500
1511
  (0, l.jsxs)("div", {
1501
1512
  className: "flex items-center gap-3",
1502
1513
  children: [
1503
- (0, l.jsx)(d.A, {
1504
- title: o ? "Connected" : "Connecting...",
1514
+ (0, l.jsx)(u.A, {
1515
+ title: r ? "Connected" : "Connecting...",
1505
1516
  mouseLeaveDelay: 0,
1506
1517
  children: (0, l.jsx)("span", {
1507
1518
  className: "inline-flex h-2 w-2 cursor-default rounded-full",
1508
1519
  style: {
1509
- backgroundColor: o ? "var(--ds-green-700)" : "var(--accents-4)"
1520
+ backgroundColor: r ? "var(--ds-green-700)" : "var(--accents-4)"
1510
1521
  }
1511
1522
  })
1512
1523
  }),
1513
- (0, l.jsx)(d.A, {
1524
+ (0, l.jsx)(u.A, {
1514
1525
  title: {
1515
1526
  system: "Theme: System",
1516
1527
  light: "Theme: Light",
@@ -1530,7 +1541,7 @@
1530
1541
  "system" === t ? s("light") : "light" === t ? s("dark") : s("system");
1531
1542
  },
1532
1543
  style: {
1533
- color: a.colorTextDescription
1544
+ color: o.colorTextDescription
1534
1545
  }
1535
1546
  })
1536
1547
  })
@@ -1543,40 +1554,40 @@
1543
1554
  },
1544
1555
  children: [
1545
1556
  (0, l.jsx)("div", {
1546
- 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" : ""}`,
1557
+ className: `absolute inset-y-0 left-0 h-full transition-all duration-500 ease-[cubic-bezier(0.4,0,0.2,1)] ${i > 0 ? "progress-flash-active" : ""}`,
1547
1558
  style: {
1548
1559
  width: `${x}%`,
1549
1560
  background: "var(--ds-green-700)",
1550
1561
  zIndex: 3,
1551
1562
  color: "var(--ds-green-700)"
1552
1563
  }
1553
- }, `pass-${n}`),
1564
+ }, `pass-${i}`),
1554
1565
  (0, l.jsx)("div", {
1555
- 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" : ""}`,
1566
+ className: `absolute inset-y-0 left-0 h-full transition-all duration-500 ease-[cubic-bezier(0.4,0,0.2,1)] ${i > 0 ? "progress-flash-active" : ""}`,
1556
1567
  style: {
1557
1568
  width: `${x + m}%`,
1558
1569
  background: "var(--ds-red-800)",
1559
1570
  zIndex: 2,
1560
1571
  color: "var(--ds-red-800)"
1561
1572
  }
1562
- }, `fail-${n}`),
1573
+ }, `fail-${i}`),
1563
1574
  (0, l.jsx)("div", {
1564
- 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" : ""}`,
1575
+ className: `absolute inset-y-0 left-0 h-full transition-all duration-500 ease-[cubic-bezier(0.4,0,0.2,1)] ${i > 0 ? "progress-flash-active" : ""}`,
1565
1576
  style: {
1566
1577
  width: `${x + m + g}%`,
1567
1578
  background: "var(--ds-amber-700)",
1568
1579
  zIndex: 1,
1569
1580
  color: "var(--ds-amber-700)"
1570
1581
  }
1571
- }, `run-${n}`)
1582
+ }, `run-${i}`)
1572
1583
  ]
1573
1584
  })
1574
1585
  ]
1575
1586
  });
1576
1587
  };
1577
- var q = s(9928), J = s(8524), V = s(4861), K = s(1592), X = s(5726), Y = s(2446);
1578
- let Q = (0, i.memo)((e)=>{
1579
- let { counts: t, isRunning: s } = e, o = s && 0 === t.running;
1588
+ var X = s(3478), K = s(6109), Y = s(2200), Q = s(5541), ee = s(8721), et = s(1183);
1589
+ let es = (0, n.memo)((e)=>{
1590
+ let { counts: t, isRunning: s } = e, r = s && 0 === t.running;
1580
1591
  return (0, l.jsx)("div", {
1581
1592
  className: "flex h-6 cursor-default select-none items-center",
1582
1593
  children: (0, l.jsx)("div", {
@@ -1598,9 +1609,9 @@
1598
1609
  color: "amber"
1599
1610
  }
1600
1611
  ].map((e)=>{
1601
- let s = t[e.key] || 0, a = "running" === e.key;
1602
- return (0, l.jsxs)(Y.A, {
1603
- className: `m-0 flex items-center gap-1 px-2 py-0 border-0 ${a && o ? "animate-pulse" : ""}`,
1612
+ let s = t[e.key] || 0, o = "running" === e.key;
1613
+ return (0, l.jsxs)(et.A, {
1614
+ className: `m-0 flex items-center gap-1 px-2 py-0 border-0 ${o && r ? "animate-pulse" : ""}`,
1604
1615
  style: {
1605
1616
  display: "flex",
1606
1617
  alignItems: "center",
@@ -1633,8 +1644,8 @@
1633
1644
  })
1634
1645
  })
1635
1646
  });
1636
- }), ee = (e)=>{
1637
- let { token: t, filterText: s, onFilterChange: o, isAllExpanded: a, onToggleExpandAll: r, onRerun: i, counts: n, isRunning: c } = e;
1647
+ }), el = (e)=>{
1648
+ let { token: t, filterText: s, onFilterChange: r, isAllExpanded: o, onToggleExpandAll: a, onRerun: i, counts: n, isRunning: c } = e;
1638
1649
  return (0, l.jsxs)("div", {
1639
1650
  className: "flex flex-col gap-3 px-4 py-3",
1640
1651
  "data-testid": "test-files-header",
@@ -1646,7 +1657,7 @@
1646
1657
  className: "flex items-center justify-between",
1647
1658
  children: [
1648
1659
  (0, l.jsx)("div", {
1649
- children: (0, l.jsx)(Q, {
1660
+ children: (0, l.jsx)(es, {
1650
1661
  counts: n,
1651
1662
  isRunning: c
1652
1663
  })
@@ -1654,20 +1665,20 @@
1654
1665
  (0, l.jsxs)("div", {
1655
1666
  className: "flex items-center gap-1",
1656
1667
  children: [
1657
- (0, l.jsx)(d.A, {
1658
- title: a ? "Collapse all" : "Expand all",
1668
+ (0, l.jsx)(u.A, {
1669
+ title: o ? "Collapse all" : "Expand all",
1659
1670
  mouseLeaveDelay: 0,
1660
1671
  children: (0, l.jsx)(p.Ay, {
1661
1672
  type: "text",
1662
1673
  size: "small",
1663
- icon: a ? (0, l.jsx)(J.A, {
1674
+ icon: o ? (0, l.jsx)(K.A, {
1664
1675
  size: 13,
1665
1676
  strokeWidth: 2.5
1666
- }) : (0, l.jsx)(V.A, {
1677
+ }) : (0, l.jsx)(Y.A, {
1667
1678
  size: 13,
1668
1679
  strokeWidth: 2.5
1669
1680
  }),
1670
- onClick: r,
1681
+ onClick: a,
1671
1682
  className: "flex h-8 w-8 items-center justify-center rounded-md p-0",
1672
1683
  "data-testid": "test-files-toggle-expand",
1673
1684
  style: {
@@ -1675,13 +1686,13 @@
1675
1686
  }
1676
1687
  })
1677
1688
  }),
1678
- (0, l.jsx)(d.A, {
1689
+ (0, l.jsx)(u.A, {
1679
1690
  title: "Re-run all tests",
1680
1691
  mouseLeaveDelay: 0,
1681
1692
  children: (0, l.jsx)(p.Ay, {
1682
1693
  type: "text",
1683
1694
  size: "small",
1684
- icon: (0, l.jsx)(K.A, {
1695
+ icon: (0, l.jsx)(Q.A, {
1685
1696
  size: 15,
1686
1697
  strokeWidth: 2.5
1687
1698
  }),
@@ -1698,15 +1709,15 @@
1698
1709
  })
1699
1710
  ]
1700
1711
  }),
1701
- (0, l.jsx)(q.A, {
1712
+ (0, l.jsx)(X.A, {
1702
1713
  placeholder: "Search tests...",
1703
- prefix: (0, l.jsx)(X.A, {
1714
+ prefix: (0, l.jsx)(ee.A, {
1704
1715
  size: 14,
1705
1716
  strokeWidth: 2.5,
1706
1717
  className: "opacity-40"
1707
1718
  }),
1708
1719
  value: s,
1709
- onChange: (e)=>o(e.target.value),
1720
+ onChange: (e)=>r(e.target.value),
1710
1721
  allowClear: !0,
1711
1722
  className: "rounded-md py-1.5",
1712
1723
  "data-testid": "test-files-search"
@@ -1714,53 +1725,53 @@
1714
1725
  ]
1715
1726
  });
1716
1727
  };
1717
- var et = s(2676), es = s(864), el = s(4908), eo = s(1556), ea = s(6340);
1718
- let er = [
1728
+ var er = s(1803), eo = s(5152), ea = s(8049), ei = s(4023), en = s(4953);
1729
+ let ec = [
1719
1730
  "pass",
1720
1731
  "fail",
1721
1732
  "skip"
1722
- ], ei = (e)=>{
1723
- let { icon: t, iconColor: s, status: o, label: a, caseId: r, onRerun: n, buttonTextColor: c } = e, h = (0, i.useRef)(null), [u, f] = (0, i.useState)(0), x = er.includes(o);
1724
- return (0, i.useEffect)(()=>{
1725
- x && null !== h.current && h.current !== o && f((e)=>e + 1), h.current = o;
1733
+ ], ed = (e)=>{
1734
+ let { icon: t, iconColor: s, status: r, label: o, caseId: a, onRerun: i, buttonTextColor: c } = e, d = (0, n.useRef)(null), [h, f] = (0, n.useState)(0), x = ec.includes(r);
1735
+ return (0, n.useEffect)(()=>{
1736
+ x && null !== d.current && d.current !== r && f((e)=>e + 1), d.current = r;
1726
1737
  }, [
1727
- o,
1738
+ r,
1728
1739
  x
1729
1740
  ]), (0, l.jsxs)("div", {
1730
1741
  className: "group grid w-full grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-2",
1731
1742
  "data-testid": "test-case-title",
1732
- "data-test-case": r,
1743
+ "data-test-case": a,
1733
1744
  children: [
1734
1745
  t && (0, l.jsx)("span", {
1735
- className: `flex w-[16px] shrink-0 items-center justify-center ${u > 0 ? "status-icon-flash" : ""}`,
1746
+ className: `flex w-[16px] shrink-0 items-center justify-center ${h > 0 ? "status-icon-flash" : ""}`,
1736
1747
  style: {
1737
1748
  color: s
1738
1749
  },
1739
1750
  children: t
1740
- }, u),
1741
- (0, l.jsx)(d.A, {
1742
- title: a,
1751
+ }, h),
1752
+ (0, l.jsx)(u.A, {
1753
+ title: o,
1743
1754
  mouseLeaveDelay: 0,
1744
1755
  children: (0, l.jsx)("span", {
1745
1756
  className: "truncate text-[13px] tracking-tight opacity-70",
1746
- children: a
1757
+ children: o
1747
1758
  })
1748
1759
  }),
1749
1760
  (0, l.jsx)("div", {
1750
1761
  className: "opacity-0 transition-opacity duration-200 group-hover:opacity-100",
1751
- children: (0, l.jsx)(d.A, {
1762
+ children: (0, l.jsx)(u.A, {
1752
1763
  title: "Re-run this test",
1753
1764
  mouseLeaveDelay: 0,
1754
1765
  children: (0, l.jsx)(p.Ay, {
1755
1766
  type: "text",
1756
1767
  size: "small",
1757
- icon: (0, l.jsx)(K.A, {
1768
+ icon: (0, l.jsx)(Q.A, {
1758
1769
  size: 14,
1759
1770
  strokeWidth: 2.5
1760
1771
  }),
1761
- disabled: !n,
1772
+ disabled: !i,
1762
1773
  onClick: (e)=>{
1763
- e.stopPropagation(), null == n || n();
1774
+ e.stopPropagation(), i?.();
1764
1775
  },
1765
1776
  className: "inline-flex h-5 w-5 items-center justify-center p-0",
1766
1777
  "data-testid": "test-case-rerun",
@@ -1772,30 +1783,30 @@
1772
1783
  })
1773
1784
  ]
1774
1785
  });
1775
- }, en = [
1786
+ }, eu = [
1776
1787
  "pass",
1777
1788
  "fail"
1778
- ], ec = (e)=>{
1779
- let { icon: t, iconColor: s, status: o, relativePath: a, filePath: r, onOpen: n, onRerun: c, textColor: h } = e, u = (0, i.useRef)(null), [x, m] = (0, i.useState)(0), g = en.includes(o);
1780
- return (0, i.useEffect)(()=>{
1781
- g && null !== u.current && u.current !== o && m((e)=>e + 1), u.current = o;
1789
+ ], ep = (e)=>{
1790
+ let { icon: t, iconColor: s, status: r, relativePath: o, filePath: a, onOpen: i, onRerun: c, textColor: d } = e, h = (0, n.useRef)(null), [f, m] = (0, n.useState)(0), g = eu.includes(r);
1791
+ return (0, n.useEffect)(()=>{
1792
+ g && null !== h.current && h.current !== r && m((e)=>e + 1), h.current = r;
1782
1793
  }, [
1783
- o,
1794
+ r,
1784
1795
  g
1785
1796
  ]), (0, l.jsxs)("div", {
1786
1797
  className: "group grid w-full grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-2",
1787
1798
  "data-testid": "test-file-title",
1788
- "data-test-file": r,
1799
+ "data-test-file": a,
1789
1800
  children: [
1790
1801
  (0, l.jsx)("span", {
1791
- className: `flex w-[16px] shrink-0 items-center justify-center ${x > 0 ? "status-icon-flash" : ""}`,
1802
+ className: `flex w-[16px] shrink-0 items-center justify-center ${f > 0 ? "status-icon-flash" : ""}`,
1792
1803
  style: {
1793
1804
  color: s
1794
1805
  },
1795
1806
  children: t
1796
- }, x),
1797
- (0, l.jsx)(d.A, {
1798
- title: a,
1807
+ }, f),
1808
+ (0, l.jsx)(u.A, {
1809
+ title: o,
1799
1810
  styles: {
1800
1811
  container: {
1801
1812
  whiteSpace: "nowrap",
@@ -1805,50 +1816,50 @@
1805
1816
  mouseLeaveDelay: 0,
1806
1817
  children: (0, l.jsx)("span", {
1807
1818
  className: "truncate font-mono text-[12px] font-medium tracking-tight opacity-90",
1808
- children: a
1819
+ children: o
1809
1820
  })
1810
1821
  }),
1811
1822
  (0, l.jsxs)("div", {
1812
1823
  className: "flex items-center gap-1 opacity-0 transition-opacity duration-200 group-hover:opacity-100",
1813
1824
  children: [
1814
- (0, l.jsx)(d.A, {
1825
+ (0, l.jsx)(u.A, {
1815
1826
  title: "Open in editor",
1816
1827
  mouseLeaveDelay: 0,
1817
1828
  children: (0, l.jsx)(p.Ay, {
1818
1829
  type: "text",
1819
1830
  size: "small",
1820
- icon: (0, l.jsx)(f.A, {
1831
+ icon: (0, l.jsx)(x.A, {
1821
1832
  size: 14,
1822
1833
  strokeWidth: 2.5
1823
1834
  }),
1824
1835
  onClick: (e)=>{
1825
- e.stopPropagation(), n();
1836
+ e.stopPropagation(), i();
1826
1837
  },
1827
1838
  className: "inline-flex h-5 w-5 items-center justify-center p-0",
1828
1839
  "data-testid": "test-file-open-editor",
1829
1840
  style: {
1830
- color: h
1841
+ color: d
1831
1842
  }
1832
1843
  })
1833
1844
  }),
1834
- (0, l.jsx)(d.A, {
1845
+ (0, l.jsx)(u.A, {
1835
1846
  title: "Re-run this file",
1836
1847
  mouseLeaveDelay: 0,
1837
1848
  children: (0, l.jsx)(p.Ay, {
1838
1849
  type: "text",
1839
1850
  size: "small",
1840
- icon: (0, l.jsx)(K.A, {
1851
+ icon: (0, l.jsx)(Q.A, {
1841
1852
  size: 14,
1842
1853
  strokeWidth: 2.5
1843
1854
  }),
1844
1855
  disabled: !c,
1845
1856
  onClick: (e)=>{
1846
- e.stopPropagation(), null == c || c();
1857
+ e.stopPropagation(), c?.();
1847
1858
  },
1848
1859
  className: "inline-flex h-5 w-5 items-center justify-center p-0",
1849
1860
  "data-testid": "test-file-rerun",
1850
1861
  style: {
1851
- color: h
1862
+ color: d
1852
1863
  }
1853
1864
  })
1854
1865
  })
@@ -1856,52 +1867,52 @@
1856
1867
  })
1857
1868
  ]
1858
1869
  });
1859
- }, ed = [
1870
+ }, eh = [
1860
1871
  "pass",
1861
1872
  "fail",
1862
1873
  "skip"
1863
- ], ep = (e)=>{
1864
- let { icon: t, iconColor: s, status: o, name: a, fullName: r, onRerun: n, buttonTextColor: c } = e, h = (0, i.useRef)(null), [u, f] = (0, i.useState)(0), x = ed.includes(o);
1865
- return (0, i.useEffect)(()=>{
1866
- x && null !== h.current && h.current !== o && f((e)=>e + 1), h.current = o;
1874
+ ], ef = (e)=>{
1875
+ let { icon: t, iconColor: s, status: r, name: o, fullName: a, onRerun: i, buttonTextColor: c } = e, d = (0, n.useRef)(null), [h, f] = (0, n.useState)(0), x = eh.includes(r);
1876
+ return (0, n.useEffect)(()=>{
1877
+ x && null !== d.current && d.current !== r && f((e)=>e + 1), d.current = r;
1867
1878
  }, [
1868
- o,
1879
+ r,
1869
1880
  x
1870
1881
  ]), (0, l.jsxs)("div", {
1871
1882
  className: "group grid w-full grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-2",
1872
1883
  "data-testid": "test-suite-title",
1873
- "data-test-suite": r,
1884
+ "data-test-suite": a,
1874
1885
  children: [
1875
1886
  t && (0, l.jsx)("span", {
1876
- className: `flex w-[16px] shrink-0 items-center justify-center ${u > 0 ? "status-icon-flash" : ""}`,
1887
+ className: `flex w-[16px] shrink-0 items-center justify-center ${h > 0 ? "status-icon-flash" : ""}`,
1877
1888
  style: {
1878
1889
  color: s
1879
1890
  },
1880
1891
  children: t
1881
- }, u),
1882
- (0, l.jsx)(d.A, {
1883
- title: a,
1892
+ }, h),
1893
+ (0, l.jsx)(u.A, {
1894
+ title: o,
1884
1895
  mouseLeaveDelay: 0,
1885
1896
  children: (0, l.jsx)("span", {
1886
1897
  className: "truncate text-[13px] font-medium tracking-tight opacity-80",
1887
- children: a
1898
+ children: o
1888
1899
  })
1889
1900
  }),
1890
1901
  (0, l.jsx)("div", {
1891
1902
  className: "opacity-0 transition-opacity duration-200 group-hover:opacity-100",
1892
- children: (0, l.jsx)(d.A, {
1903
+ children: (0, l.jsx)(u.A, {
1893
1904
  title: "Re-run this suite",
1894
1905
  mouseLeaveDelay: 0,
1895
1906
  children: (0, l.jsx)(p.Ay, {
1896
1907
  type: "text",
1897
1908
  size: "small",
1898
- icon: (0, l.jsx)(K.A, {
1909
+ icon: (0, l.jsx)(Q.A, {
1899
1910
  size: 14,
1900
1911
  strokeWidth: 2.5
1901
1912
  }),
1902
- disabled: !n,
1913
+ disabled: !i,
1903
1914
  onClick: (e)=>{
1904
- e.stopPropagation(), null == n || n();
1915
+ e.stopPropagation(), i?.();
1905
1916
  },
1906
1917
  className: "inline-flex h-5 w-5 items-center justify-center p-0",
1907
1918
  "data-testid": "test-suite-rerun",
@@ -1913,17 +1924,17 @@
1913
1924
  })
1914
1925
  ]
1915
1926
  });
1916
- }, eh = (e)=>{
1917
- let { testFiles: t, statusMap: s, caseMap: o, rootPath: a, projects: r, loading: n, connected: c, openFiles: d, activeFile: p, token: h, filterText: u, onExpandChange: f, onSelect: g, onRerunFile: j, onRerunTestCase: v } = e, { filteredTestFiles: y, filteredCaseMap: _ } = (0, i.useMemo)(()=>{
1918
- if (!u.trim()) return {
1927
+ }, ex = (e)=>{
1928
+ let { testFiles: t, statusMap: s, caseMap: r, rootPath: o, projects: a, loading: i, connected: c, openFiles: d, activeFile: u, token: p, filterText: h, onExpandChange: f, onSelect: x, onRerunFile: j, onRerunTestCase: v } = e, { filteredTestFiles: y, filteredCaseMap: _ } = (0, n.useMemo)(()=>{
1929
+ if (!h.trim()) return {
1919
1930
  filteredTestFiles: t,
1920
- filteredCaseMap: o
1931
+ filteredCaseMap: r
1921
1932
  };
1922
- let e = u.toLowerCase(), s = [], l = {};
1923
- for (let a of t){
1924
- let t = a.testPath, r = t.toLowerCase().includes(e), i = o[t] ?? {}, n = {};
1933
+ let e = h.toLowerCase(), s = [], l = {};
1934
+ for (let o of t){
1935
+ let t = o.testPath, a = t.toLowerCase().includes(e), i = r[t] ?? {}, n = {};
1925
1936
  for (let [t, s] of Object.entries(i))(s.name.toLowerCase().includes(e) || s.fullName.toLowerCase().includes(e)) && (n[t] = s);
1926
- (r || Object.keys(n).length > 0) && (s.push(a), l[t] = r ? i : n);
1937
+ (a || Object.keys(n).length > 0) && (s.push(o), l[t] = a ? i : n);
1927
1938
  }
1928
1939
  return {
1929
1940
  filteredTestFiles: s,
@@ -1931,9 +1942,9 @@
1931
1942
  };
1932
1943
  }, [
1933
1944
  t,
1934
- o,
1935
- u
1936
- ]), b = (0, i.useCallback)((e, t)=>{
1945
+ r,
1946
+ h
1947
+ ]), w = (0, n.useCallback)((e, t)=>{
1937
1948
  if (0 === t.length) return [
1938
1949
  {
1939
1950
  key: `${e}::__empty`,
@@ -1955,10 +1966,10 @@
1955
1966
  for (let e of t){
1956
1967
  let t = s, l = e.parentNames;
1957
1968
  for(let e = 0; e < l.length; e++){
1958
- let s = l[e], o = l.slice(0, e + 1);
1969
+ let s = l[e], r = l.slice(0, e + 1);
1959
1970
  t.children.has(s) || t.children.set(s, {
1960
1971
  name: s,
1961
- fullPath: o,
1972
+ fullPath: r,
1962
1973
  children: new Map,
1963
1974
  cases: [],
1964
1975
  status: "idle"
@@ -1966,94 +1977,94 @@
1966
1977
  }
1967
1978
  t.cases.push(e);
1968
1979
  }
1969
- let o = (e)=>{
1980
+ let r = (e)=>{
1970
1981
  let t = [];
1971
- for (let s of e.children.values())t.push(o(s));
1982
+ for (let s of e.children.values())t.push(r(s));
1972
1983
  for (let s of e.cases)t.push(s.status);
1973
1984
  return t.some((e)=>"fail" === e) ? "fail" : t.some((e)=>"running" === e) ? "running" : t.every((e)=>"pass" === e) ? "pass" : t.every((e)=>"skip" === e) ? "skip" : t.some((e)=>"pass" === e) ? "pass" : "idle";
1974
- }, a = (t, s)=>{
1975
- let r = [];
1985
+ }, o = (t, s)=>{
1986
+ let a = [];
1976
1987
  for (let i of t.children.values()){
1977
- let t = o(i), n = C[t], d = `${s}::suite::${i.fullPath.join("::")}`, p = i.fullPath.join(" ");
1978
- r.push({
1988
+ let t = r(i), n = b[t], d = `${s}::suite::${i.fullPath.join("::")}`, u = i.fullPath.join(" ");
1989
+ a.push({
1979
1990
  key: d,
1980
- title: (0, l.jsx)(ep, {
1991
+ title: (0, l.jsx)(ef, {
1981
1992
  icon: n.icon,
1982
1993
  iconColor: n.color,
1983
1994
  status: t,
1984
1995
  name: i.name,
1985
- fullName: p,
1996
+ fullName: u,
1986
1997
  onRerun: c ? ()=>{
1987
- v(e, p);
1998
+ v(e, u);
1988
1999
  } : void 0,
1989
- buttonTextColor: h.colorTextSecondary
2000
+ buttonTextColor: p.colorTextSecondary
1990
2001
  }),
1991
- children: a(i, d),
2002
+ children: o(i, d),
1992
2003
  selectable: !1
1993
2004
  });
1994
2005
  }
1995
- for (let o of t.cases){
1996
- let t = C[o.status];
1997
- r.push({
1998
- key: `${s}::case::${o.id}`,
1999
- title: (0, l.jsx)(ei, {
2006
+ for (let r of t.cases){
2007
+ let t = b[r.status];
2008
+ a.push({
2009
+ key: `${s}::case::${r.id}`,
2010
+ title: (0, l.jsx)(ed, {
2000
2011
  icon: t.icon,
2001
2012
  iconColor: t.color,
2002
- status: o.status,
2003
- label: o.name,
2004
- caseId: o.id,
2013
+ status: r.status,
2014
+ label: r.name,
2015
+ caseId: r.id,
2005
2016
  onRerun: c ? ()=>{
2006
- v(e, o.fullName);
2017
+ v(e, r.fullName);
2007
2018
  } : void 0,
2008
- buttonTextColor: h.colorTextSecondary
2019
+ buttonTextColor: p.colorTextSecondary
2009
2020
  }),
2010
2021
  isLeaf: !0,
2011
2022
  selectable: !1
2012
2023
  });
2013
2024
  }
2014
- return r;
2025
+ return a;
2015
2026
  };
2016
- return a(s, e);
2027
+ return o(s, e);
2017
2028
  }, [
2018
2029
  c,
2019
2030
  v,
2020
- h.colorTextSecondary
2021
- ]), k = (0, i.useMemo)(()=>{
2031
+ p.colorTextSecondary
2032
+ ]), k = (0, n.useMemo)(()=>{
2022
2033
  let e = [
2023
2034
  ...new Set(y.map((e)=>e.projectName))
2024
2035
  ], t = new Map;
2025
- for (let e of r)t.set(e.name, e.projectRoot);
2026
- let o = (e, t)=>{
2027
- let o = e.testPath, r = s[o] ?? "idle", i = w[r], n = x(o, t ?? a), d = Object.values(_[o] ?? {});
2036
+ for (let e of a)t.set(e.name, e.projectRoot);
2037
+ let r = (e, t)=>{
2038
+ let r = e.testPath, a = s[r] ?? "idle", i = C[a], n = m(r, t ?? o), d = Object.values(_[r] ?? {});
2028
2039
  return {
2029
- key: o,
2030
- title: (0, l.jsx)(ec, {
2040
+ key: r,
2041
+ title: (0, l.jsx)(ep, {
2031
2042
  icon: i.icon,
2032
2043
  iconColor: i.color,
2033
- status: r,
2044
+ status: a,
2034
2045
  relativePath: n,
2035
- filePath: o,
2036
- onOpen: ()=>m(o),
2046
+ filePath: r,
2047
+ onOpen: ()=>g(r),
2037
2048
  onRerun: c ? ()=>{
2038
- j(o);
2049
+ j(r);
2039
2050
  } : void 0,
2040
- textColor: h.colorTextSecondary
2051
+ textColor: p.colorTextSecondary
2041
2052
  }),
2042
- children: b(o, d)
2053
+ children: w(r, d)
2043
2054
  };
2044
2055
  };
2045
2056
  return e.length > 1 ? e.map((e)=>{
2046
- 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";
2057
+ let o = y.filter((t)=>t.projectName === e), a = `__project__${e}`, i = t.get(e), n = o.map((e)=>s[e.testPath] ?? "idle"), c = "idle";
2047
2058
  n.some((e)=>"fail" === e) ? c = "fail" : n.some((e)=>"running" === e) ? c = "running" : n.length > 0 && n.every((e)=>"pass" === e) && (c = "pass");
2048
- let d = w[c];
2059
+ let d = C[c];
2049
2060
  return {
2050
- key: r,
2061
+ key: a,
2051
2062
  title: (0, l.jsxs)("div", {
2052
2063
  className: "flex items-center gap-1.5",
2053
2064
  "data-testid": "test-project-title",
2054
2065
  "data-test-project": e,
2055
2066
  children: [
2056
- (0, l.jsx)(el.A, {
2067
+ (0, l.jsx)(ea.A, {
2057
2068
  size: 14,
2058
2069
  style: {
2059
2070
  color: d.color
@@ -2064,28 +2075,28 @@
2064
2075
  (0, l.jsx)("span", {
2065
2076
  className: "truncate text-sm font-medium",
2066
2077
  style: {
2067
- color: h.colorText
2078
+ color: p.colorText
2068
2079
  },
2069
2080
  children: e
2070
2081
  })
2071
2082
  ]
2072
2083
  }),
2073
- children: a.map((e)=>o(e, i)),
2084
+ children: o.map((e)=>r(e, i)),
2074
2085
  selectable: !1
2075
2086
  };
2076
- }) : y.map((e)=>o(e));
2087
+ }) : y.map((e)=>r(e));
2077
2088
  }, [
2078
- b,
2089
+ w,
2079
2090
  _,
2080
2091
  c,
2081
2092
  j,
2082
- r,
2083
2093
  a,
2094
+ o,
2084
2095
  s,
2085
2096
  y,
2086
- h
2097
+ p
2087
2098
  ]);
2088
- return n ? (0, l.jsx)("div", {
2099
+ return i ? (0, l.jsx)("div", {
2089
2100
  className: "space-y-2 p-3",
2090
2101
  children: [
2091
2102
  1,
@@ -2094,12 +2105,12 @@
2094
2105
  ].map((e)=>(0, l.jsxs)("div", {
2095
2106
  className: "flex items-center gap-2",
2096
2107
  children: [
2097
- (0, l.jsx)(et.A.Avatar, {
2108
+ (0, l.jsx)(er.A.Avatar, {
2098
2109
  active: !0,
2099
2110
  size: "small",
2100
2111
  shape: "circle"
2101
2112
  }),
2102
- (0, l.jsx)(et.A.Input, {
2113
+ (0, l.jsx)(er.A.Input, {
2103
2114
  active: !0,
2104
2115
  size: "small",
2105
2116
  style: {
@@ -2120,27 +2131,27 @@
2120
2131
  className: "text-(--muted-foreground)",
2121
2132
  children: "No matching tests found"
2122
2133
  })
2123
- }) : (0, l.jsx)(es.A, {
2134
+ }) : (0, l.jsx)(eo.A, {
2124
2135
  blockNode: !0,
2125
2136
  "data-testid": "test-files-tree",
2126
2137
  showLine: !1,
2127
- switcherIcon: (e)=>e.expanded ? (0, l.jsx)(eo.A, {
2138
+ switcherIcon: (e)=>e.expanded ? (0, l.jsx)(ei.A, {
2128
2139
  size: 12,
2129
2140
  strokeWidth: 2.5
2130
- }) : (0, l.jsx)(ea.A, {
2141
+ }) : (0, l.jsx)(en.A, {
2131
2142
  size: 12,
2132
2143
  strokeWidth: 2.5
2133
2144
  }),
2134
2145
  showIcon: !0,
2135
2146
  expandAction: "click",
2136
2147
  expandedKeys: d,
2137
- selectedKeys: p ? [
2138
- p
2148
+ selectedKeys: u ? [
2149
+ u
2139
2150
  ] : [],
2140
2151
  onExpand: (e)=>f(e.filter((e)=>"string" == typeof e)),
2141
2152
  onSelect: (e, t)=>{
2142
2153
  let s = t.node.key, l = y.map((e)=>e.testPath);
2143
- "string" == typeof s && l.includes(s) && g(s);
2154
+ "string" == typeof s && l.includes(s) && x(s);
2144
2155
  },
2145
2156
  treeData: k,
2146
2157
  className: "bg-transparent",
@@ -2154,11 +2165,11 @@
2154
2165
  children: "Reconnecting..."
2155
2166
  })
2156
2167
  });
2157
- }, eu = (e)=>{
2168
+ }, em = (e)=>{
2158
2169
  if (!e) return {
2159
2170
  mode: "full"
2160
2171
  };
2161
- if ("string" == typeof e && R(e)) return {
2172
+ if ("string" == typeof e && $(e)) return {
2162
2173
  mode: "preset",
2163
2174
  preset: e,
2164
2175
  orientation: "portrait"
@@ -2174,14 +2185,14 @@
2174
2185
  return {
2175
2186
  mode: "full"
2176
2187
  };
2177
- }, ef = (e, t, s)=>Math.min(s, Math.max(t, e)), ex = (e)=>{
2178
- let { token: t, selection: s, active: o, onResponsiveResize: a, children: r, ...n } = e, c = (0, i.useRef)(null), d = ((e)=>{
2188
+ }, eg = (e, t, s)=>Math.min(s, Math.max(t, e)), ej = (e)=>{
2189
+ let { token: t, selection: s, active: r, onResponsiveResize: o, children: a, ...i } = e, c = (0, n.useRef)(null), d = ((e)=>{
2179
2190
  if ("full" === e.mode) return null;
2180
2191
  if ("responsive" === e.mode) return {
2181
2192
  width: e.width,
2182
2193
  height: e.height
2183
2194
  };
2184
- let t = U(e.preset);
2195
+ let t = T(e.preset);
2185
2196
  return "landscape" === e.orientation ? {
2186
2197
  width: t.height,
2187
2198
  height: t.width
@@ -2190,30 +2201,29 @@
2190
2201
  height: t.height
2191
2202
  };
2192
2203
  })(s);
2193
- return ((0, i.useLayoutEffect)(()=>{
2194
- if (!o || "responsive" !== s.mode || !a) return;
2204
+ return ((0, n.useLayoutEffect)(()=>{
2205
+ if (!r || "responsive" !== s.mode || !o) return;
2195
2206
  let e = c.current;
2196
2207
  if (!e) return;
2197
2208
  let t = !0, l = new ResizeObserver((e)=>{
2198
- var l;
2199
- let o = null == (l = e[0]) ? void 0 : l.contentRect;
2200
- if (!o) return;
2209
+ let l = e[0]?.contentRect;
2210
+ if (!l) return;
2201
2211
  if (t) {
2202
2212
  t = !1;
2203
2213
  return;
2204
2214
  }
2205
- if (o.width <= 0 || o.height <= 0) return;
2206
- let r = ef(Math.round(o.width), 1, 1e4), i = ef(Math.round(o.height), 1, 1e4);
2207
- (r !== s.width || i !== s.height) && a({
2215
+ if (l.width <= 0 || l.height <= 0) return;
2216
+ let r = eg(Math.round(l.width), 1, 1e4), a = eg(Math.round(l.height), 1, 1e4);
2217
+ (r !== s.width || a !== s.height) && o({
2208
2218
  width: r,
2209
- height: i
2219
+ height: a
2210
2220
  });
2211
2221
  });
2212
2222
  return l.observe(e), ()=>l.disconnect();
2213
2223
  }, [
2214
- o,
2224
+ r,
2215
2225
  s,
2216
- a
2226
+ o
2217
2227
  ]), d) ? (0, l.jsx)("div", {
2218
2228
  className: "flex h-full w-full items-start justify-center p-4 overflow-auto",
2219
2229
  children: (0, l.jsx)("div", {
@@ -2233,79 +2243,72 @@
2233
2243
  maxWidth: "responsive" === s.mode ? 1e4 : void 0,
2234
2244
  maxHeight: "responsive" === s.mode ? 1e4 : void 0
2235
2245
  },
2236
- ...n,
2237
- children: r
2246
+ ...i,
2247
+ children: a
2238
2248
  })
2239
2249
  }) : (0, l.jsx)("div", {
2240
2250
  className: "h-full w-full",
2241
2251
  style: {
2242
2252
  background: t.colorBgContainer
2243
2253
  },
2244
- ...n,
2245
- children: r
2254
+ ...i,
2255
+ children: a
2246
2256
  });
2247
- }, em = async (e, t, s)=>{
2248
- if (!e || null === s || "function" != typeof s.postMessage) return;
2257
+ }, ev = (e)=>"object" == typeof e && null !== e, ey = (e, t)=>"string" == typeof e[t], e_ = (e)=>"object" == typeof e && null !== e && "requestId" in e && "string" == typeof e.requestId ? e.requestId : "unknown-request", ew = async (e, t, s)=>{
2258
+ if (null === s || "function" != typeof s.postMessage) return;
2249
2259
  let l = (e)=>{
2250
2260
  s.postMessage({
2251
- type: "__rstest_snapshot_response__",
2261
+ type: r,
2252
2262
  payload: e
2253
2263
  }, "*");
2254
2264
  };
2265
+ if ("unknown-request" === e_(t)) return void l({
2266
+ requestId: e_(t),
2267
+ error: "Invalid dispatch request payload: expected an object with string requestId."
2268
+ });
2269
+ if (!e) return void l({
2270
+ requestId: t.requestId,
2271
+ error: "Container RPC is not ready for dispatch."
2272
+ });
2255
2273
  try {
2256
- let s;
2257
- switch(t.method){
2258
- case "resolveSnapshotPath":
2259
- s = await e.resolveSnapshotPath(t.args.testPath);
2260
- break;
2261
- case "readSnapshotFile":
2262
- s = await e.readSnapshotFile(t.args.filepath);
2263
- break;
2264
- case "saveSnapshotFile":
2265
- s = await e.saveSnapshotFile(t.args.filepath, t.args.content);
2266
- break;
2267
- case "removeSnapshotFile":
2268
- s = await e.removeSnapshotFile(t.args.filepath);
2269
- break;
2270
- default:
2271
- s = void 0;
2272
- }
2273
- l({
2274
- id: t.id,
2275
- result: s
2276
- });
2274
+ l(await e.dispatch(t));
2277
2275
  } catch (e) {
2278
2276
  l({
2279
- id: t.id,
2277
+ requestId: t.requestId,
2280
2278
  error: e instanceof Error ? e.message : String(e)
2281
2279
  });
2282
2280
  }
2283
- }, eg = [
2281
+ }, eC = [
2284
2282
  1e3,
2285
2283
  2e3,
2286
2284
  4e3,
2287
2285
  8e3,
2288
2286
  16e3,
2289
2287
  3e4
2290
- ], ej = function(e, t, s) {
2291
- let l = arguments.length > 3 && void 0 !== arguments[3] && arguments[3], o = new URL("/runner.html", t || window.location.origin);
2292
- return o.searchParams.set("testFile", e), s && o.searchParams.set("testNamePattern", s), l && o.searchParams.set("t", Date.now().toString()), o.toString();
2288
+ ], eb = function(e, t, s) {
2289
+ let l = arguments.length > 3 && void 0 !== arguments[3] && arguments[3], r = arguments.length > 4 ? arguments[4] : void 0, o = new URL("/runner.html", t || window.location.origin);
2290
+ return o.searchParams.set("testFile", e), s && o.searchParams.set("testNamePattern", s), r && o.searchParams.set("runId", r), l && o.searchParams.set("t", Date.now().toString()), o.toString();
2293
2291
  };
2294
- var ev = s(5999);
2295
- let ey = function() {
2296
- for(var e, t = arguments.length, s = Array(t), l = 0; l < t; l++)s[l] = arguments[l];
2297
- (null == (e = window.__RSTEST_BROWSER_OPTIONS__) ? void 0 : e.debug) === !0 && console.log(...s);
2298
- }, e_ = (e)=>{
2299
- var t, s;
2300
- let { options: a, theme: r, setTheme: n } = e, { token: d } = o.A.useToken(), [p, h] = (0, i.useState)([]), [u, f] = (0, i.useState)(null), [x, m] = (0, i.useState)({}), [g, j] = (0, i.useState)({}), [v, y] = (0, i.useState)([]), [_, w] = (0, i.useState)(""), C = (0, i.useCallback)((e)=>{
2301
- let t = 5381;
2302
- for(let e = 0; e < a.rootPath.length; e++)t = 33 * t ^ a.rootPath.charCodeAt(e);
2303
- return `rstest-viewport:${(t >>> 0).toString(16)}:${e}`;
2292
+ var ek = s(5999);
2293
+ let eS = function() {
2294
+ for(var e = arguments.length, t = Array(e), s = 0; s < e; s++)t[s] = arguments[s];
2295
+ window.__RSTEST_BROWSER_OPTIONS__?.debug === !0 && console.log(...t);
2296
+ }, eF = (e)=>{
2297
+ try {
2298
+ return new URL(e.src, window.location.href).searchParams.get("runId") ?? void 0;
2299
+ } catch {
2300
+ return;
2301
+ }
2302
+ }, eN = (e)=>{
2303
+ let { options: t, theme: s, setTheme: a } = e, { token: i } = o.A.useToken(), [c, u] = (0, n.useState)([]), [p, h] = (0, n.useState)(null), [f, x] = (0, n.useState)({}), [m, g] = (0, n.useState)({}), [j, v] = (0, n.useState)([]), [y, _] = (0, n.useState)(""), w = (0, n.useRef)(new Map), [C, b] = (0, n.useState)({}), k = (0, n.useCallback)((e)=>{
2304
+ let s = 5381;
2305
+ for(let e = 0; e < t.rootPath.length; e++)s = 33 * s ^ t.rootPath.charCodeAt(e);
2306
+ return `rstest-viewport:${(s >>> 0).toString(16)}:${e}`;
2304
2307
  }, [
2305
- a.rootPath
2306
- ]), b = (0, i.useCallback)((e)=>{
2308
+ t.rootPath
2309
+ ]), S = (0, n.useCallback)((e)=>{
2307
2310
  try {
2308
- let t = localStorage.getItem(C(e));
2311
+ let t = localStorage.getItem(k(e));
2309
2312
  if (!t) return null;
2310
2313
  let s = JSON.parse(t);
2311
2314
  if (!s || "object" != typeof s) return null;
@@ -2324,7 +2327,7 @@
2324
2327
  }
2325
2328
  if ("preset" === l) {
2326
2329
  let e = s.preset, t = s.orientation;
2327
- if (R(e) && ("portrait" === t || "landscape" === t)) return {
2330
+ if ($(e) && ("portrait" === t || "landscape" === t)) return {
2328
2331
  mode: "preset",
2329
2332
  preset: e,
2330
2333
  orientation: t
@@ -2335,38 +2338,49 @@
2335
2338
  return null;
2336
2339
  }
2337
2340
  }, [
2338
- C
2339
- ]), k = (0, i.useCallback)((e, t)=>{
2341
+ k
2342
+ ]), F = (0, n.useCallback)((e, t)=>{
2340
2343
  try {
2341
- localStorage.setItem(C(e), JSON.stringify(t));
2344
+ localStorage.setItem(k(e), JSON.stringify(t));
2342
2345
  } catch {}
2343
2346
  }, [
2344
- C
2345
- ]), [F, S] = (0, i.useState)(()=>{
2347
+ k
2348
+ ]), [N, A] = (0, n.useState)(()=>{
2346
2349
  let e = {};
2347
- for (let t of a.projects ?? [])e[t.name] = b(t.name) ?? eu(t.viewport);
2350
+ for (let s of t.projects ?? [])e[s.name] = S(s.name) ?? em(s.viewport);
2348
2351
  return e;
2349
2352
  });
2350
- (0, i.useEffect)(()=>{
2351
- S((e)=>{
2352
- let t = {
2353
+ (0, n.useEffect)(()=>{
2354
+ A((e)=>{
2355
+ let s = {
2353
2356
  ...e
2354
2357
  };
2355
- for (let e of a.projects ?? [])t[e.name] || (t[e.name] = b(e.name) ?? eu(e.viewport));
2356
- return t;
2358
+ for (let e of t.projects ?? [])s[e.name] || (s[e.name] = S(e.name) ?? em(e.viewport));
2359
+ return s;
2357
2360
  });
2358
2361
  }, [
2359
- a.projects,
2360
- b
2362
+ t.projects,
2363
+ S
2361
2364
  ]);
2362
- let N = (0, i.useCallback)((e, t)=>{
2363
- ey("[Container] handleReloadTestFile called:", e, t);
2364
- let s = document.querySelector(`iframe[data-test-file="${e}"]`);
2365
- if (ey("[Container] Found iframe:", s), s) {
2366
- m((t)=>({
2365
+ let P = (0, n.useCallback)(async (e, s)=>(eS("[Container] handleReloadTestFile called:", e, s), h(e), new Promise((l, r)=>{
2366
+ let o = w.current.get(e);
2367
+ o && o.reject(Error(`Reload for "${e}" was superseded by a newer request.`)), w.current.set(e, {
2368
+ resolve: l,
2369
+ reject: r
2370
+ });
2371
+ let a = document.querySelector(`iframe[data-test-file="${e}"]`);
2372
+ if (eS("[Container] Found iframe:", a), !a) {
2373
+ w.current.delete(e), r(Error(`Cannot reload test file "${e}": iframe not found`));
2374
+ return;
2375
+ }
2376
+ let i = "function" == typeof globalThis.crypto?.randomUUID ? globalThis.crypto.randomUUID() : `run-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
2377
+ b((t)=>({
2378
+ ...t,
2379
+ [e]: i
2380
+ })), x((t)=>({
2367
2381
  ...t,
2368
2382
  [e]: "running"
2369
- })), j((t)=>{
2383
+ })), g((t)=>{
2370
2384
  let s = t[e] ?? {}, l = {};
2371
2385
  for (let [e, t] of Object.entries(s))l[e] = {
2372
2386
  ...t,
@@ -2377,42 +2391,40 @@
2377
2391
  [e]: l
2378
2392
  };
2379
2393
  });
2380
- let l = ej(e, a.runnerUrl, t);
2381
- ey("[Container] Setting iframe.src to:", l), s.src = l;
2382
- }
2383
- }, [
2384
- a.runnerUrl
2385
- ]), { rpc: A, loading: M, connected: z } = ((e, t, s)=>{
2386
- 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), h = (0, i.useRef)(null);
2387
- return (0, i.useEffect)(()=>{
2394
+ let n = eb(e, t.runnerUrl, s, !1, i);
2395
+ eS("[Container] Setting iframe.src to:", n), a.src = n;
2396
+ })), [
2397
+ t.runnerUrl
2398
+ ]), { rpc: M, loading: z, connected: R } = ((e, t, s)=>{
2399
+ let [l, r] = (0, n.useState)(null), [o, a] = (0, n.useState)(!0), [i, c] = (0, n.useState)(!1), d = (0, n.useRef)(e), u = (0, n.useRef)(s), p = (0, n.useRef)(null);
2400
+ return (0, n.useEffect)(()=>{
2388
2401
  d.current = e;
2389
2402
  }, [
2390
2403
  e
2391
- ]), (0, i.useEffect)(()=>{
2392
- p.current = s;
2404
+ ]), (0, n.useEffect)(()=>{
2405
+ u.current = s;
2393
2406
  }, [
2394
2407
  s
2395
- ]), (0, i.useEffect)(()=>{
2396
- if (!t) return void r(!1);
2397
- let e = null, s = 0, l = null, a = !0, i = ()=>{
2408
+ ]), (0, n.useEffect)(()=>{
2409
+ if (!t) return void a(!1);
2410
+ let e = null, s = 0, l = null, o = !0, i = ()=>{
2398
2411
  let n;
2399
- if (!a) return;
2400
- h.current = e = new WebSocket((n = "https:" === window.location.protocol ? "wss:" : "ws:", `${n}//${window.location.hostname}:${t}`));
2401
- let u = {
2412
+ if (!o) return;
2413
+ p.current = e = new WebSocket((n = "https:" === window.location.protocol ? "wss:" : "ws:", `${n}//${window.location.hostname}:${t}`));
2414
+ let h = {
2402
2415
  onTestFileUpdate (e) {
2403
- ey("[Container RPC] onTestFileUpdate called:", e), d.current(e);
2416
+ eS("[Container RPC] onTestFileUpdate called:", e), d.current(e);
2404
2417
  },
2405
- reloadTestFile (e, t) {
2406
- var s;
2407
- ey("[Container RPC] reloadTestFile called:", e, t), null == (s = p.current) || s.call(p, e, t);
2418
+ async reloadTestFile (e, t) {
2419
+ eS("[Container RPC] reloadTestFile called:", e, t), await u.current?.(e, t);
2408
2420
  }
2409
2421
  };
2410
2422
  e.onopen = ()=>{
2411
- if (!a || !e) return;
2412
- ey("[Container] WebSocket connected"), s = 0, c(!0);
2413
- let t = (0, ev.L)(u, {
2423
+ if (!o || !e) return;
2424
+ eS("[Container] WebSocket connected"), s = 0, c(!0);
2425
+ let t = (0, ek.L)(h, {
2414
2426
  post: (t)=>{
2415
- (null == e ? void 0 : e.readyState) === WebSocket.OPEN && e.send(JSON.stringify(t));
2427
+ e?.readyState === WebSocket.OPEN && e.send(JSON.stringify(t));
2416
2428
  },
2417
2429
  on: (t)=>{
2418
2430
  e && (e.onmessage = (e)=>{
@@ -2423,67 +2435,84 @@
2423
2435
  });
2424
2436
  }
2425
2437
  });
2426
- o(t), t.getTestFiles().then((e)=>{
2427
- a && (d.current(e), r(!1));
2438
+ r(t), t.getTestFiles().then((e)=>{
2439
+ o && (d.current(e), a(!1));
2428
2440
  }).catch(()=>{
2429
- a && r(!1);
2441
+ o && a(!1);
2430
2442
  });
2431
2443
  }, e.onclose = ()=>{
2432
- if (h.current !== e || !a) return;
2433
- ey("[Container] WebSocket disconnected"), o(null), c(!1);
2434
- let t = eg[Math.min(s, eg.length - 1)];
2435
- ey(`[Container] Reconnecting in ${t}ms (attempt ${s + 1})`), s++, l = setTimeout(()=>{
2436
- a && i();
2444
+ if (p.current !== e || !o) return;
2445
+ eS("[Container] WebSocket disconnected"), r(null), c(!1);
2446
+ let t = eC[Math.min(s, eC.length - 1)];
2447
+ eS(`[Container] Reconnecting in ${t}ms (attempt ${s + 1})`), s++, l = setTimeout(()=>{
2448
+ o && i();
2437
2449
  }, t);
2438
2450
  }, e.onerror = ()=>{
2439
- a && ey("[Container] WebSocket error");
2451
+ o && eS("[Container] WebSocket error");
2440
2452
  };
2441
2453
  };
2442
2454
  return i(), ()=>{
2443
- a = !1, l && clearTimeout(l), e && e.close();
2455
+ o = !1, l && clearTimeout(l), e && e.close();
2444
2456
  };
2445
2457
  }, [
2446
2458
  t
2447
2459
  ]), {
2448
2460
  rpc: l,
2449
- loading: a,
2450
- connected: n
2461
+ loading: o,
2462
+ connected: i
2451
2463
  };
2452
- })(h, null == a ? void 0 : a.wsPort, N);
2453
- (0, i.useEffect)(()=>{
2454
- m((e)=>{
2464
+ })(u, t?.wsPort, P);
2465
+ (0, n.useEffect)(()=>()=>{
2466
+ if (0 === w.current.size) return;
2467
+ let e = Error("Browser runner unmounted before reload completed");
2468
+ for (let t of w.current.values())t.reject(e);
2469
+ w.current.clear();
2470
+ }, []), (0, n.useEffect)(()=>{
2471
+ x((e)=>{
2472
+ let t = {};
2473
+ for (let s of c)t[s.testPath] = e[s.testPath] ?? "idle";
2474
+ return t;
2475
+ }), g((e)=>{
2455
2476
  let t = {};
2456
- for (let s of p)t[s.testPath] = e[s.testPath] ?? "idle";
2477
+ for (let s of c)t[s.testPath] = e[s.testPath] ?? {};
2457
2478
  return t;
2458
- }), j((e)=>{
2479
+ }), b((e)=>{
2459
2480
  let t = {};
2460
- for (let s of p)t[s.testPath] = e[s.testPath] ?? {};
2481
+ for (let s of c)e[s.testPath] && (t[s.testPath] = e[s.testPath]);
2461
2482
  return t;
2462
2483
  });
2463
- let e = p.map((e)=>e.testPath);
2464
- y((t)=>t.filter((t)=>e.includes(t))), f((t)=>!t && p.length > 0 || t && !e.includes(t) && p.length > 0 ? p[0].testPath : t);
2484
+ let e = c.map((e)=>e.testPath);
2485
+ v((t)=>t.filter((t)=>e.includes(t))), h((t)=>!t && c.length > 0 || t && !e.includes(t) && c.length > 0 ? c[0].testPath : t);
2465
2486
  }, [
2466
- p
2487
+ c
2488
+ ]), (0, n.useEffect)(()=>{
2489
+ M && R && M.onRunnerFramesReady(c.map((e)=>e.testPath)).catch((e)=>{
2490
+ eS("[Container RPC] Failed to notify runner frames ready:", e);
2491
+ });
2492
+ }, [
2493
+ M,
2494
+ R,
2495
+ c
2467
2496
  ]);
2468
- let P = (0, i.useCallback)((e)=>"pass" === e ? "pass" : "fail" === e ? "fail" : "skip" === e || "todo" === e ? "skip" : "running", []), O = (0, i.useCallback)((e)=>{
2469
- f(e);
2470
- }, []), U = (0, i.useCallback)((e, t)=>{
2497
+ let O = (0, n.useCallback)((e)=>"pass" === e ? "pass" : "fail" === e ? "fail" : "skip" === e || "todo" === e ? "skip" : "running", []), U = (0, n.useCallback)((e)=>{
2498
+ h(e);
2499
+ }, []), E = (0, n.useCallback)((e, t)=>{
2471
2500
  let s = (t.parentNames ?? []).filter(Boolean), l = [
2472
2501
  ...s,
2473
2502
  t.name
2474
2503
  ].join(" ") || t.name;
2475
- j((o)=>{
2476
- let a = o[e] ?? {};
2504
+ g((r)=>{
2505
+ let o = r[e] ?? {};
2477
2506
  return {
2478
- ...o,
2507
+ ...r,
2479
2508
  [e]: {
2480
- ...a,
2509
+ ...o,
2481
2510
  [t.testId]: {
2482
2511
  id: t.testId,
2483
2512
  name: t.name,
2484
2513
  parentNames: s,
2485
2514
  fullName: l,
2486
- status: P(t.status),
2515
+ status: O(t.status),
2487
2516
  filePath: t.testPath || e,
2488
2517
  location: t.location
2489
2518
  }
@@ -2491,101 +2520,130 @@
2491
2520
  };
2492
2521
  });
2493
2522
  }, [
2494
- P
2495
- ]), E = (0, i.useCallback)((e)=>{
2496
- f(e), A && z && A.rerunTest(e);
2523
+ O
2524
+ ]), T = (0, n.useCallback)((e)=>{
2525
+ h(e), M && R && M.rerunTest(e);
2497
2526
  }, [
2498
- A,
2499
- z
2500
- ]), T = (0, i.useCallback)((e, t)=>{
2501
- f(e), A && z && A.rerunTest(e, t);
2527
+ M,
2528
+ R
2529
+ ]), B = (0, n.useCallback)((e, t)=>{
2530
+ h(e), M && R && M.rerunTest(e, t);
2502
2531
  }, [
2503
- A,
2504
- z
2505
- ]), $ = (0, i.useCallback)(()=>{
2506
- if (A && z) for (let e of p)A.rerunTest(e.testPath);
2532
+ M,
2533
+ R
2534
+ ]), I = (0, n.useCallback)(()=>{
2535
+ if (M && R) for (let e of c)M.rerunTest(e.testPath);
2507
2536
  }, [
2508
- p,
2509
- A,
2510
- z
2537
+ c,
2538
+ M,
2539
+ R
2511
2540
  ]);
2512
- (0, i.useEffect)(()=>{
2541
+ (0, n.useEffect)(()=>{
2513
2542
  let e = (e)=>{
2514
- var t;
2515
- let s = (null == (t = e.data) ? void 0 : t.type) !== "__rstest_dispatch__" ? null : e.data.payload;
2516
- if (s) if ("file-start" === s.type) {
2517
- let e = s.payload, t = e.testPath;
2518
- "string" == typeof t && (m((e)=>({
2519
- ...e,
2520
- [t]: "running"
2521
- })), j((e)=>{
2522
- let s = e[t] ?? {}, l = {};
2523
- for (let [e, t] of Object.entries(s))l[e] = {
2524
- ...t,
2525
- status: "running"
2526
- };
2527
- return {
2528
- ...e,
2529
- [t]: l
2530
- };
2531
- }), null == A || A.onTestFileStart({
2532
- testPath: t,
2533
- projectName: e.projectName ?? ""
2534
- }));
2535
- } else if ("case-result" === s.type) {
2536
- let e = s.payload;
2537
- (null == e ? void 0 : e.testPath) && (U(e.testPath, e), null == A || A.onTestCaseResult(e));
2538
- } else if ("file-complete" === s.type) {
2539
- let e = s.payload, t = e.testPath;
2540
- if ("string" == typeof t) {
2541
- let s = "pass" === e.status || "skip" === e.status;
2542
- m((e)=>({
2543
+ let t = e.data?.type !== "__rstest_dispatch__" ? null : e.data.payload;
2544
+ if (t) {
2545
+ if ("file-start" === t.type) {
2546
+ let e = t.payload, s = e.testPath;
2547
+ "string" == typeof s && (x((e)=>({
2548
+ ...e,
2549
+ [s]: "running"
2550
+ })), g((e)=>{
2551
+ let t = e[s] ?? {}, l = {};
2552
+ for (let [e, s] of Object.entries(t))l[e] = {
2553
+ ...s,
2554
+ status: "running"
2555
+ };
2556
+ return {
2543
2557
  ...e,
2544
- [t]: s ? "pass" : "fail"
2545
- })), j((s)=>{
2546
- let l = {};
2547
- for (let s of e.results ?? [])if (null == s ? void 0 : s.testId) {
2548
- let e = (s.parentNames ?? []).filter(Boolean), o = [
2558
+ [s]: l
2559
+ };
2560
+ }), M?.onTestFileStart({
2561
+ testPath: s,
2562
+ projectName: e.projectName ?? ""
2563
+ }));
2564
+ } else if ("case-result" === t.type) {
2565
+ let e = t.payload;
2566
+ e?.testPath && (E(e.testPath, e), M?.onTestCaseResult(e));
2567
+ } else if ("file-complete" === t.type) {
2568
+ let e = t.payload, s = e.testPath;
2569
+ if ("string" == typeof s) {
2570
+ let t = "pass" === e.status || "skip" === e.status;
2571
+ x((e)=>({
2549
2572
  ...e,
2550
- s.name
2551
- ].join(" ") || s.name;
2552
- l[s.testId] = {
2553
- id: s.testId,
2554
- name: s.name,
2555
- parentNames: e,
2556
- fullName: o,
2557
- status: P(s.status),
2558
- filePath: s.testPath || t,
2559
- location: s.location
2573
+ [s]: t ? "pass" : "fail"
2574
+ })), g((t)=>{
2575
+ let l = {};
2576
+ for (let t of e.results ?? [])if (t?.testId) {
2577
+ let e = (t.parentNames ?? []).filter(Boolean), r = [
2578
+ ...e,
2579
+ t.name
2580
+ ].join(" ") || t.name;
2581
+ l[t.testId] = {
2582
+ id: t.testId,
2583
+ name: t.name,
2584
+ parentNames: e,
2585
+ fullName: r,
2586
+ status: O(t.status),
2587
+ filePath: t.testPath || s,
2588
+ location: t.location
2589
+ };
2590
+ }
2591
+ return {
2592
+ ...t,
2593
+ [s]: l
2560
2594
  };
2595
+ });
2596
+ let l = w.current.get(s);
2597
+ l && (w.current.delete(s), l.resolve()), M?.onTestFileComplete(e);
2598
+ }
2599
+ } else if ("fatal" === t.type) {
2600
+ let e = t.payload;
2601
+ if (p && x((e)=>({
2602
+ ...e,
2603
+ [p]: "fail"
2604
+ })), w.current.size > 0) {
2605
+ let t = Error(e.message || "Browser runner fatal");
2606
+ for (let e of w.current.values())e.reject(t);
2607
+ w.current.clear();
2608
+ }
2609
+ M?.onFatal(e);
2610
+ } else if ("log" === t.type) {
2611
+ let e = t.payload;
2612
+ M?.onLog(e);
2613
+ } else if ("dispatch-rpc-request" === t.type) {
2614
+ let s = t.payload, l = ((e)=>{
2615
+ if (!ev(e) || "browser" !== e.namespace || "rpc" !== e.method) return null;
2616
+ let t = e.args;
2617
+ return ev(t) && ey(t, "id") && ey(t, "kind") && ey(t, "method") && ey(t, "testPath") && ey(t, "runId") ? t : null;
2618
+ })(s);
2619
+ if (l) {
2620
+ let t, o = (t = l.testPath, Array.from(document.querySelectorAll("iframe[data-test-file]")).find((e)=>e.dataset.testFile === t)), a = o ? eF(o) : void 0;
2621
+ if (!a || l.runId !== a) {
2622
+ let t, o;
2623
+ null !== (t = e.source) && "function" == typeof t.postMessage && e.source.postMessage({
2624
+ type: r,
2625
+ payload: (o = s.requestId, {
2626
+ requestId: o,
2627
+ stale: !0,
2628
+ error: `Ignored stale browser RPC request from previous run: ${l.kind}.${l.method} (testPath: ${l.testPath}, runId: ${l.runId}, currentRunId: ${a ?? "none"})`
2629
+ })
2630
+ }, "*");
2631
+ return;
2561
2632
  }
2562
- return {
2563
- ...s,
2564
- [t]: l
2565
- };
2566
- }), null == A || A.onTestFileComplete(e);
2633
+ }
2634
+ ew(M, s, e.source);
2567
2635
  }
2568
- } else if ("fatal" === s.type) {
2569
- u && m((e)=>({
2570
- ...e,
2571
- [u]: "fail"
2572
- }));
2573
- let e = s.payload;
2574
- null == A || A.onFatal(e);
2575
- } else if ("log" === s.type) {
2576
- let e = s.payload;
2577
- null == A || A.onLog(e);
2578
- } else "snapshot-rpc-request" === s.type && em(A, s.payload, e.source);
2636
+ }
2579
2637
  };
2580
2638
  return window.addEventListener("message", e), ()=>window.removeEventListener("message", e);
2581
2639
  }, [
2582
- u,
2583
- U,
2584
- P,
2585
- A
2640
+ p,
2641
+ E,
2642
+ O,
2643
+ M
2586
2644
  ]);
2587
- let Z = (0, i.useMemo)(()=>{
2588
- let e = Object.values(g).flatMap((e)=>Object.values(e));
2645
+ let W = (0, n.useMemo)(()=>{
2646
+ let e = Object.values(m).flatMap((e)=>Object.values(e));
2589
2647
  return {
2590
2648
  idle: e.filter((e)=>"idle" === e.status).length,
2591
2649
  running: e.filter((e)=>"running" === e.status).length,
@@ -2594,208 +2652,209 @@
2594
2652
  skip: e.filter((e)=>"skip" === e.status).length
2595
2653
  };
2596
2654
  }, [
2597
- g
2598
- ]), G = (0, i.useMemo)(()=>Object.values(x).some((e)=>"running" === e), [
2599
- x
2600
- ]), L = (0, i.useMemo)(()=>{
2655
+ m
2656
+ ]), L = (0, n.useMemo)(()=>Object.values(f).some((e)=>"running" === e), [
2657
+ f
2658
+ ]), q = (0, n.useMemo)(()=>{
2601
2659
  let e = [], t = [
2602
- ...new Set(p.map((e)=>e.projectName))
2660
+ ...new Set(c.map((e)=>e.projectName))
2603
2661
  ];
2604
2662
  if (t.length > 1) for (let s of t)e.push(`__project__${s}`);
2605
- for (let t of p){
2663
+ for (let t of c){
2606
2664
  let s = t.testPath;
2607
2665
  e.push(s);
2608
- let l = Object.values(g[s] ?? {}), o = new Set;
2666
+ let l = Object.values(m[s] ?? {}), r = new Set;
2609
2667
  for (let e of l){
2610
2668
  let t = e.parentNames;
2611
2669
  for(let e = 1; e <= t.length; e++){
2612
2670
  let s = t.slice(0, e).join("::");
2613
- o.add(s);
2671
+ r.add(s);
2614
2672
  }
2615
2673
  }
2616
- for (let t of o){
2617
- let l = t.split("::"), o = s;
2674
+ for (let t of r){
2675
+ let l = t.split("::"), r = s;
2618
2676
  for(let e = 1; e <= l.length; e++){
2619
2677
  let t = l.slice(0, e).join("::");
2620
- o = `${o}::suite::${t}`;
2678
+ r = `${r}::suite::${t}`;
2621
2679
  }
2622
- e.push(o);
2680
+ e.push(r);
2623
2681
  }
2624
2682
  }
2625
2683
  return [
2626
2684
  ...new Set(e)
2627
2685
  ];
2628
2686
  }, [
2629
- p,
2630
- g
2631
- ]), I = (null == (s = a.projects) || null == (t = s[0]) ? void 0 : t.name) || a.rootPath.split("/").filter(Boolean).pop() || "default", q = `rstest-split-${I}`, J = (0, i.useMemo)(()=>{
2687
+ c,
2688
+ m
2689
+ ]), H = t.projects?.[0]?.name || t.rootPath.split("/").filter(Boolean).pop() || "default", J = `rstest-split-${H}`, X = (0, n.useMemo)(()=>{
2632
2690
  let e = new Map;
2633
- for (let t of a.projects ?? [])e.set(t.name, t.viewport);
2691
+ for (let s of t.projects ?? [])e.set(s.name, s.viewport);
2634
2692
  return e;
2635
2693
  }, [
2636
- a.projects
2637
- ]), V = (0, i.useMemo)(()=>{
2638
- var e, t, s, l;
2639
- if (!u) return null == (l = a.projects) || null == (s = l[0]) ? void 0 : s.name;
2640
- let o = p.find((e)=>e.testPath === u);
2641
- return (null == o ? void 0 : o.projectName) ?? (null == (t = a.projects) || null == (e = t[0]) ? void 0 : e.name);
2694
+ t.projects
2695
+ ]), K = (0, n.useMemo)(()=>{
2696
+ if (!p) return t.projects?.[0]?.name;
2697
+ let e = c.find((e)=>e.testPath === p);
2698
+ return e?.projectName ?? t.projects?.[0]?.name;
2642
2699
  }, [
2643
- u,
2644
2700
  p,
2645
- a.projects
2646
- ]), K = (0, i.useMemo)(()=>V ? F[V] ?? eu(J.get(V)) : {
2701
+ c,
2702
+ t.projects
2703
+ ]), Y = (0, n.useMemo)(()=>K ? N[K] ?? em(X.get(K)) : {
2647
2704
  mode: "full"
2648
2705
  }, [
2649
- V,
2650
- F,
2651
- J
2652
- ]), X = (0, i.useCallback)((e)=>{
2653
- V && (k(V, e), S((t)=>({
2706
+ K,
2707
+ N,
2708
+ X
2709
+ ]), Q = (0, n.useCallback)((e)=>{
2710
+ K && (F(K, e), A((t)=>({
2654
2711
  ...t,
2655
- [V]: e
2712
+ [K]: e
2656
2713
  })));
2657
2714
  }, [
2658
- V,
2659
- k
2660
- ]), Y = (0, i.useCallback)((e, t)=>{
2661
- S((s)=>{
2715
+ K,
2716
+ F
2717
+ ]), ee = (0, n.useCallback)((e, t)=>{
2718
+ A((s)=>{
2662
2719
  let l = s[e];
2663
2720
  if (!l || "responsive" !== l.mode || l.width === t.width && l.height === t.height) return s;
2664
- let o = {
2721
+ let r = {
2665
2722
  mode: "responsive",
2666
2723
  width: t.width,
2667
2724
  height: t.height
2668
2725
  };
2669
- return k(e, o), {
2726
+ return F(e, r), {
2670
2727
  ...s,
2671
- [e]: o
2728
+ [e]: r
2672
2729
  };
2673
2730
  });
2674
2731
  }, [
2675
- k
2732
+ F
2676
2733
  ]);
2677
2734
  return (0, l.jsx)("div", {
2678
2735
  className: "m-0 h-screen w-full overflow-hidden p-0",
2679
2736
  style: {
2680
- background: d.colorBgContainer
2737
+ background: i.colorBgContainer
2681
2738
  },
2682
- children: (0, l.jsxs)(W, {
2739
+ children: (0, l.jsxs)(G, {
2683
2740
  direction: "horizontal",
2684
2741
  className: "h-full w-full",
2685
- autoSaveId: q,
2742
+ autoSaveId: J,
2686
2743
  children: [
2687
- (0, l.jsx)(D, {
2744
+ (0, l.jsx)(Z, {
2688
2745
  defaultSize: 32,
2689
2746
  minSize: 20,
2690
2747
  maxSize: 50,
2691
2748
  children: (0, l.jsxs)("div", {
2692
2749
  className: "flex h-full flex-col overflow-hidden",
2693
2750
  style: {
2694
- background: d.colorBgContainer
2751
+ background: i.colorBgContainer
2695
2752
  },
2696
2753
  children: [
2697
- (0, l.jsx)(H, {
2698
- theme: r,
2699
- onThemeToggle: n,
2700
- isConnected: z,
2701
- token: d,
2702
- counts: Z
2703
- }),
2704
- (0, l.jsx)(ee, {
2705
- token: d,
2706
- filterText: _,
2707
- onFilterChange: w,
2708
- isAllExpanded: L.length > 0 && L.every((e)=>v.includes(e)),
2754
+ (0, l.jsx)(V, {
2755
+ theme: s,
2756
+ onThemeToggle: a,
2757
+ isConnected: R,
2758
+ token: i,
2759
+ counts: W
2760
+ }),
2761
+ (0, l.jsx)(el, {
2762
+ token: i,
2763
+ filterText: y,
2764
+ onFilterChange: _,
2765
+ isAllExpanded: q.length > 0 && q.every((e)=>j.includes(e)),
2709
2766
  onToggleExpandAll: ()=>{
2710
- L.length > 0 && L.every((e)=>v.includes(e)) ? y([]) : y(L);
2767
+ q.length > 0 && q.every((e)=>j.includes(e)) ? v([]) : v(q);
2711
2768
  },
2712
- onRerun: z ? $ : void 0,
2713
- counts: Z,
2714
- isRunning: G
2769
+ onRerun: R ? I : void 0,
2770
+ counts: W,
2771
+ isRunning: L
2715
2772
  }),
2716
2773
  (0, l.jsx)("div", {
2717
2774
  className: "flex-1 overflow-x-hidden overflow-y-auto",
2718
2775
  style: {
2719
- background: d.colorBgContainer
2776
+ background: i.colorBgContainer
2720
2777
  },
2721
- children: (0, l.jsx)(eh, {
2722
- testFiles: p,
2723
- statusMap: x,
2724
- caseMap: g,
2725
- rootPath: a.rootPath,
2726
- projects: a.projects,
2727
- loading: M,
2728
- connected: z,
2729
- openFiles: v,
2730
- activeFile: u,
2731
- token: d,
2732
- filterText: _,
2733
- onExpandChange: y,
2734
- onSelect: O,
2735
- onRerunFile: E,
2736
- onRerunTestCase: T
2778
+ children: (0, l.jsx)(ex, {
2779
+ testFiles: c,
2780
+ statusMap: f,
2781
+ caseMap: m,
2782
+ rootPath: t.rootPath,
2783
+ projects: t.projects,
2784
+ loading: z,
2785
+ connected: R,
2786
+ openFiles: j,
2787
+ activeFile: p,
2788
+ token: i,
2789
+ filterText: y,
2790
+ onExpandChange: v,
2791
+ onSelect: U,
2792
+ onRerunFile: T,
2793
+ onRerunTestCase: B
2737
2794
  })
2738
2795
  })
2739
2796
  ]
2740
2797
  })
2741
2798
  }),
2742
- (0, l.jsx)(D, {
2799
+ (0, l.jsx)(Z, {
2743
2800
  defaultSize: 68,
2744
2801
  minSize: 40,
2745
2802
  children: (0, l.jsxs)("div", {
2746
2803
  className: "flex h-full flex-col overflow-hidden",
2747
2804
  style: {
2748
- background: d.colorBgLayout
2805
+ background: i.colorBgLayout
2749
2806
  },
2750
2807
  children: [
2751
- (0, l.jsx)(B, {
2752
- token: d,
2753
- activeFile: u ?? void 0,
2754
- rootPath: a.rootPath,
2755
- status: u ? x[u] ?? "idle" : void 0,
2756
- viewport: V ? K : void 0,
2757
- onViewportChange: V ? X : void 0
2808
+ (0, l.jsx)(D, {
2809
+ token: i,
2810
+ activeFile: p ?? void 0,
2811
+ rootPath: t.rootPath,
2812
+ status: p ? f[p] ?? "idle" : void 0,
2813
+ viewport: K ? Y : void 0,
2814
+ onViewportChange: K ? Q : void 0
2758
2815
  }),
2759
2816
  (0, l.jsxs)("div", {
2760
2817
  className: "relative min-h-0 flex-1 overflow-auto",
2761
2818
  style: {
2762
- background: d.colorBgLayout
2819
+ background: i.colorBgLayout
2763
2820
  },
2764
2821
  children: [
2765
- !u && (0, l.jsx)(c, {
2822
+ !p && (0, l.jsx)(d, {
2766
2823
  message: "Select a test file on the left to view its run output"
2767
2824
  }),
2768
- p.map((e)=>{
2769
- var t;
2770
- let s, o, r;
2771
- return s = e.testPath === u, o = F[e.projectName] ?? eu(J.get(e.projectName)), (0, l.jsx)("div", {
2825
+ c.map((e)=>{
2826
+ var s;
2827
+ let r, o, a, n;
2828
+ return r = e.testPath === p, o = C[e.testPath], a = N[e.projectName] ?? em(X.get(e.projectName)), (0, l.jsx)("div", {
2772
2829
  className: "h-full w-full",
2773
2830
  style: {
2774
- display: s ? "block" : "none"
2831
+ display: r ? "block" : "none"
2775
2832
  },
2776
- children: (0, l.jsx)(ex, {
2777
- token: d,
2778
- selection: o,
2779
- active: s,
2780
- onResponsiveResize: "responsive" === o.mode ? (t)=>Y(e.projectName, t) : void 0,
2781
- "data-testid": "responsive" === o.mode ? "viewport-resizer" : void 0,
2833
+ children: (0, l.jsx)(ej, {
2834
+ token: i,
2835
+ selection: a,
2836
+ active: r,
2837
+ onResponsiveResize: "responsive" === a.mode ? (t)=>ee(e.projectName, t) : void 0,
2838
+ "data-testid": "responsive" === a.mode ? "viewport-resizer" : void 0,
2782
2839
  "data-test-project": e.projectName,
2783
2840
  "data-test-file": e.testPath,
2784
2841
  children: (0, l.jsx)("iframe", {
2785
2842
  "data-test-file": e.testPath,
2786
- title: `Test runner for ${(r = (t = e.testPath).split("/"))[r.length - 1] || t}`,
2787
- src: ej(e.testPath, a.runnerUrl),
2843
+ title: `Test runner for ${(n = (s = e.testPath).split("/"))[n.length - 1] || s}`,
2844
+ src: o ? eb(e.testPath, t.runnerUrl, void 0, !1, o) : "about:blank",
2788
2845
  className: "block h-full w-full border-0",
2789
2846
  style: {
2790
- background: d.colorBgContainer
2847
+ background: i.colorBgContainer
2791
2848
  },
2792
- onLoad: (t)=>{
2793
- let s = t.currentTarget;
2794
- s.contentWindow && s.contentWindow.postMessage({
2849
+ onLoad: (s)=>{
2850
+ if (!o) return;
2851
+ let l = s.currentTarget, r = eF(l) ?? o;
2852
+ l.contentWindow && l.contentWindow.postMessage({
2795
2853
  type: "RSTEST_CONFIG",
2796
2854
  payload: {
2797
- ...a,
2798
- testFile: e.testPath
2855
+ ...t,
2856
+ testFile: e.testPath,
2857
+ runId: r
2799
2858
  }
2800
2859
  }, "*");
2801
2860
  }
@@ -2811,19 +2870,19 @@
2811
2870
  ]
2812
2871
  })
2813
2872
  });
2814
- }, ew = ()=>{
2815
- let e = window.__RSTEST_BROWSER_OPTIONS__, [t, s] = (0, i.useState)("dark"), [n, c] = (0, i.useState)("dark");
2816
- (0, i.useEffect)(()=>{
2873
+ }, eA = ()=>{
2874
+ let e = window.__RSTEST_BROWSER_OPTIONS__, [t, s] = (0, n.useState)("dark"), [r, c] = (0, n.useState)("dark");
2875
+ (0, n.useEffect)(()=>{
2817
2876
  let e = window.matchMedia("(prefers-color-scheme: dark)"), t = (e)=>c(e.matches ? "dark" : "light");
2818
2877
  return c(e.matches ? "dark" : "light"), e.addEventListener("change", t), ()=>e.removeEventListener("change", t);
2819
- }, []), (0, i.useEffect)(()=>{
2878
+ }, []), (0, n.useEffect)(()=>{
2820
2879
  try {
2821
2880
  let e = window.localStorage.getItem("rstest-theme");
2822
2881
  ("light" === e || "dark" === e || "system" === e) && s(e);
2823
2882
  } catch {}
2824
2883
  }, []);
2825
- let d = "system" === t ? n : t;
2826
- if ((0, i.useEffect)(()=>{
2884
+ let d = "system" === t ? r : t;
2885
+ if ((0, n.useEffect)(()=>{
2827
2886
  document.body.dataset.theme = d;
2828
2887
  try {
2829
2888
  window.localStorage.setItem("rstest-theme", t);
@@ -2835,43 +2894,41 @@
2835
2894
  className: "flex h-screen w-full items-center justify-center bg-zinc-950 text-white",
2836
2895
  children: "Missing browser options"
2837
2896
  });
2838
- let p = "dark" === d;
2839
- return (0, i.useEffect)(()=>{
2840
- var t, s;
2841
- let l = (null == (s = e.projects) || null == (t = s[0]) ? void 0 : t.name) || e.rootPath.split("/").filter(Boolean).pop() || "rstest";
2842
- document.title = `${l} [RSTEST BROWSER]`;
2897
+ let u = "dark" === d, p = e.projects?.[0]?.name || e.rootPath.split("/").filter(Boolean).pop() || "rstest";
2898
+ return (0, n.useEffect)(()=>{
2899
+ document.title = `${p} [RSTEST BROWSER]`;
2843
2900
  }, [
2844
- e
2901
+ p
2845
2902
  ]), (0, l.jsx)(a.Ay, {
2846
2903
  componentSize: "small",
2847
2904
  theme: {
2848
- algorithm: p ? o.A.darkAlgorithm : o.A.defaultAlgorithm,
2905
+ algorithm: u ? o.A.darkAlgorithm : o.A.defaultAlgorithm,
2849
2906
  token: {
2850
2907
  fontFamily: '"Inter",system-ui,-apple-system,"Segoe UI",sans-serif',
2851
2908
  fontFamilyCode: '"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace',
2852
2909
  colorInfo: "#0070f3",
2853
2910
  colorPrimary: "#0070f3",
2854
2911
  colorSuccess: "#45a557",
2855
- colorError: p ? "#d93036" : "#da2f35",
2912
+ colorError: u ? "#d93036" : "#da2f35",
2856
2913
  colorWarning: "#ffb224",
2857
2914
  borderRadius: 6
2858
2915
  }
2859
2916
  },
2860
- children: (0, l.jsx)(r.A, {
2861
- children: (0, l.jsx)(e_, {
2917
+ children: (0, l.jsx)(i.A, {
2918
+ children: (0, l.jsx)(eN, {
2862
2919
  options: e,
2863
2920
  theme: t,
2864
2921
  setTheme: s
2865
2922
  })
2866
2923
  })
2867
2924
  });
2868
- }, eC = ()=>{
2925
+ }, eP = ()=>{
2869
2926
  let e = document.getElementById("root");
2870
- e && n.createRoot(e).render((0, l.jsx)(i.StrictMode, {
2871
- children: (0, l.jsx)(ew, {})
2927
+ e && c.createRoot(e).render((0, l.jsx)(n.StrictMode, {
2928
+ children: (0, l.jsx)(eA, {})
2872
2929
  }));
2873
2930
  };
2874
- "loading" === document.readyState ? document.addEventListener("DOMContentLoaded", eC) : eC();
2931
+ "loading" === document.readyState ? document.addEventListener("DOMContentLoaded", eP) : eP();
2875
2932
  }
2876
2933
  }, i = {};
2877
2934
  function n(e) {
@@ -2880,23 +2937,23 @@
2880
2937
  var s = i[e] = {
2881
2938
  exports: {}
2882
2939
  };
2883
- return r[e](s, s.exports, n), s.exports;
2940
+ return a[e](s, s.exports, n), s.exports;
2884
2941
  }
2885
- n.m = r, t = Object.getPrototypeOf ? (e)=>Object.getPrototypeOf(e) : (e)=>e.__proto__, n.t = function(s, l) {
2942
+ n.m = a, t = Object.getPrototypeOf ? (e)=>Object.getPrototypeOf(e) : (e)=>e.__proto__, n.t = function(s, l) {
2886
2943
  if (1 & l && (s = this(s)), 8 & l || "object" == typeof s && s && (4 & l && s.__esModule || 16 & l && "function" == typeof s.then)) return s;
2887
- var o = Object.create(null);
2888
- n.r(o);
2889
- var a = {};
2944
+ var r = Object.create(null);
2945
+ n.r(r);
2946
+ var o = {};
2890
2947
  e = e || [
2891
2948
  null,
2892
2949
  t({}),
2893
2950
  t([]),
2894
2951
  t(t)
2895
2952
  ];
2896
- for(var r = 2 & l && s; ("object" == typeof r || "function" == typeof r) && !~e.indexOf(r); r = t(r))Object.getOwnPropertyNames(r).forEach((e)=>{
2897
- a[e] = ()=>s[e];
2953
+ for(var a = 2 & l && s; ("object" == typeof a || "function" == typeof a) && !~e.indexOf(a); a = t(a))Object.getOwnPropertyNames(a).forEach((e)=>{
2954
+ o[e] = ()=>s[e];
2898
2955
  });
2899
- return a.default = ()=>s, n.d(o, a), o;
2956
+ return o.default = ()=>s, n.d(r, o), r;
2900
2957
  }, n.d = (e, t)=>{
2901
2958
  for(var s in t)n.o(t, s) && !n.o(e, s) && Object.defineProperty(e, s, {
2902
2959
  enumerable: !0,
@@ -2908,21 +2965,21 @@
2908
2965
  }), Object.defineProperty(e, "__esModule", {
2909
2966
  value: !0
2910
2967
  });
2911
- }, s = [], n.O = (e, t, l, o)=>{
2968
+ }, s = [], n.O = (e, t, l, r)=>{
2912
2969
  if (t) {
2913
- o = o || 0;
2914
- for(var a = s.length; a > 0 && s[a - 1][2] > o; a--)s[a] = s[a - 1];
2915
- s[a] = [
2970
+ r = r || 0;
2971
+ for(var o = s.length; o > 0 && s[o - 1][2] > r; o--)s[o] = s[o - 1];
2972
+ s[o] = [
2916
2973
  t,
2917
2974
  l,
2918
- o
2975
+ r
2919
2976
  ];
2920
2977
  return;
2921
2978
  }
2922
- for(var r = 1 / 0, a = 0; a < s.length; a++){
2923
- for(var [t, l, o] = s[a], i = !0, c = 0; c < t.length; c++)(!1 & o || r >= o) && Object.keys(n.O).every((e)=>n.O[e](t[c])) ? t.splice(c--, 1) : (i = !1, o < r && (r = o));
2979
+ for(var a = 1 / 0, o = 0; o < s.length; o++){
2980
+ for(var [t, l, r] = s[o], i = !0, c = 0; c < t.length; c++)(!1 & r || a >= r) && Object.keys(n.O).every((e)=>n.O[e](t[c])) ? t.splice(c--, 1) : (i = !1, r < a && (a = r));
2924
2981
  if (i) {
2925
- s.splice(a--, 1);
2982
+ s.splice(o--, 1);
2926
2983
  var d = l();
2927
2984
  void 0 !== d && (e = d);
2928
2985
  }
@@ -2930,18 +2987,18 @@
2930
2987
  return e;
2931
2988
  }, l = {
2932
2989
  410: 0
2933
- }, n.O.j = (e)=>0 === l[e], o = (e, t)=>{
2934
- var s, o, [a, r, i] = t, c = 0;
2935
- if (a.some((e)=>0 !== l[e])) {
2936
- for(s in r)n.o(r, s) && (n.m[s] = r[s]);
2990
+ }, n.O.j = (e)=>0 === l[e], r = (e, t)=>{
2991
+ var s, r, [o, a, i] = t, c = 0;
2992
+ if (o.some((e)=>0 !== l[e])) {
2993
+ for(s in a)n.o(a, s) && (n.m[s] = a[s]);
2937
2994
  if (i) var d = i(n);
2938
2995
  }
2939
- for(e && e(t); c < a.length; c++)o = a[c], n.o(l, o) && l[o] && l[o][0](), l[o] = 0;
2996
+ for(e && e(t); c < o.length; c++)r = o[c], n.o(l, r) && l[r] && l[r][0](), l[r] = 0;
2940
2997
  return n.O(d);
2941
- }, (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));
2998
+ }, (o = self.rspackChunk_rstest_browser_ui = self.rspackChunk_rstest_browser_ui || []).forEach(r.bind(null, 0)), o.push = r.bind(null, o.push.bind(o));
2942
2999
  var c = n.O(void 0, [
2943
3000
  "783",
2944
- "565"
2945
- ], ()=>n(2976));
3001
+ "101"
3002
+ ], ()=>n(7723));
2946
3003
  c = n.O(c);
2947
3004
  })();