@qartisan/playwright-loupe 0.0.5 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,57 @@ All notable changes to this project are documented in this file.
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Before 1.0, minor versions may contain breaking changes. The JSON report has its own version (`schemaVersion`), see [`docs/schema/v1.md`](docs/schema/v1.md#versioning-policy).
6
6
 
7
+ ## [0.1.0] - 2026-10-18
8
+
9
+ ### Added
10
+
11
+ - **Screenshot thumbnails and viewer.** In the test detail, each attempt's screenshots are a grid of thumbnails (lazy-loaded, the attachment name under each). A click, or Enter / Space, opens a viewer in a modal dialog: the image fitted to the window, or at actual size (scrollable) by clicking it or with "Actual size"; previous / next with buttons or `←` / `→`, with the position ("2 of 3") and no wrap-around; "Open original" in a new tab. Escape, the close button or a click outside closes it and puts focus back on the thumbnail. Page shortcuts are inactive while it is open, and any route change (Back, another test) closes it; its state is never in the URL. A missing file shows its name and path, never a broken image.
12
+ - **Screenshot comparison.** The `expected`, `actual` and `diff` images of a `toHaveScreenshot` / `toMatchSnapshot` (same `comparison.group`, same attempt) form one card, shown before the other screenshots, with four modes: Diff, Side by side (expected | actual, both at the same scale), Slider (actual over expected with a divider) and Overlay (actual over expected with an opacity control). Only the modes the available images allow are offered, and a group with a single image is a normal screenshot. The default is Diff when there is a diff image, otherwise Side by side; the chosen mode is shared by every comparison for the session, in memory only. Slider and overlay are `<input type="range">` controls, operable with the keyboard. Each image's natural size is shown, with "Expected and actual sizes differ" when they do: slider and overlay then align the images top-left in a box the size of the larger one. "Open in viewer" opens the comparison, with the same modes, in the screenshot viewer, where it comes before the screenshots.
13
+ - **Inline videos**: `<video controls preload="metadata">` with the attachment's content type, and "Open original". A missing or unplayable file shows its path instead of an empty player.
14
+ - **Trace command.** Each trace attachment has a card with "Copy trace command" (`npx playwright show-trace <path>`, the path quoted for a POSIX shell when needed; copied with the same fallback dialog and announcement as the rerun commands) and "Download trace". Its help says to run it from the report folder (the one containing `index.html`) and that it uses the project's own Playwright, which must be at least the run's version (`run.playwrightVersion`), since an older trace viewer shows an empty screen on a newer trace; that sentence is left out when the report has no version. The report does not serve the trace viewer itself: it needs an HTTP server.
15
+ - `←` / `→` in the keyboard shortcuts dialog and the README.
16
+ - **Run details** on the Overview, after the projects, in three groups shown side by side when there is room and stacked on narrow screens, each a description list under its heading: **Run** (scope, "Full run" or "Partial run" with its reasons; CI, the provider or Yes / No; workers; shard, "2 of 4"), **Code** (commit, short with the full hash in the tooltip and a copy button; branch; repository) and **Environment** (Playwright, Loupe, Node, OS). Empty values are left out, and a group without any value is not shown. Plain text, no links to commits or repositories.
17
+
18
+ ### Changed
19
+
20
+ - **Header layout.** Two columns: the run on the left, the controls (keyboard shortcuts, theme switch) always top-right on the first row, at every width. The left column has three groups that wrap as units, always in this order: identity and verdict, status counts, start date and duration with the environment. The suite name is truncated with an ellipsis, the full name in its tooltip; on very narrow screens the verdict goes under the name. No horizontal page scroll down to 320 px.
21
+ - **Branch and commit moved from the header to the Run details card.** The header keeps the start date, duration and environment. A commit is shown with 7 characters, the full hash in the tooltip and the copy button.
22
+
23
+ ### Fixed
24
+
25
+ - Dialogs: reopening one right after closing it with Escape could leave it closed, because the dialog's close event arrives after the reopening.
26
+
27
+ ### Security
28
+
29
+ - **Credentials in `git.remote`.** Versions up to 0.0.6 could store part of a password or a token in `run.git.remote`: a password containing `@` kept what followed the first `@` (`https://user:p@ss@host/…` became `https://ss@host/…`), a password containing a raw `/` was kept whole, and query strings (`?access_token=…`) and fragments were never removed. The remote is now parsed like browsers and git do (the last `@` ends the credentials), the user name, password, query and fragment are removed, and a remote with an `@` that cannot be parsed safely is stored as `null`. Without a scheme, only the `user@host:path` form with a user name without `:` (`git@github.com:org/repo.git`) and strings without `@` are kept. Reports written by earlier versions are not rewritten: check `git.remote` in reports you have shared if your CI remote can contain credentials.
30
+
31
+ ## [0.0.6] - 2026-10-18
32
+
33
+ ### Added
34
+
35
+ - **Test detail** (`#/test/<id>`): title path, outcome, project, `file:line`, total duration, error category, tags, annotations and dimensions; then one tab per attempt ("Attempt 1", "Retry 1" …, each with its status and duration), hidden for a single attempt. The default attempt is the last failing one: a failed test opens on its last attempt, a flaky test on its failure, not on the passing retry. The attempt is in the URL (`?attempt=1`) next to the filters; an index the test does not have falls back to the default attempt and the URL is corrected. Per attempt:
36
+ - **Errors**, each with its category, `file:line:column`, a "View error group" link with the group's test count, the code snippet and the stack (collapsed). Playwright's colors are rebuilt from the text: the value of `Expected:` / `Received:` lines (and `Expected substring:`, `Received string:`, `Expected pattern:`, `Received array:` …), the `-` / `+` lines of a diff opened by the `- Expected` / `+ Received` header (only there: call log lines are never colored), and the snippet's arrow and caret. The report keeps messages without ANSI codes, so Playwright's character-level highlighting inside strings is not reproduced. Messages are rendered as text, never as HTML. Two new color tokens, `--diff-expected` and `--diff-received`, meet WCAG contrast in both themes.
37
+ - **Steps**: `test.step` steps and steps with an error, with the ancestors needed to place them; each step with children expands. The failing path is highlighted and expanded on load. "Show all steps" (`?steps=all`) adds hooks, fixtures, API calls and `expect` steps, each with its category. A step's error message is shown under the step it comes from.
38
+ - **Attachments**, listed by kind (screenshots, videos, traces, text, other) with their content type: files as relative links (they work from `file://`), small text bodies inline and collapsed, with their size. Viewers come in a later release.
39
+ - **stdout and stderr**, collapsed, with a notice when the report truncated them.
40
+ - **Rerun commands**, copied to the clipboard, to paste in a POSIX shell (bash, zsh; not `cmd.exe`) from the Playwright root directory:
41
+ - this test only, in its project (`npx playwright test basics.spec.ts:34 --project=chromium-a`; no `--project` for an unnamed project);
42
+ - the failed tests of its file, shown only when another line of the file failed (the same test failing in another project does not count), labeled with the distinct `file:line` per project and the projects involved (`10 failed tests in this file, in chromium-a, chromium-b`);
43
+ - the failed tests of the current list, every one of them, not only the rows shown: above the Tests view's table, and as "Rerun failed tests" under the overview's verdict.
44
+
45
+ Projects with exactly the same `file:line` arguments share one command (`--project=a --project=b`); when the sets differ, each project gets its own command, joined with `&&`, because one command would run every file in every project. Arguments are sorted by file, then line, and each `file:line` is given once. Arguments with spaces or shell characters are single-quoted, an inner `'` written `'\''`. Flaky tests are left out. A `file:line` targets the line where the test is declared, and reruns every test declared there: a command is only valid while the file has not changed since the run. Above 100 tests, a note says the command is long.
46
+ - **AI prompt**, copied to the clipboard only, in English: an instruction (most likely cause, test or application, a fix), the test, the attempt, tags and annotations, each error with its message, snippet, location and stack, the failing step with up to 5 steps before it, and the names of the attachments. New option `aiPrompt.includeStack` (default `true`) leaves the stacks out; it is a renderer setting, not part of `report.json`.
47
+ - **Copy fallback**: when the browser refuses the Clipboard API (some do on `file://`), a dialog shows the text selected, to copy by hand. Successful copies are announced to screen readers.
48
+ - **Previous / next**: on the test detail, through the Tests view's current list (filters and sort, every row, not only the first 500), each test on its default attempt; on an error group page, through the Errors view's order. A group opened from a category (its section in the Errors view, `#/errors/category/<name>`) carries `category=<name>` in its URL and walks that category's groups only; a group opened from the global list or from a test walks every group. No wrap-around at the ends.
49
+ - **Keyboard shortcuts**: `j` / `k` next and previous test, `[` / `]` previous and next attempt, `n` / `p` next and previous error group, `?` the list of shortcuts (also behind a keyboard icon in the header). They never fire while typing in a field, with Ctrl, Alt or Meta held, or while a dialog is open. Documented in the README.
50
+ - **Fixture suite**: two intentional failures, a `test.step` failing at the second level (`fails inside a nested step`) and a `toEqual` with a multi-line diff (`returns a different order`). The fixture snapshot gains these 4 tests (2 per project); tests declared after them moved down a few lines.
51
+
52
+ ### Changed
53
+
54
+ - **Tests view default sort**: declaration order, exactly like the sidebar: project (report order), file, line. It used to be status severity, then title path. Filters are there to focus on failures; the default order is now the same in the sidebar, the table and the test detail's previous / next. It is not written in the URL (no `sort` parameter). The Status header still sorts by severity (failed, flaky, passed, skipped), with project, file, line as tie-breaks; other columns still break ties by title. A link with `sort=status:asc` keeps the former order.
55
+ - **Error groups inside a category** are listed in the Errors view's order (most failed tests first, then most flaky), the order their previous / next buttons follow, instead of first occurrence.
56
+ - **Renderer dev sample**: `npm run sample:update` also copies the sample's attachment files to `src/renderer/dev/data/` (gitignored), and the dev server serves them at `data/`, so attachment links work there too.
57
+
7
58
  ## [0.0.5] 2026-10-17
8
59
 
9
60
  ### Added
package/README.md CHANGED
@@ -37,16 +37,39 @@ A run that broke outside its tests (a spec file that fails to import, a failing
37
37
 
38
38
  The report is a single self-contained HTML file. It works offline, straight from `file://`, in light and dark themes.
39
39
 
40
- - **Overview:** verdict with pass rate, run errors first when the run broke outside its tests, error categories, project cards.
41
- - **Errors:** every error group, built from normalized error signatures, with the failed / flaky split and links to the affected tests.
40
+ - **Header:** the run's verdict and status counts, its start, duration and environment; the shortcuts and theme controls stay top-right at every width.
41
+ - **Overview:** verdict with pass rate, run errors first when the run broke outside its tests, error categories, project cards, and the run details in three groups: Run (scope, CI, workers, shard), Code (commit, short with a copy button; branch; repository) and Environment (Playwright, Loupe, Node, OS). Empty values are left out.
42
+ - **Errors:** every error group, built from normalized error signatures, with the failed / flaky split and links to the affected tests. A group page has previous / next buttons: from a category, they stay within that category.
43
+ - **Test detail:** title path, outcome, project, `file:line`, tags, annotations and dimensions, then one tab per attempt (the last failing attempt first; `?attempt=` in the URL): errors with Expected / Received and diffs highlighted and the code snippet, steps (`test.step` and failing steps, the failing path expanded; "Show all steps" for hooks, fixtures and API calls), attachments, stdout and stderr. Previous / next walk the Tests view's current list.
44
+ - **Attachments**, per attempt, linked from `data/` next to the report (never inlined in the HTML), all working from `file://`:
45
+ - **Screenshot comparisons**: a failed `toHaveScreenshot` / `toMatchSnapshot` gives one card per image name, before the other screenshots, with four modes: Diff, Side by side (expected | actual, at one scale), Slider (actual over expected, a divider to drag or move with the arrow keys) and Overlay (actual over expected, its opacity to set). Only the modes the images allow are offered; Diff is the default when there is a diff image. The chosen mode applies to every comparison until the report is closed. Each image's size is shown, with a warning when expected and actual differ: slider and overlay align them top-left. "Open in viewer" shows the same modes in the viewer below.
46
+ - **Screenshots** as thumbnails. A click (or Enter / Space) opens them in a viewer, after the comparisons: fitted to the window, or at actual size by clicking the image; previous / next with the buttons or `←` / `→`; "Open original" in a new tab. Escape, the close button or a click outside closes it, back on the same thumbnail. A missing file shows its name and path.
47
+ - **Videos** play inline. A missing or unplayable file shows its path instead of an empty player.
48
+ - **Traces**: "Copy trace command" copies `npx playwright show-trace <path>`, to run from the report folder (the one containing `index.html`) in a POSIX shell. The trace viewer needs an HTTP server, so it cannot open from `file://`; the command uses the project's own Playwright, which must be at least the version that ran the tests (an older trace viewer shows an empty screen on a newer trace). The card says which version, and has a "Download trace" link.
49
+ - Other files are listed as links; small text bodies inline, collapsed.
50
+ - **Copy buttons:** rerun commands (this test, the failed tests of its file, the failed tests of the current list) and an AI prompt describing the failure, in English. Both are only copied to the clipboard; nothing is sent anywhere. Projects failing on the same lines share one command (`--project=a --project=b`); otherwise each project gets its own, joined with `&&`.
51
+ - The commands target **POSIX shells** (bash, zsh; not `cmd.exe`) and run from the Playwright root directory: paths in the report are relative to it.
52
+ - A `file:line` argument targets the line where the test is declared and reruns every test declared on that line. A command is only valid while the file has not changed since the run.
42
53
  - **Suite health:** dimensions from tags and annotations (with hints for unknown or inconsistent values), slowest, skipped and flaky tests.
43
- - **Tests:** every test in one sortable list, filtered by status, error category, project, tag and dimension, with the count each filter would give. Header counts, error categories and dimension values open it pre-filtered. Large lists show their first 500 rows, with "Show 500 more" and "Show all".
54
+ - **Tests:** every test in one sortable list (by default in declaration order, as in the sidebar: project, file, line; the Status header sorts failed, flaky, passed, skipped), filtered by status, error category, project, tag and dimension, with the count each filter would give. Header counts, error categories and dimension values open it pre-filtered. Large lists show their first 500 rows, with "Show 500 more" and "Show all".
44
55
  - **Sidebar:** search (`/` to focus), projects, folders, files, `describe` blocks and tests, with status icons, failure counts and keyboard navigation. The folder shared by every file is not repeated.
45
56
  - **Filters in the URL:** search, filters and sort live in the link, so a filtered view can be shared or bookmarked, even from `file://`. A project without a `name` (Playwright's default project) cannot be selected in the project filter: an empty name cannot be written in the URL. Give your projects a name to filter by them. Each tag is filterable in one place only: a tag a dimension is built from (`@layer:ui` with a `layer` dimension, configured or automatic) is in that dimension's filter (Layer: `ui`), not in the tag filter, so the two can never be combined into an empty result. Unprefixed tags (`@smoke`) and prefixed tags no dimension uses stay in the tag filter.
46
57
 
47
- ### Coming next
58
+ ### Keyboard shortcuts
59
+
60
+ | Key | Action | Where |
61
+ | --- | --- | --- |
62
+ | `j` / `k` | Next / previous test | Test detail |
63
+ | `[` / `]` | Previous / next attempt | Test detail |
64
+ | `n` / `p` | Next / previous error group | Error group page |
65
+ | `←` / `→` | Previous / next screenshot | Screenshot viewer |
66
+ | `/` | Focus the search | Everywhere |
67
+ | `Escape` | Clear the search, close a dialog | Everywhere |
68
+ | `?` | Show keyboard shortcuts | Everywhere |
48
69
 
49
- - Test detail: error, steps, and attachments per attempt (screenshots, video, trace), copyable rerun command and AI prompt.
70
+ Single keys do nothing while typing in a field or with Ctrl, Alt or Meta held, nor while a dialog or the screenshot viewer is open. The keyboard icon in the header opens the same list.
71
+
72
+ ### Coming next
50
73
 
51
74
  History and flakiness tracking are planned for a later phase; the JSON model is already prepared for them.
52
75
 
@@ -69,9 +92,13 @@ export default defineConfig({
69
92
  { name: 'Bug', from: 'annotation', type: 'bug' },
70
93
  ],
71
94
  },
95
+ // Leave stack traces out of the copyable AI prompt (default: true).
96
+ aiPrompt: { includeStack: false },
72
97
  });
73
98
  ```
74
99
 
100
+ `aiPrompt.includeStack` (default `true`) sets whether the AI prompt copied from the test detail includes each error's stack trace. Like `title` and `theme`, it is a presentation setting written to `index.html`, not to `report.json`.
101
+
75
102
  Options can also be passed inline (`['@qartisan/playwright-loupe', { title: 'Nightly' }]`) and through `LOUPE_*` environment variables. Precedence: defaults < config file < inline options < environment variables. The config is validated at startup: an invalid option, or a typo in a key, stops the run with an explicit message.
76
103
 
77
104
  Every option, the lookup rules and the environment variables are documented in [`docs/config.md`](docs/config.md).
@@ -95,7 +122,7 @@ Node.js 22.12 is the minimum because ES module config files are loaded with `req
95
122
  | `npm run typecheck` | Type-checks the core, tests, fixtures and renderer. |
96
123
  | `npm test` | Builds, then runs the Vitest unit tests and the integration tests (fixture suite, and a sharded run merged with `merge-reports`). |
97
124
  | `npm run fixtures` | Builds, then runs the fixture suite into `loupe-report/`. Its failures are intentional, see [`fixtures/README.md`](fixtures/README.md). |
98
- | `npm run sample:update` | Builds, then runs the fixture suite with `fixtures/sample.config.ts` and writes its report to `src/renderer/dev/sample.json`: failures, flaky and skipped tests, a partial run and a run error. |
99
- | `npm run dev:renderer` | Vite dev server for the renderer, fed with `src/renderer/dev/sample.json`, with hot reload. No Playwright run needed for UI work. |
125
+ | `npm run sample:update` | Builds, then runs the fixture suite with `fixtures/sample.config.ts` and writes its report to `src/renderer/dev/sample.json`: failures, flaky and skipped tests, a partial run and a run error. Its attachment files go to `src/renderer/dev/data/` (gitignored). |
126
+ | `npm run dev:renderer` | Vite dev server for the renderer, fed with `src/renderer/dev/sample.json`, with hot reload; it serves the sample's attachments at `data/`. No Playwright run needed for UI work. |
100
127
 
101
128
  Tests that drive a browser need Chromium: `npx playwright install chromium`.
@@ -24,7 +24,7 @@ export declare function stripPlaywrightKeys(options: Record<string, unknown>): R
24
24
  export declare function envLayer(env: Env): LoupeConfig;
25
25
  /**
26
26
  * Merges `layer` over `base`: nested objects (`categories`, `dimensions`,
27
- * `screenshots`) merge key by key; arrays and other values replace. An
27
+ * `screenshots`, `aiPrompt`) merge key by key; arrays and other values replace. An
28
28
  * `undefined` value leaves the base untouched.
29
29
  */
30
30
  export declare function mergeLayers<T extends object>(base: T, layer: object): T;
@@ -47,7 +47,7 @@ function isObject(value) {
47
47
  }
48
48
  /**
49
49
  * Merges `layer` over `base`: nested objects (`categories`, `dimensions`,
50
- * `screenshots`) merge key by key; arrays and other values replace. An
50
+ * `screenshots`, `aiPrompt`) merge key by key; arrays and other values replace. An
51
51
  * `undefined` value leaves the base untouched.
52
52
  */
53
53
  export function mergeLayers(base, layer) {
@@ -114,5 +114,6 @@ export function resolveConfig(layers) {
114
114
  dimensions: { auto: merged.dimensions?.auto ?? true, definitions: resolveDimensions(merged) },
115
115
  screenshots: { defaultView: merged.screenshots?.defaultView ?? 'side-by-side' },
116
116
  theme: merged.theme ?? 'system',
117
+ aiPrompt: { includeStack: merged.aiPrompt?.includeStack ?? true },
117
118
  };
118
119
  }
@@ -68,6 +68,10 @@ export interface LoupeConfig {
68
68
  };
69
69
  /** Default theme of the report. Default: `system`. */
70
70
  theme?: Theme;
71
+ aiPrompt?: {
72
+ /** Include each error's stack trace in the copyable AI prompt. Default: `true`. */
73
+ includeStack?: boolean;
74
+ };
71
75
  }
72
76
  /** Inline reporter options: a config, plus the path of the config file. */
73
77
  export interface LoupeReporterOptions extends LoupeConfig {
@@ -114,4 +118,7 @@ export interface ResolvedConfig {
114
118
  defaultView: ScreenshotView;
115
119
  };
116
120
  theme: Theme;
121
+ aiPrompt: {
122
+ includeStack: boolean;
123
+ };
117
124
  }
@@ -227,6 +227,7 @@ export function validateConfig(value, source, options = {}) {
227
227
  dimensions: object({ auto: boolean(ctx), definitions: arrayOf(dimension(ctx), ctx) }, ctx),
228
228
  screenshots: object({ defaultView: oneOf(SCREENSHOT_VIEWS, ctx) }, ctx),
229
229
  theme: oneOf(THEMES, ctx),
230
+ aiPrompt: object({ includeStack: boolean(ctx) }, ctx),
230
231
  };
231
232
  if (options.allowConfigFile)
232
233
  fields['configFile'] = nonEmptyString(ctx);
@@ -13,6 +13,10 @@ export interface RendererSettings {
13
13
  screenshots: {
14
14
  defaultView: 'side-by-side' | 'slider' | 'overlay' | 'diff';
15
15
  };
16
+ /** The copyable AI prompt of the test detail. */
17
+ aiPrompt: {
18
+ includeStack: boolean;
19
+ };
16
20
  }
17
21
  export declare const DEFAULT_RENDERER_SETTINGS: RendererSettings;
18
22
  /**
@@ -6,6 +6,7 @@ export const DEFAULT_RENDERER_SETTINGS = {
6
6
  title: 'Loupe report',
7
7
  theme: 'system',
8
8
  screenshots: { defaultView: 'side-by-side' },
9
+ aiPrompt: { includeStack: true },
9
10
  };
10
11
  const UNSAFE_CHARS = {
11
12
  '<': '\\u003c',
@@ -4,8 +4,15 @@ export declare function detectCi(env: Env): {
4
4
  ci: boolean;
5
5
  ciProvider: string | null;
6
6
  };
7
- /** Removes credentials from a URL-like remote (`https://user:token@host/...`). */
8
- export declare function stripCredentials(remote: string): string;
7
+ /**
8
+ * A remote safe to store: credentials (`https://user:token@host/...`), query
9
+ * (`?access_token=...`) and fragment removed. A URL is parsed like browsers
10
+ * and git do (the last `@` ends the credentials); one without anything to
11
+ * remove is kept as written. Without a scheme, only the scp-like form and
12
+ * strings without `@` (a file path) are kept. Anything else with an `@`
13
+ * cannot be cleaned safely: null.
14
+ */
15
+ export declare function sanitizeRemote(remote: string): string | null;
9
16
  /**
10
17
  * Git info from Playwright's own metadata first (`metadata.gitCommit`, captured
11
18
  * when `captureGitInfo.commit` is on, by default in CI; `metadata.ci`), then
@@ -29,9 +29,37 @@ function first(...values) {
29
29
  }
30
30
  return null;
31
31
  }
32
- /** Removes credentials from a URL-like remote (`https://user:token@host/...`). */
33
- export function stripCredentials(remote) {
34
- return remote.replace(/^([a-z][a-z0-9+.-]*:\/\/)[^/@]*@/i, '$1');
32
+ const SCHEME = /^[a-z][a-z0-9+.-]*:\/\//i;
33
+ /** `git@github.com:org/repo.git`: a user name without `:` cannot carry a password. */
34
+ const SCP_LIKE = /^[^@:/]+@[^@:/]+:[^@]*$/;
35
+ /**
36
+ * A remote safe to store: credentials (`https://user:token@host/...`), query
37
+ * (`?access_token=...`) and fragment removed. A URL is parsed like browsers
38
+ * and git do (the last `@` ends the credentials); one without anything to
39
+ * remove is kept as written. Without a scheme, only the scp-like form and
40
+ * strings without `@` (a file path) are kept. Anything else with an `@`
41
+ * cannot be cleaned safely: null.
42
+ */
43
+ export function sanitizeRemote(remote) {
44
+ if (SCHEME.test(remote)) {
45
+ let url;
46
+ try {
47
+ url = new URL(remote);
48
+ }
49
+ catch {
50
+ return remote.includes('@') ? null : remote.replace(/[?#].*$/, '');
51
+ }
52
+ if (!/[@?#]/.test(remote))
53
+ return remote;
54
+ url.username = '';
55
+ url.password = '';
56
+ url.search = '';
57
+ url.hash = '';
58
+ return url.href;
59
+ }
60
+ if (!remote.includes('@'))
61
+ return remote;
62
+ return SCP_LIKE.test(remote) ? remote : null;
35
63
  }
36
64
  function githubBranch(env) {
37
65
  // GITHUB_HEAD_REF is set on pull requests; GITHUB_REF_NAME is a tag name on tag pushes.
@@ -55,7 +83,7 @@ export function detectGit(metadata, env) {
55
83
  const commit = first(gitCommit['hash'], ciInfo['commitHash'], env['GITHUB_SHA'], env['CI_COMMIT_SHA'], env['BUILD_SOURCEVERSION'], env['CIRCLE_SHA1'], env['GIT_COMMIT'], env['BITBUCKET_COMMIT'], env['BUILDKITE_COMMIT']);
56
84
  const branch = first(playwrightBranch, env['GITHUB_ACTIONS'] ? githubBranch(env) : undefined, env['CI_COMMIT_BRANCH'], env['CI_MERGE_REQUEST_SOURCE_BRANCH_NAME'], env['BUILD_SOURCEBRANCHNAME'], env['CIRCLE_BRANCH'], env['GIT_BRANCH'], env['BITBUCKET_BRANCH'], env['BUILDKITE_BRANCH']);
57
85
  const remote = first(env['GITHUB_ACTIONS'] ? githubRemote(env) : undefined, env['CI_PROJECT_URL'], env['BUILD_REPOSITORY_URI'], env['CIRCLE_REPOSITORY_URL'], env['GIT_URL'], env['BITBUCKET_GIT_HTTP_ORIGIN'], env['BUILDKITE_REPO']);
58
- return { commit, branch, remote: remote === null ? null : stripCredentials(remote) };
86
+ return { commit, branch, remote: remote === null ? null : sanitizeRemote(remote) };
59
87
  }
60
88
  /** `name` comes from the config (`environment` option, overridden by `LOUPE_ENV`). */
61
89
  export function detectEnvironment(env, name, platform, arch, nodeVersion) {
@@ -52,6 +52,7 @@ export class LoupeReporter {
52
52
  title: this.loupeConfig.title,
53
53
  theme: this.loupeConfig.theme,
54
54
  screenshots: { defaultView: this.loupeConfig.screenshots.defaultView },
55
+ aiPrompt: { includeStack: this.loupeConfig.aiPrompt.includeStack },
55
56
  };
56
57
  const template = await readFile(TEMPLATE_URL, 'utf8');
57
58
  await mkdir(outputFolder, { recursive: true });
@@ -4,10 +4,16 @@
4
4
  <meta charset="utf-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1" />
6
6
  <title>Loupe report</title>
7
- <script type="module">var e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h={},g=[],_=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,v=Array.isArray;function y(e,t){for(var n in t)e[n]=t[n];return e}function ee(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function b(t,n,r){var i,a,o,s={};for(o in n)o==`key`?i=n[o]:o==`ref`?a=n[o]:s[o]=n[o];if(arguments.length>2&&(s.children=arguments.length>3?e.call(arguments,2):r),typeof t==`function`&&t.defaultProps!=null)for(o in t.defaultProps)s[o]===void 0&&(s[o]=t.defaultProps[o]);return x(t,s,i,a,null)}function x(e,r,i,a,o){var s={type:e,props:r,key:i,ref:a,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:o??++n,__i:-1,__u:0};return o==null&&t.vnode!=null&&t.vnode(s),s}function S(e){return e.children}function te(e,t){this.props=e,this.context=t}function C(e,t){if(t==null)return e.__?C(e.__,e.__i+1):null;for(var n;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null)return n.__e;return typeof e.type==`function`?C(e):null}function w(e){if(e.__P&&e.__d){var n=e.__v,r=n.__e,i=[],a=[],o=y({},n);o.__v=n.__v+1,t.vnode&&t.vnode(o),ce(e.__P,o,n,e.__n,e.__P.namespaceURI,32&n.__u?[r]:null,i,r??C(n),!!(32&n.__u),a),o.__v=n.__v,o.__.__k[o.__i]=o,ue(i,o,a),n.__e=n.__=null,o.__e!=r&&T(o)}}function T(e){if((e=e.__)!=null&&e.__c!=null)return e.__e=e.__c.base=null,e.__k.some(function(t){if(t!=null&&t.__e!=null)return e.__e=e.__c.base=t.__e}),T(e)}function E(e){(!e.__d&&(e.__d=!0)&&i.push(e)&&!D.__r++||a!=t.debounceRendering)&&((a=t.debounceRendering)||o)(D)}function D(){try{for(var e,t=1;i.length;)i.length>t&&i.sort(s),e=i.shift(),t=i.length,w(e)}finally{i.length=D.__r=0}}function ne(e,t,n,r,i,a,o,s,c,l,u){var d,f,p,m,_,v,y=r&&r.__k||g,ee=t.length;for(c=re(n,t,y,c,ee),d=0;d<ee;d++)(p=n.__k[d])!=null&&(f=p.__i!=-1&&y[p.__i]||h,p.__i=d,v=ce(e,p,f,i,a,o,s,c,l,u),m=p.__e,p.ref&&f.ref!=p.ref&&(f.ref&&pe(f.ref,null,p),u.push(p.ref,p.__c||m,p)),_==null&&m!=null&&(_=m),4&p.__u?(c=ie(p,c,e),f.__e&&(f.__e=null)):typeof p.type==`function`&&v!==void 0?c=v:m&&(c=m.nextSibling),p.__u&=-7);return n.__e=_,c}function re(e,t,n,r,i){var a,o,s,c,l,u=n.length,d=u,f=0;for(e.__k=Array(i),a=0;a<i;a++)(o=t[a])!=null&&typeof o!=`boolean`&&typeof o!=`function`?(typeof o==`string`||typeof o==`number`||typeof o==`bigint`||o.constructor==String?o=e.__k[a]=x(null,o,null,null,null):v(o)?o=e.__k[a]=x(S,{children:o},null,null,null):o.constructor===void 0&&o.__b>0?o=e.__k[a]=x(o.type,o.props,o.key,o.ref?o.ref:null,o.__v):e.__k[a]=o,c=a+f,o.__=e,o.__b=e.__b+1,s=null,(l=o.__i=ae(o,n,c,d))!=-1&&(d--,(s=n[l])&&(s.__u|=2)),s==null||s.__v==null?(l==-1&&(i>u?f--:i<u&&f++),typeof o.type!=`function`&&(o.__u|=4)):l!=c&&(l==c-1?f--:l==c+1?f++:(l>c?f--:f++,o.__u|=4))):e.__k[a]=null;if(d)for(a=0;a<u;a++)(s=n[a])!=null&&!(2&s.__u)&&(s.__e==r&&(r=C(s)),me(s,s));return r}function ie(e,t,n){var r,i;if(typeof e.type==`function`){for(r=e.__k,i=0;r&&i<r.length;i++)r[i]&&(r[i].__=e,t=ie(r[i],t,n));return t}e.__e!=t&&(t&&e.type&&!t.parentNode&&(t=C(e)),t=n.insertBefore(e.__e,t||null));do t&&=t.nextSibling;while(t!=null&&t.nodeType==8);return t}function ae(e,t,n,r){var i,a,o,s=e.key,c=e.type,l=t[n],u=l!=null&&!(2&l.__u);if(l===null&&s==null||u&&s==l.key&&c==l.type)return n;if(r>+!!u){for(i=n-1,a=n+1;i>=0||a<t.length;)if((l=t[o=i>=0?i--:a++])!=null&&!(2&l.__u)&&s==l.key&&c==l.type)return o}return-1}function oe(e,t,n){t[0]==`-`?e.setProperty(t,n??``):e[t]=n==null?``:typeof n!=`number`||_.test(t)?n:n+`px`}function O(e,t,n,r,i){var a,o;n:if(t==`style`){if(typeof n==`string`)e.style.cssText=n;else{if(typeof r==`string`&&(e.style.cssText=r=``),r)for(t in r)n&&t in n||oe(e.style,t,``);if(n)for(t in n)r&&n[t]==r[t]||oe(e.style,t,n[t])}}else if(t[0]==`o`&&t[1]==`n`)a=t!=(t=t.replace(d,`$1`)),o=t.toLowerCase(),t=o in e||t==`onFocusOut`||t==`onFocusIn`?o.slice(2):t.slice(2),e.l||={},e.l[t+a]=n,n?r?n[u]=r[u]:(n[u]=f,e.addEventListener(t,a?m:p,a)):e.removeEventListener(t,a?m:p,a);else{if(i==`http://www.w3.org/2000/svg`)t=t.replace(/xlink(H|:h)/,`h`).replace(/sName$/,`s`);else if(t!=`width`&&t!=`height`&&t!=`href`&&t!=`list`&&t!=`form`&&t!=`tabIndex`&&t!=`download`&&t!=`rowSpan`&&t!=`colSpan`&&t!=`role`&&t!=`popover`&&t in e)try{e[t]=n??``;break n}catch{}typeof n==`function`||(n==null||!1===n&&t[4]!=`-`?e.removeAttribute(t):e.setAttribute(t,t==`popover`&&n==1?``:n))}}function se(e){return function(n){if(this.l){var r=this.l[n.type+e];if(n[l]==null)n[l]=f++;else if(n[l]<r[u])return;return r(t.event?t.event(n):n)}}}function ce(e,n,r,i,a,o,s,c,l,u){var d,f,p,m,h,_,b,x,w,T,E,D,re,ie,ae,oe,O=n.type;if(n.constructor!==void 0)return null;128&r.__u&&(l=!!(32&r.__u),o=[c=n.__e=r.__e]),(d=t.__b)&&d(n);n:if(typeof O==`function`){f=s.length;try{if(w=n.props,T=O.prototype&&O.prototype.render,E=(d=O.contextType)&&i[d.__c],D=d?E?E.props.value:d.__:i,r.__c?x=(p=n.__c=r.__c).__=p.__E:(T?n.__c=p=new O(w,D):(n.__c=p=new te(w,D),p.constructor=O,p.render=he),E&&E.sub(p),p.state||(p.state={}),p.__n=i,m=p.__d=!0,p.__h=[],p._sb=[]),T&&p.__s==null&&(p.__s=p.state),T&&O.getDerivedStateFromProps!=null&&(p.__s==p.state&&(p.__s=y({},p.__s)),y(p.__s,O.getDerivedStateFromProps(w,p.__s))),h=p.props,_=p.state,p.__v=n,m)T&&O.getDerivedStateFromProps==null&&p.componentWillMount!=null&&p.componentWillMount(),T&&p.componentDidMount!=null&&p.__h.push(p.componentDidMount);else{if(T&&O.getDerivedStateFromProps==null&&w!==h&&p.componentWillReceiveProps!=null&&p.componentWillReceiveProps(w,D),n.__v==r.__v||!p.__e&&p.shouldComponentUpdate!=null&&!1===p.shouldComponentUpdate(w,p.__s,D)){n.__v!=r.__v&&(p.props=w,p.state=p.__s,p.__d=!1),n.__e=r.__e,n.__k=r.__k,n.__k.some(function(e){e&&(e.__=n)}),g.push.apply(p.__h,p._sb),p._sb=[],p.__h.length&&s.push(p),c=C(r);break n}p.componentWillUpdate!=null&&p.componentWillUpdate(w,p.__s,D),T&&p.componentDidUpdate!=null&&p.__h.push(function(){p.componentDidUpdate(h,_,b)})}if(p.context=D,p.props=w,p.__P=e,p.__e=!1,re=t.__r,ie=0,T)p.state=p.__s,p.__d=!1,re&&re(n),d=p.render(p.props,p.state,p.context),g.push.apply(p.__h,p._sb),p._sb=[];else do p.__d=!1,re&&re(n),d=p.render(p.props,p.state,p.context),p.state=p.__s;while(p.__d&&++ie<25);p.state=p.__s,p.getChildContext!=null&&(i=y(y({},i),p.getChildContext())),T&&!m&&p.getSnapshotBeforeUpdate!=null&&(b=p.getSnapshotBeforeUpdate(h,_)),ae=d!=null&&d.type===S&&d.key==null?de(d.props.children):d,c=ne(e,v(ae)?ae:[ae],n,r,i,a,o,s,c,l,u),p.base=n.__e,n.__u&=-161,p.__h.length&&s.push(p),x&&(p.__E=p.__=null)}catch(e){if(s.length=f,n.__v=null,l||o!=null){if(e.then){for(n.__u|=l?160:128;c&&c.nodeType==8&&c.nextSibling;)c=c.nextSibling;o!=null&&(o[o.indexOf(c)]=null),n.__e=c}else if(o!=null)for(oe=o.length;oe--;)ee(o[oe])}else n.__e=r.__e;n.__k??=r.__k||[],e.then||le(n),t.__e(e,n,r)}}else o==null&&n.__v==r.__v?(n.__k=r.__k,n.__e=r.__e):c=n.__e=fe(r.__e,n,r,i,a,o,s,l,u);return(d=t.diffed)&&d(n),128&n.__u?void 0:c}function le(e){e&&(e.__c&&(e.__c.__e=!0),e.__k&&e.__k.some(le))}function ue(e,n,r){for(var i=0;i<r.length;i++)pe(r[i],r[++i],r[++i]);t.__c&&t.__c(n,e),e.some(function(n){try{e=n.__h,n.__h=[],e.some(function(e){e.call(n)})}catch(e){t.__e(e,n.__v)}})}function de(e){return typeof e!=`object`||!e||e.__b>0?e:v(e)?e.map(de):e.constructor===void 0?y({},e):null}function fe(n,r,i,a,o,s,c,l,u){var d,f,p,m,g,_,y,b=i.props||h,x=r.props,S=r.type;if(S==`svg`?o=`http://www.w3.org/2000/svg`:S==`math`?o=`http://www.w3.org/1998/Math/MathML`:o||=`http://www.w3.org/1999/xhtml`,s!=null){for(d=0;d<s.length;d++)if((g=s[d])&&`setAttribute`in g==!!S&&(S?g.localName==S:g.nodeType==3)){n=g,s[d]=null;break}}if(n==null){if(S==null)return document.createTextNode(x);n=document.createElementNS(o,S,x.is&&x),l&&=(t.__m&&t.__m(r,s),!1),s=null}if(S==null)b===x||l&&n.data==x||(n.data=x);else{if(s=S==`textarea`&&x.defaultValue!=null?null:s&&e.call(n.childNodes),!l&&s!=null)for(b={},d=0;d<n.attributes.length;d++)b[(g=n.attributes[d]).name]=g.value;for(d in b)g=b[d],d==`dangerouslySetInnerHTML`?p=g:d==`children`||d in x||d==`value`&&`defaultValue`in x||d==`checked`&&`defaultChecked`in x||O(n,d,null,g,o);for(d in x)g=x[d],d==`children`?m=g:d==`dangerouslySetInnerHTML`?f=g:d==`value`?_=g:d==`checked`?y=g:l&&typeof g!=`function`||b[d]===g||O(n,d,g,b[d],o);if(f)l||p&&(f.__html==p.__html||f.__html==n.innerHTML)||(n.innerHTML=f.__html),r.__k=[];else if(p&&(n.innerHTML=``),ne(r.type==`template`?n.content:n,v(m)?m:[m],r,i,a,S==`foreignObject`?`http://www.w3.org/1999/xhtml`:o,s,c,s?s[0]:i.__k&&C(i,0),l,u),s!=null)for(d=s.length;d--;)ee(s[d]);l&&S!=`textarea`||(d=`value`,S==`progress`&&_==null?n.removeAttribute(`value`):_!=null&&(_!==n[d]||S==`progress`&&!_||S==`option`&&_!=b[d])&&O(n,d,_,b[d],o),d=`checked`,y!=null&&y!=n[d]&&O(n,d,y,b[d],o))}return n}function pe(e,n,r){try{if(typeof e==`function`){var i=typeof e.__u==`function`;i&&e.__u(),i&&n==null||(e.__u=e(n))}else e.current=n}catch(e){t.__e(e,r)}}function me(e,n,r){var i,a;if(t.unmount&&t.unmount(e),(i=e.ref)&&(i.current&&i.current!=e.__e||pe(i,null,n)),(i=e.__c)!=null){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(e){t.__e(e,n)}i.base=i.__P=i.__n=null}if(i=e.__k)for(a=0;a<i.length;a++)i[a]&&me(i[a],n,r||typeof e.type!=`function`);r||ee(e.__e),e.__c=e.__=e.__e=void 0}function he(e,t,n){return this.constructor(e,n)}function ge(n,r,i){var a,o,s,c;r==document&&(r=document.documentElement),t.__&&t.__(n,r),o=(a=typeof i==`function`)?null:i&&i.__k||r.__k,s=[],c=[],ce(r,n=(!a&&i||r).__k=b(S,null,[n]),o||h,h,r.namespaceURI,!a&&i?[i]:o?null:r.firstChild?e.call(r.childNodes):null,s,!a&&i?i:o?o.__e:r.firstChild,a,c),ue(s,n,c),n.props.children=null}e=g.slice,t={__e:function(e,t,n,r){for(var i,a,o;t=t.__;)if((i=t.__c)&&!i.__)try{if((a=i.constructor)&&a.getDerivedStateFromError!=null&&(i.setState(a.getDerivedStateFromError(e)),o=i.__d),i.componentDidCatch!=null&&(i.componentDidCatch(e,r||{}),o=i.__d),o)return i.__E=i}catch(t){e=t}throw e}},n=0,r=function(e){return e!=null&&e.constructor===void 0},te.prototype.setState=function(e,t){var n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=y({},this.state);typeof e==`function`&&(e=e(y({},n),this.props)),e&&y(n,e),e!=null&&this.__v&&(t&&this._sb.push(t),E(this))},te.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),E(this))},te.prototype.render=S,i=[],o=typeof Promise==`function`?Promise.prototype.then.bind(Promise.resolve()):setTimeout,s=function(e,t){return e.__v.__b-t.__v.__b},D.__r=0,c=Math.random().toString(8),l=`__d`+c,u=`__a`+c,d=/(PointerCapture)$|Capture$/i,f=0,p=se(!1),m=se(!0);var _e,k,ve,ye,be=0,xe=[],A=t,Se=A.__b,Ce=A.__r,we=A.diffed,Te=A.__c,Ee=A.unmount,De=A.__;function Oe(e,t){A.__h&&A.__h(k,e,be||t),be=0;var n=k.__H||(k.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function ke(e){return be=1,Ae(Re,e)}function Ae(e,t,n){var r=Oe(_e++,2);if(r.t=e,!r.__c&&(r.__=[n?n(t):Re(void 0,t),function(e){var t=r.__N?r.__N[0]:r.__[0],n=r.t(t,e);t!==n&&(r.__N=[n,r.__[1]],r.__c.setState({}))}],r.__c=k,!k.__f)){var i=function(e,t,n){if(!r.__c.__H)return!0;var i=!1,o=r.__c.props!==e;if(r.__c.__H.__.some(function(e){if(e.__N){i=!0;var t=e.__[0];e.__=e.__N,e.__N=void 0,t!==e.__[0]&&(o=!0)}}),a){var s=a.call(this,e,t,n);return i?s||o:s}return!i||o};k.__f=!0;var a=k.shouldComponentUpdate,o=k.componentWillUpdate;k.componentWillUpdate=function(e,t,n){if(this.__e){var r=a;a=void 0,i(e,t,n),a=r}o&&o.call(this,e,t,n)},k.shouldComponentUpdate=i}return r.__N||r.__}function je(e,t){var n=Oe(_e++,3);!A.__s&&Le(n.__H,t)&&(n.__=e,n.u=t,k.__H.__h.push(n))}function j(e,t){var n=Oe(_e++,4);!A.__s&&Le(n.__H,t)&&(n.__=e,n.u=t,k.__h.push(n))}function M(e){return be=5,N(function(){return{current:e}},[])}function N(e,t){var n=Oe(_e++,7);return Le(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function Me(){for(var e;e=xe.shift();){var t=e.__H;if(e.__P&&t)try{t.__h.some(Fe),t.__h.some(Ie),t.__h=[]}catch(n){t.__h=[],A.__e(n,e.__v)}}}A.__b=function(e){k=null,Se&&Se(e)},A.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),De&&De(e,t)},A.__r=function(e){Ce&&Ce(e),_e=0;var t=(k=e.__c).__H;t&&(ve===k?(t.__h=[],k.__h=[],t.__.some(function(e){e.__N&&(e.__=e.__N),e.u=e.__N=void 0})):(t.__h.some(Fe),t.__h.some(Ie),t.__h=[],_e=0)),ve=k},A.diffed=function(e){we&&we(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(xe.push(t)!==1&&ye===A.requestAnimationFrame||((ye=A.requestAnimationFrame)||Pe)(Me)),t.__H.__.some(function(e){e.u&&=(e.__H=e.u,void 0)})),ve=k=null},A.__c=function(e,t){t.some(function(e){try{e.__h.some(Fe),e.__h=e.__h.filter(function(e){return!e.__||Ie(e)})}catch(n){t.some(function(e){e.__h&&=[]}),t=[],A.__e(n,e.__v)}}),Te&&Te(e,t)},A.unmount=function(e){Ee&&Ee(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.some(function(e){try{Fe(e)}catch(e){t=e}}),n.__H=void 0,t&&A.__e(t,n.__v))};var Ne=typeof requestAnimationFrame==`function`;function Pe(e){var t,n=function(){clearTimeout(r),Ne&&cancelAnimationFrame(t),setTimeout(e)},r=setTimeout(n,35);Ne&&(t=requestAnimationFrame(n))}function Fe(e){var t=k,n=e.__c;typeof n==`function`&&(e.__c=void 0,n()),k=t}function Ie(e){var t=k;e.__c=e.__(),k=t}function Le(e,t){return!e||e.length!==t.length||t.some(function(t,n){return t!==e[n]})}function Re(e,t){return typeof t==`function`?t(e):t}var ze=Symbol.for(`preact-signals`);function Be(){if(F>1)F--;else{var e,t=!1;for((function(){var e=Je;for(Je=void 0;e!==void 0;){var t=e.S;if(t.v===e.v)for(var n=t.t;n!==void 0;n=n.x)n.i===e.i&&(n.i=t.i);e=e.o}})();We!==void 0;){var n=We;for(We=void 0,Ge++;n!==void 0;){var r=n.u;if(n.u=void 0,n.f&=-3,!(8&n.f)&&Ze(n))try{n.c()}catch(n){t||=(e=n,!0)}n=r}}if(Ge=0,F--,t)throw e}}function Ve(e){if(F>0)return e();qe=++Ke,F++;try{return e()}finally{Be()}}var He,P=void 0;function Ue(e){var t=P,n=He;P=void 0,He=void 0;try{return e()}finally{P=t,He=n}}var We=void 0,F=0,Ge=0,Ke=0,qe=0,Je=void 0,Ye=0;function Xe(e){if(P!==void 0){var t=e.n;if(t===void 0||t.t!==P)return t={i:0,S:e,p:P.s,n:void 0,t:P,e:void 0,x:void 0,r:t},P.s!==void 0&&(P.s.n=t),P.s=t,e.n=t,32&P.f&&e.S(t),t;if(t.i===-1)return t.i=0,t.n!==void 0&&(t.n.p=t.p,t.p!==void 0&&(t.p.n=t.n),t.p=P.s,t.n=void 0,P.s.n=t,P.s=t),t}}function I(e,t){this.v=e,this.i=0,this.n=void 0,this.t=void 0,this.l=0,this.W=t?.watched,this.Z=t?.unwatched,this.name=t?.name}I.prototype.brand=ze,I.prototype.h=function(){return!0},I.prototype.S=function(e){var t=this,n=this.t;n!==e&&e.e===void 0&&(e.x=n,this.t=e,n===void 0?Ue(function(){var e;(e=t.W)==null||e.call(t)}):n.e=e)},I.prototype.U=function(e){var t=this;if(this.t!==void 0){var n=e.e,r=e.x;n!==void 0&&(n.x=r,e.e=void 0),r!==void 0&&(r.e=n,e.x=void 0),e===this.t&&(this.t=r,r===void 0&&Ue(function(){var e;(e=t.Z)==null||e.call(t)}))}},I.prototype.subscribe=function(e){var t=this;return at(function(){var n=t.value;Ue(function(){return e(n)})},{name:`sub`})},I.prototype.valueOf=function(){return this.value},I.prototype.toString=function(){return this.value+``},I.prototype.toJSON=function(){return this.value},I.prototype.peek=function(){var e=this;return Ue(function(){return e.value})},Object.defineProperty(I.prototype,"value",{get:function(){var e=Xe(this);return e!==void 0&&(e.i=this.i),this.v},set:function(e){if(e!==this.v){if(Ge>100)throw Error(`Cycle detected`);(function(e){F!==0&&Ge===0&&e.l!==qe&&(e.l=qe,Je={S:e,v:e.v,i:e.i,o:Je})})(this),this.v=e,this.i++,Ye++,F++;try{for(var t=this.t;t!==void 0;t=t.x)t.t.N()}finally{Be()}}}});function L(e,t){return new I(e,t)}function Ze(e){for(var t=e.s;t!==void 0;t=t.n)if(t.S.i!==t.i||!t.S.h()||t.S.i!==t.i)return!0;return!1}function Qe(e){for(var t=e.s;t!==void 0;t=t.n){var n=t.S.n;if(n!==void 0&&(t.r=n),t.S.n=t,t.i=-1,t.n===void 0){e.s=t;break}}}function $e(e){for(var t=e.s,n=void 0;t!==void 0;){var r=t.p;t.i===-1?(t.S.U(t),r!==void 0&&(r.n=t.n),t.n!==void 0&&(t.n.p=r)):n=t,t.S.n=t.r,t.r!==void 0&&(t.r=void 0),t=r}e.s=n}function R(e,t){I.call(this,void 0,t),this.x=e,this.s=void 0,this.g=Ye-1,this.f=4}R.prototype=new I,R.prototype.h=function(){if(this.f&=-3,1&this.f)return!1;if((36&this.f)==32||(this.f&=-5,this.g===Ye))return!0;if(this.g=Ye,this.f|=1,this.i>0&&!Ze(this))return this.f&=-2,!0;var e=P;try{Qe(this),P=this;var t=this.x();(16&this.f||this.v!==t||this.i===0)&&(this.v=t,this.f&=-17,this.i++)}catch(e){this.v=e,this.f|=16,this.i++}return P=e,$e(this),this.f&=-2,!0},R.prototype.S=function(e){if(this.t===void 0){this.f|=36;for(var t=this.s;t!==void 0;t=t.n)t.S.S(t)}I.prototype.S.call(this,e)},R.prototype.U=function(e){if(this.t!==void 0&&(I.prototype.U.call(this,e),this.t===void 0)){this.f&=-33;for(var t=this.s;t!==void 0;t=t.n)t.S.U(t)}},R.prototype.N=function(){if(!(2&this.f)){this.f|=6;for(var e=this.t;e!==void 0;e=e.x)e.t.N()}},Object.defineProperty(R.prototype,"value",{get:function(){if(1&this.f)throw Error(`Cycle detected`);var e=Xe(this);if(this.h(),e!==void 0&&(e.i=this.i),16&this.f)throw this.v;return this.v}});function et(e,t){return new R(e,t)}function tt(e){var t=e.m;if(e.m=void 0,typeof t==`function`){F++;var n=P;P=void 0;try{t()}catch(t){throw e.f&=-2,e.f|=8,nt(e),t}finally{P=n,Be()}}}function nt(e){for(var t=e.s;t!==void 0;t=t.n)t.S.U(t);e.x=void 0,e.s=void 0,tt(e)}function rt(e){if(P!==this)throw Error(`Out-of-order effect`);$e(this),P=e,this.f&=-2,8&this.f&&nt(this),Be()}function it(e,t){this.x=e,this.m=void 0,this.s=void 0,this.u=void 0,this.f=32,this.name=t?.name,He&&He.push(this)}it.prototype.c=function(){var e=this.S();try{if(8&this.f||this.x===void 0)return;var t=this.x();typeof t==`function`&&(this.m=t)}finally{e()}},it.prototype.S=function(){if(1&this.f)throw Error(`Cycle detected`);this.f|=1,this.f&=-9,tt(this),Qe(this),F++;var e=P;return P=this,rt.bind(this,e)},it.prototype.N=function(){2&this.f||(this.f|=2,this.u=We,We=this)},it.prototype.d=function(){this.f|=8,1&this.f||nt(this)},it.prototype.dispose=function(){this.d()};function at(e,t){var n=new it(e,t);try{n.c()}catch(e){throw n.d(),e}var r=n.d.bind(n);return r[Symbol.dispose]=r,r}var ot,st,ct=typeof window<`u`&&!!window.__PREACT_SIGNALS_DEVTOOLS__,lt=[];at(function(){ot=this.N})();function z(e,n){t[e]=n.bind(null,t[e]||function(){})}function ut(e){if(st){var t=st;st=void 0,t()}st=e&&e.S()}function dt(e){var t=this,n=e.data,i=pt(n);i.name=`ReactiveDom`,i.value=n;var a=N(function(){for(var e=t,n=t.__v;n=n.__;)if(n.__c){n.__c.__$f|=4;break}var a=et(function(){var e=i.value.value;return e===0?0:!0===e?``:e||``}),o=et(function(){return!Array.isArray(a.value)&&!r(a.value)}),s=at(function(){if(this.N=gt,o.value){var t=a.value;e.__v&&e.__v.__e&&e.__v.__e.nodeType===3&&(e.__v.__e.data=t)}}),c=t.__$u.d;return t.__$u.d=function(){s(),c.call(this)},[o,a]},[]),o=a[0],s=a[1];return o.value?s.peek():s.value}dt.displayName=`ReactiveTextNode`,Object.defineProperties(I.prototype,{constructor:{configurable:!0,value:void 0},type:{configurable:!0,value:dt},props:{configurable:!0,get:function(){var e=this;return{data:{get value(){return e.value}}}}},__b:{configurable:!0,value:1}}),z(`__b`,function(e,t){if(ut(),typeof t.type==`string`){var n,r=t.props;for(var i in r)if(i!==`children`){var a=r[i];a instanceof I&&(n||(t.__np=n={}),n[i]=a,r[i]=a.peek())}}e(t)}),z(`__r`,function(e,t){if(e(t),t.type!==S){ut();var n,r=t.__c;r&&(r.__$f&=-2,(n=r.__$u)===void 0&&(r.__$u=n=function(e,t){var n;return at(function(){n=this},{name:t}),n.c=e,n}(function(e){return function(){var t;ct&&((t=this.y)==null||t.call(this)),e.__$f|=1,e.setState({})}}(r),typeof t.type==`function`?t.type.displayName||t.type.name:``))),ut(n)}}),z(`__e`,function(e,t,n,r){ut(),e(t,n,r)}),z(`diffed`,function(e,t){ut();var n;if(typeof t.type==`string`&&(n=t.__e)){var r=t.__np,i=t.props,a=n.U;if(a)for(var o in a){var s=a[o];s===void 0||r&&o in r||(s.d(),a[o]=void 0)}if(r)for(var c in a||(a={},n.U=a),r){var l=a[c],u=r[c];l===void 0?(l=ft(n,c,u,i),a[c]=l):l.o(u,i)}}e(t)});function ft(e,t,n,r){var i=t in e&&e.ownerSVGElement===void 0,a=L(n);return{o:function(e,t){a.value=e,r=t},d:at(function(){this.N=gt;var n=a.value.value;r[t]!==n&&(r[t]=n,i?e[t]=n:n!=null&&(!1!==n||t[4]===`-`)?e.setAttribute(t,n):e.removeAttribute(t))})}}z(`unmount`,function(e,t){if(typeof t.type==`string`){var n=t.__e;if(n){var r=n.U;if(r)for(var i in n.U=void 0,r){var a=r[i];a&&a.d()}}var o=t.__np;if(o){var s=t.props;for(var c in o)s[c]=o[c]}t.__np=void 0}else{var l=t.__c;if(l){l.__$f|=8;var u=l.__$u;u&&(l.__$u=void 0,u.d())}}e(t)}),z(`__h`,function(e,t,n,r){r<3&&(t.__$f|=2),e(t,n,r)}),te.prototype.shouldComponentUpdate=function(e,t){if(this.__R)return!0;var n=this.__$u,r=n&&n.s!==void 0;for(var i in t)return!0;if(this.__f||typeof this.u==`boolean`&&!0===this.u){var a=2&this.__$f;if(!(r||a||4&this.__$f)||1&this.__$f)return!0}else if(!(r||4&this.__$f)||3&this.__$f)return!0;for(var o in e)if(o!==`__source`&&e[o]!==this.props[o])return!0;for(var s in this.props)if(!(s in e))return!0;return!1};function pt(e,t){return N(function(){return L(e,t)},[])}var mt=function(e){queueMicrotask(function(){queueMicrotask(e)})};function ht(){Ve(function(){for(var e;e=lt.shift();)ot.call(e)})}function gt(){lt.push(this)===1&&(t.requestAnimationFrame||mt)(ht)}function _t(e){try{return window.localStorage.getItem(e)}catch{return null}}function vt(e,t){try{window.localStorage.setItem(e,t)}catch{}}var yt=`loupe.sidebar`,bt=`(max-width: 760px)`;function xt(){return window.matchMedia(bt).matches}var B=L(!xt()&&_t(yt)!==`closed`);function St(){B.value=!B.value,xt()||vt(yt,B.value?`open`:`closed`)}var Ct=L(null);function wt(e){B.value=!0,Ct.value={key:e,seq:(Ct.value?.seq??0)+1}}var Tt=/^(0|[1-9]\d*)$/,Et={"run-errors":{page:`errors`}};function Dt(e){try{return decodeURIComponent(e)}catch{return null}}function Ot(e){return Dt(e)??e}function kt(e){let t=e.split(`/`).filter(e=>e!==``).map(Dt);if(t.some(e=>e===null))return{page:`not-found`,path:e};let[n,r,i,a]=t;if(t.length===0)return{page:`dashboard`};if(t.length===1&&(n===`errors`||n===`health`||n===`tests`))return{page:n};if(n===`errors`&&r===`category`&&t.length===3&&i!==void 0)return{page:`errors`,category:i};if(t.length===1&&n!==void 0&&Object.hasOwn(Et,n))return Et[n];if(n===`group`&&r!==void 0&&t.length===2)return{page:`group`,signature:r};if(n===`test`&&r!==void 0){if(t.length===2)return{page:`test`,id:r,repeatEachIndex:0};if(t.length===4&&i===`repeat`&&a!==void 0&&Tt.test(a))return{page:`test`,id:r,repeatEachIndex:Number(a)}}return{page:`not-found`,path:e}}function At(e){let t=e.startsWith(`#`)?e.slice(1):e,n=t.indexOf(`?`),r=n===-1?t:t.slice(0,n),i=n===-1?``:t.slice(n+1);return{route:kt(r),search:i}}function jt(e){switch(e.page){case`dashboard`:return`/`;case`errors`:return e.category===void 0?`/errors`:`/errors/category/${encodeURIComponent(e.category)}`;case`health`:return`/health`;case`tests`:return`/tests`;case`test`:{let t=`/test/${encodeURIComponent(e.id)}`;return e.repeatEachIndex===0?t:`${t}/repeat/${e.repeatEachIndex}`}case`group`:return`/group/${encodeURIComponent(e.signature)}`;case`not-found`:return e.path.startsWith(`/`)?e.path:`/${e.path}`}}function V(e){return`#${jt(e.route)}${e.search?`?${e.search}`:``}`}function Mt(e){let t=((e.startsWith(`#`)?e.slice(1):e).split(`?`)[0]??``).split(`/`).filter(e=>e!==``);return t.length!==1||!Object.hasOwn(Et,Ot(t[0]))?null:V(At(e))}var Nt=e=>e;function Pt(){let e=window.location.hash,t=At(e),n={route:t.route,search:Nt(t.search)};return(Mt(e)!==null||n.search!==t.search)&&window.history.replaceState(window.history.state,``,V(n)),n}var H=L(Pt());function Ft(){let e=Pt();V(e)!==V(H.value)&&(H.value=e)}window.addEventListener(`hashchange`,Ft),window.addEventListener(`popstate`,Ft);function It(e){Nt=e,Ft()}function U(e){return V({route:e,search:H.value.search})}function Lt(e){window.location.hash=U(e)}function Rt(e,t){let n=V(e);n!==V(H.value)&&(t===`push`?window.history.pushState(null,``,n):window.history.replaceState(window.history.state,``,n),H.value=e)}var zt=[`passed`,`failed`,`flaky`,`skipped`];function Bt(e,t){return t.status!==e.expectedStatus&&t.status!==`skipped`}function Vt(e){let t=new Map;for(let n of e.tests)for(let e of n.attempts)if(Bt(n,e))for(let r of e.errors){let i=t.get(r.signature);i||(i={signature:r.signature,category:r.category??`Uncategorized`,message:r.message,tests:[],failed:0,flaky:0},t.set(r.signature,i));let a=i.tests[i.tests.length-1];a?.test===n?a.attempts.includes(e.index)||a.attempts.push(e.index):(i.tests.push({test:n,attempts:[e.index]}),n.outcome===`failed`?i.failed+=1:n.outcome===`flaky`&&(i.flaky+=1))}return[...t.values()]}function Ht(e){return e.map((e,t)=>({group:e,index:t})).sort((e,t)=>t.group.failed-e.group.failed||t.group.flaky-e.group.flaky||e.index-t.index).map(({group:e})=>e)}function Ut(e){return e.split(`
8
- `).find(e=>e.trim()!==``)?.trim()??``}var Wt=/^(?:Error: )?(?:expect(?:\.soft|\.poll)?\(\w+\)\.(?:not\.)?\w+\([^)]*\)(?: failed)?|Timed out \d+ms waiting for expect\(.*)$/,Gt=/^\s*Locator:\s+(.+?)\s*$/m,Kt=/^\s*(?:- )?\u2190 (\d{3}\b.*?)\s*$/m;function qt(e){let t=Ut(e);if(!Wt.test(t))return t;let n=Gt.exec(e);if(n)return`Locator: ${n[1]}`;let r=Kt.exec(e);return r?`\u2190 ${r[1]}`:t}function Jt(e){return{headline:qt(e.message),firstTest:e.tests[0]?.test??null,others:Math.max(0,e.tests.length-1)}}function Yt(e){return e.tests.some(({test:e})=>e.attempts.length>1)?`failed on ${e.tests.reduce((e,{attempts:t})=>e+t.length,0)} of ${e.tests.reduce((e,{test:t})=>e+t.attempts.length,0)} attempts`:null}function Xt(e,t){let n=new Map;for(let e of t){let t=n.get(e.category);t||(t={tests:new Set,groups:[]},n.set(e.category,t)),t.groups.push(e);for(let{test:n}of e.tests)t.tests.add(n)}let r=e.categories.map(e=>e.name);return[...r.filter(e=>n.has(e)),...[...n.keys()].filter(e=>!r.includes(e))].map(e=>{let t=n.get(e);return{name:e,tests:t.tests.size,groups:t.groups}})}function Zt(e){let{stats:t,status:n,errors:r}=e.run;return t.failed>0||n!==`passed`||r.length>0?`failed`:t.flaky>0?`flaky`:`passed`}function Qt(e){return zt.filter(t=>e[t]>0).map(t=>({outcome:t,count:e[t],share:e.total>0?e[t]/e.total:0}))}function $t(e){let t=e.total-e.skipped;return t>0?e.passed/t:null}var en=`Pass rate: passed / (total − skipped). Skipped tests are excluded; flaky tests do not count as passed.`;function tn(e){let t=e*100;return t>99&&t<100?`99%`:t>0&&t<1?`<1%`:`${Math.round(t)}%`}function nn(e){return e.projects.filter(e=>e.stats.total>0).map(t=>{let n=e.tests.filter(e=>e.project===t.name).reduce((e,t)=>e+t.durationMs,0);return{project:t,passRate:$t(t.stats),durationMs:n}})}function rn(e){return e.dimensions.map(t=>{let n=new Map,r=e=>{let r=n.get(e);return r||(r={value:e,passed:0,failed:0,flaky:0,skipped:0,total:0,unknown:t.values!==null&&!t.values.includes(e),caseVariants:[]},n.set(e,r)),r};for(let e of t.values??[])r(e);let i=0;for(let n of e.tests){let e=n.dimensions[t.name]??[];e.length===0&&(i+=1);for(let t of new Set(e)){let e=r(t);e[n.outcome]+=1,e.total+=1}}let a=t.values??[],o=[...n.keys()].filter(e=>!a.includes(e)).sort((e,t)=>e.localeCompare(t)),s=[...a,...o].map(e=>n.get(e)),c=un(s.map(e=>e.value));for(let e of s)e.caseVariants=c.get(e.value)??[];return{definition:t,values:s,without:i}})}function an(e){return e.values.length<=8?`bars`:`tiles`}function on(e){return e.failed>0?`failed`:e.flaky>0?`flaky`:e.passed>0?`passed`:e.skipped>0?`skipped`:`none`}var sn={failed:0,flaky:1,passed:2,skipped:3,none:4};function cn(e){return e.map((e,t)=>({row:e,index:t,status:on(e)})).sort((e,t)=>sn[e.status]-sn[t.status]||t.row.failed-e.row.failed||t.row.flaky-e.row.flaky||e.index-t.index).map(({row:e})=>e)}function ln(e){let t=t=>e.filter(e=>on(e)===t).length,n=[[t(`passed`),`all passed`],[t(`failed`),`with failures`],[t(`flaky`),`flaky`],[t(`skipped`),`skipped only`],[t(`none`),`without tests`]];return[`${e.length} ${e.length===1?`value`:`values`}`,...n.filter(([e])=>e>0).map(([e,t])=>`${e} ${t}`)].join(` · `)}function un(e){let t=new Map;for(let n of new Set(e)){let e=n.toLowerCase();t.set(e,[...t.get(e)??[],n])}let n=new Map;for(let e of t.values())if(!(e.length<2))for(let t of e)n.set(t,e.filter(e=>e!==t));return n}function dn(e){return e.tests.filter(e=>e.outcome===`flaky`).map(e=>({test:e,error:e.attempts.find(t=>Bt(e,t))?.errors[0]??null}))}function fn(e,t=10){return e.tests.filter(e=>e.outcome!==`skipped`&&e.durationMs>0).map((e,t)=>({test:e,index:t})).sort((e,t)=>t.test.durationMs-e.test.durationMs||e.index-t.index).slice(0,t).map(({test:e})=>e)}var pn=[`skip`,`fixme`];function mn(e){return e.tests.filter(e=>e.outcome===`skipped`).map(e=>{let t=[...e.annotations,...e.attempts[e.attempts.length-1]?.annotations??[]].find(e=>pn.includes(e.type));return{test:e,kind:t?t.type:null,reason:t?.description?.trim()||null}})}var hn=/^@([^:\s]+):(.+)$/;function gn(e){let t=hn.exec(e);return t?{prefix:t[1]??``,value:t[2]??``}:null}var _n=[`status`,`title`,`project`,`file`,`duration`,`category`,`attempts`],vn={column:`status`,direction:`asc`};function yn(e){return En(Object.keys(e)).map(t=>[t,e[t]??[]]).filter(([,e])=>e.length>0)}var bn={q:``,facets:{},sort:vn},xn=[`status`,`project`,`tag`],Sn=`dim.`;function Cn(e){return`${Sn}${e}`}function wn(e){return e.startsWith(Sn)?e.slice(4):null}function Tn(e,t){return e<t?-1:+(e>t)}function En(e){let t=e=>e===`category`?4:wn(e)===null?xn.indexOf(e):3;return[...e].sort((e,n)=>t(e)-t(n)||Tn(e,n))}function Dn(e){try{return decodeURIComponent(e.replace(/\+/g,` `))}catch{return null}}function On(e){let[t,n,...r]=e.split(`:`);return r.length>0||!_n.includes(t??``)||n!==`asc`&&n!==`desc`?null:{column:t,direction:n}}function kn(e,t){let n=e;if(e.startsWith(`#`)){let t=e.indexOf(`?`);n=t===-1?``:e.slice(t+1)}else e.startsWith(`?`)&&(n=e.slice(1));let r={},i=``,a=vn;for(let e of n.split(`&`)){if(e===``)continue;let n=e.indexOf(`=`),o=Dn(n===-1?e:e.slice(0,n)),s=n===-1?``:e.slice(n+1);if(o===null)continue;if(o===`q`){i=Dn(s)??``;continue}if(o===`sort`){a=On(Dn(s)??``)??a;continue}if(!(xn.includes(o)||o===`category`||o.startsWith(Sn)&&o.length>4))continue;let c=o,l=t?.get(c);if(!t||l)for(let e of s.split(`,`)){let t=Dn(e);t===null||t===``||l&&!l.has(t)||(r[c]??=[]).push(t)}}return An({q:i,facets:r,sort:a})}function An(e){let t={};for(let[n,r]of yn(e.facets))t[n]=[...new Set(r)].sort(Tn);return{q:e.q,facets:t,sort:e.sort}}function jn(e){return e.column===vn.column&&e.direction===vn.direction}function Mn(e){let t=An(e),n=[],r=t.q.trim();r!==``&&n.push(`q=${encodeURIComponent(r)}`);for(let[e,r]of yn(t.facets))n.push(`${encodeURIComponent(e)}=${r.map(encodeURIComponent).join(`,`)}`);return jn(t.sort)||n.push(`sort=${t.sort.column}:${t.sort.direction}`),n.join(`&`)}function Nn(e){return(e.q.trim()===``?0:1)+yn(e.facets).reduce((e,[,t])=>e+t.length,0)}function Pn(e,t,n,r){let i=e.facets[t]??[],a=r?[...i,n]:i.filter(e=>e!==n);return{...e,facets:{...e.facets,[t]:a}}}function Fn(e){return{...bn,sort:e.sort}}var In={dimensionTagPrefixes:new Set};function Ln(e){return{dimensionTagPrefixes:new Set(e.dimensions.filter(e=>e.source===`tag`).map(e=>e.key))}}function Rn(e,t){return t.dimensionTagPrefixes.size===0?[...e]:e.filter(e=>{let n=gn(e);return n===null||!t.dimensionTagPrefixes.has(n.prefix)})}function zn(e){return e.normalize(`NFD`).replace(/\p{M}/gu,``).toLowerCase()}function Bn(e){return zn(e).split(/\s+/).filter(e=>e!==``)}function Vn(e){let t=new Set;for(let n of e.attempts)if(Bt(e,n))for(let e of n.errors)t.add(e.category??`Uncategorized`);return[...t]}var Hn=new WeakMap;function Un(e){let t=Hn.get(e);return t||(t={haystack:zn([[...e.suitePath,e.title].join(` › `),e.file,e.project].join(`
9
- `)),categories:Vn(e)},Hn.set(e,t)),t}function Wn(e){return Un(e).categories}function Gn(e){let t=Wn(e),n=e.category!==null&&t.includes(e.category)?e.category:t[0]??null;return{primary:n,others:t.filter(e=>e!==n)}}function Kn(e,t,n=In){switch(t){case`status`:return[e.outcome];case`project`:return[e.project];case`tag`:return Rn(e.tags,n);case`category`:return Wn(e);default:return e.dimensions[wn(t)??``]??[]}}function qn(e,t){if(t.length===0)return!0;let{haystack:n}=Un(e);return t.every(e=>n.includes(e))}function Jn(e,t,n,r){if(n.length===0)return!0;let i=Kn(e,t,r);return n.some(e=>i.includes(e))}function Yn(e,t,n=In){let r=Bn(t.q),i=yn(t.facets);return e.filter(e=>qn(e,r)&&i.every(([t,r])=>Jn(e,t,r,n)))}function Xn(e,t,n,r=In){let i=new Map;for(let[e,t]of n)i.set(e,new Map([...t].map(e=>[e,0])));let a=Bn(t.q),o=yn(t.facets),s=(e,t)=>{let n=i.get(t);if(n)for(let i of new Set(Kn(e,t,r))){let e=n.get(i);e!==void 0&&n.set(i,e+1)}};for(let t of e){if(!qn(t,a))continue;let e=null,i=0;for(let[n,a]of o)if(!Jn(t,n,a,r)&&(i+=1,e=n,i>1))break;if(!(i>1)){if(e!==null)s(t,e);else for(let e of n.keys())s(t,e)}}return i}function Zn(e){let t=Ln(e),n=n=>new Set(e.tests.flatMap(e=>Kn(e,n,t))),r=(e,t)=>new Set([...e.filter(e=>t.has(e)),...[...t].filter(t=>!e.includes(t)).sort((e,t)=>e.localeCompare(t))]),i=new Map,a=(e,t)=>{t.size>0&&i.set(e,t)};a(`status`,r([`failed`,`flaky`,...zt.filter(e=>e!==`failed`&&e!==`flaky`)],n(`status`))),a(`category`,r(e.categories.map(e=>e.name),n(`category`)));let o=n(`project`);o.delete(``),a(`project`,r(e.projects.map(e=>e.name),o)),a(`tag`,r([],n(`tag`)));for(let t of e.dimensions){let e=Cn(t.name);a(e,r(t.values??[],n(e)))}return i}var Qn=L(new Map),$n=L(In);function er(e){Qn.value=Zn(e),$n.value=Ln(e),It(e=>Mn(kn(e,Qn.value)))}var tr=et(()=>kn(H.value.search,Qn.value));function nr(e,t=H.value.route){return V({route:t,search:Mn(e)})}function W(e,t=`push`,n=H.value.route){Rt({route:n,search:Mn(e)},t)}function rr(e){return e.replace(/\\/g,`/`)}function ir(e){let t=null;for(let n of e){let e=rr(n).split(`/`).slice(0,-1);if(t===null){t=e;continue}let r=0;for(;r<t.length&&r<e.length&&t[r]===e[r];)r+=1;if(t.length=r,r===0)break}return t&&t.length>0?`${t.join(`/`)}/`:``}function ar(e,t){let n=rr(e);return t!==``&&n.startsWith(t)?n.slice(t.length):n}var or=4;function sr(e){let t=/(?:\.[^./]{1,6}){1,2}$/.exec(e.slice(1))?.[0]??``,n=e.slice(0,e.length-t.length),r=n.length>12?or:0;return[n.slice(0,n.length-r),`${n.slice(n.length-r)}${t}`]}var cr=[{name:`blue`,reference:`#466cc8`,light:{text:`#385db7`,bg:`#eaf0fe`,border:`#5981df`},dark:{text:`#9ebdff`,bg:`#18233c`,border:`#577cd3`}},{name:`cyan`,reference:`#0a7da1`,light:{text:`#0a708f`,bg:`#e0f4fd`,border:`#2b8fb4`},dark:{text:`#60cdf5`,bg:`#002837`,border:`#268cb1`}},{name:`teal`,reference:`#04837c`,light:{text:`#09726c`,bg:`#dbf7f4`,border:`#29958e`},dark:{text:`#6ed2c9`,bg:`#002b28`,border:`#25928b`}},{name:`violet`,reference:`#8656b7`,light:{text:`#7747a7`,bg:`#f4ecfe`,border:`#9e6ed2`},dark:{text:`#cfaafc`,bg:`#2a1d37`,border:`#9468c3`}},{name:`magenta`,reference:`#ad4681`,light:{text:`#9d3772`,bg:`#feeaf3`,border:`#cc629d`},dark:{text:`#f79dcc`,bg:`#351928`,border:`#bb598f`}},{name:`orange`,reference:`#ab5803`,light:{text:`#954d09`,bg:`#feece1`,border:`#c6702b`},dark:{text:`#f9a970`,bg:`#361d0a`,border:`#bc671f`}},{name:`brown`,reference:`#745f43`,light:{text:`#3c2d18`,bg:`#f5e9d9`,border:`#60503a`},dark:{text:`#b7a182`,bg:`#302412`,border:`#ae9779`}},{name:`gold`,reference:`#b9a542`,light:{text:`#736308`,bg:`#f5f1da`,border:`#9a861a`},dark:{text:`#d2be5d`,bg:`#2b2403`,border:`#94800e`}}],lr={name:`neutral`,reference:`#6b6b6b`,light:{text:`#636363`,bg:`#f0f0f0`,border:`#868686`},dark:{text:`#bebebe`,bg:`#242424`,border:`#808080`}};cr.map(e=>e.name);function ur(e){let t=e.toLowerCase();return[...cr,lr].find(e=>e.reference===t)??null}var dr={light:[`#f7f5f0`,`#ffffff`,`#eeeae2`],dark:[`#080808`,`#0d0d0d`,`#161616`]},fr=4.5,pr=/^#[0-9a-fA-F]{6}$/;function mr(e){return pr.test(e)}function hr(e){if(!mr(e))throw TypeError(`not a #rrggbb color: ${e}`);let t=Number.parseInt(e.slice(1),16);return[t>>16&255,t>>8&255,t&255]}function gr([e,t,n]){return`#${[e,t,n].map(e=>Math.round(Math.min(255,Math.max(0,e))).toString(16).padStart(2,`0`)).join(``)}`}function _r(e){let t=e/255;return t<=.04045?t/12.92:((t+.055)/1.055)**2.4}function vr(e){return(e<=.0031308?e*12.92:1.055*e**(1/2.4)-.055)*255}function yr(e){let[t,n,r]=hr(e).map(_r);return .2126*t+.7152*n+.0722*r}function br(e,t){let[n,r]=[yr(e),yr(t)].sort((e,t)=>t-e);return(n+.05)/(r+.05)}function xr(e){let[t,n,r]=hr(e).map(_r),i=Math.cbrt(.4122214708*t+.5363325363*n+.0514459929*r),a=Math.cbrt(.2119034982*t+.6806995451*n+.1073969566*r),o=Math.cbrt(.0883024619*t+.2817188376*n+.6299787005*r),s=.2104542553*i+.793617785*a-.0040720468*o,c=1.9779984951*i-2.428592205*a+.4505937099*o,l=.0259040371*i+.7827717662*a-.808675766*o,u=Math.atan2(l,c)*180/Math.PI;return{l:s,c:Math.hypot(c,l),h:u<0?u+360:u}}function Sr({l:e,c:t,h:n}){let r=t*Math.cos(n*Math.PI/180),i=t*Math.sin(n*Math.PI/180),a=(e+.3963377774*r+.2158037573*i)**3,o=(e-.1055613458*r-.0638541728*i)**3,s=(e-.0894841775*r-1.291485548*i)**3;return[4.0767416621*a-3.3077115913*o+.2309699292*s,-1.2684380046*a+2.6097574011*o-.3413193965*s,-.0041960863*a-.7034186147*o+1.707614701*s]}function Cr(e){let t=e.c;for(;;){let n=Sr({...e,c:t});if(n.every(e=>e>=-1e-4&&e<=1.0001)||t<=0)return gr(n.map(e=>vr(Math.min(1,Math.max(0,e)))));t=Math.max(0,t-.005)}}function wr(e,t,n,r){let i=t<n?.01:-.01;for(let a=t;i>0?a<=n:a>=n;a+=i){let t=Cr({...e,l:a});if(r(t))return t}return Cr({...e,l:n})}function Tr(e,t){let n=xr(e),r=n.c<.02?0:n.c,i=dr[t];if(t===`light`){let e=Cr({...n,l:.955,c:Math.min(r,.03)});return{text:wr({...n,c:Math.min(r,.16)},.5,0,t=>br(t,e)>=fr),bg:e,border:wr({...n,c:Math.min(r,.18)},.66,0,t=>[e,...i].every(e=>br(t,e)>=3))}}let a=Cr({...n,l:.26,c:Math.min(r,.05)});return{text:wr({...n,c:Math.min(r,.12)},.8,1,e=>br(e,a)>=fr),bg:a,border:wr({...n,c:Math.min(r,.14)},.6,1,e=>[a,...i].every(t=>br(e,t)>=3))}}var Er=new Map;function Dr(e){let t=e&&mr(e)?e.toLowerCase():lr.reference,n=Er.get(t);if(!n){let e=ur(t);n=e?{light:e.light,dark:e.dark}:{light:Tr(t,`light`),dark:Tr(t,`dark`)},Er.set(t,n)}return n}function Or(e){let{light:t,dark:n}=Dr(e);return{"--cat-text-light":t.text,"--cat-bg-light":t.bg,"--cat-border-light":t.border,"--cat-text-dark":n.text,"--cat-bg-dark":n.bg,"--cat-border-dark":n.border}}function kr(e){return new Map(e.map(e=>[e.name,e.color]))}function Ar(e){if(e<1e3)return`${Math.round(e)} ms`;if(e<6e4)return`${(e/1e3).toFixed(1)} s`;let t=Math.round(e/1e3);if(t<3600)return`${Math.floor(t/60)} min ${String(t%60).padStart(2,`0`)} s`;let n=Math.round(t/60);return`${Math.floor(n/60)} h ${String(n%60).padStart(2,`0`)} min`}function G(e,t,n=`${t}s`){return`${e} ${e===1?t:n}`}var jr=`\0`,Mr={project:`p`,folder:`d`,file:`f`,suite:`s`};function Nr(){return{total:0,passed:0,failed:0,flaky:0,skipped:0}}function Pr(e,t){return`t${jr}${e}${jr}${t}`}function Fr(e){return`p${jr}${e}`}function Ir(e,t,n,r){let i={kind:e,key:t,labels:[n],children:[],counts:Nr(),line:1/0};return r!==void 0&&(i.path=r),i}function Lr(e,t){return e.kind===`folder`==(t.kind===`folder`)?zr(e).localeCompare(zr(t)):e.kind===`folder`?-1:1}function Rr(e,t){return e.line===t.line?e.kind===`test`&&t.kind===`test`?e.column-t.column||e.repeatEachIndex-t.repeatEachIndex:e.kind===t.kind?zr(e).localeCompare(zr(t)):e.kind===`test`?1:-1:e.line-t.line}function zr(e){return e.kind===`test`?e.title:e.labels.join(` › `)}function Br(e){for(let t of e.children){if(t.kind===`test`)e.counts.total+=1,e.counts[t.outcome]+=1;else{Br(t);for(let n of[`total`,`passed`,`failed`,`flaky`,`skipped`])e.counts[n]+=t.counts[n]}e.line=Math.min(e.line,t.line)}e.kind===`project`||e.kind===`folder`?e.children.sort(Lr):e.children.sort(Rr)}function Vr(e){let t=e;for(;;){let e=t.children.length===1?t.children[0]:void 0;if(t.kind===`folder`&&e?.kind===`folder`)t={...e,key:t.key,labels:[`${t.labels.join(`/`)}/${e.labels.join(`/`)}`]};else{if(t.kind===`project`||t.kind===`folder`||e?.kind!==`suite`)break;t={...t,labels:[...t.labels,...e.labels],children:e.children}}}return{...t,children:t.children.map(e=>e.kind===`test`?e:Vr(e))}}function Hr(e,t={}){let n=t.prefix??ir(e.tests.map(e=>e.file)),r=new Map;for(let t of e.projects)r.set(t.name,Ir(`project`,Fr(t.name),t.name||`(unnamed project)`));let i=new Map;for(let t of e.tests){let e=r.get(t.project);e||(e=Ir(`project`,Fr(t.project),t.project||`(unnamed project)`),r.set(t.project,e));let a=ar(t.file,n).split(`/`),o=a.pop()??t.file,s=[...a.map((e,t)=>[`folder`,e,`${n}${a.slice(0,t+1).join(`/`)}`]),[`file`,o,rr(t.file)],...t.suitePath.map(e=>[`suite`,e])];for(let[t,n,r]of s){let a=`${e.key}${jr}${Mr[t]}${jr}${n}`,o=i.get(a);o||(o=Ir(t,a,n,r),i.set(a,o),e.children.push(o)),e=o}e.children.push(Ur(t))}let a=[...r.values()].filter(e=>e.children.length>0);for(let e of a)Br(e);return a.map(Vr)}function Ur(e){return{kind:`test`,key:Pr(e.id,e.repeatEachIndex),testId:e.id,repeatEachIndex:e.repeatEachIndex,title:e.title,outcome:e.outcome,line:e.line,column:e.column}}function Wr(e,t){let n=[],r=(e,i,a)=>{e.forEach((o,s)=>{n.push({node:o,level:i,parentKey:a,position:s+1,siblings:e.length}),o.kind!==`test`&&t.has(o.key)&&r(o.children,i+1,o.key)})};return r(e,1,null),n}function Gr(e,t){for(let n of e){if(n.key===t)return[];if(n.kind===`test`)continue;let e=Gr(n.children,t);if(e)return[n.key,...e]}return null}function Kr(e){return e.flatMap(e=>e.kind===`test`?[]:[e.key,...Kr(e.children)])}var qr=0;Array.isArray;function K(e,n,r,i,a,o){n||={};var s,c,l=n;if(`ref`in l)for(c in l={},n)c==`ref`?s=n[c]:l[c]=n[c];var u={type:e,props:l,key:r,ref:s,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--qr,__i:-1,__u:0,__source:a,__self:o};if(typeof e==`function`&&(s=e.defaultProps))for(c in s)l[c]===void 0&&(l[c]=s[c]);return t.vnode&&t.vnode(u),u}function q({name:e,color:t}){return K(`span`,{class:`category-badge`,style:Or(t),title:`Error category: ${e}`,children:e})}function J({children:e,class:t}){return K(`svg`,{class:`icon ${t??``}`,viewBox:`0 0 16 16`,width:`16`,height:`16`,"aria-hidden":`true`,focusable:`false`,children:e})}var Jr={passed:`Passed`,failed:`Failed`,flaky:`Flaky`,skipped:`Skipped`};function Y(e){return Jr[e]}function X({outcome:e,labelled:t=!1,decorative:n=!1}){let r={passed:K(`path`,{d:`M4.5 8.2l2.3 2.3 4.7-4.9`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,"stroke-linecap":`round`,"stroke-linejoin":`round`}),failed:K(`path`,{d:`M5.5 5.5l5 5m0-5l-5 5`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,"stroke-linecap":`round`}),flaky:K(`path`,{d:`M10.9 5.6A3.6 3.6 0 0 0 4.6 7M5.1 10.4A3.6 3.6 0 0 0 11.4 9M10.9 3.6v2h-2M5.1 12.4v-2h2`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.5`,"stroke-linecap":`round`,"stroke-linejoin":`round`}),skipped:K(`path`,{d:`M5 8h6`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,"stroke-linecap":`round`})}[e];return K(`span`,{class:`outcome-icon outcome-${e}`,title:t||n?void 0:Jr[e],"aria-hidden":n?`true`:void 0,children:[K(J,{children:[K(`circle`,{cx:`8`,cy:`8`,r:`7`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.4`}),r]}),!n&&K(`span`,{class:t?`outcome-text`:`visually-hidden`,children:Jr[e]})]})}function Yr(e){return K(J,{...e,children:K(`path`,{d:`M6 4l4 4-4 4`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.6`,"stroke-linecap":`round`,"stroke-linejoin":`round`})})}function Xr(e){return K(J,{...e,children:[K(`rect`,{x:`1.5`,y:`2.5`,width:`13`,height:`11`,rx:`1.5`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.3`}),K(`path`,{d:`M6 2.5v11`,stroke:`currentColor`,"stroke-width":`1.3`})]})}function Zr(e){return K(J,{...e,children:[K(`rect`,{x:`1.5`,y:`2.5`,width:`13`,height:`9`,rx:`1.5`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.3`}),K(`path`,{d:`M5.5 14h5M8 11.5V14`,stroke:`currentColor`,"stroke-width":`1.3`,"stroke-linecap":`round`})]})}function Qr(e){return K(J,{...e,children:[K(`circle`,{cx:`8`,cy:`8`,r:`3`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.3`}),K(`path`,{d:`M8 1v1.6M8 13.4V15M1 8h1.6M13.4 8H15M3 3l1.1 1.1M11.9 11.9L13 13M3 13l1.1-1.1M11.9 4.1L13 3`,stroke:`currentColor`,"stroke-width":`1.3`,"stroke-linecap":`round`})]})}function $r(e){return K(J,{...e,children:K(`path`,{d:`M13.5 9.6A5.8 5.8 0 0 1 6.4 2.5a5.8 5.8 0 1 0 7.1 7.1z`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.3`,"stroke-linejoin":`round`})})}function ei(e){return K(J,{...e,children:K(`path`,{d:`M2 2.5h5v5H2zM9 2.5h5v3H9zM9 7.5h5v6H9zM2 9.5h5v4H2z`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.3`,"stroke-linejoin":`round`})})}function ti(e){return K(J,{...e,children:[K(`path`,{d:`M8 1.8l6.5 11.4H1.5z`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.3`,"stroke-linejoin":`round`}),K(`path`,{d:`M8 6.2v3.3`,stroke:`currentColor`,"stroke-width":`1.5`,"stroke-linecap":`round`}),K(`circle`,{cx:`8`,cy:`11.4`,r:`.9`,fill:`currentColor`})]})}function ni(e){return K(J,{...e,children:[K(`circle`,{cx:`8`,cy:`8`,r:`6.3`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.3`}),K(`path`,{d:`M8 4.6v4`,stroke:`currentColor`,"stroke-width":`1.5`,"stroke-linecap":`round`}),K(`circle`,{cx:`8`,cy:`11.1`,r:`.9`,fill:`currentColor`})]})}function ri(e){return K(J,{...e,children:K(`path`,{d:`M1.5 8.5h3l1.5-4 2.5 7 1.8-4.5 1 1.5h3.2`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.3`,"stroke-linecap":`round`,"stroke-linejoin":`round`})})}function ii(e){return K(J,{...e,children:[K(`path`,{d:`M6 4h8M6 8h8M6 12h8`,stroke:`currentColor`,"stroke-width":`1.3`,"stroke-linecap":`round`}),K(`circle`,{cx:`2.8`,cy:`4`,r:`1`,fill:`currentColor`}),K(`circle`,{cx:`2.8`,cy:`8`,r:`1`,fill:`currentColor`}),K(`circle`,{cx:`2.8`,cy:`12`,r:`1`,fill:`currentColor`})]})}function ai(e){return K(J,{...e,children:[K(`circle`,{cx:`7`,cy:`7`,r:`4.5`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.4`}),K(`path`,{d:`M10.4 10.4L14 14`,stroke:`currentColor`,"stroke-width":`1.4`,"stroke-linecap":`round`})]})}function oi(e){return K(J,{...e,children:K(`path`,{d:`M4.5 4.5l7 7m0-7l-7 7`,stroke:`currentColor`,"stroke-width":`1.5`,"stroke-linecap":`round`})})}function si({direction:e,...t}){return K(J,{...t,children:[e!==`desc`&&K(`path`,{d:`M5 6.5L8 3.5l3 3`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.4`,"stroke-linecap":`round`,"stroke-linejoin":`round`}),e!==`asc`&&K(`path`,{d:`M5 9.5l3 3 3-3`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.4`,"stroke-linecap":`round`,"stroke-linejoin":`round`})]})}function ci({group:e}){return K(`span`,{class:`group-split`,children:[`failed`,`flaky`].filter(t=>e[t]>0).map(t=>K(`span`,{class:`group-split-part split-${t}`,children:[K(X,{outcome:t,decorative:!0}),e[t],` `,t]},t))})}var li=`https://github.com/qartisan/playwright-loupe/blob/main/docs/config.md#dimensions`;function ui(e){return U({page:`test`,id:e.id,repeatEachIndex:e.repeatEachIndex})}function di(e,t){return nr({...bn,facets:{[e]:[t]}},{page:`tests`})}function fi(e){return e||`(unnamed project)`}function pi({rate:e}){return K(`span`,{class:`pass-rate`,title:en,children:[K(`strong`,{children:tn(e)}),` pass rate`,K(`span`,{class:`visually-hidden`,children:` (skipped tests excluded)`})]})}function Z({id:e,title:t,note:n,class:r,children:i}){return K(`section`,{class:`widget ${r??``}`,"aria-labelledby":e,children:[K(`h2`,{id:e,children:t}),n&&K(`p`,{class:`widget-note`,children:n}),i]})}function mi({report:e}){let t=Zt(e),{stats:n}=e.run,r=Qt(n),i=$t(n),a=r.map(({outcome:e,count:t})=>`${t} ${Y(e).toLowerCase()}`).join(`, `);return K(`section`,{class:`widget widget-verdict`,"aria-labelledby":`w-verdict`,children:[K(`h2`,{id:`w-verdict`,class:`visually-hidden`,children:`Verdict`}),K(`div`,{class:`verdict`,children:[K(`p`,{class:`verdict-outcome outcome-${t}`,"data-verdict":t,children:[K(X,{outcome:t,decorative:!0}),K(`span`,{children:Y(t)})]}),K(`p`,{class:`verdict-meta`,children:[i!==null&&K(S,{children:[K(pi,{rate:i}),` ·`,` `]}),G(n.total,`test`),` in `,K(`strong`,{children:Ar(e.run.durationMs)})]})]}),r.length>0&&K(S,{children:[K(`div`,{class:`outcome-bar`,role:`img`,"aria-label":a,children:r.map(({outcome:e,count:t,share:n})=>K(`span`,{class:`outcome-bar-part bar-${e}`,style:{flexGrow:n},title:`${t} ${Y(e).toLowerCase()}`},e))}),K(`ul`,{class:`outcome-legend`,"aria-hidden":`true`,children:r.map(({outcome:e,count:t})=>K(`li`,{children:[K(X,{outcome:e,decorative:!0}),t,` `,Y(e).toLowerCase()]},e))})]})]})}function hi({errors:e}){return K(Z,{id:`w-run-errors`,class:`widget-run-errors`,title:K(S,{children:[K(ti,{}),G(e.length,`error`),` outside tests`]}),note:`A file that failed to load, a global setup or teardown, a worker teardown: Playwright may have run fewer tests.`,children:[K(`ul`,{class:`widget-list`,children:e.slice(0,3).map((e,t)=>K(`li`,{children:K(`code`,{children:qt(e.message)})},t))}),K(`p`,{class:`widget-more`,children:K(`a`,{href:U({page:`errors`}),children:`See the errors`})})]})}function gi({error:e,color:t}){let n=e.location?`${e.location.file}:${e.location.line}:${e.location.column}`:null;return K(`li`,{class:`run-error`,children:[K(`div`,{class:`run-error-meta`,children:[e.category&&K(q,{name:e.category,color:t}),e.project!==null&&K(`span`,{children:[`Project `,e.project||`(unnamed)`]}),n&&K(`code`,{children:n})]}),K(`pre`,{class:`message error-message`,children:e.message}),e.snippet&&K(`pre`,{class:`code-snippet`,children:e.snippet}),e.stack&&e.stack!==e.message&&K(`details`,{children:[K(`summary`,{children:`Stack trace`}),K(`pre`,{class:`stack`,children:e.stack})]})]})}function _i({group:e,colors:t,showCategory:n=!0}){let{headline:r,firstTest:i,others:a}=Jt(e),o=Yt(e);return K(`a`,{class:`group-row`,href:U({page:`group`,signature:e.signature}),children:[K(`span`,{class:`group-row-head`,children:[n&&K(q,{name:e.category,color:t.get(e.category)}),K(`span`,{class:`group-row-counts`,children:[K(ci,{group:e}),o&&K(`span`,{class:`group-attempts`,children:o})]})]}),i&&K(`span`,{class:`group-test`,children:[i.title,a>0&&K(`span`,{class:`muted`,children:[` +`,G(a,`other`)]})]}),K(`code`,{class:`group-message`,children:r})]})}function vi({groups:e,colors:t,showCategory:n=!0}){return K(`ol`,{class:`widget-list group-list`,children:e.map(e=>K(`li`,{children:K(_i,{group:e,colors:t,showCategory:n})},e.signature))})}function yi({categories:e,colors:t}){let n=Math.max(...e.map(e=>e.tests),1);return K(`ul`,{class:`widget-list category-bars`,children:e.map(e=>K(`li`,{children:K(`a`,{class:`category-bar-row`,href:di(`category`,e.name),children:[K(q,{name:e.name,color:t.get(e.name)}),K(`span`,{class:`category-bar-track`,"aria-hidden":`true`,children:K(`span`,{class:`category-bar`,style:{...Or(t.get(e.name)),width:`${e.tests/n*100}%`}})}),K(`span`,{class:`group-count`,children:G(e.tests,`test`)})]})},e.name))})}function bi({categories:e,colors:t,open:n}){return K(`ul`,{class:`widget-list category-list`,children:e.map(e=>K(`li`,{"data-category":e.name,children:K(`details`,{open:e.name===n,children:[K(`summary`,{children:[K(Yr,{class:`chevron`}),K(q,{name:e.name,color:t.get(e.name)}),K(`span`,{class:`muted`,children:G(e.groups.length,`error group`)}),K(`span`,{class:`group-count`,children:G(e.tests,`test`)})]}),K(vi,{groups:e.groups,colors:t,showCategory:!1})]})},e.name))})}function xi({projects:e}){return K(`ul`,{class:`project-cards`,children:e.map(({project:e,passRate:t,durationMs:n})=>K(`li`,{children:K(`button`,{type:`button`,class:`project-card`,"aria-controls":`sidebar`,title:`Show this project in the sidebar`,onClick:()=>wt(Fr(e.name)),children:[K(`span`,{class:`project-name`,children:fi(e.name)}),K(`span`,{class:`counts`,children:[`passed`,`failed`,`flaky`,`skipped`].filter(t=>e.stats[t]>0).map(t=>K(`span`,{class:`count`,children:[K(X,{outcome:t,decorative:!0}),e.stats[t],` `,K(`span`,{class:`visually-hidden`,children:Y(t).toLowerCase()})]},t))}),K(`span`,{class:`project-meta`,children:[G(e.stats.total,`test`),t!==null&&K(S,{children:[` · `,K(pi,{rate:t})]}),` `,`· `,Ar(n),` test time`]})]})},e.name))})}function Si({value:e}){return K(`td`,{class:e===0?`zero`:void 0,children:e})}var Ci=[`passed`,`failed`,`flaky`,`skipped`];function wi(e){let t=Ci.filter(t=>e[t]>0).map(t=>`${e[t]} ${t}`);return t.length>0?t.join(`, `):`no tests`}function Ti(e){return[...e.unknown?[`unknown value`]:[],...e.caseVariants.length>0?[`likely duplicate of ${e.caseVariants.join(`, `)}`]:[]]}function Ei({row:e}){return K(S,{children:[e.unknown&&K(`span`,{class:`hygiene-flag flag-unknown`,title:`Not among the values declared in the config`,children:[K(ti,{}),`unknown value`]}),e.caseVariants.length>0&&K(`span`,{class:`hygiene-flag flag-case`,title:`Differs from another value only by case. Tags are case-sensitive, so they are counted apart.`,children:[K(ti,{}),`likely duplicate of `,e.caseVariants.join(`, `)]})]})}function Di({name:e,values:t}){return K(`ul`,{class:`dimension-bars`,children:t.map(t=>K(`li`,{class:`dimension-bar-row`,"data-value":t.value,children:[K(`span`,{class:`dimension-value-cell`,children:[K(Oi,{name:e,row:t}),K(Ei,{row:t})]}),K(`span`,{class:`outcome-bar dimension-bar`,role:`img`,"aria-label":`${t.value}: ${wi(t)}`,title:wi(t),children:Ci.filter(e=>t[e]>0).map(e=>K(`span`,{class:`outcome-bar-part bar-${e}`,style:{flexGrow:t[e]}},e))}),K(`span`,{class:`dimension-bar-counts`,"aria-hidden":`true`,children:[`failed`,`flaky`].filter(e=>t[e]>0).map(e=>K(`span`,{class:`count`,children:[K(X,{outcome:e,decorative:!0}),t[e]]},e))}),K(`span`,{class:`dimension-total`,"aria-hidden":`true`,children:t.total})]},t.value))})}function Oi({name:e,row:t}){return t.total===0?K(`span`,{class:`dimension-value`,children:t.value}):K(`a`,{class:`dimension-value`,href:di(Cn(e),t.value),title:`Show the ${G(t.total,`test`)} with ${e} ${t.value}`,children:t.value})}var ki={failed:`with failures`,flaky:`flaky`,passed:`all passed`,skipped:`skipped only`,none:`no tests`},Q=L(null);function Ai(e,t){let n=Q.value;n?.key===e&&n.source===t&&(Q.value=null)}function ji(e){e.key===`Escape`&&Q.value&&(Q.value=null)}function Mi({name:e,values:t}){return je(()=>(document.addEventListener(`keydown`,ji),()=>{document.removeEventListener(`keydown`,ji),Q.value?.key.startsWith(`${e}\u0000`)&&(Q.value=null)}),[e]),K(S,{children:[K(`p`,{class:`tile-summary`,children:ln(t)}),K(`ul`,{class:`dimension-tiles`,"aria-label":`${e} values`,children:cn(t).map(t=>{let n=on(t),r=Ti(t),i=[wi(t),...r].join(`; `),a=`${e}\u0000${t.value}`,o=Q.value?.key===a,s={class:`dimension-tile tile-${n}${o?` tooltip-open`:``}`,"data-value":t.value,"data-status":n,onPointerEnter:()=>Q.value={key:a,source:`hover`},onPointerLeave:()=>Ai(a,`hover`),onFocus:()=>Q.value={key:a,source:`focus`},onBlur:()=>Ai(a,`focus`)},c=K(S,{children:[n===`none`?K(`span`,{class:`tile-icon-none`,"aria-hidden":`true`}):K(X,{outcome:n,decorative:!0}),K(`span`,{class:`tile-value`,children:t.value}),r.length>0&&K(ti,{class:`tile-flag`}),K(`span`,{class:`visually-hidden`,children:[`: `,ki[n],`, `,i]}),K(`span`,{class:`tile-details`,"aria-hidden":`true`,hidden:!o,children:[K(`strong`,{children:t.value}),K(`span`,{children:ki[n]}),K(`span`,{children:wi(t)}),r.map(e=>K(`span`,{class:`tile-note`,children:e},e))]})]});return K(`li`,{children:t.total>0?K(`a`,{...s,href:di(Cn(e),t.value),children:c}):K(`span`,{...s,tabIndex:0,children:c})},t.value)})})]})}function Ni({distribution:e}){let{definition:t,values:n,without:r}=e,i=`w-dimension-${t.name}`,a=an(e);return K(`section`,{class:`widget widget-dimension`,"aria-labelledby":i,"data-dimension":t.name,"data-representation":a,children:[K(`h2`,{id:i,children:t.name}),K(`p`,{class:`widget-note`,children:[`From `,t.source===`tag`?`tags @${t.key}:…`:`annotations of type "${t.key}"`,r>0&&` · ${G(r,`test`)} without a value`]}),K(a===`bars`?Di:Mi,{name:t.name,values:n}),K(`details`,{class:`dimension-table`,children:[K(`summary`,{children:[K(Yr,{class:`chevron`}),`Table`]}),K(`table`,{class:`data-table`,children:[K(`thead`,{children:K(`tr`,{children:[K(`th`,{scope:`col`,children:`Value`}),Ci.map(e=>K(`th`,{scope:`col`,children:K(X,{outcome:e,labelled:!0})},e)),K(`th`,{scope:`col`,children:`Total`})]})}),K(`tbody`,{children:n.map(e=>K(`tr`,{children:[K(`th`,{scope:`row`,children:[K(Oi,{name:t.name,row:e}),K(Ei,{row:e})]}),Ci.map(t=>K(Si,{value:e[t]},t)),K(Si,{value:e.total})]},e.value))})]})]}),t.values===null&&K(`p`,{class:`widget-hint`,children:[`No expected values are configured, so typos cannot be flagged as unknown. Declare them with `,K(`code`,{children:`values`}),` in`,` `,K(`a`,{href:li,target:`_blank`,rel:`noopener noreferrer`,children:`the dimension definition`}),`.`]})]})}function Pi({test:e,children:t,aside:n}){return K(`div`,{class:`test-line`,children:[K(X,{outcome:e.outcome}),K(`span`,{class:`test-text`,children:[K(`a`,{href:ui(e),children:e.title}),K(`span`,{class:`test-where`,children:[fi(e.project),` · `,e.file,e.repeatEachIndex>0&&` · repeat ${e.repeatEachIndex}`]}),t]}),n]})}function Fi(e){return`${e.id}/${e.repeatEachIndex}`}function Ii({tests:e}){return K(Z,{id:`w-slowest`,class:`widget-slowest`,title:`Slowest tests`,note:`Total duration, retries included.`,children:K(`ol`,{class:`widget-list`,children:e.map(e=>K(`li`,{children:K(Pi,{test:e,aside:K(`span`,{class:`duration`,children:Ar(e.durationMs)}),children:e.attempts.length>1&&K(`span`,{class:`test-where`,children:G(e.attempts.length,`attempt`)})})},Fi(e)))})})}function Li({tests:e}){return K(Z,{id:`w-skipped`,class:`widget-skipped`,title:`Skipped tests`,children:K(`ul`,{class:`widget-list`,children:e.map(({test:e,kind:t,reason:n})=>K(`li`,{children:K(Pi,{test:e,children:K(`span`,{class:`test-where`,children:[t===`fixme`&&K(`span`,{class:`skip-kind`,children:`fixme`}),` `,n??K(`span`,{class:`muted`,children:`No reason given`})]})})},Fi(e)))})})}function Ri({tests:e,colors:t}){return K(Z,{id:`w-flaky`,class:`widget-flaky`,title:`Flaky tests`,note:`Failed, then passed on a retry: the error of the failing attempt.`,children:K(`ul`,{class:`widget-list`,children:e.map(({test:e,error:n})=>K(`li`,{children:K(Pi,{test:e,children:n&&K(`span`,{class:`flaky-error`,children:[n.category&&K(q,{name:n.category,color:t.get(n.category)}),K(`code`,{children:qt(n.message)})]})})},Fi(e)))})})}function zi({report:e,groups:t,category:n}){let r=M(null);je(()=>{if(n===void 0)return;let e=[...r.current?.querySelectorAll(`[data-category]`)??[]].find(e=>e.dataset.category===n);e?.scrollIntoView({block:`start`}),e?.querySelector(`summary`)?.focus({preventScroll:!0})},[n]);let i=N(()=>Ht(t),[t]),a=N(()=>Xt(e,t),[e,t]),o=N(()=>kr(e.categories),[e]),{errors:s}=e.run;return K(`div`,{class:`page view view-errors`,ref:r,children:[K(`h1`,{children:`Errors`}),s.length===0&&t.length===0&&K(`p`,{class:`muted`,children:`No errors in this run.`}),s.length>0&&K(Z,{id:`w-run-errors`,class:`widget-run-error-list`,title:G(s.length,`run error`),note:`Reported outside any test: a file that failed to load, a global setup or teardown, a worker teardown. Playwright may have run fewer tests because of them.`,children:K(`ol`,{class:`run-errors`,children:s.map((e,t)=>K(gi,{error:e,color:e.category?o.get(e.category):void 0},t))})}),i.length>0&&K(Z,{id:`w-groups`,class:`widget-groups`,title:G(i.length,`error group`),note:`Errors grouped by normalized signature: most failed tests first, then most flaky tests.`,children:K(vi,{groups:i,colors:o})}),a.length>0&&K(Z,{id:`w-categories`,class:`widget-categories`,title:`Error categories`,note:`Failing tests per category; flaky tests count, and a test can be in several categories.`,children:K(bi,{categories:a,colors:o,open:n},n)})]})}function Bi({message:e=`This page does not exist in this report.`}){return K(`div`,{class:`page`,children:[K(`h1`,{children:`Not found`}),K(`p`,{children:e}),K(`p`,{children:K(`a`,{href:U({page:`dashboard`}),children:`Back to the dashboard`})})]})}function Vi(e){return e===0?`first run`:`retry ${e}`}function Hi({report:e,group:t}){if(!t)return K(Bi,{message:`No error group with this signature in this report.`});let n=kr(e.categories).get(t.category);return K(`div`,{class:`page group-page`,children:[K(`p`,{class:`breadcrumb`,children:`Error group`}),K(`h1`,{children:[G(t.tests.length,`test`),` failing with this error`]}),K(`dl`,{class:`group-meta`,children:[K(`div`,{children:[K(`dt`,{children:`Category`}),K(`dd`,{children:K(q,{name:t.category,color:n})})]}),K(`div`,{children:[K(`dt`,{children:`Tests`}),K(`dd`,{children:K(ci,{group:t})})]}),K(`div`,{children:[K(`dt`,{children:`Signature`}),K(`dd`,{children:K(`code`,{children:t.signature})})]})]}),K(`h2`,{children:`Sample message`}),K(`pre`,{class:`message group-sample`,children:t.message}),K(`h2`,{children:`Affected tests`}),K(`table`,{class:`affected-tests`,children:[K(`thead`,{children:K(`tr`,{children:[K(`th`,{scope:`col`,children:`Test`}),K(`th`,{scope:`col`,children:`Project`}),K(`th`,{scope:`col`,children:`File`}),K(`th`,{scope:`col`,children:`Error in`})]})}),K(`tbody`,{children:t.tests.map(({test:e,attempts:t})=>K(`tr`,{children:[K(`td`,{children:K(`span`,{class:`test-cell`,children:[K(X,{outcome:e.outcome}),K(`a`,{href:U({page:`test`,id:e.id,repeatEachIndex:e.repeatEachIndex}),children:[...e.suitePath,e.title].join(` › `)}),e.repeatEachIndex>0&&K(`span`,{class:`row-note`,children:[`repeat `,e.repeatEachIndex]})]})}),K(`td`,{children:e.project||`(unnamed project)`}),K(`td`,{children:K(`code`,{children:[e.file,`:`,e.line]})}),K(`td`,{children:[t.map(Vi).join(`, `),K(`span`,{class:`muted`,children:[` of `,G(e.attempts.length,`attempt`)]})]})]},`${e.id}/${e.repeatEachIndex}`))})]})]})}function Ui({report:e}){let t=N(()=>({dimensions:rn(e).filter(e=>e.values.length>0),slowest:fn(e),skipped:mn(e),flaky:dn(e)}),[e]),n=N(()=>kr(e.categories),[e]),r=t.dimensions.length+t.slowest.length+t.skipped.length+t.flaky.length===0;return K(`div`,{class:`page view view-health`,children:[K(`h1`,{children:`Suite health`}),r&&K(`p`,{class:`muted`,children:`No dimension, slow, skipped or flaky test to show for this run.`}),t.dimensions.length>0&&K(`div`,{class:`widget-grid dimension-grid`,children:t.dimensions.map(e=>K(Ni,{distribution:e},e.definition.name))}),(t.slowest.length>0||t.skipped.length>0||t.flaky.length>0)&&K(`div`,{class:`widget-grid`,children:[t.slowest.length>0&&K(Ii,{tests:t.slowest}),t.flaky.length>0&&K(Ri,{tests:t.flaky,colors:n}),t.skipped.length>0&&K(Li,{tests:t.skipped})]})]})}function Wi({report:e,groups:t}){let n=N(()=>({categories:Xt(e,t),projects:nn(e)}),[e,t]),r=N(()=>kr(e.categories),[e]);return K(`div`,{class:`page view view-overview`,children:[K(`h1`,{children:`Overview`}),K(mi,{report:e}),e.run.errors.length>0&&K(hi,{errors:e.run.errors}),n.categories.length>0&&K(Z,{id:`w-categories`,class:`widget-categories`,title:`Error categories`,note:K(S,{children:[`Failing tests per category. `,K(`a`,{href:U({page:`errors`}),children:[`All `,G(t.length,`error group`)]})]}),children:K(yi,{categories:n.categories,colors:r})}),n.projects.length>0&&K(Z,{id:`w-projects`,class:`widget-projects`,title:`Projects`,children:K(xi,{projects:n.projects})})]})}function Gi({test:e}){return e?K(`div`,{class:`page`,children:[K(`p`,{class:`breadcrumb`,children:[e.project||`(unnamed project)`,e.file,...e.suitePath].map((e,t)=>K(`span`,{class:`label-part`,children:e},t))}),K(`h1`,{class:`test-title`,children:[e.title,e.repeatEachIndex>0&&K(`span`,{class:`row-note`,children:[` repeat `,e.repeatEachIndex]})]}),K(X,{outcome:e.outcome,labelled:!0})]}):K(Bi,{message:`No test with this id in this report.`})}function Ki(e){let t=wn(e);return t===null?{status:`Status`,project:`Project`,tag:`Tag`,category:`Error category`}[e]:t}function qi(e,t){return e===`status`?Y(t):e===`project`?t||`(unnamed project)`:t}function Ji({facet:e,value:t,colors:n}){return e===`status`?K(X,{outcome:t,labelled:!0}):e===`category`?K(q,{name:t,color:n.get(t)}):K(`span`,{class:`facet-value`,children:qi(e,t)})}function Yi({state:e,facet:t,values:n,counts:r,colors:i}){let a=M(null),o=e.facets[t]??[],s=Ki(t);return je(()=>{let e=e=>{let t=a.current;t?.open&&!t.contains(e.target)&&(t.open=!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[]),K(`details`,{class:`facet`,ref:a,onKeyDown:e=>{let t=a.current;e.key===`Escape`&&t?.open&&(t.open=!1,t.querySelector(`summary`)?.focus(),e.stopPropagation())},"data-facet":t,children:[K(`summary`,{class:`facet-button`,children:[K(`span`,{children:s}),o.length>0&&K(`span`,{class:`facet-selected`,children:[o.length,K(`span`,{class:`visually-hidden`,children:` selected`})]}),K(Yr,{class:`chevron`})]}),K(`fieldset`,{class:`facet-menu`,children:[K(`legend`,{class:`visually-hidden`,children:s}),[...n].map(n=>{let a=r?.get(n)??0,s=o.includes(n);return K(`label`,{class:`facet-option${a===0&&!s?` facet-option-empty`:``}`,children:[K(`input`,{type:`checkbox`,checked:s,onChange:r=>W(Pn(e,t,n,r.currentTarget.checked))}),K(Ji,{facet:t,value:n,colors:i}),K(`span`,{class:`facet-count`,children:[a,K(`span`,{class:`visually-hidden`,children:[` `,a===1?`test`:`tests`]})]})]},n)})]})]})}function Xi({state:e,domain:t,counts:n,colors:r}){return K(`div`,{class:`facets`,role:`group`,"aria-label":`Filters`,children:[...t].filter(([e,t])=>e!==`project`||t.size>1).map(([t,i])=>K(Yi,{state:e,facet:t,values:i,counts:n.get(t),colors:r},t))})}function Zi(e,t){let n=[];e.q.trim()!==``&&n.push({key:`q`,label:`Search: ${e.q.trim()}`,remove:e=>({...e,q:``})});let r=new Map([...t.keys()].map((e,t)=>[e,t])),i=yn(e.facets).sort(([e],[t])=>(r.get(e)??1/0)-(r.get(t)??1/0));for(let[e,t]of i)for(let r of t)n.push({key:`${e}\u0000${r}`,label:`${Ki(e)}: ${qi(e,r)}`,remove:t=>Pn(t,e,r,!1)});return n}function Qi({state:e,domain:t}){let n=Zi(e,t),r=M(null),i=M(null);return j(()=>{if(i.current===null)return;let e=[...r.current?.querySelectorAll(`button`)??[]],t=e[Math.min(i.current,e.length-2)]??e[e.length-1];i.current=null,t?t.focus():document.querySelector(`.facets summary`)?.focus()}),n.length===0?null:K(`div`,{class:`filter-chips`,ref:r,children:[K(`ul`,{"aria-label":`Active filters`,children:n.map((t,n)=>K(`li`,{children:K(`button`,{type:`button`,class:`chip`,"aria-label":`Remove filter ${t.label}`,onClick:()=>{i.current=n,W(t.remove(e))},children:[K(`span`,{children:t.label}),K(oi,{})]})},t.key))}),K(`button`,{type:`button`,class:`text-button`,onClick:()=>{i.current=0,W(Fn(e))},children:`Clear all`})]})}var $i=new Intl.NumberFormat(`en-US`);function $(e){return $i.format(e)}function ea(e,t){return Math.min(e,Math.max(t,0))}function ta(e,t,n){let r=e=>e===1?`test`:`tests`;return e<t?t===n?`Showing ${$(e)} of ${$(n)} ${r(n)}`:`Showing ${$(e)} of ${$(t)} matching ${r(t)} (${$(n)} in total)`:t===n?`${$(n)} ${r(n)}`:`${$(t)} of ${$(n)} ${r(n)}`}var na={failed:0,flaky:1,passed:2,skipped:3},ra=new Intl.Collator(void 0,{numeric:!0,sensitivity:`base`});function ia(e){return[...e.suitePath,e.title].join(` › `)}function aa(e){return e===`duration`||e===`attempts`?`desc`:`asc`}function oa(e,t){return e.column===t?{column:t,direction:e.direction===`asc`?`desc`:`asc`}:{column:t,direction:aa(t)}}var sa={title:ia,project:e=>e.project,file:e=>`${e.file}:${e.line}`,category:e=>Gn(e).primary};function ca(e,t){let n=[...new Set(e.map(t).filter(e=>e!==null))].sort(ra.compare),r=new Map(n.map((e,t)=>[e,t]));return new Map(e.map(e=>{let n=t(e);return[e,n===null?null:r.get(n)??null]}))}function la(e){let t={title:ca(e,sa.title),project:ca(e,sa.project),file:ca(e,sa.file),category:ca(e,sa.category)},n=(e,n)=>t[e].get(n)??0,r=[...e].sort((e,t)=>n(`title`,e)-n(`title`,t)||n(`project`,e)-n(`project`,t)||e.repeatEachIndex-t.repeatEachIndex);return{text:t,order:new Map(r.map((e,t)=>[e,t]))}}function ua(e,t,n){switch(t){case`status`:return na[e.outcome];case`duration`:return e.durationMs;case`attempts`:return e.attempts.length;default:return n.text[t].get(e)??null}}function da(e,t,n){return e===null||t===null?e===t?0:e===null?1:-1:n*(e-t)}function fa(e,t,n=la(e)){let r=t.direction===`asc`?1:-1;return e.map(e=>({test:e,key:ua(e,t.column,n),order:n.order.get(e)??0})).sort((e,t)=>da(e.key,t.key,r)||e.order-t.order).map(({test:e})=>e)}var pa=[{column:`status`,label:`Status`},{column:`title`,label:`Test`},{column:`project`,label:`Project`},{column:`file`,label:`File`},{column:`duration`,label:`Duration`,numeric:!0},{column:`category`,label:`Error category`},{column:`attempts`,label:`Attempts`,numeric:!0}];function ma({report:e,state:t,matched:n}){let r=N(()=>kr(e.categories),[e]),i=N(()=>Xn(e.tests,t,Qn.value,$n.value),[e,Mn({...t,sort:vn})]),a=N(()=>la(e.tests),[e]),o=N(()=>fa(n,t.sort,a),[n,a,t.sort.column,t.sort.direction]),s=e.tests.length,c=Mn(t),l=M({viewKey:c,limit:500});l.current.viewKey!==c&&(l.current={viewKey:c,limit:500});let[,u]=ke(0),d=ea(o.length,l.current.limit),f=N(()=>o.slice(0,d),[o,d]),p=ta(d,n.length,s),m=M(null),h=M(null);j(()=>{h.current!==null&&(m.current?.rows[h.current]?.querySelector(`a`)?.focus(),h.current=null)});let g=e=>{h.current=d,l.current={viewKey:c,limit:e},u(e=>e+1)};return K(`div`,{class:`page view view-tests`,children:[K(`h1`,{children:`Tests`}),s>0&&K(`div`,{class:`filter-bar`,children:[K(Xi,{state:t,domain:Qn.value,counts:i,colors:r}),K(Qi,{state:t,domain:Qn.value})]}),K(`p`,{class:`result-count`,"aria-live":`polite`,"aria-atomic":`true`,children:p}),s===0?K(`p`,{class:`muted`,children:`No tests in this run.`}):o.length===0?K(`div`,{class:`empty-state`,children:[K(`p`,{children:`No tests match these filters.`}),K(`button`,{type:`button`,class:`button`,onClick:()=>W(Fn(t)),children:`Reset filters`})]}):K(`div`,{class:`table-scroll`,children:K(`table`,{class:`tests-table`,children:[K(`thead`,{children:K(`tr`,{children:pa.map(({column:e,label:n,numeric:r})=>{let i=t.sort.column===e;return K(`th`,{scope:`col`,class:r?`numeric`:void 0,"aria-sort":i?t.sort.direction===`asc`?`ascending`:`descending`:void 0,children:K(`button`,{type:`button`,class:`sort-button`,onClick:()=>W({...t,sort:oa(t.sort,e)}),children:[n,K(si,{direction:i?t.sort.direction:null,class:i?`sort-active`:`sort-idle`})]})},e)})})}),K(`tbody`,{ref:m,children:f.map(e=>K(_a,{test:e,colors:r},`${e.id}/${e.repeatEachIndex}`))})]})}),d<o.length&&K(`div`,{class:`table-more`,children:[K(`p`,{children:p}),K(`button`,{type:`button`,class:`button`,onClick:()=>g(d+500),children:[`Show `,Math.min(500,o.length-d),` more`]}),K(`button`,{type:`button`,class:`button`,onClick:()=>g(o.length),children:`Show all`})]})]})}function ha({path:e}){let t=e.split(`/`);return K(S,{children:t.map((e,n)=>K(S,{children:[e,n<t.length-1&&K(S,{children:[`/`,K(`wbr`,{})]})]},n))})}function ga({test:e,colors:t}){let{primary:n,others:r}=Gn(e);return n===null?null:K(`span`,{class:`category-badges`,children:[K(q,{name:n,color:t.get(n)}),r.length>0&&K(`span`,{class:`category-more`,title:`Other ${r.length===1?`category`:`categories`} in failing attempts: ${r.join(`, `)}`,children:[K(`span`,{"aria-hidden":`true`,children:[`+`,r.length]}),K(`span`,{class:`visually-hidden`,children:[`, and `,G(r.length,`other category`,`other categories`),`: `,r.join(`, `)]})]})]})}function _a({test:e,colors:t}){return K(`tr`,{children:[K(`td`,{children:K(X,{outcome:e.outcome,labelled:!0})}),K(`td`,{class:`cell-title`,children:[K(`a`,{href:ui(e),children:ia(e)}),e.repeatEachIndex>0&&K(`span`,{class:`row-note`,children:[` repeat `,e.repeatEachIndex]})]}),K(`td`,{class:`cell-project`,children:fi(e.project)}),K(`td`,{children:K(`code`,{children:K(ha,{path:`${e.file}:${e.line}`})})}),K(`td`,{class:`numeric`,children:Ar(e.durationMs)}),K(`td`,{children:K(ga,{test:e,colors:t})}),K(`td`,{class:`numeric`,children:e.attempts.length})]})}function va({version:e}){return K(`footer`,{class:`footer`,children:[`Loupe — a reporter for Playwright `,K(`span`,{class:`muted`,children:[`· v`,e]})]})}function ya(e,t={}){if(typeof e!=`string`||e===``)return null;let n=new Date(e);if(Number.isNaN(n.getTime()))return null;let r=t.timeZone===void 0?{}:{timeZone:t.timeZone},i=new Intl.DateTimeFormat(t.locale,{year:`numeric`,month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`,timeZoneName:`short`,...r}),a=new Intl.DateTimeFormat(t.locale,{dateStyle:`full`,timeStyle:`long`,...r});return{utc:n.toISOString(),label:i.format(n),full:a.format(n),timeZone:i.resolvedOptions().timeZone}}var ba=[`system`,`light`,`dark`],xa=`loupe.theme`,Sa=L(`system`);function Ca(e){return typeof e==`string`&&ba.includes(e)}function wa(e){let t=_t(xa);Sa.value=Ca(t)?t:Ca(e)?e:`system`,at(()=>{let e=document.documentElement;Sa.value===`system`?delete e.dataset.theme:e.dataset.theme=Sa.value})}function Ta(e){Sa.value=e,vt(xa,e)}var Ea={passed:`Passed`,failed:`Failed`,timedout:`Timed out`,interrupted:`Interrupted`},Da={env:`LOUPE_RUN_SCOPE=partial`,"file-filter":`file filter`,grep:`grep filter`,"project-filter":`project filter`,"last-failed":`--last-failed`,"only-changed":`--only-changed`,"test-list":`test list`,only:`test.only`,shard:`single shard`,list:`--list (no test ran)`};function Oa(e){return Da[e]??e}var ka={system:`System theme`,light:`Light theme`,dark:`Dark theme`},Aa={system:Zr,light:Qr,dark:$r};function ja(){return K(`div`,{class:`theme-switch`,role:`group`,"aria-label":`Theme`,children:ba.map(e=>{let t=Aa[e];return K(`button`,{type:`button`,class:`icon-button`,"aria-pressed":Sa.value===e,title:ka[e],onClick:()=>Ta(e),children:[K(t,{}),K(`span`,{class:`visually-hidden`,children:ka[e]})]},e)})})}function Ma({startedAt:e,durationMs:t}){let n=N(()=>ya(e),[e]),[r,i]=ke(!1);return K(`div`,{class:`run-time`,onPointerLeave:()=>i(!1),children:[K(`dt`,{class:`visually-hidden`,children:`Run`}),K(`dd`,{children:[n&&K(S,{children:[K(`time`,{dateTime:n.utc,tabIndex:0,"aria-describedby":`run-time-details`,onKeyDown:e=>e.key===`Escape`&&i(!0),onBlur:()=>i(!1),children:n.label}),` · `]}),Ar(t)]}),n&&K(`span`,{id:`run-time-details`,role:`tooltip`,class:`run-time-details${r?` dismissed`:``}`,children:[K(`span`,{children:n.full}),K(`span`,{children:[`Time zone: `,n.timeZone]}),K(`span`,{children:[`UTC: `,n.utc]})]})]})}function Na({outcome:e,count:t}){let n=Y(e).toLowerCase(),r=K(S,{children:[K(X,{outcome:e,decorative:!0}),K(`span`,{class:`count-value`,children:t}),K(`span`,{class:`visually-hidden`,children:[` `,n]})]});return t===0?K(`li`,{class:`count zero`,title:Y(e),children:r}):K(`li`,{class:`count`,children:K(`a`,{class:`count-link`,href:nr({...bn,facets:{status:[e]}},{page:`tests`}),title:`Show the ${t} ${n} ${t===1?`test`:`tests`}`,children:r})})}function Pa({report:e,title:t}){let{run:n}=e,r=[];return n.git.branch&&r.push([`Branch`,n.git.branch]),n.git.commit&&r.push([`Commit`,n.git.commit.slice(0,8),n.git.commit]),n.environment.name&&r.push([`Environment`,n.environment.name]),K(S,{children:[K(`header`,{class:`header`,children:[K(`button`,{type:`button`,class:`icon-button`,"aria-controls":`sidebar`,"aria-expanded":B.value,title:B.value?`Hide sidebar`:`Show sidebar`,onClick:St,children:[K(Xr,{}),K(`span`,{class:`visually-hidden`,children:B.value?`Hide sidebar`:`Show sidebar`})]}),K(`div`,{class:`brand`,children:[K(`span`,{class:`wordmark`,children:`Loupe`}),K(`a`,{class:`title`,href:U({page:`dashboard`}),children:t})]}),K(`span`,{class:`run-status run-${n.status}`,children:[K(X,{outcome:n.status===`passed`?`passed`:`failed`,decorative:!0}),Ea[n.status]??n.status]}),K(`ul`,{class:`counts`,"aria-label":`Test counts`,children:zt.map(e=>K(Na,{outcome:e,count:n.stats[e]},e))}),K(`dl`,{class:`run-meta`,children:[K(Ma,{startedAt:n.startedAt,durationMs:n.durationMs}),r.map(([e,t,n])=>K(`div`,{title:n,children:[K(`dt`,{children:e}),K(`dd`,{children:t})]},e))]}),K(ja,{})]}),n.scope===`partial`&&K(`div`,{class:`banner banner-partial`,role:`note`,children:[K(ti,{}),K(`p`,{children:[K(`strong`,{children:`Partial run.`}),` Only part of the suite ran, so these results do not cover every test.`,n.scopeReasons.length>0&&K(S,{children:[` `,`Detected from: `,n.scopeReasons.map(Oa).join(`, `),`.`]})]})]})]})}function Fa({roots:e,route:t,prefix:n,expandAll:r,emptyMessage:i}){let a=t.page===`test`?Pr(t.id,t.repeatEachIndex):null,[o,s]=ke(()=>new Set(e.map(e=>e.key))),[c,l]=ke(null),u=M(new Map),d=M(!1),f=M(!1),[p,m]=ke(null),h=M(null),g=Ct.value;j(()=>{g&&e.some(e=>e.key===g.key)&&(m(g.key),s(e=>e.has(g.key)?e:new Set([...e,g.key])),h.current=g.key,l(g.key))},[e,g]),j(()=>{a&&m(null)},[a]),j(()=>{if(!a)return;let t=Gr(e,a);t&&(f.current=!0,l(a),s(e=>t.every(t=>e.has(t))?e:new Set([...e,...t])))},[e,a]),j(()=>{if(!r)return;let t=Kr(e);s(e=>t.every(t=>e.has(t))?e:new Set([...e,...t]))},[e,r]);let _=N(()=>Wr(e,o),[e,o]),v=N(()=>new Map(_.map((e,t)=>[e.node.key,t])),[_]),y=c!==null&&v.has(c)?c:a!==null&&v.has(a)?a:_[0]?.node.key??null;j(()=>{f.current&&a&&u.current.has(a)&&(f.current=!1,u.current.get(a)?.scrollIntoView({block:`nearest`}));let e=h.current===null?void 0:u.current.get(h.current);e&&(h.current=null,e.focus({preventScroll:!0}),e.scrollIntoView({block:`nearest`})),d.current&&y&&(d.current=!1,u.current.get(y)?.focus())});let ee=n!==``&&K(`p`,{class:`tree-prefix`,title:`Folder shared by every test file, left out of the tree`,children:[K(`span`,{class:`visually-hidden`,children:`Files in `}),n]}),b=e=>{e&&(d.current=!0,l(e.node.key))},x=(e,t)=>{s(n=>{if(n.has(e)===t)return n;let r=new Set(n);return t?r.add(e):r.delete(e),r})};return K(`div`,{class:`tree-section`,children:[K(`div`,{class:`tree-toolbar`,children:[K(`h2`,{id:`tree-heading`,children:`Tests`}),K(`button`,{type:`button`,class:`text-button`,onClick:()=>s(new Set(Kr(e))),children:`Expand all`}),K(`button`,{type:`button`,class:`text-button`,onClick:()=>s(new Set),children:`Collapse all`})]}),ee,e.length===0?K(`p`,{class:`tree-empty`,children:i}):K(`ul`,{class:`tree`,role:`tree`,"aria-labelledby":`tree-heading`,onKeyDown:e=>{if(y===null||e.altKey||e.ctrlKey||e.metaKey)return;let t=v.get(y)??0,n=_[t];if(!n)return;let{node:r}=n,i=r.kind!==`test`,a=i&&o.has(r.key);switch(e.key){case`ArrowDown`:b(_[t+1]);break;case`ArrowUp`:b(_[t-1]);break;case`Home`:b(_[0]);break;case`End`:b(_[_.length-1]);break;case`ArrowRight`:i&&!a?x(r.key,!0):a&&b(_[t+1]);break;case`ArrowLeft`:a?x(r.key,!1):n.parentKey!==null&&b(_[v.get(n.parentKey)??-1]);break;case`Enter`:case` `:r.kind===`test`?Lt({page:`test`,id:r.testId,repeatEachIndex:r.repeatEachIndex}):x(r.key,!a);break;default:return}e.preventDefault()},children:_.map(e=>{let{key:t}=e.node,n={ref:e=>{e?u.current.set(t,e):u.current.delete(t)},role:`treeitem`,"aria-level":e.level,"aria-setsize":e.siblings,"aria-posinset":e.position,tabIndex:t===y?0:-1,style:{"--level":e.level},onFocus:()=>l(t)};return e.node.kind===`test`?K(`li`,{...n,class:`tree-row tree-test`,"aria-selected":t===a,children:K(Ia,{node:e.node})},t):K(`li`,{...n,class:`tree-row tree-group tree-${e.node.kind}${t===p?` revealed`:``}`,"aria-expanded":o.has(t),children:K(Ra,{node:e.node,onToggle:()=>x(t,!o.has(t))})},t)})})]})}function Ia({node:e}){return K(`a`,{class:`row-content`,tabIndex:-1,href:U({page:`test`,id:e.testId,repeatEachIndex:e.repeatEachIndex}),children:[K(X,{outcome:e.outcome}),K(`span`,{class:`row-label`,children:e.title}),e.repeatEachIndex>0&&K(`span`,{class:`row-note`,children:[`repeat `,e.repeatEachIndex]})]})}function La({name:e,path:t}){let[n,r]=sr(e);return K(`span`,{class:`label-part file-name`,children:[K(`span`,{class:`name-head`,"aria-hidden":`true`,children:n}),r&&K(`span`,{class:`name-tail`,"aria-hidden":`true`,children:r}),K(`span`,{class:`visually-hidden`,children:t})]})}function Ra({node:e,onToggle:t}){let{counts:n}=e,r=[G(n.total,`test`),`${n.failed} failed`,...n.flaky>0?[`${n.flaky} flaky`]:[]].join(`, `),[i=``,...a]=e.labels,o=[e.kind===`folder`?`${e.path??i}/`:e.path??i,...a].join(` › `);return K(`div`,{class:`row-content`,onClick:t,children:[K(Yr,{class:`chevron`}),K(`span`,{class:`row-label`,title:o,children:[e.kind===`file`?K(La,{name:i,path:e.path??i}):K(`span`,{class:`label-part`,children:i}),a.map((e,t)=>K(`span`,{class:`label-part`,children:e},t))]}),K(`span`,{class:`row-counts`,title:r,children:[K(`span`,{class:`visually-hidden`,children:r}),n.failed>0&&K(`span`,{class:`badge badge-failed`,"aria-hidden":`true`,children:n.failed}),K(`span`,{class:`row-total`,"aria-hidden":`true`,children:n.total})]})]})}var za=200,Ba=300;function Va({page:e,route:t,children:n,class:r}){return K(`li`,{children:K(`a`,{class:`nav-link ${r??``}`,href:U({page:e}),"aria-current":t.page===e?`page`:void 0,children:n})})}function Ha(e){return e instanceof HTMLElement?e.isContentEditable||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement?!0:e instanceof HTMLInputElement&&![`checkbox`,`radio`,`button`,`submit`,`reset`,`range`,`color`,`file`].includes(e.type):!1}function Ua(){let e=tr.value.q,[t,n]=ke(e),r=M(null),i=M(void 0);j(()=>{e.trim()!==t.trim()&&(clearTimeout(i.current),n(e))},[e]),j(()=>{let e=e=>{e.key!==`/`||e.ctrlKey||e.metaKey||e.altKey||Ha(e.target)||(e.preventDefault(),B.value?r.current?.focus():(B.value=!0,setTimeout(()=>r.current?.focus(),0)))};return document.addEventListener(`keydown`,e),()=>{document.removeEventListener(`keydown`,e),clearTimeout(i.current)}},[]);let a=e=>W({...tr.value,q:e},`replace`);return K(`div`,{class:`search-field`,children:[K(`label`,{for:`sidebar-search`,class:`visually-hidden`,children:`Search tests`}),K(ai,{}),K(`input`,{ref:r,id:`sidebar-search`,type:`search`,placeholder:`Search tests`,autoComplete:`off`,spellcheck:!1,"aria-keyshortcuts":`/`,value:t,onInput:e=>{let t=e.currentTarget.value;n(t),clearTimeout(i.current),i.current=setTimeout(()=>a(t),za)},onKeyDown:e=>{e.key===`Escape`&&t!==``&&(e.preventDefault(),clearTimeout(i.current),n(``),a(``))}}),K(`kbd`,{class:`search-key`,"aria-hidden":`true`,children:`/`})]})}function Wa({matched:e,route:t}){let n=tr.value,r=Nn(n);return K(`div`,{class:`filter-indicator`,"aria-live":t.page===`tests`?`off`:`polite`,children:r>0&&K(`p`,{children:[K(`span`,{children:G(r,`filter`)}),` · `,K(`a`,{href:U({page:`tests`}),children:G(e,`test`)}),K(`button`,{type:`button`,class:`text-button`,onClick:()=>W(Fn(n)),children:`Clear`})]})})}function Ga({report:e,tree:t,prefix:n,matched:r,route:i,open:a}){let o=e.run.errors.length,s=Nn(tr.value)>0;return K(`nav`,{id:`sidebar`,class:`sidebar`,"aria-label":`Report`,hidden:!a,children:[K(`div`,{class:`sidebar-search`,role:`search`,children:[K(Ua,{}),K(Wa,{matched:r,route:i})]}),K(`ul`,{class:`nav-fixed`,children:[K(Va,{page:`dashboard`,route:i,children:[K(ei,{}),K(`span`,{children:`Overview`})]}),K(Va,{page:`errors`,route:i,class:o>0?`nav-has-run-errors`:void 0,children:[K(ni,{}),K(`span`,{children:`Errors`}),o>0&&K(`span`,{class:`nav-marker`,title:G(o,`run error`),children:[K(ti,{}),K(`span`,{class:`badge badge-failed`,children:o}),K(`span`,{class:`visually-hidden`,children:[`, `,G(o,`run error`)]})]})]}),K(Va,{page:`health`,route:i,children:[K(ri,{}),K(`span`,{children:`Suite health`})]}),K(Va,{page:`tests`,route:i,children:[K(ii,{}),K(`span`,{children:`Tests`})]})]}),K(Fa,{roots:t,route:i,prefix:n,expandAll:s&&r<=Ba,emptyMessage:e.tests.length===0?`No tests in this run.`:`No tests match the filters.`})]})}function Ka({report:e,settings:t}){let n=tr.value,r=N(()=>Yn(e.tests,n,$n.value),[e,Mn({...n,sort:vn})]),i=N(()=>ir(e.tests.map(e=>e.file)),[e]),a=N(()=>Hr({projects:e.projects,tests:r},{prefix:i}),[e,r,i]),o=N(()=>new Map(e.tests.map(e=>[Pr(e.id,e.repeatEachIndex),e])),[e]),s=N(()=>Vt(e),[e]),{route:c}=H.value,l=M(null);je(()=>{(c.page!==`errors`||c.category===void 0)&&l.current?.scrollTo(0,0),xt()&&(B.value=!1)},[JSON.stringify(c)]);let u;switch(c.page){case`dashboard`:u=K(Wi,{report:e,groups:s});break;case`errors`:u=K(zi,{report:e,groups:s,category:c.category});break;case`health`:u=K(Ui,{report:e});break;case`tests`:u=K(ma,{report:e,state:n,matched:r});break;case`test`:u=K(Gi,{test:o.get(Pr(c.id,c.repeatEachIndex))});break;case`group`:u=K(Hi,{report:e,group:s.find(e=>e.signature===c.signature)});break;case`not-found`:u=K(Bi,{})}return K(`div`,{class:`app ${B.value?`sidebar-open`:`sidebar-closed`}`,children:[K(Pa,{report:e,title:t.title}),K(`div`,{class:`layout`,children:[K(Ga,{report:e,tree:a,prefix:i,matched:r.length,route:c,open:B.value}),K(`main`,{class:`main`,ref:l,tabIndex:-1,children:[u,K(va,{version:e.generator.version})]})]})]})}var qa={title:`Loupe report`,theme:`system`,screenshots:{defaultView:`side-by-side`}};function Ja(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ya(e){let t;try{t=JSON.parse(e??``)}catch{return{ok:!1,message:`The report data is missing or is not valid JSON.`}}return Ja(t)?t.schemaVersion===1?!Ja(t.run)||!Array.isArray(t.tests)||!Array.isArray(t.projects)?{ok:!1,message:`The report data is incomplete: run, projects or tests is missing.`}:{ok:!0,report:t}:{ok:!1,message:`Unsupported report schema version ${JSON.stringify(t.schemaVersion)}: this renderer reads version 1.`}:{ok:!1,message:`The report data is not a Loupe report.`}}function Xa(e){try{let t=JSON.parse(e??``);return Ja(t)?{...qa,...t,screenshots:{...qa.screenshots,...Ja(t.screenshots)?t.screenshots:{}}}:qa}catch{return qa}}var Za=Xa(document.getElementById(`loupe-settings`)?.textContent);document.title=Za.title,wa(Za.theme);var Qa=Ya(document.getElementById(`loupe-data`)?.textContent),$a=document.getElementById(`app`)??document.body;Qa.ok&&er(Qa.report),ge(Qa.ok?K(Ka,{report:Qa.report,settings:Za}):K(`div`,{class:`load-error`,role:`alert`,children:[K(`h1`,{children:`Loupe could not open this report`}),K(`p`,{children:Qa.message})]}),$a);</script>
10
- <style>@font-face{font-family:DM Sans;font-style:normal;font-weight:400;font-display:swap;src:url(data:font/woff2;base64,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)format("woff2")}@font-face{font-family:DM Sans;font-style:normal;font-weight:600;font-display:swap;src:url(data:font/woff2;base64,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)format("woff2")}:root{--bg:#f7f5f0;--bg-card:#fff;--bg-muted:#eeeae2;--fg:#111;--fg-secondary:#666;--border:#e8e4dc;--border-control:#8a857c;--status-passed:#3e6e51;--status-failed:#b3261e;--status-flaky:#6b4a05;--status-flaky-bg:#fbf0d9;--status-skipped:#666;--shadow:0 8px 24px #1111111f;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#080808;--bg-card:#0d0d0d;--bg-muted:#161616;--fg:#f0ede8;--fg-secondary:#8a8a8a;--border:#262626;--border-control:#6b6b6b;--status-passed:#7da88a;--status-failed:#f28b82;--status-flaky:#f0cf8a;--status-flaky-bg:#1f1705;--status-skipped:#8a8a8a;--shadow:0 8px 24px #0009;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}:root:not([data-theme=light]) .category-badge,:root:not([data-theme=light]) .category-bar{--cat-text:var(--cat-text-dark);--cat-bg:var(--cat-bg-dark);--cat-border:var(--cat-border-dark)}}:root[data-theme=dark]{--bg:#080808;--bg-card:#0d0d0d;--bg-muted:#161616;--fg:#f0ede8;--fg-secondary:#8a8a8a;--border:#262626;--border-control:#6b6b6b;--status-passed:#7da88a;--status-failed:#f28b82;--status-flaky:#f0cf8a;--status-flaky-bg:#1f1705;--status-skipped:#8a8a8a;--shadow:0 8px 24px #0009;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}:root{--font-sans:"DM Sans", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace}.category-badge,.category-bar{--cat-text:var(--cat-text-light);--cat-bg:var(--cat-bg-light);--cat-border:var(--cat-border-light)}:root[data-theme=dark] .category-badge,:root[data-theme=dark] .category-bar{--cat-text:var(--cat-text-dark);--cat-bg:var(--cat-bg-dark);--cat-border:var(--cat-border-dark)}*{box-sizing:border-box}html,body{height:100%}body{background:var(--bg);color:var(--fg);font:14px/1.5 var(--font-sans);margin:0}#app{height:100%}a{color:var(--fg);text-decoration:underline;-webkit-text-decoration-color:var(--border-control);text-decoration-color:var(--border-control);text-underline-offset:2px}a:hover{text-decoration-color:currentColor}:focus-visible{outline:2px solid var(--fg);outline-offset:2px}code,pre,kbd{font-family:var(--font-mono);font-size:12.5px}h1,h2,h3,strong,b{font-weight:600}[hidden]{display:none!important}.visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.muted{color:var(--fg-secondary)}.icon{flex:none;display:block}.app{flex-direction:column;height:100%;display:flex}.layout{flex:1;min-height:0;display:flex;position:relative}.main{flex-direction:column;flex:1;min-width:0;display:flex;overflow:auto}.main:focus{outline:none}.main>.page{flex:1}.header{border-bottom:1px solid var(--border);background:var(--bg-card);flex-wrap:wrap;align-items:center;gap:8px 16px;padding:8px 16px;display:flex}.brand{align-items:baseline;gap:10px;min-width:0;display:flex}.wordmark{color:var(--status-passed);letter-spacing:-.01em;font-size:18px;font-weight:600}.header .title{min-width:0;color:inherit;text-overflow:ellipsis;white-space:nowrap;font-size:15px;font-weight:600;text-decoration:none;overflow:hidden}.header .title:hover{text-decoration:underline}.run-status{border:1px solid;border-radius:999px;align-items:center;gap:4px;padding:1px 8px 1px 4px;font-size:12px;font-weight:600;display:inline-flex}.run-passed{color:var(--status-passed)}.run-failed,.run-timedout,.run-interrupted{color:var(--status-failed)}.counts{gap:12px;margin:0;padding:0;list-style:none;display:flex}.count{font-variant-numeric:tabular-nums;align-items:center;gap:4px;font-weight:600;display:flex}.count.zero{font-weight:400}.count.zero .outcome-icon{color:var(--fg-secondary)}.count-link{color:inherit;border-radius:4px;align-items:center;gap:4px;margin:-2px -4px;padding:2px 4px;text-decoration:none;display:flex}.count-link:hover{background:var(--bg-muted)}.count-link:hover .count-value{text-decoration:underline}.run-meta{color:var(--fg-secondary);flex-wrap:wrap;gap:4px 16px;margin:0;font-size:13px;display:flex}.run-meta div{gap:4px;min-width:0;display:flex}.run-meta dt:after{content:":"}.run-meta dd{color:var(--fg);text-overflow:ellipsis;white-space:nowrap;margin:0;overflow:hidden}.run-time{position:relative}.run-time dd{overflow:visible}.run-time time{-webkit-text-decoration:underline dotted var(--border-control);text-decoration:underline dotted var(--border-control);text-underline-offset:3px;cursor:help;border-radius:2px}.run-time-details{z-index:20;border:1px solid var(--border-control);background:var(--bg-card);box-shadow:var(--shadow);color:var(--fg);white-space:nowrap;border-radius:6px;flex-direction:column;gap:2px;margin-top:4px;padding:8px 10px;font-size:13px;display:none;position:absolute;top:100%;left:0}.run-time-details:before{content:"";height:6px;position:absolute;bottom:100%;left:0;right:0}.run-time:hover .run-time-details,.run-time:focus-within .run-time-details{display:flex}.run-time .run-time-details.dismissed{display:none}.theme-switch{border:1px solid var(--border-control);border-radius:6px;margin-left:auto;display:flex}.theme-switch .icon-button{border-radius:0}.theme-switch .icon-button:first-child{border-radius:5px 0 0 5px}.theme-switch .icon-button:last-child{border-radius:0 5px 5px 0}.theme-switch [aria-pressed=true]{background:var(--bg-muted);color:var(--fg)}.icon-button{width:30px;height:30px;color:var(--fg-secondary);cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;padding:0;display:inline-flex}.icon-button:hover{background:var(--bg-muted);color:var(--fg)}.text-button{color:var(--fg-secondary);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:4px;padding:2px 6px;font-size:12px}.text-button:hover{background:var(--bg-card);color:var(--fg)}.banner{border-bottom:1px solid var(--border);background:var(--status-flaky-bg);color:var(--status-flaky);align-items:flex-start;gap:8px;padding:8px 16px;display:flex}.banner .icon{margin-top:2px}.banner p{margin:0}.outcome-icon{align-items:center;gap:6px;display:inline-flex}.outcome-passed{color:var(--status-passed)}.outcome-failed{color:var(--status-failed)}.outcome-flaky{color:var(--status-flaky)}.outcome-skipped{color:var(--status-skipped)}.outcome-text{font-weight:600}.badge{text-align:center;font-variant-numeric:tabular-nums;border-radius:999px;min-width:20px;padding:0 6px;font-size:12px;font-weight:600;line-height:16px;display:inline-block}.badge-failed{color:var(--status-failed);border:1px solid}.category-badge{border:1px solid var(--cat-border);background:var(--cat-bg);max-width:100%;color:var(--cat-text);white-space:nowrap;text-overflow:ellipsis;border-radius:999px;align-items:center;padding:0 8px;font-size:12px;font-weight:600;line-height:20px;display:inline-flex;overflow:hidden}.sidebar{border-right:1px solid var(--border);background:var(--bg-muted);flex-direction:column;flex:none;width:340px;max-width:85vw;display:flex;overflow:auto}.nav-fixed{border-bottom:1px solid var(--border);margin:0;padding:8px;list-style:none}.nav-link{color:inherit;border-radius:6px;align-items:center;gap:8px;padding:4px 8px;text-decoration:none;display:flex}.nav-link:hover{background:var(--bg-card)}.nav-link[aria-current=page]{background:var(--bg-card);box-shadow:inset 3px 0 0 var(--fg);font-weight:600}.nav-link .icon{color:var(--fg-secondary)}.nav-marker{align-items:center;gap:4px;margin-left:auto;display:inline-flex}.nav-marker .icon{color:var(--status-failed)}.sidebar-search{z-index:2;border-bottom:1px solid var(--border);background:var(--bg-muted);padding:8px 8px 0;position:sticky;top:0}.search-field{align-items:center;margin-bottom:8px;display:flex;position:relative}.search-field>.icon{color:var(--fg-secondary);pointer-events:none;position:absolute;left:8px}.search-field input{border:1px solid var(--border-control);background:var(--bg-card);width:100%;min-height:32px;color:var(--fg);font:inherit;border-radius:6px;padding:4px 30px}.search-field input::placeholder{color:var(--fg-secondary);opacity:1}.search-field input:focus-visible{outline-offset:0}.search-key{border:1px solid var(--border-control);color:var(--fg-secondary);pointer-events:none;border-radius:4px;padding:0 5px;font-size:11px;line-height:16px;position:absolute;right:8px}.search-field input:focus~.search-key,.search-field input:not(:placeholder-shown)~.search-key{display:none}.filter-indicator p{color:var(--fg-secondary);flex-wrap:wrap;align-items:center;gap:4px;margin:-2px 0 8px;padding:0 4px;font-size:13px;display:flex}.filter-indicator a{color:var(--fg);font-weight:600}.filter-indicator .text-button{text-decoration:underline;-webkit-text-decoration-color:var(--border-control);text-decoration-color:var(--border-control);text-underline-offset:2px;margin-left:auto}.tree-section{padding:8px 0}.tree-toolbar{align-items:center;gap:2px;padding:0 8px 4px 16px;display:flex}.tree-toolbar h2{color:var(--fg-secondary);text-transform:uppercase;letter-spacing:.04em;flex:1;margin:0;font-size:12px;font-weight:600}.tree-empty{color:var(--fg-secondary);padding:0 16px}.tree-prefix{color:var(--fg-secondary);font-family:var(--font-mono);text-overflow:ellipsis;white-space:nowrap;margin:0 16px 4px;font-size:12px;overflow:hidden}.tree{margin:0;padding:0 8px;list-style:none}.tree-row{outline-offset:-2px;border-radius:6px}.row-content{min-height:28px;padding:2px 8px 2px calc((var(--level) - 1) * 16px + 8px);color:inherit;cursor:pointer;align-items:center;gap:6px;text-decoration:none;display:flex}.tree-row:hover{background:var(--bg-card)}.tree-test[aria-selected=true],.tree-row.revealed{background:var(--bg-card);box-shadow:inset 3px 0 0 var(--fg)}.tree-test[aria-selected=true]{font-weight:600}.chevron{color:var(--fg-secondary);transition:transform .1s}.tree-group[aria-expanded=true]>.row-content .chevron{transform:rotate(90deg)}.tree-project>.row-content{font-weight:600}.row-label{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.tree-group .row-label{display:flex}.tree-group .label-part{text-overflow:ellipsis;white-space:pre;flex:0 auto;min-width:0;overflow:hidden}.label-part+.label-part:before{content:" › ";color:var(--fg-secondary)}.tree-group .file-name{display:flex}.tree-group .label-part+.label-part{flex-shrink:8}.name-head{text-overflow:ellipsis;min-width:0;overflow:hidden}.name-tail{flex:none}.row-note{color:var(--fg-secondary);font-size:12px;font-weight:400}.row-counts{flex:none;align-items:center;gap:6px;display:flex}.row-total{min-width:20px;color:var(--fg-secondary);text-align:right;font-variant-numeric:tabular-nums;font-size:12px}.page{padding:24px}.page h1{margin:0 0 12px;font-size:22px;line-height:1.3}.breadcrumb{color:var(--fg-secondary);overflow-wrap:anywhere;margin:0 0 4px;font-size:13px}.test-title{overflow-wrap:anywhere}pre.message{background:var(--bg-muted);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:6px;margin:0;padding:8px 12px;overflow:auto}.run-errors{flex-direction:column;gap:16px;margin:0;padding:0;list-style:none;display:flex}.run-error{border:1px solid var(--border);border-left:3px solid var(--status-failed);background:var(--bg-card);border-radius:6px;padding:12px 16px}.run-error-meta{color:var(--fg-secondary);flex-wrap:wrap;align-items:center;gap:4px 12px;font-size:13px;display:flex}.run-error pre{background:var(--bg-muted);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:6px;margin:8px 0 0;padding:8px 12px;overflow:auto}.run-error details{margin-top:8px}.run-error summary{color:var(--fg-secondary);cursor:pointer}.load-error{max-width:640px;margin:48px auto;padding:0 16px}.load-error h1{color:var(--status-failed);font-size:20px}.page{container-type:inline-size}.view{flex-direction:column;gap:16px;display:flex}.view>*,.view h1{max-width:1280px}.view>h1{margin-bottom:0}.widget{border:1px solid var(--border);background:var(--bg-card);border-radius:8px;min-width:0;padding:16px}.widget>h2{margin:0 0 12px;font-size:15px;line-height:1.3}.widget-note{color:var(--fg-secondary);margin:-8px 0 12px;font-size:13px}.widget-hint{color:var(--fg-secondary);margin:12px 0 0;font-size:13px}.widget-list{flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.widget-list>li{border-top:1px solid var(--border)}.widget-list>li:first-child{border-top:0}.widget-more{margin:8px 0 0}.widget-grid{grid-template-columns:repeat(auto-fit,minmax(max(380px,50% - 8px),1fr));align-items:start;gap:16px;display:grid}.widget-grid>:last-child:nth-child(odd){grid-column:1/-1}@container (width<=900px){.widget-grid{grid-template-columns:minmax(0,1fr)}}.verdict{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 32px;display:flex}.verdict-outcome{align-items:center;gap:10px;margin:0;font-size:22px;font-weight:600;display:flex}.verdict-outcome .icon{width:28px;height:28px}.verdict-outcome.outcome-flaky{background:var(--status-flaky-bg);border-radius:8px;padding:2px 12px 2px 8px}.verdict-meta{color:var(--fg-secondary);font-variant-numeric:tabular-nums;margin:0}.verdict-meta strong{color:var(--fg)}.outcome-bar{border-radius:5px;gap:2px;height:10px;margin:12px 0 8px;display:flex;overflow:hidden}.outcome-bar-part{flex-basis:0;min-width:4px}.bar-passed{background:var(--status-passed)}.bar-failed{background:var(--status-failed)}.bar-flaky{background:var(--status-flaky)}.bar-skipped{background:var(--status-skipped)}.outcome-legend{color:var(--fg-secondary);font-variant-numeric:tabular-nums;flex-wrap:wrap;gap:4px 16px;margin:0;padding:0;font-size:13px;list-style:none;display:flex}.outcome-legend li{align-items:center;gap:4px;display:flex}.widget-run-errors{border-left:3px solid var(--status-failed)}.widget-run-errors h2{align-items:center;gap:8px;display:flex}.widget-run-errors h2 .icon{color:var(--status-failed)}.widget-run-errors .widget-list code{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.widget-run-errors .widget-list li{padding:6px 0}.group-row{color:inherit;flex-direction:column;gap:2px;padding:8px 4px;text-decoration:none;display:flex}.group-row:hover{background:var(--bg-muted)}.group-row-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:4px 12px;display:flex}.group-test{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.group-row:hover .group-test{text-decoration:underline}.group-message{color:var(--fg-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.group-count{font-variant-numeric:tabular-nums;white-space:nowrap;font-weight:600}.group-split{font-variant-numeric:tabular-nums;white-space:nowrap;flex-wrap:wrap;gap:4px 12px;font-weight:600;display:inline-flex}.group-split-part{align-items:center;gap:4px;display:inline-flex}.group-row-counts{flex-wrap:wrap;align-items:center;gap:4px 10px;margin-left:auto;display:inline-flex}.group-attempts{color:var(--fg-secondary);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:13px}.category-bars{grid-template-columns:minmax(0,max-content) minmax(40px,1fr) auto;display:grid}.category-bars>li{grid-column:1/-1;grid-template-columns:subgrid;display:grid}.category-bar-row{grid-column:1/-1;grid-template-columns:subgrid;color:inherit;align-items:center;gap:8px;padding:6px 4px;text-decoration:none;display:grid}.category-bar-row:hover{background:var(--bg-muted)}.category-bar-row .category-badge{justify-self:start}.category-bar-track{height:8px;display:block}.category-bar{background:var(--cat-border);border-radius:4px;min-width:4px;height:100%;display:block}.category-list>li>details>summary{cursor:pointer;align-items:center;gap:8px;padding:8px 4px;list-style:none;display:flex}.category-list>li>details>summary::-webkit-details-marker{display:none}.category-list>li>details>summary:hover{background:var(--bg-muted)}.category-list summary .chevron{transition:transform .1s}.category-list details[open]>summary .chevron{transform:rotate(90deg)}.category-list summary .group-count{margin-left:auto}.category-list .widget-list{margin:0 0 8px 28px}.project-cards{flex-wrap:wrap;gap:12px;margin:0;padding:0;list-style:none;display:flex}.project-cards>li{flex:240px;min-width:0}.project-card{border:1px solid var(--border-control);background:var(--bg-card);width:100%;height:100%;color:inherit;font:inherit;text-align:left;cursor:pointer;border-radius:8px;flex-direction:column;gap:6px;padding:12px;display:flex}.project-card:hover{background:var(--bg-muted)}.project-name{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.project-card .counts{flex-wrap:wrap;font-size:13px}.project-meta{color:var(--fg-secondary);font-size:13px}.data-table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%}.data-table th,.data-table td{border-top:1px solid var(--border);text-align:right;vertical-align:top;padding:6px 8px}.data-table thead th{color:var(--fg-secondary);border-top:0;font-size:12px;font-weight:600}.data-table thead th .outcome-icon{justify-content:flex-end}.data-table th:first-child,.data-table td:first-child{text-align:left}.data-table .zero{color:var(--fg-secondary)}.data-table tbody th{overflow-wrap:anywhere;font-weight:400}.dimension-bars{grid-template-columns:minmax(0,max-content) minmax(60px,1fr) auto auto;align-items:center;gap:0 12px;margin:0;padding:0;list-style:none;display:grid}.dimension-bar-row{grid-column:1/-1;grid-template-columns:subgrid;border-top:1px solid var(--border);align-items:center;padding:6px 0;display:grid}.dimension-bar-row:first-child{border-top:0}.dimension-value-cell{overflow-wrap:anywhere;min-width:0}a.dimension-value{font-weight:600}.dimension-bar{height:10px;margin:0}.dimension-bar:empty{background:var(--bg-muted)}.dimension-bar-counts{justify-content:flex-end;gap:10px;font-size:13px;display:flex}.dimension-bar-counts .count{font-weight:600}.dimension-total{min-width:28px;color:var(--fg-secondary);text-align:right;font-variant-numeric:tabular-nums;font-size:13px}.tile-summary{margin:0 0 10px;font-size:13px}.dimension-tiles{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:6px;margin:0;padding:0;list-style:none;display:grid}.dimension-tiles>li{min-width:0;display:flex}.dimension-tile{color:inherit;border:1px solid var(--border);border-left:4px solid var(--tile-color);background:var(--bg-card);cursor:pointer;border-radius:6px;flex:1;align-items:center;gap:6px;min-width:0;padding:6px 8px;font-size:13px;text-decoration:none;display:flex;position:relative}span.dimension-tile{cursor:default}.dimension-tile:hover,.dimension-tile:focus-visible{background:var(--bg-muted)}.tile-failed{--tile-color:var(--status-failed)}.tile-flaky{--tile-color:var(--status-flaky);background:var(--status-flaky-bg)}.tile-passed{--tile-color:var(--status-passed)}.tile-skipped,.tile-none{--tile-color:var(--status-skipped)}.tile-failed .tile-value,.tile-flaky .tile-value{font-weight:600}.tile-value{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.tile-icon-none{border:1.4px dashed var(--status-skipped);border-radius:50%;flex:none;width:16px;height:16px}.tile-flag{color:var(--status-flaky)}.tile-details{z-index:5;border:1px solid var(--border-control);background:var(--bg-card);min-width:180px;max-width:280px;box-shadow:var(--shadow);color:var(--fg);overflow-wrap:anywhere;border-radius:6px;flex-direction:column;gap:2px;padding:8px 10px;font-weight:400;display:none;position:absolute;bottom:calc(100% + 6px);left:0}.tooltip-open .tile-details{display:flex}.tile-details:after{content:"";height:8px;position:absolute;top:100%;left:0;right:0}.tile-note{color:var(--status-flaky)}.dimension-table{margin-top:12px}.dimension-table>summary{color:var(--fg-secondary);cursor:pointer;align-items:center;gap:4px;font-size:13px;list-style:none;display:inline-flex}.dimension-table>summary::-webkit-details-marker{display:none}.dimension-table>summary:hover{color:var(--fg)}.dimension-table[open]>summary .chevron{transform:rotate(90deg)}.dimension-table>.data-table{margin-top:8px}.pass-rate{cursor:help}.pass-rate strong{color:var(--fg)}.hygiene-flag{color:var(--status-flaky);align-items:center;gap:4px;margin-top:2px;font-size:12px;display:flex}.test-line{align-items:center;gap:8px;padding:6px 0;display:flex}.test-line .test-text{flex:1;min-width:0}.test-line .test-text a{overflow-wrap:anywhere}.test-line .test-where{color:var(--fg-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:12px;display:block;overflow:hidden}.test-line .duration{font-variant-numeric:tabular-nums;flex:none}.skip-kind{border:1px solid var(--border-control);text-transform:uppercase;border-radius:4px;padding:0 6px;font-size:11px;font-weight:600}.flaky-error{align-items:center;gap:8px;min-width:0;margin-top:2px;display:flex}.flaky-error code{color:var(--fg-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.group-meta{flex-wrap:wrap;align-items:center;gap:8px 16px;margin:0 0 16px;display:flex}.group-meta div{align-items:center;gap:6px;display:flex}.group-meta dt{color:var(--fg-secondary)}.group-meta dd{margin:0}.group-page h2{margin:24px 0 8px;font-size:16px}.affected-tests{border-collapse:collapse;width:100%}.affected-tests th,.affected-tests td{border-top:1px solid var(--border);text-align:left;vertical-align:top;overflow-wrap:anywhere;padding:6px 8px}.affected-tests thead th{color:var(--fg-secondary);border-top:0;font-size:12px;font-weight:600}.affected-tests .test-cell{align-items:flex-start;gap:6px;display:flex}.filter-bar{flex-direction:column;gap:10px;display:flex}.facets{flex-wrap:wrap;gap:8px;display:flex}.facet{position:relative}.facet-button{border:1px solid var(--border-control);background:var(--bg-card);cursor:pointer;border-radius:6px;align-items:center;gap:6px;min-height:32px;padding:4px 8px 4px 12px;list-style:none;display:inline-flex}.facet-button::-webkit-details-marker{display:none}.facet-button:hover{background:var(--bg-muted)}.facet-button .chevron{transition:transform .1s;transform:rotate(90deg)}.facet[open]>.facet-button .chevron{transform:rotate(-90deg)}.facet-selected{background:var(--fg);min-width:20px;color:var(--bg-card);text-align:center;font-variant-numeric:tabular-nums;border-radius:999px;padding:0 6px;font-size:12px;font-weight:600;line-height:18px}.facet-menu{z-index:15;border:1px solid var(--border-control);background:var(--bg-card);min-width:220px;max-width:min(360px,90vw);max-height:360px;box-shadow:var(--shadow);border-radius:6px;flex-direction:column;margin:0;padding:4px;display:flex;position:absolute;top:calc(100% + 4px);left:0;overflow:auto}.facet-option{cursor:pointer;border-radius:4px;align-items:center;gap:8px;min-height:30px;padding:2px 8px;display:flex}.facet-option:hover{background:var(--bg-muted)}.facet-option input{width:16px;height:16px;accent-color:var(--fg);flex:none;margin:0}.facet-option .facet-value,.facet-option .category-badge{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.facet-count{color:var(--fg-secondary);font-variant-numeric:tabular-nums;margin-left:auto;padding-left:12px;font-size:12px}.facet-option-empty>:not(input):not(.facet-count){opacity:.7}.filter-chips{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.filter-chips ul{display:contents}.filter-chips li{list-style:none;display:flex}.chip{border:1px solid var(--border-control);background:var(--bg-muted);max-width:320px;color:var(--fg);font:inherit;cursor:pointer;border-radius:999px;align-items:center;gap:4px;padding:2px 6px 2px 10px;font-size:13px;display:inline-flex}.chip span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.chip .icon{color:var(--fg-secondary)}.chip:hover .icon{color:var(--fg)}.result-count{color:var(--fg-secondary);font-variant-numeric:tabular-nums;margin:0}.empty-state{border:1px dashed var(--border-control);border-radius:8px;flex-direction:column;align-items:flex-start;gap:8px;padding:24px;display:flex}.empty-state p{margin:0}.button{border:1px solid var(--border-control);background:var(--bg-card);min-height:32px;color:var(--fg);font:inherit;cursor:pointer;border-radius:6px;padding:4px 12px}.button:hover{background:var(--bg-muted)}.view-tests>.table-scroll{max-width:none}.table-scroll{border:1px solid var(--border);background:var(--bg-card);border-radius:8px;overflow-x:auto}.tests-table{border-collapse:collapse;width:100%;font-size:13px}.tests-table th,.tests-table td{border-top:1px solid var(--border);text-align:left;vertical-align:top;padding:6px 10px}.tests-table thead th{background:var(--bg-card);white-space:nowrap;border-top:0;position:sticky;top:0}.tests-table .numeric{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}.tests-table tbody tr:hover{background:var(--bg-muted)}.tests-table .outcome-icon{white-space:nowrap}.cell-title{overflow-wrap:anywhere;min-width:240px}.cell-project{white-space:nowrap}.category-badges{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.category-more{color:var(--fg-secondary);cursor:help;font-size:12px;font-weight:600}.table-more{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.table-more p{color:var(--fg-secondary);font-variant-numeric:tabular-nums;margin:0 8px 0 0}.sort-button{color:var(--fg-secondary);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:4px;align-items:center;gap:2px;margin:-2px -4px;padding:2px 4px;font-size:12px;font-weight:600;display:inline-flex}.numeric .sort-button{flex-direction:row-reverse}.sort-button:hover{background:var(--bg-muted);color:var(--fg)}[aria-sort]>.sort-button{color:var(--fg)}.sort-idle{opacity:.5}.footer{border-top:1px solid var(--border);color:var(--fg-secondary);padding:16px 24px;font-size:12px}@media (width<=760px){.header{padding:8px 12px}.run-meta{order:10;width:100%}.sidebar{z-index:10;box-shadow:var(--shadow);position:absolute;inset:0 auto 0 0}.page{padding:16px}.footer{padding:12px 16px}.affected-tests thead{display:none}.affected-tests tr{border-top:1px solid var(--border);padding:6px 0;display:block}.affected-tests td{border:0;padding:2px 0;display:block}.run-time-details{white-space:normal}}
7
+ <script type="module">var e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h={},g=[],_=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,v=Array.isArray;function y(e,t){for(var n in t)e[n]=t[n];return e}function ee(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function b(t,n,r){var i,a,o,s={};for(o in n)o==`key`?i=n[o]:o==`ref`?a=n[o]:s[o]=n[o];if(arguments.length>2&&(s.children=arguments.length>3?e.call(arguments,2):r),typeof t==`function`&&t.defaultProps!=null)for(o in t.defaultProps)s[o]===void 0&&(s[o]=t.defaultProps[o]);return x(t,s,i,a,null)}function x(e,r,i,a,o){var s={type:e,props:r,key:i,ref:a,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:o??++n,__i:-1,__u:0};return o==null&&t.vnode!=null&&t.vnode(s),s}function S(e){return e.children}function te(e,t){this.props=e,this.context=t}function ne(e,t){if(t==null)return e.__?ne(e.__,e.__i+1):null;for(var n;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null)return n.__e;return typeof e.type==`function`?ne(e):null}function C(e){if(e.__P&&e.__d){var n=e.__v,r=n.__e,i=[],a=[],o=y({},n);o.__v=n.__v+1,t.vnode&&t.vnode(o),ue(e.__P,o,n,e.__n,e.__P.namespaceURI,32&n.__u?[r]:null,i,r??ne(n),!!(32&n.__u),a),o.__v=n.__v,o.__.__k[o.__i]=o,fe(i,o,a),n.__e=n.__=null,o.__e!=r&&w(o)}}function w(e){if((e=e.__)!=null&&e.__c!=null)return e.__e=e.__c.base=null,e.__k.some(function(t){if(t!=null&&t.__e!=null)return e.__e=e.__c.base=t.__e}),w(e)}function re(e){(!e.__d&&(e.__d=!0)&&i.push(e)&&!T.__r++||a!=t.debounceRendering)&&((a=t.debounceRendering)||o)(T)}function T(){try{for(var e,t=1;i.length;)i.length>t&&i.sort(s),e=i.shift(),t=i.length,C(e)}finally{i.length=T.__r=0}}function ie(e,t,n,r,i,a,o,s,c,l,u){var d,f,p,m,_,v,y=r&&r.__k||g,ee=t.length;for(c=ae(n,t,y,c,ee),d=0;d<ee;d++)(p=n.__k[d])!=null&&(f=p.__i!=-1&&y[p.__i]||h,p.__i=d,v=ue(e,p,f,i,a,o,s,c,l,u),m=p.__e,p.ref&&f.ref!=p.ref&&(f.ref&&he(f.ref,null,p),u.push(p.ref,p.__c||m,p)),_==null&&m!=null&&(_=m),4&p.__u?(c=oe(p,c,e),f.__e&&(f.__e=null)):typeof p.type==`function`&&v!==void 0?c=v:m&&(c=m.nextSibling),p.__u&=-7);return n.__e=_,c}function ae(e,t,n,r,i){var a,o,s,c,l,u=n.length,d=u,f=0;for(e.__k=Array(i),a=0;a<i;a++)(o=t[a])!=null&&typeof o!=`boolean`&&typeof o!=`function`?(typeof o==`string`||typeof o==`number`||typeof o==`bigint`||o.constructor==String?o=e.__k[a]=x(null,o,null,null,null):v(o)?o=e.__k[a]=x(S,{children:o},null,null,null):o.constructor===void 0&&o.__b>0?o=e.__k[a]=x(o.type,o.props,o.key,o.ref?o.ref:null,o.__v):e.__k[a]=o,c=a+f,o.__=e,o.__b=e.__b+1,s=null,(l=o.__i=se(o,n,c,d))!=-1&&(d--,(s=n[l])&&(s.__u|=2)),s==null||s.__v==null?(l==-1&&(i>u?f--:i<u&&f++),typeof o.type!=`function`&&(o.__u|=4)):l!=c&&(l==c-1?f--:l==c+1?f++:(l>c?f--:f++,o.__u|=4))):e.__k[a]=null;if(d)for(a=0;a<u;a++)(s=n[a])!=null&&!(2&s.__u)&&(s.__e==r&&(r=ne(s)),ge(s,s));return r}function oe(e,t,n){var r,i;if(typeof e.type==`function`){for(r=e.__k,i=0;r&&i<r.length;i++)r[i]&&(r[i].__=e,t=oe(r[i],t,n));return t}e.__e!=t&&(t&&e.type&&!t.parentNode&&(t=ne(e)),t=n.insertBefore(e.__e,t||null));do t&&=t.nextSibling;while(t!=null&&t.nodeType==8);return t}function se(e,t,n,r){var i,a,o,s=e.key,c=e.type,l=t[n],u=l!=null&&!(2&l.__u);if(l===null&&s==null||u&&s==l.key&&c==l.type)return n;if(r>+!!u){for(i=n-1,a=n+1;i>=0||a<t.length;)if((l=t[o=i>=0?i--:a++])!=null&&!(2&l.__u)&&s==l.key&&c==l.type)return o}return-1}function ce(e,t,n){t[0]==`-`?e.setProperty(t,n??``):e[t]=n==null?``:typeof n!=`number`||_.test(t)?n:n+`px`}function E(e,t,n,r,i){var a,o;n:if(t==`style`){if(typeof n==`string`)e.style.cssText=n;else{if(typeof r==`string`&&(e.style.cssText=r=``),r)for(t in r)n&&t in n||ce(e.style,t,``);if(n)for(t in n)r&&n[t]==r[t]||ce(e.style,t,n[t])}}else if(t[0]==`o`&&t[1]==`n`)a=t!=(t=t.replace(d,`$1`)),o=t.toLowerCase(),t=o in e||t==`onFocusOut`||t==`onFocusIn`?o.slice(2):t.slice(2),e.l||={},e.l[t+a]=n,n?r?n[u]=r[u]:(n[u]=f,e.addEventListener(t,a?m:p,a)):e.removeEventListener(t,a?m:p,a);else{if(i==`http://www.w3.org/2000/svg`)t=t.replace(/xlink(H|:h)/,`h`).replace(/sName$/,`s`);else if(t!=`width`&&t!=`height`&&t!=`href`&&t!=`list`&&t!=`form`&&t!=`tabIndex`&&t!=`download`&&t!=`rowSpan`&&t!=`colSpan`&&t!=`role`&&t!=`popover`&&t in e)try{e[t]=n??``;break n}catch{}typeof n==`function`||(n==null||!1===n&&t[4]!=`-`?e.removeAttribute(t):e.setAttribute(t,t==`popover`&&n==1?``:n))}}function le(e){return function(n){if(this.l){var r=this.l[n.type+e];if(n[l]==null)n[l]=f++;else if(n[l]<r[u])return;return r(t.event?t.event(n):n)}}}function ue(e,n,r,i,a,o,s,c,l,u){var d,f,p,m,h,_,b,x,C,w,re,T,ae,oe,se,ce,E=n.type;if(n.constructor!==void 0)return null;128&r.__u&&(l=!!(32&r.__u),o=[c=n.__e=r.__e]),(d=t.__b)&&d(n);n:if(typeof E==`function`){f=s.length;try{if(C=n.props,w=E.prototype&&E.prototype.render,re=(d=E.contextType)&&i[d.__c],T=d?re?re.props.value:d.__:i,r.__c?x=(p=n.__c=r.__c).__=p.__E:(w?n.__c=p=new E(C,T):(n.__c=p=new te(C,T),p.constructor=E,p.render=_e),re&&re.sub(p),p.state||(p.state={}),p.__n=i,m=p.__d=!0,p.__h=[],p._sb=[]),w&&p.__s==null&&(p.__s=p.state),w&&E.getDerivedStateFromProps!=null&&(p.__s==p.state&&(p.__s=y({},p.__s)),y(p.__s,E.getDerivedStateFromProps(C,p.__s))),h=p.props,_=p.state,p.__v=n,m)w&&E.getDerivedStateFromProps==null&&p.componentWillMount!=null&&p.componentWillMount(),w&&p.componentDidMount!=null&&p.__h.push(p.componentDidMount);else{if(w&&E.getDerivedStateFromProps==null&&C!==h&&p.componentWillReceiveProps!=null&&p.componentWillReceiveProps(C,T),n.__v==r.__v||!p.__e&&p.shouldComponentUpdate!=null&&!1===p.shouldComponentUpdate(C,p.__s,T)){n.__v!=r.__v&&(p.props=C,p.state=p.__s,p.__d=!1),n.__e=r.__e,n.__k=r.__k,n.__k.some(function(e){e&&(e.__=n)}),g.push.apply(p.__h,p._sb),p._sb=[],p.__h.length&&s.push(p),c=ne(r);break n}p.componentWillUpdate!=null&&p.componentWillUpdate(C,p.__s,T),w&&p.componentDidUpdate!=null&&p.__h.push(function(){p.componentDidUpdate(h,_,b)})}if(p.context=T,p.props=C,p.__P=e,p.__e=!1,ae=t.__r,oe=0,w)p.state=p.__s,p.__d=!1,ae&&ae(n),d=p.render(p.props,p.state,p.context),g.push.apply(p.__h,p._sb),p._sb=[];else do p.__d=!1,ae&&ae(n),d=p.render(p.props,p.state,p.context),p.state=p.__s;while(p.__d&&++oe<25);p.state=p.__s,p.getChildContext!=null&&(i=y(y({},i),p.getChildContext())),w&&!m&&p.getSnapshotBeforeUpdate!=null&&(b=p.getSnapshotBeforeUpdate(h,_)),se=d!=null&&d.type===S&&d.key==null?pe(d.props.children):d,c=ie(e,v(se)?se:[se],n,r,i,a,o,s,c,l,u),p.base=n.__e,n.__u&=-161,p.__h.length&&s.push(p),x&&(p.__E=p.__=null)}catch(e){if(s.length=f,n.__v=null,l||o!=null){if(e.then){for(n.__u|=l?160:128;c&&c.nodeType==8&&c.nextSibling;)c=c.nextSibling;o!=null&&(o[o.indexOf(c)]=null),n.__e=c}else if(o!=null)for(ce=o.length;ce--;)ee(o[ce])}else n.__e=r.__e;n.__k??=r.__k||[],e.then||de(n),t.__e(e,n,r)}}else o==null&&n.__v==r.__v?(n.__k=r.__k,n.__e=r.__e):c=n.__e=me(r.__e,n,r,i,a,o,s,l,u);return(d=t.diffed)&&d(n),128&n.__u?void 0:c}function de(e){e&&(e.__c&&(e.__c.__e=!0),e.__k&&e.__k.some(de))}function fe(e,n,r){for(var i=0;i<r.length;i++)he(r[i],r[++i],r[++i]);t.__c&&t.__c(n,e),e.some(function(n){try{e=n.__h,n.__h=[],e.some(function(e){e.call(n)})}catch(e){t.__e(e,n.__v)}})}function pe(e){return typeof e!=`object`||!e||e.__b>0?e:v(e)?e.map(pe):e.constructor===void 0?y({},e):null}function me(n,r,i,a,o,s,c,l,u){var d,f,p,m,g,_,y,b=i.props||h,x=r.props,S=r.type;if(S==`svg`?o=`http://www.w3.org/2000/svg`:S==`math`?o=`http://www.w3.org/1998/Math/MathML`:o||=`http://www.w3.org/1999/xhtml`,s!=null){for(d=0;d<s.length;d++)if((g=s[d])&&`setAttribute`in g==!!S&&(S?g.localName==S:g.nodeType==3)){n=g,s[d]=null;break}}if(n==null){if(S==null)return document.createTextNode(x);n=document.createElementNS(o,S,x.is&&x),l&&=(t.__m&&t.__m(r,s),!1),s=null}if(S==null)b===x||l&&n.data==x||(n.data=x);else{if(s=S==`textarea`&&x.defaultValue!=null?null:s&&e.call(n.childNodes),!l&&s!=null)for(b={},d=0;d<n.attributes.length;d++)b[(g=n.attributes[d]).name]=g.value;for(d in b)g=b[d],d==`dangerouslySetInnerHTML`?p=g:d==`children`||d in x||d==`value`&&`defaultValue`in x||d==`checked`&&`defaultChecked`in x||E(n,d,null,g,o);for(d in x)g=x[d],d==`children`?m=g:d==`dangerouslySetInnerHTML`?f=g:d==`value`?_=g:d==`checked`?y=g:l&&typeof g!=`function`||b[d]===g||E(n,d,g,b[d],o);if(f)l||p&&(f.__html==p.__html||f.__html==n.innerHTML)||(n.innerHTML=f.__html),r.__k=[];else if(p&&(n.innerHTML=``),ie(r.type==`template`?n.content:n,v(m)?m:[m],r,i,a,S==`foreignObject`?`http://www.w3.org/1999/xhtml`:o,s,c,s?s[0]:i.__k&&ne(i,0),l,u),s!=null)for(d=s.length;d--;)ee(s[d]);l&&S!=`textarea`||(d=`value`,S==`progress`&&_==null?n.removeAttribute(`value`):_!=null&&(_!==n[d]||S==`progress`&&!_||S==`option`&&_!=b[d])&&E(n,d,_,b[d],o),d=`checked`,y!=null&&y!=n[d]&&E(n,d,y,b[d],o))}return n}function he(e,n,r){try{if(typeof e==`function`){var i=typeof e.__u==`function`;i&&e.__u(),i&&n==null||(e.__u=e(n))}else e.current=n}catch(e){t.__e(e,r)}}function ge(e,n,r){var i,a;if(t.unmount&&t.unmount(e),(i=e.ref)&&(i.current&&i.current!=e.__e||he(i,null,n)),(i=e.__c)!=null){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(e){t.__e(e,n)}i.base=i.__P=i.__n=null}if(i=e.__k)for(a=0;a<i.length;a++)i[a]&&ge(i[a],n,r||typeof e.type!=`function`);r||ee(e.__e),e.__c=e.__=e.__e=void 0}function _e(e,t,n){return this.constructor(e,n)}function ve(n,r,i){var a,o,s,c;r==document&&(r=document.documentElement),t.__&&t.__(n,r),o=(a=typeof i==`function`)?null:i&&i.__k||r.__k,s=[],c=[],ue(r,n=(!a&&i||r).__k=b(S,null,[n]),o||h,h,r.namespaceURI,!a&&i?[i]:o?null:r.firstChild?e.call(r.childNodes):null,s,!a&&i?i:o?o.__e:r.firstChild,a,c),fe(s,n,c),n.props.children=null}e=g.slice,t={__e:function(e,t,n,r){for(var i,a,o;t=t.__;)if((i=t.__c)&&!i.__)try{if((a=i.constructor)&&a.getDerivedStateFromError!=null&&(i.setState(a.getDerivedStateFromError(e)),o=i.__d),i.componentDidCatch!=null&&(i.componentDidCatch(e,r||{}),o=i.__d),o)return i.__E=i}catch(t){e=t}throw e}},n=0,r=function(e){return e!=null&&e.constructor===void 0},te.prototype.setState=function(e,t){var n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=y({},this.state);typeof e==`function`&&(e=e(y({},n),this.props)),e&&y(n,e),e!=null&&this.__v&&(t&&this._sb.push(t),re(this))},te.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),re(this))},te.prototype.render=S,i=[],o=typeof Promise==`function`?Promise.prototype.then.bind(Promise.resolve()):setTimeout,s=function(e,t){return e.__v.__b-t.__v.__b},T.__r=0,c=Math.random().toString(8),l=`__d`+c,u=`__a`+c,d=/(PointerCapture)$|Capture$/i,f=0,p=le(!1),m=le(!0);var ye,D,be,xe,Se=0,Ce=[],O=t,we=O.__b,Te=O.__r,Ee=O.diffed,De=O.__c,Oe=O.unmount,ke=O.__;function Ae(e,t){O.__h&&O.__h(D,e,Se||t),Se=0;var n=D.__H||(D.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function k(e){return Se=1,je(ze,e)}function je(e,t,n){var r=Ae(ye++,2);if(r.t=e,!r.__c&&(r.__=[n?n(t):ze(void 0,t),function(e){var t=r.__N?r.__N[0]:r.__[0],n=r.t(t,e);t!==n&&(r.__N=[n,r.__[1]],r.__c.setState({}))}],r.__c=D,!D.__f)){var i=function(e,t,n){if(!r.__c.__H)return!0;var i=!1,o=r.__c.props!==e;if(r.__c.__H.__.some(function(e){if(e.__N){i=!0;var t=e.__[0];e.__=e.__N,e.__N=void 0,t!==e.__[0]&&(o=!0)}}),a){var s=a.call(this,e,t,n);return i?s||o:s}return!i||o};D.__f=!0;var a=D.shouldComponentUpdate,o=D.componentWillUpdate;D.componentWillUpdate=function(e,t,n){if(this.__e){var r=a;a=void 0,i(e,t,n),a=r}o&&o.call(this,e,t,n)},D.shouldComponentUpdate=i}return r.__N||r.__}function A(e,t){var n=Ae(ye++,3);!O.__s&&Re(n.__H,t)&&(n.__=e,n.u=t,D.__H.__h.push(n))}function j(e,t){var n=Ae(ye++,4);!O.__s&&Re(n.__H,t)&&(n.__=e,n.u=t,D.__h.push(n))}function M(e){return Se=5,N(function(){return{current:e}},[])}function N(e,t){var n=Ae(ye++,7);return Re(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function Me(){var e=Ae(ye++,11);if(!e.__){for(var t=D.__v;t!==null&&!t.__m&&t.__!==null;)t=t.__;var n=t.__m||(t.__m=[0,0]);e.__=`P`+n[0]+`-`+n[1]++}return e.__}function Ne(){for(var e;e=Ce.shift();){var t=e.__H;if(e.__P&&t)try{t.__h.some(Ie),t.__h.some(Le),t.__h=[]}catch(n){t.__h=[],O.__e(n,e.__v)}}}O.__b=function(e){D=null,we&&we(e)},O.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),ke&&ke(e,t)},O.__r=function(e){Te&&Te(e),ye=0;var t=(D=e.__c).__H;t&&(be===D?(t.__h=[],D.__h=[],t.__.some(function(e){e.__N&&(e.__=e.__N),e.u=e.__N=void 0})):(t.__h.some(Ie),t.__h.some(Le),t.__h=[],ye=0)),be=D},O.diffed=function(e){Ee&&Ee(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(Ce.push(t)!==1&&xe===O.requestAnimationFrame||((xe=O.requestAnimationFrame)||Fe)(Ne)),t.__H.__.some(function(e){e.u&&=(e.__H=e.u,void 0)})),be=D=null},O.__c=function(e,t){t.some(function(e){try{e.__h.some(Ie),e.__h=e.__h.filter(function(e){return!e.__||Le(e)})}catch(n){t.some(function(e){e.__h&&=[]}),t=[],O.__e(n,e.__v)}}),De&&De(e,t)},O.unmount=function(e){Oe&&Oe(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.some(function(e){try{Ie(e)}catch(e){t=e}}),n.__H=void 0,t&&O.__e(t,n.__v))};var Pe=typeof requestAnimationFrame==`function`;function Fe(e){var t,n=function(){clearTimeout(r),Pe&&cancelAnimationFrame(t),setTimeout(e)},r=setTimeout(n,35);Pe&&(t=requestAnimationFrame(n))}function Ie(e){var t=D,n=e.__c;typeof n==`function`&&(e.__c=void 0,n()),D=t}function Le(e){var t=D;e.__c=e.__(),D=t}function Re(e,t){return!e||e.length!==t.length||t.some(function(t,n){return t!==e[n]})}function ze(e,t){return typeof t==`function`?t(e):t}var Be=Symbol.for(`preact-signals`);function Ve(){if(F>1)F--;else{var e,t=!1;for((function(){var e=Ye;for(Ye=void 0;e!==void 0;){var t=e.S;if(t.v===e.v)for(var n=t.t;n!==void 0;n=n.x)n.i===e.i&&(n.i=t.i);e=e.o}})();Ge!==void 0;){var n=Ge;for(Ge=void 0,Ke++;n!==void 0;){var r=n.u;if(n.u=void 0,n.f&=-3,!(8&n.f)&&Qe(n))try{n.c()}catch(n){t||=(e=n,!0)}n=r}}if(Ke=0,F--,t)throw e}}function He(e){if(F>0)return e();Je=++qe,F++;try{return e()}finally{Ve()}}var Ue,P=void 0;function We(e){var t=P,n=Ue;P=void 0,Ue=void 0;try{return e()}finally{P=t,Ue=n}}var Ge=void 0,F=0,Ke=0,qe=0,Je=0,Ye=void 0,Xe=0;function Ze(e){if(P!==void 0){var t=e.n;if(t===void 0||t.t!==P)return t={i:0,S:e,p:P.s,n:void 0,t:P,e:void 0,x:void 0,r:t},P.s!==void 0&&(P.s.n=t),P.s=t,e.n=t,32&P.f&&e.S(t),t;if(t.i===-1)return t.i=0,t.n!==void 0&&(t.n.p=t.p,t.p!==void 0&&(t.p.n=t.n),t.p=P.s,t.n=void 0,P.s.n=t,P.s=t),t}}function I(e,t){this.v=e,this.i=0,this.n=void 0,this.t=void 0,this.l=0,this.W=t?.watched,this.Z=t?.unwatched,this.name=t?.name}I.prototype.brand=Be,I.prototype.h=function(){return!0},I.prototype.S=function(e){var t=this,n=this.t;n!==e&&e.e===void 0&&(e.x=n,this.t=e,n===void 0?We(function(){var e;(e=t.W)==null||e.call(t)}):n.e=e)},I.prototype.U=function(e){var t=this;if(this.t!==void 0){var n=e.e,r=e.x;n!==void 0&&(n.x=r,e.e=void 0),r!==void 0&&(r.e=n,e.x=void 0),e===this.t&&(this.t=r,r===void 0&&We(function(){var e;(e=t.Z)==null||e.call(t)}))}},I.prototype.subscribe=function(e){var t=this;return st(function(){var n=t.value;We(function(){return e(n)})},{name:`sub`})},I.prototype.valueOf=function(){return this.value},I.prototype.toString=function(){return this.value+``},I.prototype.toJSON=function(){return this.value},I.prototype.peek=function(){var e=this;return We(function(){return e.value})},Object.defineProperty(I.prototype,"value",{get:function(){var e=Ze(this);return e!==void 0&&(e.i=this.i),this.v},set:function(e){if(e!==this.v){if(Ke>100)throw Error(`Cycle detected`);(function(e){F!==0&&Ke===0&&e.l!==Je&&(e.l=Je,Ye={S:e,v:e.v,i:e.i,o:Ye})})(this),this.v=e,this.i++,Xe++,F++;try{for(var t=this.t;t!==void 0;t=t.x)t.t.N()}finally{Ve()}}}});function L(e,t){return new I(e,t)}function Qe(e){for(var t=e.s;t!==void 0;t=t.n)if(t.S.i!==t.i||!t.S.h()||t.S.i!==t.i)return!0;return!1}function $e(e){for(var t=e.s;t!==void 0;t=t.n){var n=t.S.n;if(n!==void 0&&(t.r=n),t.S.n=t,t.i=-1,t.n===void 0){e.s=t;break}}}function et(e){for(var t=e.s,n=void 0;t!==void 0;){var r=t.p;t.i===-1?(t.S.U(t),r!==void 0&&(r.n=t.n),t.n!==void 0&&(t.n.p=r)):n=t,t.S.n=t.r,t.r!==void 0&&(t.r=void 0),t=r}e.s=n}function tt(e,t){I.call(this,void 0,t),this.x=e,this.s=void 0,this.g=Xe-1,this.f=4}tt.prototype=new I,tt.prototype.h=function(){if(this.f&=-3,1&this.f)return!1;if((36&this.f)==32||(this.f&=-5,this.g===Xe))return!0;if(this.g=Xe,this.f|=1,this.i>0&&!Qe(this))return this.f&=-2,!0;var e=P;try{$e(this),P=this;var t=this.x();(16&this.f||this.v!==t||this.i===0)&&(this.v=t,this.f&=-17,this.i++)}catch(e){this.v=e,this.f|=16,this.i++}return P=e,et(this),this.f&=-2,!0},tt.prototype.S=function(e){if(this.t===void 0){this.f|=36;for(var t=this.s;t!==void 0;t=t.n)t.S.S(t)}I.prototype.S.call(this,e)},tt.prototype.U=function(e){if(this.t!==void 0&&(I.prototype.U.call(this,e),this.t===void 0)){this.f&=-33;for(var t=this.s;t!==void 0;t=t.n)t.S.U(t)}},tt.prototype.N=function(){if(!(2&this.f)){this.f|=6;for(var e=this.t;e!==void 0;e=e.x)e.t.N()}},Object.defineProperty(tt.prototype,"value",{get:function(){if(1&this.f)throw Error(`Cycle detected`);var e=Ze(this);if(this.h(),e!==void 0&&(e.i=this.i),16&this.f)throw this.v;return this.v}});function nt(e,t){return new tt(e,t)}function rt(e){var t=e.m;if(e.m=void 0,typeof t==`function`){F++;var n=P;P=void 0;try{t()}catch(t){throw e.f&=-2,e.f|=8,it(e),t}finally{P=n,Ve()}}}function it(e){for(var t=e.s;t!==void 0;t=t.n)t.S.U(t);e.x=void 0,e.s=void 0,rt(e)}function at(e){if(P!==this)throw Error(`Out-of-order effect`);et(this),P=e,this.f&=-2,8&this.f&&it(this),Ve()}function ot(e,t){this.x=e,this.m=void 0,this.s=void 0,this.u=void 0,this.f=32,this.name=t?.name,Ue&&Ue.push(this)}ot.prototype.c=function(){var e=this.S();try{if(8&this.f||this.x===void 0)return;var t=this.x();typeof t==`function`&&(this.m=t)}finally{e()}},ot.prototype.S=function(){if(1&this.f)throw Error(`Cycle detected`);this.f|=1,this.f&=-9,rt(this),$e(this),F++;var e=P;return P=this,at.bind(this,e)},ot.prototype.N=function(){2&this.f||(this.f|=2,this.u=Ge,Ge=this)},ot.prototype.d=function(){this.f|=8,1&this.f||it(this)},ot.prototype.dispose=function(){this.d()};function st(e,t){var n=new ot(e,t);try{n.c()}catch(e){throw n.d(),e}var r=n.d.bind(n);return r[Symbol.dispose]=r,r}var ct,lt,ut=typeof window<`u`&&!!window.__PREACT_SIGNALS_DEVTOOLS__,dt=[];st(function(){ct=this.N})();function ft(e,n){t[e]=n.bind(null,t[e]||function(){})}function pt(e){if(lt){var t=lt;lt=void 0,t()}lt=e&&e.S()}function mt(e){var t=this,n=e.data,i=gt(n);i.name=`ReactiveDom`,i.value=n;var a=N(function(){for(var e=t,n=t.__v;n=n.__;)if(n.__c){n.__c.__$f|=4;break}var a=nt(function(){var e=i.value.value;return e===0?0:!0===e?``:e||``}),o=nt(function(){return!Array.isArray(a.value)&&!r(a.value)}),s=st(function(){if(this.N=yt,o.value){var t=a.value;e.__v&&e.__v.__e&&e.__v.__e.nodeType===3&&(e.__v.__e.data=t)}}),c=t.__$u.d;return t.__$u.d=function(){s(),c.call(this)},[o,a]},[]),o=a[0],s=a[1];return o.value?s.peek():s.value}mt.displayName=`ReactiveTextNode`,Object.defineProperties(I.prototype,{constructor:{configurable:!0,value:void 0},type:{configurable:!0,value:mt},props:{configurable:!0,get:function(){var e=this;return{data:{get value(){return e.value}}}}},__b:{configurable:!0,value:1}}),ft(`__b`,function(e,t){if(pt(),typeof t.type==`string`){var n,r=t.props;for(var i in r)if(i!==`children`){var a=r[i];a instanceof I&&(n||(t.__np=n={}),n[i]=a,r[i]=a.peek())}}e(t)}),ft(`__r`,function(e,t){if(e(t),t.type!==S){pt();var n,r=t.__c;r&&(r.__$f&=-2,(n=r.__$u)===void 0&&(r.__$u=n=function(e,t){var n;return st(function(){n=this},{name:t}),n.c=e,n}(function(e){return function(){var t;ut&&((t=this.y)==null||t.call(this)),e.__$f|=1,e.setState({})}}(r),typeof t.type==`function`?t.type.displayName||t.type.name:``))),pt(n)}}),ft(`__e`,function(e,t,n,r){pt(),e(t,n,r)}),ft(`diffed`,function(e,t){pt();var n;if(typeof t.type==`string`&&(n=t.__e)){var r=t.__np,i=t.props,a=n.U;if(a)for(var o in a){var s=a[o];s===void 0||r&&o in r||(s.d(),a[o]=void 0)}if(r)for(var c in a||(a={},n.U=a),r){var l=a[c],u=r[c];l===void 0?(l=ht(n,c,u,i),a[c]=l):l.o(u,i)}}e(t)});function ht(e,t,n,r){var i=t in e&&e.ownerSVGElement===void 0,a=L(n);return{o:function(e,t){a.value=e,r=t},d:st(function(){this.N=yt;var n=a.value.value;r[t]!==n&&(r[t]=n,i?e[t]=n:n!=null&&(!1!==n||t[4]===`-`)?e.setAttribute(t,n):e.removeAttribute(t))})}}ft(`unmount`,function(e,t){if(typeof t.type==`string`){var n=t.__e;if(n){var r=n.U;if(r)for(var i in n.U=void 0,r){var a=r[i];a&&a.d()}}var o=t.__np;if(o){var s=t.props;for(var c in o)s[c]=o[c]}t.__np=void 0}else{var l=t.__c;if(l){l.__$f|=8;var u=l.__$u;u&&(l.__$u=void 0,u.d())}}e(t)}),ft(`__h`,function(e,t,n,r){r<3&&(t.__$f|=2),e(t,n,r)}),te.prototype.shouldComponentUpdate=function(e,t){if(this.__R)return!0;var n=this.__$u,r=n&&n.s!==void 0;for(var i in t)return!0;if(this.__f||typeof this.u==`boolean`&&!0===this.u){var a=2&this.__$f;if(!(r||a||4&this.__$f)||1&this.__$f)return!0}else if(!(r||4&this.__$f)||3&this.__$f)return!0;for(var o in e)if(o!==`__source`&&e[o]!==this.props[o])return!0;for(var s in this.props)if(!(s in e))return!0;return!1};function gt(e,t){return N(function(){return L(e,t)},[])}var _t=function(e){queueMicrotask(function(){queueMicrotask(e)})};function vt(){He(function(){for(var e;e=dt.shift();)ct.call(e)})}function yt(){dt.push(this)===1&&(t.requestAnimationFrame||_t)(vt)}var bt=L({text:``,seq:0});function xt(e){bt.value={text:e,seq:bt.value.seq+1}}var St=L(null);async function Ct(e){try{return typeof navigator.clipboard?.writeText==`function`&&(await navigator.clipboard.writeText(e),!0)}catch{return!1}}async function wt(e,t){return await Ct(t)?(xt(`${e} copied to the clipboard.`),!0):(St.value={label:e,text:t},!1)}function Tt(e){try{return window.localStorage.getItem(e)}catch{return null}}function Et(e,t){try{window.localStorage.setItem(e,t)}catch{}}var Dt=`loupe.sidebar`,Ot=`(max-width: 760px)`;function kt(){return window.matchMedia(Ot).matches}var R=L(!kt()&&Tt(Dt)!==`closed`);function At(){R.value=!R.value,kt()||Et(Dt,R.value?`open`:`closed`)}var jt=L(null);function Mt(e){R.value=!0,jt.value={key:e,seq:(jt.value?.seq??0)+1}}var Nt=/^(0|[1-9]\d*)$/,Pt={"run-errors":{page:`errors`}};function Ft(e){try{return decodeURIComponent(e)}catch{return null}}function It(e){return Ft(e)??e}function Lt(e){let t=e.split(`/`).filter(e=>e!==``).map(Ft);if(t.some(e=>e===null))return{page:`not-found`,path:e};let[n,r,i,a]=t;if(t.length===0)return{page:`dashboard`};if(t.length===1&&(n===`errors`||n===`health`||n===`tests`))return{page:n};if(n===`errors`&&r===`category`&&t.length===3&&i!==void 0)return{page:`errors`,category:i};if(t.length===1&&n!==void 0&&Object.hasOwn(Pt,n))return Pt[n];if(n===`group`&&r!==void 0&&t.length===2)return{page:`group`,signature:r};if(n===`test`&&r!==void 0){if(t.length===2)return{page:`test`,id:r,repeatEachIndex:0};if(t.length===4&&i===`repeat`&&a!==void 0&&Nt.test(a))return{page:`test`,id:r,repeatEachIndex:Number(a)}}return{page:`not-found`,path:e}}function Rt(e){let t=e.startsWith(`#`)?e.slice(1):e,n=t.indexOf(`?`),r=n===-1?t:t.slice(0,n),i=n===-1?``:t.slice(n+1);return{route:Lt(r),search:i}}function zt(e){switch(e.page){case`dashboard`:return`/`;case`errors`:return e.category===void 0?`/errors`:`/errors/category/${encodeURIComponent(e.category)}`;case`health`:return`/health`;case`tests`:return`/tests`;case`test`:{let t=`/test/${encodeURIComponent(e.id)}`;return e.repeatEachIndex===0?t:`${t}/repeat/${e.repeatEachIndex}`}case`group`:return`/group/${encodeURIComponent(e.signature)}`;case`not-found`:return e.path.startsWith(`/`)?e.path:`/${e.path}`}}function z(e){return`#${zt(e.route)}${e.search?`?${e.search}`:``}`}function Bt(e){let t=((e.startsWith(`#`)?e.slice(1):e).split(`?`)[0]??``).split(`/`).filter(e=>e!==``);return t.length!==1||!Object.hasOwn(Pt,It(t[0]))?null:z(Rt(e))}var Vt=(e,t)=>e;function Ht(){let e=window.location.hash,t=Rt(e),n={route:t.route,search:Vt(t.search,t.route)};return(Bt(e)!==null||n.search!==t.search)&&window.history.replaceState(window.history.state,``,z(n)),n}var B=L(Ht());function Ut(){let e=Ht();z(e)!==z(B.value)&&(B.value=e)}window.addEventListener(`hashchange`,Ut),window.addEventListener(`popstate`,Ut);function Wt(e){Vt=e,Ut()}var Gt=new Set([`attempt`]);function Kt(e){return e.split(`&`).filter(e=>e!==``&&!Gt.has(e.split(`=`)[0]??``)).join(`&`)}function V(e){return z({route:e,search:Vt(Kt(B.value.search),e)})}function qt(e){window.location.hash=V(e)}function Jt(e,t){let n=z(e);n!==z(B.value)&&(t===`push`?window.history.pushState(null,``,n):window.history.replaceState(window.history.state,``,n),B.value=e)}var Yt=[`passed`,`failed`,`flaky`,`skipped`];function Xt(e,t){return t.status!==e.expectedStatus&&t.status!==`skipped`}function Zt(e){let t=new Map;for(let n of e.tests)for(let e of n.attempts)if(Xt(n,e))for(let r of e.errors){let i=t.get(r.signature);i||(i={signature:r.signature,category:r.category??`Uncategorized`,message:r.message,tests:[],failed:0,flaky:0},t.set(r.signature,i));let a=i.tests[i.tests.length-1];a?.test===n?a.attempts.includes(e.index)||a.attempts.push(e.index):(i.tests.push({test:n,attempts:[e.index]}),n.outcome===`failed`?i.failed+=1:n.outcome===`flaky`&&(i.flaky+=1))}return[...t.values()]}function Qt(e){return e.map((e,t)=>({group:e,index:t})).sort((e,t)=>t.group.failed-e.group.failed||t.group.flaky-e.group.flaky||e.index-t.index).map(({group:e})=>e)}function $t(e){return e.split(`
8
+ `).find(e=>e.trim()!==``)?.trim()??``}var en=/^(?:Error: )?(?:expect(?:\.soft|\.poll)?\(\w+\)\.(?:not\.)?\w+\([^)]*\)(?: failed)?|Timed out \d+ms waiting for expect\(.*)$/,tn=/^\s*Locator:\s+(.+?)\s*$/m,nn=/^\s*(?:- )?\u2190 (\d{3}\b.*?)\s*$/m;function rn(e){let t=$t(e);if(!en.test(t))return t;let n=tn.exec(e);if(n)return`Locator: ${n[1]}`;let r=nn.exec(e);return r?`\u2190 ${r[1]}`:t}function an(e){return{headline:rn(e.message),firstTest:e.tests[0]?.test??null,others:Math.max(0,e.tests.length-1)}}function on(e){return e.tests.some(({test:e})=>e.attempts.length>1)?`failed on ${e.tests.reduce((e,{attempts:t})=>e+t.length,0)} of ${e.tests.reduce((e,{test:t})=>e+t.attempts.length,0)} attempts`:null}function sn(e,t){let n=new Map;for(let e of t){let t=n.get(e.category);t||(t={tests:new Set,groups:[]},n.set(e.category,t)),t.groups.push(e);for(let{test:n}of e.tests)t.tests.add(n)}let r=e.categories.map(e=>e.name);return[...r.filter(e=>n.has(e)),...[...n.keys()].filter(e=>!r.includes(e))].map(e=>{let t=n.get(e);return{name:e,tests:t.tests.size,groups:t.groups}})}function cn(e){let{stats:t,status:n,errors:r}=e.run;return t.failed>0||n!==`passed`||r.length>0?`failed`:t.flaky>0?`flaky`:`passed`}function ln(e){return Yt.filter(t=>e[t]>0).map(t=>({outcome:t,count:e[t],share:e.total>0?e[t]/e.total:0}))}function un(e){let t=e.total-e.skipped;return t>0?e.passed/t:null}var dn=`Pass rate: passed / (total − skipped). Skipped tests are excluded; flaky tests do not count as passed.`;function fn(e){let t=e*100;return t>99&&t<100?`99%`:t>0&&t<1?`<1%`:`${Math.round(t)}%`}function pn(e){return e.projects.filter(e=>e.stats.total>0).map(t=>{let n=e.tests.filter(e=>e.project===t.name).reduce((e,t)=>e+t.durationMs,0);return{project:t,passRate:un(t.stats),durationMs:n}})}function mn(e){return e.dimensions.map(t=>{let n=new Map,r=e=>{let r=n.get(e);return r||(r={value:e,passed:0,failed:0,flaky:0,skipped:0,total:0,unknown:t.values!==null&&!t.values.includes(e),caseVariants:[]},n.set(e,r)),r};for(let e of t.values??[])r(e);let i=0;for(let n of e.tests){let e=n.dimensions[t.name]??[];e.length===0&&(i+=1);for(let t of new Set(e)){let e=r(t);e[n.outcome]+=1,e.total+=1}}let a=t.values??[],o=[...n.keys()].filter(e=>!a.includes(e)).sort((e,t)=>e.localeCompare(t)),s=[...a,...o].map(e=>n.get(e)),c=bn(s.map(e=>e.value));for(let e of s)e.caseVariants=c.get(e.value)??[];return{definition:t,values:s,without:i}})}function hn(e){return e.values.length<=8?`bars`:`tiles`}function gn(e){return e.failed>0?`failed`:e.flaky>0?`flaky`:e.passed>0?`passed`:e.skipped>0?`skipped`:`none`}var _n={failed:0,flaky:1,passed:2,skipped:3,none:4};function vn(e){return e.map((e,t)=>({row:e,index:t,status:gn(e)})).sort((e,t)=>_n[e.status]-_n[t.status]||t.row.failed-e.row.failed||t.row.flaky-e.row.flaky||e.index-t.index).map(({row:e})=>e)}function yn(e){let t=t=>e.filter(e=>gn(e)===t).length,n=[[t(`passed`),`all passed`],[t(`failed`),`with failures`],[t(`flaky`),`flaky`],[t(`skipped`),`skipped only`],[t(`none`),`without tests`]];return[`${e.length} ${e.length===1?`value`:`values`}`,...n.filter(([e])=>e>0).map(([e,t])=>`${e} ${t}`)].join(` · `)}function bn(e){let t=new Map;for(let n of new Set(e)){let e=n.toLowerCase();t.set(e,[...t.get(e)??[],n])}let n=new Map;for(let e of t.values())if(!(e.length<2))for(let t of e)n.set(t,e.filter(e=>e!==t));return n}function xn(e){return e.tests.filter(e=>e.outcome===`flaky`).map(e=>({test:e,error:e.attempts.find(t=>Xt(e,t))?.errors[0]??null}))}function Sn(e,t=10){return e.tests.filter(e=>e.outcome!==`skipped`&&e.durationMs>0).map((e,t)=>({test:e,index:t})).sort((e,t)=>t.test.durationMs-e.test.durationMs||e.index-t.index).slice(0,t).map(({test:e})=>e)}var Cn=[`skip`,`fixme`];function wn(e){return e.tests.filter(e=>e.outcome===`skipped`).map(e=>{let t=[...e.annotations,...e.attempts[e.attempts.length-1]?.annotations??[]].find(e=>Cn.includes(e.type));return{test:e,kind:t?t.type:null,reason:t?.description?.trim()||null}})}var Tn=/^@([^:\s]+):(.+)$/;function En(e){let t=Tn.exec(e);return t?{prefix:t[1]??``,value:t[2]??``}:null}var Dn=[`status`,`title`,`project`,`file`,`duration`,`category`,`attempts`],On={column:`declaration`,direction:`asc`};function kn(e){return In(Object.keys(e)).map(t=>[t,e[t]??[]]).filter(([,e])=>e.length>0)}var An={q:``,facets:{},sort:On},jn=[`status`,`project`,`tag`],Mn=`dim.`;function Nn(e){return`${Mn}${e}`}function Pn(e){return e.startsWith(Mn)?e.slice(4):null}function Fn(e,t){return e<t?-1:+(e>t)}function In(e){let t=e=>e===`category`?4:Pn(e)===null?jn.indexOf(e):3;return[...e].sort((e,n)=>t(e)-t(n)||Fn(e,n))}function Ln(e){try{return decodeURIComponent(e.replace(/\+/g,` `))}catch{return null}}function Rn(e){let[t,n,...r]=e.split(`:`);return r.length>0||n===void 0?null:t===`declaration`?n===`asc`?On:null:!Dn.includes(t??``)||n!==`asc`&&n!==`desc`?null:{column:t,direction:n}}function zn(e,t){let n=e;if(e.startsWith(`#`)){let t=e.indexOf(`?`);n=t===-1?``:e.slice(t+1)}else e.startsWith(`?`)&&(n=e.slice(1));let r={},i=``,a=On;for(let e of n.split(`&`)){if(e===``)continue;let n=e.indexOf(`=`),o=Ln(n===-1?e:e.slice(0,n)),s=n===-1?``:e.slice(n+1);if(o===null)continue;if(o===`q`){i=Ln(s)??``;continue}if(o===`sort`){a=Rn(Ln(s)??``)??a;continue}if(!(jn.includes(o)||o===`category`||o.startsWith(Mn)&&o.length>4))continue;let c=o,l=t?.get(c);if(!t||l)for(let e of s.split(`,`)){let t=Ln(e);t===null||t===``||l&&!l.has(t)||(r[c]??=[]).push(t)}}return Bn({q:i,facets:r,sort:a})}function Bn(e){let t={};for(let[n,r]of kn(e.facets))t[n]=[...new Set(r)].sort(Fn);return{q:e.q,facets:t,sort:e.sort}}function Vn(e){return e.column===On.column&&e.direction===On.direction}function Hn(e){let t=Bn(e),n=[],r=t.q.trim();r!==``&&n.push(`q=${encodeURIComponent(r)}`);for(let[e,r]of kn(t.facets))n.push(`${encodeURIComponent(e)}=${r.map(encodeURIComponent).join(`,`)}`);return Vn(t.sort)||n.push(`sort=${t.sort.column}:${t.sort.direction}`),n.join(`&`)}function Un(e){return(e.q.trim()===``?0:1)+kn(e.facets).reduce((e,[,t])=>e+t.length,0)}function Wn(e,t,n,r){let i=e.facets[t]??[],a=r?[...i,n]:i.filter(e=>e!==n);return{...e,facets:{...e.facets,[t]:a}}}function Gn(e){return{...An,sort:e.sort}}var Kn={dimensionTagPrefixes:new Set};function qn(e){return{dimensionTagPrefixes:new Set(e.dimensions.filter(e=>e.source===`tag`).map(e=>e.key))}}function Jn(e,t){return t.dimensionTagPrefixes.size===0?[...e]:e.filter(e=>{let n=En(e);return n===null||!t.dimensionTagPrefixes.has(n.prefix)})}function Yn(e){return e.normalize(`NFD`).replace(/\p{M}/gu,``).toLowerCase()}function Xn(e){return Yn(e).split(/\s+/).filter(e=>e!==``)}function Zn(e){let t=new Set;for(let n of e.attempts)if(Xt(e,n))for(let e of n.errors)t.add(e.category??`Uncategorized`);return[...t]}var Qn=new WeakMap;function $n(e){let t=Qn.get(e);return t||(t={haystack:Yn([[...e.suitePath,e.title].join(` › `),e.file,e.project].join(`
9
+ `)),categories:Zn(e)},Qn.set(e,t)),t}function er(e){return $n(e).categories}function tr(e){let t=er(e),n=e.category!==null&&t.includes(e.category)?e.category:t[0]??null;return{primary:n,others:t.filter(e=>e!==n)}}function nr(e,t,n=Kn){switch(t){case`status`:return[e.outcome];case`project`:return[e.project];case`tag`:return Jn(e.tags,n);case`category`:return er(e);default:return e.dimensions[Pn(t)??``]??[]}}function rr(e,t){if(t.length===0)return!0;let{haystack:n}=$n(e);return t.every(e=>n.includes(e))}function ir(e,t,n,r){if(n.length===0)return!0;let i=nr(e,t,r);return n.some(e=>i.includes(e))}function ar(e,t,n=Kn){let r=Xn(t.q),i=kn(t.facets);return e.filter(e=>rr(e,r)&&i.every(([t,r])=>ir(e,t,r,n)))}function or(e,t,n,r=Kn){let i=new Map;for(let[e,t]of n)i.set(e,new Map([...t].map(e=>[e,0])));let a=Xn(t.q),o=kn(t.facets),s=(e,t)=>{let n=i.get(t);if(n)for(let i of new Set(nr(e,t,r))){let e=n.get(i);e!==void 0&&n.set(i,e+1)}};for(let t of e){if(!rr(t,a))continue;let e=null,i=0;for(let[n,a]of o)if(!ir(t,n,a,r)&&(i+=1,e=n,i>1))break;if(!(i>1)){if(e!==null)s(t,e);else for(let e of n.keys())s(t,e)}}return i}function sr(e){let t=qn(e),n=n=>new Set(e.tests.flatMap(e=>nr(e,n,t))),r=(e,t)=>new Set([...e.filter(e=>t.has(e)),...[...t].filter(t=>!e.includes(t)).sort((e,t)=>e.localeCompare(t))]),i=new Map,a=(e,t)=>{t.size>0&&i.set(e,t)};a(`status`,r([`failed`,`flaky`,...Yt.filter(e=>e!==`failed`&&e!==`flaky`)],n(`status`))),a(`category`,r(e.categories.map(e=>e.name),n(`category`)));let o=n(`project`);o.delete(``),a(`project`,r(e.projects.map(e=>e.name),o)),a(`tag`,r([],n(`tag`)));for(let t of e.dimensions){let e=Nn(t.name);a(e,r(t.values??[],n(e)))}return i}var cr={failed:0,flaky:1,passed:2,skipped:3},lr=new Intl.Collator(void 0,{numeric:!0,sensitivity:`base`});function ur(e){return[...e.suitePath,e.title].join(` › `)}function dr(e){return e===`duration`||e===`attempts`?`desc`:`asc`}function fr(e,t){return e.column===t?{column:t,direction:e.direction===`asc`?`desc`:`asc`}:{column:t,direction:dr(t)}}var pr={title:ur,project:e=>e.project,file:e=>`${e.file}:${e.line}`,category:e=>tr(e).primary};function mr(e,t){let n=[...new Set(e.map(t).filter(e=>e!==null))].sort(lr.compare),r=new Map(n.map((e,t)=>[e,t]));return new Map(e.map(e=>{let n=t(e);return[e,n===null?null:r.get(n)??null]}))}function hr(e,t=[]){let n={title:mr(e,pr.title),project:mr(e,pr.project),file:mr(e,pr.file),category:mr(e,pr.category)},r=(e,t)=>n[e].get(t)??0,i=[...e].sort((e,t)=>r(`title`,e)-r(`title`,t)||r(`project`,e)-r(`project`,t)||e.repeatEachIndex-t.repeatEachIndex),a=new Map(t.map((e,t)=>[e,t]));for(let t of e)a.has(t.project)||a.set(t.project,a.size);let o=[...e].sort((e,t)=>(a.get(e.project)??0)-(a.get(t.project)??0)||lr.compare(e.file,t.file)||e.line-t.line||e.column-t.column||r(`title`,e)-r(`title`,t)||e.repeatEachIndex-t.repeatEachIndex);return{text:n,order:new Map(i.map((e,t)=>[e,t])),declaration:new Map(o.map((e,t)=>[e,t]))}}function gr(e,t,n){switch(t){case`declaration`:return n.declaration.get(e)??0;case`status`:return cr[e.outcome];case`duration`:return e.durationMs;case`attempts`:return e.attempts.length;default:return n.text[t].get(e)??null}}function _r(e,t,n){return e===null||t===null?e===t?0:e===null?1:-1:n*(e-t)}function vr(e,t,n=hr(e)){let r=t.direction===`asc`?1:-1,i=t.column===`status`||t.column===`declaration`?n.declaration:n.order;return e.map(e=>({test:e,key:gr(e,t.column,n),order:i.get(e)??0})).sort((e,t)=>_r(e.key,t.key,r)||e.order-t.order).map(({test:e})=>e)}var yr=/^(0|[1-9]\d{0,5})$/;function br(e){let t=null,n=!1;for(let r of e.split(`&`)){let[e,i=``]=r.split(`=`);e===`attempt`&&yr.test(i)&&(t=Number(i)),e===`steps`&&i===`all`&&(n=!0)}return{attempt:t,allSteps:n}}function xr(e){let t=[];return e.attempt!==null&&t.push(`attempt=${e.attempt}`),e.allSteps&&t.push(`steps=all`),t.join(`&`)}function Sr(...e){return e.filter(e=>e!==``).join(`&`)}var Cr=L(new Map),wr=L(Kn);function Tr(e){Cr.value=sr(e),wr.value=qn(e),Wt((e,t)=>Sr(Hn(zn(e,Cr.value)),Er(e,t)))}function Er(e,t){return t.page===`test`?xr(br(e)):``}var Dr=nt(()=>zn(B.value.search,Cr.value));function Or(e,t=B.value.route){return z({route:t,search:Hn(e)})}function kr(e,t=`push`,n=B.value.route){let r=B.value,i=z({route:n,search:``})===z({route:r.route,search:``})?Er(r.search,n):``;Jt({route:n,search:Sr(Hn(e),i)},t)}function Ar(e,t=`replace`){let{route:n,search:r}=B.value;Jt({route:n,search:Sr(Hn(zn(r,Cr.value)),e)},t)}function jr(e){return e.replace(/\\/g,`/`)}function Mr(e){let t=null;for(let n of e){let e=jr(n).split(`/`).slice(0,-1);if(t===null){t=e;continue}let r=0;for(;r<t.length&&r<e.length&&t[r]===e[r];)r+=1;if(t.length=r,r===0)break}return t&&t.length>0?`${t.join(`/`)}/`:``}function Nr(e,t){let n=jr(e);return t!==``&&n.startsWith(t)?n.slice(t.length):n}var Pr=4;function Fr(e){let t=/(?:\.[^./]{1,6}){1,2}$/.exec(e.slice(1))?.[0]??``,n=e.slice(0,e.length-t.length),r=n.length>12?Pr:0;return[n.slice(0,n.length-r),`${n.slice(n.length-r)}${t}`]}var Ir=[{name:`blue`,reference:`#466cc8`,light:{text:`#385db7`,bg:`#eaf0fe`,border:`#5981df`},dark:{text:`#9ebdff`,bg:`#18233c`,border:`#577cd3`}},{name:`cyan`,reference:`#0a7da1`,light:{text:`#0a708f`,bg:`#e0f4fd`,border:`#2b8fb4`},dark:{text:`#60cdf5`,bg:`#002837`,border:`#268cb1`}},{name:`teal`,reference:`#04837c`,light:{text:`#09726c`,bg:`#dbf7f4`,border:`#29958e`},dark:{text:`#6ed2c9`,bg:`#002b28`,border:`#25928b`}},{name:`violet`,reference:`#8656b7`,light:{text:`#7747a7`,bg:`#f4ecfe`,border:`#9e6ed2`},dark:{text:`#cfaafc`,bg:`#2a1d37`,border:`#9468c3`}},{name:`magenta`,reference:`#ad4681`,light:{text:`#9d3772`,bg:`#feeaf3`,border:`#cc629d`},dark:{text:`#f79dcc`,bg:`#351928`,border:`#bb598f`}},{name:`orange`,reference:`#ab5803`,light:{text:`#954d09`,bg:`#feece1`,border:`#c6702b`},dark:{text:`#f9a970`,bg:`#361d0a`,border:`#bc671f`}},{name:`brown`,reference:`#745f43`,light:{text:`#3c2d18`,bg:`#f5e9d9`,border:`#60503a`},dark:{text:`#b7a182`,bg:`#302412`,border:`#ae9779`}},{name:`gold`,reference:`#b9a542`,light:{text:`#736308`,bg:`#f5f1da`,border:`#9a861a`},dark:{text:`#d2be5d`,bg:`#2b2403`,border:`#94800e`}}],Lr={name:`neutral`,reference:`#6b6b6b`,light:{text:`#636363`,bg:`#f0f0f0`,border:`#868686`},dark:{text:`#bebebe`,bg:`#242424`,border:`#808080`}};Ir.map(e=>e.name);function Rr(e){let t=e.toLowerCase();return[...Ir,Lr].find(e=>e.reference===t)??null}var zr={light:[`#f7f5f0`,`#ffffff`,`#eeeae2`],dark:[`#080808`,`#0d0d0d`,`#161616`]},Br=4.5,Vr=/^#[0-9a-fA-F]{6}$/;function Hr(e){return Vr.test(e)}function Ur(e){if(!Hr(e))throw TypeError(`not a #rrggbb color: ${e}`);let t=Number.parseInt(e.slice(1),16);return[t>>16&255,t>>8&255,t&255]}function Wr([e,t,n]){return`#${[e,t,n].map(e=>Math.round(Math.min(255,Math.max(0,e))).toString(16).padStart(2,`0`)).join(``)}`}function Gr(e){let t=e/255;return t<=.04045?t/12.92:((t+.055)/1.055)**2.4}function Kr(e){return(e<=.0031308?e*12.92:1.055*e**(1/2.4)-.055)*255}function qr(e){let[t,n,r]=Ur(e).map(Gr);return .2126*t+.7152*n+.0722*r}function Jr(e,t){let[n,r]=[qr(e),qr(t)].sort((e,t)=>t-e);return(n+.05)/(r+.05)}function Yr(e){let[t,n,r]=Ur(e).map(Gr),i=Math.cbrt(.4122214708*t+.5363325363*n+.0514459929*r),a=Math.cbrt(.2119034982*t+.6806995451*n+.1073969566*r),o=Math.cbrt(.0883024619*t+.2817188376*n+.6299787005*r),s=.2104542553*i+.793617785*a-.0040720468*o,c=1.9779984951*i-2.428592205*a+.4505937099*o,l=.0259040371*i+.7827717662*a-.808675766*o,u=Math.atan2(l,c)*180/Math.PI;return{l:s,c:Math.hypot(c,l),h:u<0?u+360:u}}function Xr({l:e,c:t,h:n}){let r=t*Math.cos(n*Math.PI/180),i=t*Math.sin(n*Math.PI/180),a=(e+.3963377774*r+.2158037573*i)**3,o=(e-.1055613458*r-.0638541728*i)**3,s=(e-.0894841775*r-1.291485548*i)**3;return[4.0767416621*a-3.3077115913*o+.2309699292*s,-1.2684380046*a+2.6097574011*o-.3413193965*s,-.0041960863*a-.7034186147*o+1.707614701*s]}function Zr(e){let t=e.c;for(;;){let n=Xr({...e,c:t});if(n.every(e=>e>=-1e-4&&e<=1.0001)||t<=0)return Wr(n.map(e=>Kr(Math.min(1,Math.max(0,e)))));t=Math.max(0,t-.005)}}function Qr(e,t,n,r){let i=t<n?.01:-.01;for(let a=t;i>0?a<=n:a>=n;a+=i){let t=Zr({...e,l:a});if(r(t))return t}return Zr({...e,l:n})}function $r(e,t){let n=Yr(e),r=n.c<.02?0:n.c,i=zr[t];if(t===`light`){let e=Zr({...n,l:.955,c:Math.min(r,.03)});return{text:Qr({...n,c:Math.min(r,.16)},.5,0,t=>Jr(t,e)>=Br),bg:e,border:Qr({...n,c:Math.min(r,.18)},.66,0,t=>[e,...i].every(e=>Jr(t,e)>=3))}}let a=Zr({...n,l:.26,c:Math.min(r,.05)});return{text:Qr({...n,c:Math.min(r,.12)},.8,1,e=>Jr(e,a)>=Br),bg:a,border:Qr({...n,c:Math.min(r,.14)},.6,1,e=>[a,...i].every(t=>Jr(e,t)>=3))}}var ei=new Map;function ti(e){let t=e&&Hr(e)?e.toLowerCase():Lr.reference,n=ei.get(t);if(!n){let e=Rr(t);n=e?{light:e.light,dark:e.dark}:{light:$r(t,`light`),dark:$r(t,`dark`)},ei.set(t,n)}return n}function ni(e){let{light:t,dark:n}=ti(e);return{"--cat-text-light":t.text,"--cat-bg-light":t.bg,"--cat-border-light":t.border,"--cat-text-dark":n.text,"--cat-bg-dark":n.bg,"--cat-border-dark":n.border}}function ri(e){return new Map(e.map(e=>[e.name,e.color]))}function H(e){if(e<1e3)return`${Math.round(e)} ms`;if(e<6e4)return`${(e/1e3).toFixed(1)} s`;let t=Math.round(e/1e3);if(t<3600)return`${Math.floor(t/60)} min ${String(t%60).padStart(2,`0`)} s`;let n=Math.round(t/60);return`${Math.floor(n/60)} h ${String(n%60).padStart(2,`0`)} min`}function U(e,t,n=`${t}s`){return`${e} ${e===1?t:n}`}var ii=`\0`,ai={project:`p`,folder:`d`,file:`f`,suite:`s`};function oi(){return{total:0,passed:0,failed:0,flaky:0,skipped:0}}function si(e,t){return`t${ii}${e}${ii}${t}`}function ci(e){return`p${ii}${e}`}function li(e,t,n,r){let i={kind:e,key:t,labels:[n],children:[],counts:oi(),line:1/0};return r!==void 0&&(i.path=r),i}function ui(e,t){return e.kind===`folder`==(t.kind===`folder`)?fi(e).localeCompare(fi(t)):e.kind===`folder`?-1:1}function di(e,t){return e.line===t.line?e.kind===`test`&&t.kind===`test`?e.column-t.column||e.repeatEachIndex-t.repeatEachIndex:e.kind===t.kind?fi(e).localeCompare(fi(t)):e.kind===`test`?1:-1:e.line-t.line}function fi(e){return e.kind===`test`?e.title:e.labels.join(` › `)}function pi(e){for(let t of e.children){if(t.kind===`test`)e.counts.total+=1,e.counts[t.outcome]+=1;else{pi(t);for(let n of[`total`,`passed`,`failed`,`flaky`,`skipped`])e.counts[n]+=t.counts[n]}e.line=Math.min(e.line,t.line)}e.kind===`project`||e.kind===`folder`?e.children.sort(ui):e.children.sort(di)}function mi(e){let t=e;for(;;){let e=t.children.length===1?t.children[0]:void 0;if(t.kind===`folder`&&e?.kind===`folder`)t={...e,key:t.key,labels:[`${t.labels.join(`/`)}/${e.labels.join(`/`)}`]};else{if(t.kind===`project`||t.kind===`folder`||e?.kind!==`suite`)break;t={...t,labels:[...t.labels,...e.labels],children:e.children}}}return{...t,children:t.children.map(e=>e.kind===`test`?e:mi(e))}}function hi(e,t={}){let n=t.prefix??Mr(e.tests.map(e=>e.file)),r=new Map;for(let t of e.projects)r.set(t.name,li(`project`,ci(t.name),t.name||`(unnamed project)`));let i=new Map;for(let t of e.tests){let e=r.get(t.project);e||(e=li(`project`,ci(t.project),t.project||`(unnamed project)`),r.set(t.project,e));let a=Nr(t.file,n).split(`/`),o=a.pop()??t.file,s=[...a.map((e,t)=>[`folder`,e,`${n}${a.slice(0,t+1).join(`/`)}`]),[`file`,o,jr(t.file)],...t.suitePath.map(e=>[`suite`,e])];for(let[t,n,r]of s){let a=`${e.key}${ii}${ai[t]}${ii}${n}`,o=i.get(a);o||(o=li(t,a,n,r),i.set(a,o),e.children.push(o)),e=o}e.children.push(gi(t))}let a=[...r.values()].filter(e=>e.children.length>0);for(let e of a)pi(e);return a.map(mi)}function gi(e){return{kind:`test`,key:si(e.id,e.repeatEachIndex),testId:e.id,repeatEachIndex:e.repeatEachIndex,title:e.title,outcome:e.outcome,line:e.line,column:e.column}}function _i(e,t){let n=[],r=(e,i,a)=>{e.forEach((o,s)=>{n.push({node:o,level:i,parentKey:a,position:s+1,siblings:e.length}),o.kind!==`test`&&t.has(o.key)&&r(o.children,i+1,o.key)})};return r(e,1,null),n}function vi(e,t){for(let n of e){if(n.key===t)return[];if(n.kind===`test`)continue;let e=vi(n.children,t);if(e)return[n.key,...e]}return null}function yi(e){return e.flatMap(e=>e.kind===`test`?[]:[e.key,...yi(e.children)])}var bi=/^[\w@%+=:,./-]+$/;function xi(e){return bi.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`}function Si(e,t){return e<t?-1:+(e>t)}function Ci(e){let t=new Map;for(let n of e){let e=t.get(n.project);e||(e=new Map,t.set(n.project,e)),e.set(`${n.file}:${n.line}`,n)}return new Map([...t].map(([e,t])=>[e,[...t.values()].sort((e,t)=>Si(e.file,t.file)||e.line-t.line).map(e=>`${e.file}:${e.line}`)]))}function wi(e,t){let n=t.filter(e=>e!==``).map(e=>`--project=${xi(e)}`);return[`npx playwright test`,...e.map(xi),...n].join(` `)}function Ti(e){let t=new Map;for(let[n,r]of Ci(e)){let e=n===``?`\0unnamed`:r.join(`\0`),i=t.get(e);i?i.projects.push(n):t.set(e,{locations:r,projects:[n]})}return[...t.values()].map(({locations:e,projects:t})=>wi(e,t)).join(` && `)}function Ei(e){return e.filter(e=>e.outcome===`failed`)}function Di(e,t){return Ei(e).filter(e=>e.file===t)}function Oi(e,t){let n=Di(e,t.file);if(!n.some(e=>e.line!==t.line))return null;let r=[...Ci(n)].map(([e,t])=>({project:e||`(unnamed project)`,count:t.length})),i=e=>e===1?`failed test`:`failed tests`,[a]=r;return r.length===1&&a?{tests:n,label:`${a.count} ${i(a.count)} in this file`}:a&&r.every(({count:e})=>e===a.count)?{tests:n,label:`${a.count} ${i(a.count)} in this file, in ${r.map(({project:e})=>e).join(`, `)}`}:{tests:n,label:`failed tests in this file: ${r.map(({project:e,count:t})=>`${t} in ${e}`).join(`, `)}`}}var ki=`For a POSIX shell (bash, zsh), run from the Playwright root directory: paths are relative to it. A file:line argument targets the line where the test is declared, and reruns every test declared on that line. The command is only valid while the file has not changed since the run.`,Ai=0;Array.isArray;function W(e,n,r,i,a,o){n||={};var s,c,l=n;if(`ref`in l)for(c in l={},n)c==`ref`?s=n[c]:l[c]=n[c];var u={type:e,props:l,key:r,ref:s,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--Ai,__i:-1,__u:0,__source:a,__self:o};if(typeof e==`function`&&(s=e.defaultProps))for(c in s)l[c]===void 0&&(l[c]=s[c]);return t.vnode&&t.vnode(u),u}function G({name:e,color:t}){return W(`span`,{class:`category-badge`,style:ni(t),title:`Error category: ${e}`,children:e})}function K({children:e,class:t}){return W(`svg`,{class:`icon ${t??``}`,viewBox:`0 0 16 16`,width:`16`,height:`16`,"aria-hidden":`true`,focusable:`false`,children:e})}var ji={passed:`Passed`,failed:`Failed`,flaky:`Flaky`,skipped:`Skipped`};function q(e){return ji[e]}function J({outcome:e,labelled:t=!1,decorative:n=!1}){let r={passed:W(`path`,{d:`M4.5 8.2l2.3 2.3 4.7-4.9`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,"stroke-linecap":`round`,"stroke-linejoin":`round`}),failed:W(`path`,{d:`M5.5 5.5l5 5m0-5l-5 5`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,"stroke-linecap":`round`}),flaky:W(`path`,{d:`M10.9 5.6A3.6 3.6 0 0 0 4.6 7M5.1 10.4A3.6 3.6 0 0 0 11.4 9M10.9 3.6v2h-2M5.1 12.4v-2h2`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.5`,"stroke-linecap":`round`,"stroke-linejoin":`round`}),skipped:W(`path`,{d:`M5 8h6`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,"stroke-linecap":`round`})}[e];return W(`span`,{class:`outcome-icon outcome-${e}`,title:t||n?void 0:ji[e],"aria-hidden":n?`true`:void 0,children:[W(K,{children:[W(`circle`,{cx:`8`,cy:`8`,r:`7`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.4`}),r]}),!n&&W(`span`,{class:t?`outcome-text`:`visually-hidden`,children:ji[e]})]})}function Y(e){return W(K,{...e,children:W(`path`,{d:`M6 4l4 4-4 4`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.6`,"stroke-linecap":`round`,"stroke-linejoin":`round`})})}function Mi(e){return W(K,{...e,children:[W(`rect`,{x:`1.5`,y:`2.5`,width:`13`,height:`11`,rx:`1.5`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.3`}),W(`path`,{d:`M6 2.5v11`,stroke:`currentColor`,"stroke-width":`1.3`})]})}function Ni(e){return W(K,{...e,children:[W(`rect`,{x:`1.5`,y:`2.5`,width:`13`,height:`9`,rx:`1.5`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.3`}),W(`path`,{d:`M5.5 14h5M8 11.5V14`,stroke:`currentColor`,"stroke-width":`1.3`,"stroke-linecap":`round`})]})}function Pi(e){return W(K,{...e,children:[W(`circle`,{cx:`8`,cy:`8`,r:`3`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.3`}),W(`path`,{d:`M8 1v1.6M8 13.4V15M1 8h1.6M13.4 8H15M3 3l1.1 1.1M11.9 11.9L13 13M3 13l1.1-1.1M11.9 4.1L13 3`,stroke:`currentColor`,"stroke-width":`1.3`,"stroke-linecap":`round`})]})}function Fi(e){return W(K,{...e,children:W(`path`,{d:`M13.5 9.6A5.8 5.8 0 0 1 6.4 2.5a5.8 5.8 0 1 0 7.1 7.1z`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.3`,"stroke-linejoin":`round`})})}function Ii(e){return W(K,{...e,children:W(`path`,{d:`M2 2.5h5v5H2zM9 2.5h5v3H9zM9 7.5h5v6H9zM2 9.5h5v4H2z`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.3`,"stroke-linejoin":`round`})})}function Li(e){return W(K,{...e,children:[W(`path`,{d:`M8 1.8l6.5 11.4H1.5z`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.3`,"stroke-linejoin":`round`}),W(`path`,{d:`M8 6.2v3.3`,stroke:`currentColor`,"stroke-width":`1.5`,"stroke-linecap":`round`}),W(`circle`,{cx:`8`,cy:`11.4`,r:`.9`,fill:`currentColor`})]})}function Ri(e){return W(K,{...e,children:[W(`circle`,{cx:`8`,cy:`8`,r:`6.3`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.3`}),W(`path`,{d:`M8 4.6v4`,stroke:`currentColor`,"stroke-width":`1.5`,"stroke-linecap":`round`}),W(`circle`,{cx:`8`,cy:`11.1`,r:`.9`,fill:`currentColor`})]})}function zi(e){return W(K,{...e,children:W(`path`,{d:`M1.5 8.5h3l1.5-4 2.5 7 1.8-4.5 1 1.5h3.2`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.3`,"stroke-linecap":`round`,"stroke-linejoin":`round`})})}function Bi(e){return W(K,{...e,children:[W(`path`,{d:`M6 4h8M6 8h8M6 12h8`,stroke:`currentColor`,"stroke-width":`1.3`,"stroke-linecap":`round`}),W(`circle`,{cx:`2.8`,cy:`4`,r:`1`,fill:`currentColor`}),W(`circle`,{cx:`2.8`,cy:`8`,r:`1`,fill:`currentColor`}),W(`circle`,{cx:`2.8`,cy:`12`,r:`1`,fill:`currentColor`})]})}function Vi(e){return W(K,{...e,children:[W(`circle`,{cx:`7`,cy:`7`,r:`4.5`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.4`}),W(`path`,{d:`M10.4 10.4L14 14`,stroke:`currentColor`,"stroke-width":`1.4`,"stroke-linecap":`round`})]})}function Hi(e){return W(K,{...e,children:W(`path`,{d:`M4.5 4.5l7 7m0-7l-7 7`,stroke:`currentColor`,"stroke-width":`1.5`,"stroke-linecap":`round`})})}function Ui({direction:e,...t}){return W(K,{...t,children:[e!==`desc`&&W(`path`,{d:`M5 6.5L8 3.5l3 3`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.4`,"stroke-linecap":`round`,"stroke-linejoin":`round`}),e!==`asc`&&W(`path`,{d:`M5 9.5l3 3 3-3`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.4`,"stroke-linecap":`round`,"stroke-linejoin":`round`})]})}function Wi(e){return W(K,{...e,children:[W(`rect`,{x:`5.5`,y:`5.5`,width:`8`,height:`9`,rx:`1.5`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.3`}),W(`path`,{d:`M10.5 3.5v-.5A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v7A1.5 1.5 0 0 0 4 11.5h.5`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.3`})]})}function Gi(e){return W(K,{...e,children:W(`path`,{d:`M3.5 8.5l3 3 6-6.5`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.6`,"stroke-linecap":`round`,"stroke-linejoin":`round`})})}function Ki(e){return W(K,{...e,children:[W(`rect`,{x:`1`,y:`3.5`,width:`14`,height:`9`,rx:`1.5`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.3`}),W(`path`,{d:`M4 6.5h1M7.5 6.5h1M11 6.5h1M4 9.5h8`,stroke:`currentColor`,"stroke-width":`1.3`,"stroke-linecap":`round`})]})}var qi=2e3;function Ji({label:e,text:t,help:n,children:r}){let[i,a]=k(!1),o=M(void 0),s=Me();return A(()=>()=>clearTimeout(o.current),[]),W(S,{children:[W(`button`,{type:`button`,class:`button copy-button`,title:n,"aria-describedby":n?s:void 0,onClick:async()=>{await wt(e,t())&&(a(!0),clearTimeout(o.current),o.current=setTimeout(()=>a(!1),qi))},children:[W(i?Gi:Wi,{}),W(`span`,{children:r}),i&&W(`span`,{class:`copy-done`,children:` · Copied`})]}),n&&W(`span`,{id:s,hidden:!0,children:n})]})}function Yi({group:e}){return W(`span`,{class:`group-split`,children:[`failed`,`flaky`].filter(t=>e[t]>0).map(t=>W(`span`,{class:`group-split-part split-${t}`,children:[W(J,{outcome:t,decorative:!0}),e[t],` `,t]},t))})}var Xi=`https://github.com/qartisan/playwright-loupe/blob/main/docs/config.md#dimensions`;function Zi(e){return V({page:`test`,id:e.id,repeatEachIndex:e.repeatEachIndex})}function Qi(e,t){let n=Dr.value;return Or({...n,facets:{...n.facets,category:t===void 0?[]:[t]}},{page:`group`,signature:e})}function $i(e,t){return Or({...An,facets:{[e]:[t]}},{page:`tests`})}function ea(e){return e||`(unnamed project)`}function ta({rate:e}){return W(`span`,{class:`pass-rate`,title:dn,children:[W(`strong`,{children:fn(e)}),` pass rate`,W(`span`,{class:`visually-hidden`,children:` (skipped tests excluded)`})]})}function X({id:e,title:t,note:n,class:r,children:i}){return W(`section`,{class:`widget ${r??``}`,"aria-labelledby":e,children:[W(`h2`,{id:e,children:t}),n&&W(`p`,{class:`widget-note`,children:n}),i]})}function na({report:e,children:t}){let n=cn(e),{stats:r}=e.run,i=ln(r),a=un(r),o=i.map(({outcome:e,count:t})=>`${t} ${q(e).toLowerCase()}`).join(`, `);return W(`section`,{class:`widget widget-verdict`,"aria-labelledby":`w-verdict`,children:[W(`h2`,{id:`w-verdict`,class:`visually-hidden`,children:`Verdict`}),W(`div`,{class:`verdict`,children:[W(`p`,{class:`verdict-outcome outcome-${n}`,"data-verdict":n,children:[W(J,{outcome:n,decorative:!0}),W(`span`,{children:q(n)})]}),W(`p`,{class:`verdict-meta`,children:[a!==null&&W(S,{children:[W(ta,{rate:a}),` ·`,` `]}),U(r.total,`test`),` in `,W(`strong`,{children:H(e.run.durationMs)})]})]}),t,i.length>0&&W(S,{children:[W(`div`,{class:`outcome-bar`,role:`img`,"aria-label":o,children:i.map(({outcome:e,count:t,share:n})=>W(`span`,{class:`outcome-bar-part bar-${e}`,style:{flexGrow:n},title:`${t} ${q(e).toLowerCase()}`},e))}),W(`ul`,{class:`outcome-legend`,"aria-hidden":`true`,children:i.map(({outcome:e,count:t})=>W(`li`,{children:[W(J,{outcome:e,decorative:!0}),t,` `,q(e).toLowerCase()]},e))})]})]})}function ra({tests:e,action:t=`Copy rerun command`}){let n=Ei(e);return n.length===0?null:W(`div`,{class:`rerun-failed`,children:[W(Ji,{label:`Rerun command`,help:ki,text:()=>Ti(n),children:[t,` · `,U(n.length,`failed test`)]}),n.length>100&&W(`p`,{class:`rerun-note`,children:[`The command lists `,U(n.length,`test`),`: it is long, and some terminals may cut it.`]})]})}function ia({errors:e}){return W(X,{id:`w-run-errors`,class:`widget-run-errors`,title:W(S,{children:[W(Li,{}),U(e.length,`error`),` outside tests`]}),note:`A file that failed to load, a global setup or teardown, a worker teardown: Playwright may have run fewer tests.`,children:[W(`ul`,{class:`widget-list`,children:e.slice(0,3).map((e,t)=>W(`li`,{children:W(`code`,{children:rn(e.message)})},t))}),W(`p`,{class:`widget-more`,children:W(`a`,{href:V({page:`errors`}),children:`See the errors`})})]})}function aa({error:e,color:t}){let n=e.location?`${e.location.file}:${e.location.line}:${e.location.column}`:null;return W(`li`,{class:`run-error`,children:[W(`div`,{class:`run-error-meta`,children:[e.category&&W(G,{name:e.category,color:t}),e.project!==null&&W(`span`,{children:[`Project `,e.project||`(unnamed)`]}),n&&W(`code`,{children:n})]}),W(`pre`,{class:`message error-message`,children:e.message}),e.snippet&&W(`pre`,{class:`code-snippet`,children:e.snippet}),e.stack&&e.stack!==e.message&&W(`details`,{children:[W(`summary`,{children:`Stack trace`}),W(`pre`,{class:`stack`,children:e.stack})]})]})}function oa({group:e,colors:t,inCategory:n}){let{headline:r,firstTest:i,others:a}=an(e),o=on(e);return W(`a`,{class:`group-row`,href:Qi(e.signature,n),children:[W(`span`,{class:`group-row-head`,children:[n===void 0&&W(G,{name:e.category,color:t.get(e.category)}),W(`span`,{class:`group-row-counts`,children:[W(Yi,{group:e}),o&&W(`span`,{class:`group-attempts`,children:o})]})]}),i&&W(`span`,{class:`group-test`,children:[i.title,a>0&&W(`span`,{class:`muted`,children:[` +`,U(a,`other`)]})]}),W(`code`,{class:`group-message`,children:r})]})}function sa({groups:e,colors:t,inCategory:n}){return W(`ol`,{class:`widget-list group-list`,children:e.map(e=>W(`li`,{children:W(oa,{group:e,colors:t,inCategory:n})},e.signature))})}function ca({categories:e,colors:t}){let n=Math.max(...e.map(e=>e.tests),1);return W(`ul`,{class:`widget-list category-bars`,children:e.map(e=>W(`li`,{children:W(`a`,{class:`category-bar-row`,href:$i(`category`,e.name),children:[W(G,{name:e.name,color:t.get(e.name)}),W(`span`,{class:`category-bar-track`,"aria-hidden":`true`,children:W(`span`,{class:`category-bar`,style:{...ni(t.get(e.name)),width:`${e.tests/n*100}%`}})}),W(`span`,{class:`group-count`,children:U(e.tests,`test`)})]})},e.name))})}function la({categories:e,colors:t,open:n}){return W(`ul`,{class:`widget-list category-list`,children:e.map(e=>W(`li`,{"data-category":e.name,children:W(`details`,{open:e.name===n,children:[W(`summary`,{children:[W(Y,{class:`chevron`}),W(G,{name:e.name,color:t.get(e.name)}),W(`span`,{class:`muted`,children:U(e.groups.length,`error group`)}),W(`span`,{class:`group-count`,children:U(e.tests,`test`)})]}),W(sa,{groups:e.groups,colors:t,inCategory:e.name})]})},e.name))})}function ua({projects:e}){return W(`ul`,{class:`project-cards`,children:e.map(({project:e,passRate:t,durationMs:n})=>W(`li`,{children:W(`button`,{type:`button`,class:`project-card`,"aria-controls":`sidebar`,title:`Show this project in the sidebar`,onClick:()=>Mt(ci(e.name)),children:[W(`span`,{class:`project-name`,children:ea(e.name)}),W(`span`,{class:`counts`,children:[`passed`,`failed`,`flaky`,`skipped`].filter(t=>e.stats[t]>0).map(t=>W(`span`,{class:`count`,children:[W(J,{outcome:t,decorative:!0}),e.stats[t],` `,W(`span`,{class:`visually-hidden`,children:q(t).toLowerCase()})]},t))}),W(`span`,{class:`project-meta`,children:[U(e.stats.total,`test`),t!==null&&W(S,{children:[` · `,W(ta,{rate:t})]}),` `,`· `,H(n),` test time`]})]})},e.name))})}function da({value:e}){return W(`td`,{class:e===0?`zero`:void 0,children:e})}var fa=[`passed`,`failed`,`flaky`,`skipped`];function pa(e){let t=fa.filter(t=>e[t]>0).map(t=>`${e[t]} ${t}`);return t.length>0?t.join(`, `):`no tests`}function ma(e){return[...e.unknown?[`unknown value`]:[],...e.caseVariants.length>0?[`likely duplicate of ${e.caseVariants.join(`, `)}`]:[]]}function ha({row:e}){return W(S,{children:[e.unknown&&W(`span`,{class:`hygiene-flag flag-unknown`,title:`Not among the values declared in the config`,children:[W(Li,{}),`unknown value`]}),e.caseVariants.length>0&&W(`span`,{class:`hygiene-flag flag-case`,title:`Differs from another value only by case. Tags are case-sensitive, so they are counted apart.`,children:[W(Li,{}),`likely duplicate of `,e.caseVariants.join(`, `)]})]})}function ga({name:e,values:t}){return W(`ul`,{class:`dimension-bars`,children:t.map(t=>W(`li`,{class:`dimension-bar-row`,"data-value":t.value,children:[W(`span`,{class:`dimension-value-cell`,children:[W(_a,{name:e,row:t}),W(ha,{row:t})]}),W(`span`,{class:`outcome-bar dimension-bar`,role:`img`,"aria-label":`${t.value}: ${pa(t)}`,title:pa(t),children:fa.filter(e=>t[e]>0).map(e=>W(`span`,{class:`outcome-bar-part bar-${e}`,style:{flexGrow:t[e]}},e))}),W(`span`,{class:`dimension-bar-counts`,"aria-hidden":`true`,children:[`failed`,`flaky`].filter(e=>t[e]>0).map(e=>W(`span`,{class:`count`,children:[W(J,{outcome:e,decorative:!0}),t[e]]},e))}),W(`span`,{class:`dimension-total`,"aria-hidden":`true`,children:t.total})]},t.value))})}function _a({name:e,row:t}){return t.total===0?W(`span`,{class:`dimension-value`,children:t.value}):W(`a`,{class:`dimension-value`,href:$i(Nn(e),t.value),title:`Show the ${U(t.total,`test`)} with ${e} ${t.value}`,children:t.value})}var va={failed:`with failures`,flaky:`flaky`,passed:`all passed`,skipped:`skipped only`,none:`no tests`},Z=L(null);function ya(e,t){let n=Z.value;n?.key===e&&n.source===t&&(Z.value=null)}function ba(e){e.key===`Escape`&&Z.value&&(Z.value=null)}function xa({name:e,values:t}){return A(()=>(document.addEventListener(`keydown`,ba),()=>{document.removeEventListener(`keydown`,ba),Z.value?.key.startsWith(`${e}\u0000`)&&(Z.value=null)}),[e]),W(S,{children:[W(`p`,{class:`tile-summary`,children:yn(t)}),W(`ul`,{class:`dimension-tiles`,"aria-label":`${e} values`,children:vn(t).map(t=>{let n=gn(t),r=ma(t),i=[pa(t),...r].join(`; `),a=`${e}\u0000${t.value}`,o=Z.value?.key===a,s={class:`dimension-tile tile-${n}${o?` tooltip-open`:``}`,"data-value":t.value,"data-status":n,onPointerEnter:()=>Z.value={key:a,source:`hover`},onPointerLeave:()=>ya(a,`hover`),onFocus:()=>Z.value={key:a,source:`focus`},onBlur:()=>ya(a,`focus`)},c=W(S,{children:[n===`none`?W(`span`,{class:`tile-icon-none`,"aria-hidden":`true`}):W(J,{outcome:n,decorative:!0}),W(`span`,{class:`tile-value`,children:t.value}),r.length>0&&W(Li,{class:`tile-flag`}),W(`span`,{class:`visually-hidden`,children:[`: `,va[n],`, `,i]}),W(`span`,{class:`tile-details`,"aria-hidden":`true`,hidden:!o,children:[W(`strong`,{children:t.value}),W(`span`,{children:va[n]}),W(`span`,{children:pa(t)}),r.map(e=>W(`span`,{class:`tile-note`,children:e},e))]})]});return W(`li`,{children:t.total>0?W(`a`,{...s,href:$i(Nn(e),t.value),children:c}):W(`span`,{...s,tabIndex:0,children:c})},t.value)})})]})}function Sa({distribution:e}){let{definition:t,values:n,without:r}=e,i=`w-dimension-${t.name}`,a=hn(e);return W(`section`,{class:`widget widget-dimension`,"aria-labelledby":i,"data-dimension":t.name,"data-representation":a,children:[W(`h2`,{id:i,children:t.name}),W(`p`,{class:`widget-note`,children:[`From `,t.source===`tag`?`tags @${t.key}:…`:`annotations of type "${t.key}"`,r>0&&` · ${U(r,`test`)} without a value`]}),W(a===`bars`?ga:xa,{name:t.name,values:n}),W(`details`,{class:`dimension-table`,children:[W(`summary`,{children:[W(Y,{class:`chevron`}),`Table`]}),W(`table`,{class:`data-table`,children:[W(`thead`,{children:W(`tr`,{children:[W(`th`,{scope:`col`,children:`Value`}),fa.map(e=>W(`th`,{scope:`col`,children:W(J,{outcome:e,labelled:!0})},e)),W(`th`,{scope:`col`,children:`Total`})]})}),W(`tbody`,{children:n.map(e=>W(`tr`,{children:[W(`th`,{scope:`row`,children:[W(_a,{name:t.name,row:e}),W(ha,{row:e})]}),fa.map(t=>W(da,{value:e[t]},t)),W(da,{value:e.total})]},e.value))})]})]}),t.values===null&&W(`p`,{class:`widget-hint`,children:[`No expected values are configured, so typos cannot be flagged as unknown. Declare them with `,W(`code`,{children:`values`}),` in`,` `,W(`a`,{href:Xi,target:`_blank`,rel:`noopener noreferrer`,children:`the dimension definition`}),`.`]})]})}function Ca({test:e,children:t,aside:n}){return W(`div`,{class:`test-line`,children:[W(J,{outcome:e.outcome}),W(`span`,{class:`test-text`,children:[W(`a`,{href:Zi(e),children:e.title}),W(`span`,{class:`test-where`,children:[ea(e.project),` · `,e.file,e.repeatEachIndex>0&&` · repeat ${e.repeatEachIndex}`]}),t]}),n]})}function wa(e){return`${e.id}/${e.repeatEachIndex}`}function Ta({tests:e}){return W(X,{id:`w-slowest`,class:`widget-slowest`,title:`Slowest tests`,note:`Total duration, retries included.`,children:W(`ol`,{class:`widget-list`,children:e.map(e=>W(`li`,{children:W(Ca,{test:e,aside:W(`span`,{class:`duration`,children:H(e.durationMs)}),children:e.attempts.length>1&&W(`span`,{class:`test-where`,children:U(e.attempts.length,`attempt`)})})},wa(e)))})})}function Ea({tests:e}){return W(X,{id:`w-skipped`,class:`widget-skipped`,title:`Skipped tests`,children:W(`ul`,{class:`widget-list`,children:e.map(({test:e,kind:t,reason:n})=>W(`li`,{children:W(Ca,{test:e,children:W(`span`,{class:`test-where`,children:[t===`fixme`&&W(`span`,{class:`skip-kind`,children:`fixme`}),` `,n??W(`span`,{class:`muted`,children:`No reason given`})]})})},wa(e)))})})}function Da({tests:e,colors:t}){return W(X,{id:`w-flaky`,class:`widget-flaky`,title:`Flaky tests`,note:`Failed, then passed on a retry: the error of the failing attempt.`,children:W(`ul`,{class:`widget-list`,children:e.map(({test:e,error:n})=>W(`li`,{children:W(Ca,{test:e,children:n&&W(`span`,{class:`flaky-error`,children:[n.category&&W(G,{name:n.category,color:t.get(n.category)}),W(`code`,{children:rn(n.message)})]})})},wa(e)))})})}function Oa({report:e,groups:t,category:n}){let r=M(null);A(()=>{if(n===void 0)return;let e=[...r.current?.querySelectorAll(`[data-category]`)??[]].find(e=>e.dataset.category===n);e?.scrollIntoView({block:`start`}),e?.querySelector(`summary`)?.focus({preventScroll:!0})},[n]);let i=N(()=>Qt(t),[t]),a=N(()=>sn(e,i),[e,i]),o=N(()=>ri(e.categories),[e]),{errors:s}=e.run;return W(`div`,{class:`page view view-errors`,ref:r,children:[W(`h1`,{children:`Errors`}),s.length===0&&t.length===0&&W(`p`,{class:`muted`,children:`No errors in this run.`}),s.length>0&&W(X,{id:`w-run-errors`,class:`widget-run-error-list`,title:U(s.length,`run error`),note:`Reported outside any test: a file that failed to load, a global setup or teardown, a worker teardown. Playwright may have run fewer tests because of them.`,children:W(`ol`,{class:`run-errors`,children:s.map((e,t)=>W(aa,{error:e,color:e.category?o.get(e.category):void 0},t))})}),i.length>0&&W(X,{id:`w-groups`,class:`widget-groups`,title:U(i.length,`error group`),note:`Errors grouped by normalized signature: most failed tests first, then most flaky tests.`,children:W(sa,{groups:i,colors:o})}),a.length>0&&W(X,{id:`w-categories`,class:`widget-categories`,title:`Error categories`,note:`Failing tests per category; flaky tests count, and a test can be in several categories.`,children:W(la,{categories:a,colors:o,open:n},n)})]})}function ka({label:e,position:t,total:n,outside:r,previous:i,next:a,previousLabel:o,nextLabel:s,keys:c}){return W(`nav`,{class:`pager`,"aria-label":e,children:[W(`button`,{type:`button`,class:`button pager-button`,disabled:!i,"aria-keyshortcuts":c[0],onClick:i??void 0,children:[W(Y,{class:`chevron-back`}),o]}),W(`span`,{class:`pager-position`,children:t===null?r:`${t} of ${n}`}),W(`button`,{type:`button`,class:`button pager-button`,disabled:!a,"aria-keyshortcuts":c[1],onClick:a??void 0,children:[s,W(Y,{})]})]})}function Aa(e,t){let n=e.indexOf(t);return n===-1?{position:null,total:e.length,previous:null,next:null}:{position:n+1,total:e.length,previous:e[n-1]??null,next:e[n+1]??null}}function ja(e,t=[]){let n=Qt(e);return t.length===0?n:n.filter(e=>t.includes(e.category))}function Ma(e,t,n){let r=n.length>0&&n.includes(t.category);return{...Aa(ja(e,r?n:[]),t),restricted:r}}var Na=[{keys:[`j`,`k`],action:`Next / previous test`,where:`Test detail`},{keys:[`[`,`]`],action:`Previous / next attempt`,where:`Test detail`},{keys:[`n`,`p`],action:`Next / previous error group`,where:`Error group page`},{keys:[`←`,`→`],action:`Previous / next screenshot`,where:`Screenshot viewer`},{keys:[`/`],action:`Focus the search`,where:`Everywhere`},{keys:[`Escape`],action:`Clear the search, close a dialog`,where:`Everywhere`},{keys:[`?`],action:`Show keyboard shortcuts`,where:`Everywhere`}];function Pa(e){return e instanceof HTMLElement?e.isContentEditable||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement?!0:e instanceof HTMLInputElement&&![`checkbox`,`radio`,`button`,`submit`,`reset`,`range`,`color`,`file`].includes(e.type):!1}function Fa(e){return e.defaultPrevented||e.ctrlKey||e.altKey||e.metaKey||e.isComposing||Pa(e.target)?!1:document.querySelector(`dialog[open]`)===null}function Ia(e){let t=M(e);t.current=e,j(()=>{let e=e=>{if(!Fa(e))return;let n=t.current[e.key];n&&(e.preventDefault(),n())};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[])}function La({message:e=`This page does not exist in this report.`}){return W(`div`,{class:`page`,children:[W(`h1`,{children:`Not found`}),W(`p`,{children:e}),W(`p`,{children:W(`a`,{href:V({page:`dashboard`}),children:`Back to the dashboard`})})]})}function Ra(e){return e===0?`first run`:`retry ${e}`}function za({report:e,groups:t,group:n}){let r=Dr.value.facets.category??[],i=n?Ma(t,n,r):null,a=e=>e?()=>qt({page:`group`,signature:e.signature}):null;if(Ia({n:a(i?.next),p:a(i?.previous)}),!n||!i)return W(La,{message:`No error group with this signature in this report.`});let o=ri(e.categories).get(n.category);return W(`div`,{class:`page group-page`,children:[W(ka,{label:i.restricted?`Error groups in ${r.join(`, `)}`:`Error groups`,position:i.position,total:i.total,outside:``,previous:a(i.previous),next:a(i.next),previousLabel:`Previous group`,nextLabel:`Next group`,keys:[`p`,`n`]}),W(`p`,{class:`breadcrumb`,children:i.restricted?`Error group · ${r.join(`, `)}`:`Error group`}),W(`h1`,{children:[U(n.tests.length,`test`),` failing with this error`]}),W(`dl`,{class:`group-meta`,children:[W(`div`,{children:[W(`dt`,{children:`Category`}),W(`dd`,{children:W(G,{name:n.category,color:o})})]}),W(`div`,{children:[W(`dt`,{children:`Tests`}),W(`dd`,{children:W(Yi,{group:n})})]}),W(`div`,{children:[W(`dt`,{children:`Signature`}),W(`dd`,{children:W(`code`,{children:n.signature})})]})]}),W(`h2`,{children:`Sample message`}),W(`pre`,{class:`message group-sample`,children:n.message}),W(`h2`,{children:`Affected tests`}),W(`table`,{class:`affected-tests`,children:[W(`thead`,{children:W(`tr`,{children:[W(`th`,{scope:`col`,children:`Test`}),W(`th`,{scope:`col`,children:`Project`}),W(`th`,{scope:`col`,children:`File`}),W(`th`,{scope:`col`,children:`Error in`})]})}),W(`tbody`,{children:n.tests.map(({test:e,attempts:t})=>W(`tr`,{children:[W(`td`,{children:W(`span`,{class:`test-cell`,children:[W(J,{outcome:e.outcome}),W(`a`,{href:V({page:`test`,id:e.id,repeatEachIndex:e.repeatEachIndex}),children:[...e.suitePath,e.title].join(` › `)}),e.repeatEachIndex>0&&W(`span`,{class:`row-note`,children:[`repeat `,e.repeatEachIndex]})]})}),W(`td`,{children:e.project||`(unnamed project)`}),W(`td`,{children:W(`code`,{children:[e.file,`:`,e.line]})}),W(`td`,{children:[t.map(Ra).join(`, `),W(`span`,{class:`muted`,children:[` of `,U(e.attempts.length,`attempt`)]})]})]},`${e.id}/${e.repeatEachIndex}`))})]})]})}function Ba({report:e}){let t=N(()=>({dimensions:mn(e).filter(e=>e.values.length>0),slowest:Sn(e),skipped:wn(e),flaky:xn(e)}),[e]),n=N(()=>ri(e.categories),[e]),r=t.dimensions.length+t.slowest.length+t.skipped.length+t.flaky.length===0;return W(`div`,{class:`page view view-health`,children:[W(`h1`,{children:`Suite health`}),r&&W(`p`,{class:`muted`,children:`No dimension, slow, skipped or flaky test to show for this run.`}),t.dimensions.length>0&&W(`div`,{class:`widget-grid dimension-grid`,children:t.dimensions.map(e=>W(Sa,{distribution:e},e.definition.name))}),(t.slowest.length>0||t.skipped.length>0||t.flaky.length>0)&&W(`div`,{class:`widget-grid`,children:[t.slowest.length>0&&W(Ta,{tests:t.slowest}),t.flaky.length>0&&W(Da,{tests:t.flaky,colors:n}),t.skipped.length>0&&W(Ea,{tests:t.skipped})]})]})}var Va={env:`LOUPE_RUN_SCOPE=partial`,"file-filter":`file filter`,grep:`grep filter`,"project-filter":`project filter`,"last-failed":`--last-failed`,"only-changed":`--only-changed`,"test-list":`test list`,only:`test.only`,shard:`single shard`,list:`--list (no test ran)`};function Ha(e){return Va[e]??e}var Ua={"github-actions":`GitHub Actions`,gitlab:`GitLab CI`,"azure-pipelines":`Azure Pipelines`,circleci:`CircleCI`,jenkins:`Jenkins`,bitbucket:`Bitbucket Pipelines`,buildkite:`Buildkite`,travis:`Travis CI`};function Wa(e){return typeof e==`string`&&e.trim()!==``?e.trim():null}function Ga(e,t){return e===`partial`?t.length>0?`Partial run: ${t.map(Ha).join(`, `)}`:`Partial run`:`Full run`}function Ka(e,t){if(!e)return`No`;let n=Wa(t);return n===null?`Yes`:Ua[n]??n}function qa(e){return e?`${e.current} of ${e.total}`:null}function Ja(e){let{run:t,generator:n}=e,r=Wa(t.git.commit);return[{title:`Run`,rows:[{label:`Scope`,value:Ga(t.scope,t.scopeReasons)},{label:`CI`,value:Ka(t.environment.ci,t.environment.ciProvider)},Number.isFinite(t.workers)?{label:`Workers`,value:String(t.workers)}:null,Ya(`Shard`,qa(t.shard))]},{title:`Code`,rows:[r===null?null:{label:`Commit`,value:r.slice(0,7),full:r},Ya(`Branch`,t.git.branch),Ya(`Repository`,t.git.remote)]},{title:`Environment`,rows:[Ya(`Playwright`,t.playwrightVersion),Ya(`Loupe`,n.version),Ya(`Node`,t.environment.nodeVersion),Ya(`OS`,t.environment.os)]}].map(({title:e,rows:t})=>({title:e,rows:t.filter(e=>e!==null)})).filter(e=>e.rows.length>0)}function Ya(e,t){let n=Wa(t);return n===null?null:{label:e,value:n}}function Xa({report:e}){return W(X,{id:`w-run-details`,class:`widget-run-details`,title:`Run details`,children:W(`div`,{class:`run-details`,children:Ja(e).map(({title:e,rows:t})=>W(`div`,{class:`run-details-group`,children:[W(`h3`,{id:`run-details-${e.toLowerCase()}`,children:e}),W(`dl`,{"aria-labelledby":`run-details-${e.toLowerCase()}`,children:t.map(({label:e,value:t,full:n})=>W(`div`,{children:[W(`dt`,{children:e}),W(`dd`,{children:n===void 0?t:W(S,{children:[W(`code`,{title:n,children:t}),W(Ji,{label:`Commit hash`,help:n,text:()=>n,children:[`Copy`,W(`span`,{class:`visually-hidden`,children:` commit hash`})]})]})})]},e))})]},e))})})}function Za({report:e,groups:t,matched:n}){let r=N(()=>({categories:sn(e,t),projects:pn(e)}),[e,t]),i=N(()=>ri(e.categories),[e]);return W(`div`,{class:`page view view-overview`,children:[W(`h1`,{children:`Overview`}),W(na,{report:e,children:W(ra,{tests:n,action:`Rerun failed tests`})}),e.run.errors.length>0&&W(ia,{errors:e.run.errors}),r.categories.length>0&&W(X,{id:`w-categories`,class:`widget-categories`,title:`Error categories`,note:W(S,{children:[`Failing tests per category. `,W(`a`,{href:V({page:`errors`}),children:[`All `,U(t.length,`error group`)]})]}),children:W(ca,{categories:r.categories,colors:i})}),r.projects.length>0&&W(X,{id:`w-projects`,class:`widget-projects`,title:`Projects`,children:W(ua,{projects:r.projects})}),W(Xa,{report:e})]})}var Qa=[`diff`,`side`,`slider`,`overlay`],$a={diff:`Diff`,side:`Side by side`,slider:`Slider`,overlay:`Overlay`};function eo(e){let t=new Map;for(let n of e){if(n.kind!==`screenshot`||!n.comparison)continue;let{group:e,role:r}=n.comparison,i=t.get(e);i||t.set(e,i={group:e,images:{}}),!i.images[r]&&(i.images[r]=n)}let n=[...t.values()].filter(e=>Object.keys(e.images).length>1),r=new Set(n.flatMap(e=>Object.values(e.images))),i={comparisons:n,screenshots:[],videos:[],traces:[],files:[]};for(let t of e)r.has(t)||(t.kind===`screenshot`?i.screenshots.push(t):t.kind===`video`?i.videos.push(t):t.kind===`trace`?i.traces.push(t):i.files.push(t));return i}function to(e){return[...e.comparisons.map(e=>({type:`comparison`,set:e})),...e.screenshots.map(e=>({type:`image`,attachment:e}))]}function no(e){let{expected:t,actual:n,diff:r}=e.images;return Qa.filter(e=>e===`diff`?r!==void 0:t!==void 0&&n!==void 0)}function ro(e,t){return t!==null&&e.includes(t)?t:e.includes(`diff`)?`diff`:e[0]??`side`}function io(e){return`npx playwright show-trace ${xi(e)}`}function ao(e){let t=e.trim();return`${t===``?``:`Requires Playwright ${t} or later. `}Run it from the report folder (the one containing index.html), in a POSIX shell (bash, zsh); it uses the project's own Playwright.`}function Q(e){return e.split(`/`).map(encodeURIComponent).join(`/`)}var oo=L(null),so={expected:`Expected`,actual:`Actual`,diff:`Diff`};function co(e){let[t,n]=k({}),r=Object.entries(e.images);return A(()=>{let e=!0,t=(t,r)=>{e&&n(e=>({...e,[t]:r}))};for(let[e,n]of r){if(!n.path){t(e,null);continue}let r=new Image;r.onload=()=>t(e,[r.naturalWidth,r.naturalHeight]),r.onerror=()=>t(e,null),r.src=Q(n.path)}return()=>{e=!1}},[r.map(([e,t])=>`${e}:${t.path}`).join(`
10
+ `)]),t}function lo(e){return e===void 0?`…`:e===null?`not found`:`${e[0]} × ${e[1]}`}function uo({set:e,sizes:t,mode:n,onImageClick:r}){let[i,a]=k(50),[o,s]=k(50),c=Me(),{expected:l,actual:u}=e.images,[d,f]=[t.expected,t.actual];if(d===null)return W(Go,{attachment:l});if(f===null)return W(Go,{attachment:u});if(!d||!f)return W(`div`,{class:`cmp-loading`});let p=Math.max(d[0],f[0]),m=Math.max(d[1],f[1]),h=(t,n,i)=>W(`img`,{class:`cmp-layer`,src:Q(t.path??``),alt:`${so[i]} (${e.group})`,style:{width:`${n[0]/p*100}%`},onClick:r});return W(S,{children:[W(`div`,{class:`cmp-stack`,style:{"--w":p,"--h":m},children:[h(l,d,`expected`),W(`div`,{class:`cmp-top`,style:n===`slider`?{clipPath:`inset(0 0 0 ${i}%)`}:{opacity:o/100},children:h(u,f,`actual`)}),n===`slider`&&W(S,{children:[W(`input`,{type:`range`,class:`cmp-range`,min:0,max:100,value:i,"aria-label":`Divider position`,"aria-describedby":c,"aria-valuetext":`${i}%`,onInput:e=>a(Number(e.currentTarget.value))}),W(`span`,{class:`cmp-divider`,style:{left:`${i}%`}})]})]}),n===`slider`&&W(`p`,{class:`cmp-hint`,id:c,children:`Drag the divider, or use the arrow keys: expected on the left, actual on the right.`}),n===`overlay`&&W(`label`,{class:`cmp-opacity`,children:[`Actual opacity`,W(`input`,{type:`range`,min:0,max:100,value:o,"aria-valuetext":`${o}%`,onInput:e=>s(Number(e.currentTarget.value))}),W(`output`,{children:[o,`%`]})]})]})}function fo({set:e,onImageClick:t}){let n=no(e),r=ro(n,oo.value),i=co(e),{expected:a,actual:o,diff:s}=e.images,c=n=>{let r=e.images[n];return r&&W(Ko,{attachment:r,alt:`${so[n]} (${e.group})`,class:`cmp-image`,onClick:t},r.path)},l=i.expected&&i.actual?[i.expected,i.actual]:null,u=l&&(l[0][0]!==l[1][0]||l[0][1]!==l[1][1]);return W(`div`,{class:`comparison`,children:[W(`div`,{class:`cmp-modes`,role:`group`,"aria-label":`Comparison mode`,children:n.map(e=>W(`button`,{type:`button`,class:`button toggle-button`,"aria-pressed":e===r,onClick:()=>oo.value=e,children:$a[e]},e))}),r===`diff`&&c(`diff`),r===`side`&&W(`div`,{class:`cmp-side${l?` cmp-scaled`:``}`,style:l?{"--w":l[0][0]+l[1][0],"--h":Math.max(l[0][1],l[1][1])}:void 0,children:[`expected`,`actual`].map((e,t)=>W(`figure`,{style:l?{flexGrow:l[t][0]}:void 0,children:[W(`figcaption`,{children:so[e]}),c(e)]},e))}),(r===`slider`||r===`overlay`)&&W(uo,{set:e,sizes:i,mode:r,onImageClick:t}),W(`p`,{class:`cmp-sizes`,children:[[[`expected`,a],[`actual`,o],[`diff`,s]].map(([e,t])=>t&&W(`span`,{children:[t.path?W(`a`,{href:Q(t.path),target:`_blank`,rel:`noopener`,children:so[e]}):so[e],` `,lo(i[e])]},e)),u&&W(`strong`,{class:`cmp-differ`,children:`Expected and actual sizes differ`})]})]})}function po({set:e,open:t}){return W(`article`,{class:`comparison-card`,"aria-label":`Screenshot comparison ${e.group}`,children:[W(`div`,{class:`comparison-head`,children:[W(`h4`,{children:e.group}),W(`button`,{type:`button`,class:`button`,onClick:t,children:`Open in viewer`})]}),W(fo,{set:e})]})}function mo({open:e,onClose:t,title:n,class:r,actions:i,children:a}){let o=M(null),s=M(null),c=Me();return j(()=>{let t=o.current;t&&(e&&!t.open?(s.current=document.activeElement instanceof HTMLElement?document.activeElement:null,t.showModal()):!e&&t.open&&t.close())}),W(`dialog`,{ref:o,class:`dialog ${r??``}`,"aria-labelledby":c,onClose:()=>{if(o.current?.open)return;t();let e=document.activeElement;(!e||e===document.body||o.current?.contains(e))&&s.current?.focus(),s.current=null},onClick:e=>{e.target===o.current&&o.current?.close()},children:[W(`div`,{class:`dialog-head`,children:[W(`h2`,{id:c,children:n}),W(`div`,{class:`dialog-actions`,children:[i,W(`button`,{type:`button`,class:`icon-button`,title:`Close`,onClick:()=>o.current?.close(),children:[W(Hi,{}),W(`span`,{class:`visually-hidden`,children:`Close`})]})]})]}),a]})}function ho(){let e=St.value,t=M(null);return j(()=>{e&&(t.current?.focus(),t.current?.select())},[e]),W(mo,{open:e!==null,onClose:()=>St.value=null,title:`Copy ${e?.label.toLowerCase()??``}`,class:`copy-dialog`,children:[W(`p`,{class:`dialog-note`,children:`The browser did not allow copying from this page. The text is selected: press Ctrl+C (⌘C on macOS) to copy it.`}),W(`textarea`,{ref:t,class:`copy-text`,readOnly:!0,rows:8,"aria-label":e?.label??``,value:e?.text??``,spellcheck:!1})]})}function go({open:e,onClose:t}){return W(mo,{open:e,onClose:t,title:`Keyboard shortcuts`,class:`shortcuts-dialog`,children:[W(`table`,{class:`shortcuts-table`,children:[W(`thead`,{children:W(`tr`,{children:[W(`th`,{scope:`col`,children:`Key`}),W(`th`,{scope:`col`,children:`Action`}),W(`th`,{scope:`col`,children:`Where`})]})}),W(`tbody`,{children:Na.map(({keys:e,action:t,where:n})=>W(`tr`,{children:[W(`td`,{children:e.map((e,t)=>W(`span`,{children:[t>0&&` / `,W(`kbd`,{children:e})]},e))}),W(`td`,{children:t}),W(`td`,{children:n})]},t))})]}),W(`p`,{class:`dialog-note`,children:`Single keys do nothing while typing in a field or with Ctrl, Alt or Meta held.`})]})}function _o({attachment:e,playwrightVersion:t}){let{path:n}=e,r=ao(t);return W(`div`,{class:`trace-card`,children:[W(`span`,{class:`attachment-name`,children:e.name}),n?W(S,{children:[W(`div`,{class:`trace-actions`,children:[W(Ji,{label:`Trace command`,help:r,text:()=>io(n),children:`Copy trace command`}),W(`a`,{class:`button trace-download`,href:Q(n),download:n.slice(n.lastIndexOf(`/`)+1),children:`Download trace`})]}),W(`p`,{class:`trace-help`,children:r})]}):W(`span`,{class:`muted`,children:`(file missing)`})]})}var vo=/^((Expected|Received)(?: [a-z]+)*:)(\s+)(\S.*)$/,yo=/^- Expected(?:\s+- \d+)?$/,bo=/^\+ Received(?:\s+\+ \d+)?$/,xo=/^[-+ ] /;function So(e){return[{text:e,tone:null}]}function Co(e){let t=vo.exec(e);if(!t)return null;let[,n=``,r,i=``,a=``]=t;return[{text:`${n}${i}`,tone:null},{text:a,tone:r===`Expected`?`expected`:`received`}]}function wo(e){return e.startsWith(`- `)?[{text:e,tone:`expected`}]:e.startsWith(`+ `)?[{text:e,tone:`received`}]:So(e)}function To(e){let t=e.split(`
11
+ `),n=[],r=0;for(;r<t.length;){let e=t[r],i=t[r+1];if(yo.test(e)&&i!==void 0&&bo.test(i)){for(n.push([{text:e,tone:`expected`}],[{text:i,tone:`received`}]),r+=2;r<t.length&&t[r]===``;)n.push(So(t[r++]));for(;r<t.length&&xo.test(t[r]);)n.push(wo(t[r++]))}else n.push(Co(e)??So(e)),r+=1}return n}var Eo=/^(>)(\s*\d+ \|.*)$/,Do=/^(\s*\|\s*)(\^+)(\s*)$/;function Oo(e){return e.split(`
12
+ `).map(e=>{let t=Eo.exec(e);if(t)return[{text:t[1],tone:`marker`},{text:t[2],tone:`strong`}];let n=Do.exec(e);return n?[{text:n[1],tone:null},{text:n[2],tone:`marker`},...n[3]?[{text:n[3],tone:null}]:[]]:So(e)})}function ko(e){let t=[],n=e,r=``;for(;;){let e=-1;for(let t=n.length-1;t>=0;t--)if(n[t]?.error){e=t;break}if(e===-1)return t;let i=`${r}${e}`;t.push(i),n=n[e].steps,r=`${i}.`}}function Ao(e){return e.category===`test.step`||e.error!==null}function jo(e,t){let n=new Set(ko(e)),r=[...n].pop(),i=(e,a)=>e.flatMap((e,o)=>{let s=`${a}${o}`,c=i(e.steps,`${s}.`);return t==="default"&&!Ao(e)&&c.length===0?[]:[{step:e,key:s,children:c,onFailingPath:n.has(s),failing:s===r}]});return i(e,``)}function Mo(e,t){let n=[],r=e;for(let e of t){let t=r[Number(e.split(`.`).pop())];if(!t)break;n.push(t),r=t.steps}return n}function No(e,t=5){let n=ko(e);if(n.length===0)return null;let r=Mo(e,n),i=r.length>1?r[r.length-2].steps:e,a=Number(n[n.length-1].split(`.`).pop());return{path:r,preceding:i.slice(Math.max(0,a-t),a)}}function Po({lines:e}){return W(S,{children:e.map((e,t)=>W(S,{children:[t>0&&`
13
+ `,e.map((e,t)=>e.tone?W(`span`,{class:`tone-${e.tone}`,children:e.text},t):e.text)]},t))})}function Fo(e){return e?e.column===void 0?`${e.file}:${e.line}`:`${e.file}:${e.line}:${e.column}`:null}function Io({error:e,group:t,color:n}){let r=Fo(e.location);return W(`article`,{class:`error-card`,children:[W(`div`,{class:`error-head`,children:[W(G,{name:e.category??`Uncategorized`,color:n}),r&&W(`code`,{class:`error-location`,children:r}),t&&W(`a`,{class:`error-group-link`,href:Qi(t.signature),title:`Every test failing with this error`,children:[`View error group `,W(`span`,{class:`muted`,children:[`(`,U(t.tests.length,`test`),`)`]})]})]}),W(`pre`,{class:`message error-message`,children:W(Po,{lines:To(e.message)})}),e.snippet&&W(`pre`,{class:`code-snippet`,children:W(Po,{lines:Oo(e.snippet)})}),e.stack&&e.stack!==e.message&&W(`details`,{class:`stack-details`,children:[W(`summary`,{children:[W(Y,{class:`chevron`}),`Show stack`]}),W(`pre`,{class:`stack`,children:e.stack})]})]})}function Lo(e){return e.error!==null&&!e.steps.some(e=>e.error!==null)}function Ro({node:e,mode:t,expanded:n,toggle:r}){let{step:i,children:a}=e,o=n.has(e.key),s=Fo(i.location?{file:i.location.file,line:i.location.line}:null);return W(`li`,{class:`step${e.onFailingPath?` step-failing-path`:``}${e.failing?` step-failing`:``}`,"data-category":i.category,children:[W(`div`,{class:`step-row`,children:[a.length>0?W(`button`,{type:`button`,class:`step-toggle`,"aria-expanded":o,onClick:()=>r(e.key),children:[W(Y,{class:`chevron`}),W(`span`,{class:`visually-hidden`,children:[o?`Collapse`:`Expand`,` `,i.title]})]}):W(`span`,{class:`step-toggle-space`}),i.error?W(J,{outcome:`failed`}):W(`span`,{class:`step-icon-space`}),W(`span`,{class:`step-text`,children:[W(`span`,{class:`step-title`,children:i.title}),i.subtitle&&W(`span`,{class:`step-subtitle`,children:[` `,i.subtitle]}),t===`all`&&W(`span`,{class:`step-category`,children:i.category}),e.failing&&W(`span`,{class:`visually-hidden`,children:` (failing step)`})]}),s&&W(`code`,{class:`step-location`,children:s}),W(`span`,{class:`step-duration`,children:H(i.durationMs)})]}),i.error&&Lo(i)&&W(`pre`,{class:`message step-error`,children:W(Po,{lines:To(i.error.message)})}),o&&a.length>0&&W(zo,{nodes:a,mode:t,expanded:n,toggle:r})]})}function zo({nodes:e,mode:t,expanded:n,toggle:r}){return W(`ul`,{class:`step-list`,children:e.map(e=>W(Ro,{node:e,mode:t,expanded:n,toggle:r},e.key))})}function Bo({steps:e,mode:t}){let n=jo(e,t),[r,i]=k(()=>new Set(ko(e)));return n.length===0?W(`p`,{class:`muted`,children:[`No `,t==="default"?`test.step or failing step`:`step`,` in this attempt.`]}):W(zo,{nodes:n,mode:t,expanded:r,toggle:e=>i(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})})}var Vo=new TextEncoder;function Ho(e){return e<1e3?`${e} B`:e<1e6?`${(e/1e3).toFixed(1)} kB`:`${(e/1e6).toFixed(1)} MB`}function Uo({attachment:e}){let t=t=>W(`span`,{class:`attachment-meta`,children:[e.contentType,t&&` · ${t}`]});return e.body===null?W(`div`,{class:`attachment-file`,children:[e.path?W(`a`,{class:`attachment-name`,href:Q(e.path),children:e.name}):W(`span`,{class:`attachment-name`,children:[e.name,` `,W(`span`,{class:`muted`,children:`(file missing)`})]}),t(null)]}):W(`details`,{class:`attachment-body`,children:[W(`summary`,{children:[W(Y,{class:`chevron`}),W(`span`,{class:`attachment-name`,children:e.name}),t(Ho(Vo.encode(e.body).length))]}),W(`pre`,{children:e.body})]})}function Wo({name:e,output:t}){if(t.text===``&&!t.truncated)return null;let n=t.text.split(`
14
+ `).filter((e,t,n)=>e!==``||t<n.length-1).length;return W(`details`,{class:`output-block`,children:[W(`summary`,{children:[W(Y,{class:`chevron`}),W(`span`,{class:`output-name`,children:e}),W(`span`,{class:`muted`,children:U(n,`line`)}),t.truncated&&W(`span`,{class:`output-truncated`,children:`truncated`})]}),t.truncated&&W(`p`,{class:`output-notice`,children:`Truncated: the report keeps the first 32,768 characters of each attempt.`}),W(`pre`,{children:t.text})]})}function Go({attachment:e,note:t=`File not found`}){return W(`span`,{class:`media-missing`,children:[W(`strong`,{children:e.name}),W(`span`,{children:t}),W(`code`,{children:e.path??`no file in the report`})]})}function Ko({attachment:e,alt:t=e.name,lazy:n=!1,class:r,onClick:i}){let[a,o]=k(!1);return!e.path||a?W(Go,{attachment:e}):W(`img`,{src:Q(e.path),alt:t,class:r,loading:n?`lazy`:void 0,decoding:`async`,onError:()=>o(!0),onClick:i})}function qo({attachment:e,label:t=`Open original`}){return e.path?W(`a`,{class:`open-original`,href:Q(e.path),target:`_blank`,rel:`noopener`,children:t}):null}function Jo({screenshots:e,open:t}){return W(`ul`,{class:`thumbs`,children:e.map((e,n)=>W(`li`,{children:W(`button`,{type:`button`,class:`thumb`,onClick:()=>t(n),children:[W(Ko,{attachment:e,lazy:!0},e.path),W(`span`,{class:`thumb-name`,"aria-hidden":`true`,children:e.name})]})},n))})}function Yo(e,t){let n=M(t);n.current=t,A(()=>{if(!e)return;let t=e=>{let t={ArrowLeft:-1,ArrowRight:1}[e.key];!t||e.defaultPrevented||e.ctrlKey||e.altKey||e.metaKey||e.shiftKey||Pa(e.target)||e.target instanceof HTMLInputElement&&e.target.type===`range`||(e.preventDefault(),n.current(t))};return document.addEventListener(`keydown`,t),()=>document.removeEventListener(`keydown`,t)},[e])}function Xo({items:e,index:t,setIndex:n}){let[r,i]=k(null),a=t!==null&&r===t,o=t===null?void 0:e[t],s=r=>{t!==null&&e[t+r]&&n(t+r)};Yo(o!==void 0,s);let c=()=>i(a?null:t);return W(mo,{open:o!==void 0,onClose:()=>{n(null),i(null)},title:o?o.type===`image`?o.attachment.name:o.set.group:``,class:`lightbox${a?` actual-size`:``}`,actions:o?.type===`image`&&W(qo,{attachment:o.attachment}),children:o&&t!==null&&W(S,{children:[W(`div`,{class:`lightbox-stage`,onClick:e=>{e.target===e.currentTarget&&n(null)},children:o.type===`image`?W(Ko,{attachment:o.attachment,class:`lightbox-image`,onClick:c},o.attachment.path):W(fo,{set:o.set,onImageClick:c},o.set.group)}),W(`div`,{class:`lightbox-bar`,children:[W(`button`,{type:`button`,class:`button pager-button`,disabled:t===0,onClick:()=>s(-1),children:`← Previous`}),W(`span`,{class:`lightbox-position`,"aria-live":`polite`,children:[t+1,` of `,e.length]}),W(`button`,{type:`button`,class:`button pager-button`,disabled:t===e.length-1,onClick:()=>s(1),children:`Next →`}),W(`button`,{type:`button`,class:`button toggle-button`,"aria-pressed":a,onClick:c,children:`Actual size`})]})]})})}function Zo({attachment:e}){let[t,n]=k(!1);return W(`figure`,{class:`video`,children:[e.path&&!t?W(`video`,{controls:!0,preload:`metadata`,children:W(`source`,{src:Q(e.path),type:e.contentType,onError:()=>n(!0)})}):W(Go,{attachment:e,note:e.path?`Cannot play this video`:`File not found`}),W(`figcaption`,{children:[W(`span`,{class:`attachment-name`,children:e.name}),W(qo,{attachment:e})]})]})}function Qo({label:e,count:t,children:n}){return t===0?null:W(`section`,{class:`attachment-group`,"aria-label":e,children:[W(`h3`,{children:[e,` `,W(`span`,{class:`muted`,children:t})]}),n]})}function $o({attachments:e}){return W(`ul`,{class:`attachment-list`,children:e.map((e,t)=>W(`li`,{children:W(Uo,{attachment:e})},t))})}function es({attachments:e,playwrightVersion:t}){let n=eo(e),[r,i]=k(null),a=e=>i(e===null?null:{index:e}),o=B.value;A(()=>i(null),[o]);let s=n.files.filter(e=>e.kind===`text`),c=n.files.filter(e=>e.kind!==`text`);return W(`div`,{class:`attachment-groups`,children:[W(Qo,{label:`Screenshots`,count:n.comparisons.length+n.screenshots.length,children:[n.comparisons.map((e,t)=>W(po,{set:e,open:()=>a(t)},e.group)),n.screenshots.length>0&&W(Jo,{screenshots:n.screenshots,open:e=>a(n.comparisons.length+e)})]}),W(Qo,{label:`Videos`,count:n.videos.length,children:n.videos.map((e,t)=>W(Zo,{attachment:e},`${t}/${e.path}`))}),W(Qo,{label:`Traces`,count:n.traces.length,children:n.traces.map((e,n)=>W(_o,{attachment:e,playwrightVersion:t},n))}),W(Qo,{label:`Text`,count:s.length,children:W($o,{attachments:s})}),W(Qo,{label:`Other`,count:c.length,children:W($o,{attachments:c})}),W(Xo,{items:to(n),index:r?.index??null,setIndex:a})]})}function ts(e){return e===0?`Attempt 1`:`Retry ${e}`}function ns(e){let t=e.attempts.filter(t=>Xt(e,t));return t[t.length-1]??e.attempts[e.attempts.length-1]??null}function rs(e,t){if(t===null)return{attempt:ns(e),valid:!0};let n=e.attempts.find(e=>e.index===t);return n?{attempt:n,valid:!0}:{attempt:ns(e),valid:!1}}var is=`A Playwright test failed. Explain the most likely cause of the failure, say whether the problem is more likely in the test or in the application under test, and suggest a fix.`;function as(e){let t=e.replace(/\s+$/,``),n=Math.max(2,...[...t.matchAll(/`+/g)].map(e=>e[0].length)),r="`".repeat(n+1);return`${r}\n${t}\n${r}`}function os(e){return e.location?`${e.location.file}:${e.location.line}:${e.location.column}`:null}function ss(e){return e.subtitle?`${e.title} (${e.subtitle})`:e.title}function cs(e,t,n,r){let i=[`## Error${n>1?` ${t+1} of ${n}`:``}`,``,`Category: ${e.category??`Uncategorized`}`],a=os(e);return a&&i.push(`Location: ${a}`),i.push(``,`Message:`,as(e.message)),e.snippet&&i.push(``,`Code:`,as(e.snippet)),r.includeStack&&e.stack&&e.stack!==e.message&&i.push(``,`Stack:`,as(e.stack)),i}function ls(e,t,n){let r=e.attempts.findIndex(e=>e.index===t.index)+1,i=[is,``,`## Test`,``,`- Title: ${[...e.suitePath,e.title].join(` › `)}`,`- Location: ${e.file}:${e.line}`,`- Project: ${e.project||`(unnamed)`}`,`- Outcome: ${e.outcome}`,`- Attempt: ${r} of ${e.attempts.length} (${ts(t.index).toLowerCase()}), status ${t.status}`,`- Error category: ${t.errors[0]?.category??e.category??`none`}`];e.tags.length>0&&i.push(`- Tags: ${e.tags.join(`, `)}`);let a=[...e.annotations,...t.annotations];a.length>0&&i.push(`- Annotations: ${a.map(({type:e,description:t})=>t?`${e}: ${t}`:e).join(`; `)}`),t.errors.forEach((e,r)=>i.push(``,...cs(e,r,t.errors.length,n))),t.errors.length===0&&i.push(``,`## Error`,``,`This attempt reported no error.`);let o=No(t.steps);return o&&(i.push(``,`## Failing step`,``,o.path.map(ss).join(` › `)),o.preceding.length>0&&i.push(``,`Steps before it, at the same level:`,...o.preceding.map((e,t)=>`${t+1}. ${ss(e)}`))),t.attachments.length>0&&i.push(``,`## Attachments (not included)`,``,...t.attachments.map(e=>`- ${e.name} (${e.contentType})`)),`${i.join(`
15
+ `)}\n`}var us={passed:`passed`,failed:`failed`,timedOut:`failed`,interrupted:`failed`,skipped:`skipped`},ds={passed:`Passed`,failed:`Failed`,timedOut:`Timed out`,interrupted:`Interrupted`,skipped:`Skipped`};function fs(e){return{page:`test`,id:e.id,repeatEachIndex:e.repeatEachIndex}}function ps({type:e,description:t}){return t?`${e}: ${t}`:e}function ms({test:e}){let t=Object.entries(e.dimensions).filter(([,e])=>e.length>0);return e.tags.length===0&&e.annotations.length===0&&t.length===0?null:W(`dl`,{class:`test-meta`,children:[e.tags.length>0&&W(`div`,{children:[W(`dt`,{children:`Tags`}),W(`dd`,{class:`chips`,children:e.tags.map(e=>W(`span`,{class:`tag`,children:e},e))})]}),e.annotations.length>0&&W(`div`,{children:[W(`dt`,{children:`Annotations`}),W(`dd`,{class:`chips`,children:e.annotations.map((e,t)=>W(`span`,{class:`tag`,children:ps(e)},t))})]}),t.map(([e,t])=>W(`div`,{children:[W(`dt`,{children:e}),W(`dd`,{children:t.join(`, `)})]},e))]})}function hs({test:e,selected:t,select:n}){let r=M(null),i=t=>{let i=e.attempts[(t+e.attempts.length)%e.attempts.length];i&&(n(i),r.current?.querySelector(`[data-attempt="${i.index}"]`)?.focus())},a=e.attempts.indexOf(t);return W(`div`,{class:`attempt-tabs`,role:`tablist`,"aria-label":`Attempts`,ref:r,onKeyDown:t=>{let n={ArrowRight:a+1,ArrowLeft:a-1,Home:0,End:e.attempts.length-1}[t.key];n!==void 0&&(t.preventDefault(),i(n))},children:e.attempts.map(e=>{let r=e===t;return W(`button`,{type:`button`,role:`tab`,id:`attempt-tab-${e.index}`,class:`attempt-tab`,"data-attempt":e.index,"aria-selected":r,"aria-controls":`attempt-panel`,tabIndex:r?0:-1,onClick:()=>n(e),children:[W(J,{outcome:us[e.status],decorative:!0}),W(`span`,{children:ts(e.index)}),W(`span`,{class:`visually-hidden`,children:[`, `,ds[e.status]]}),W(`span`,{class:`attempt-duration`,children:H(e.durationMs)})]},e.index)})})}function gs({test:e,attempt:t,params:n,groups:r,colors:i,playwrightVersion:a}){let o=n.allSteps?`all`:`default`,s=new Set(e.annotations.map(ps)),c=t.annotations.filter(e=>!s.has(ps(e)));return W(S,{children:[t.errors.length>0&&W(`section`,{class:`detail-section`,"aria-labelledby":`detail-errors`,children:[W(`h2`,{id:`detail-errors`,children:t.errors.length===1?`Error`:U(t.errors.length,`error`)}),t.errors.map((e,t)=>W(Io,{error:e,group:r.get(e.signature),color:e.category?i.get(e.category):void 0},t))]}),t.steps.length>0&&W(`section`,{class:`detail-section`,"aria-labelledby":`detail-steps`,children:[W(`div`,{class:`section-head`,children:[W(`h2`,{id:`detail-steps`,children:`Steps`}),W(`button`,{type:`button`,class:`button toggle-button`,"aria-pressed":n.allSteps,onClick:()=>Ar(xr({...n,allSteps:!n.allSteps})),children:`Show all steps`})]}),W(Bo,{steps:t.steps,mode:o},`${e.id}/${e.repeatEachIndex}/${t.index}`)]}),t.attachments.length>0&&W(`section`,{class:`detail-section`,"aria-labelledby":`detail-attachments`,children:[W(`h2`,{id:`detail-attachments`,children:`Attachments`}),W(es,{attachments:t.attachments,playwrightVersion:a},`${e.id}/${e.repeatEachIndex}/${t.index}`)]}),c.length>0&&W(`section`,{class:`detail-section`,"aria-labelledby":`detail-annotations`,children:[W(`h2`,{id:`detail-annotations`,children:`Annotations of this attempt`}),W(`ul`,{class:`chips`,children:c.map((e,t)=>W(`li`,{class:`tag`,children:ps(e)},t))})]}),(t.stdout.text!==``||t.stderr.text!==``||t.stdout.truncated||t.stderr.truncated)&&W(`section`,{class:`detail-section`,"aria-labelledby":`detail-output`,children:[W(`h2`,{id:`detail-output`,children:`Output`}),W(Wo,{name:`stdout`,output:t.stdout}),W(Wo,{name:`stderr`,output:t.stderr})]})]})}function _s({report:e,test:t,sequence:n,groups:r,settings:i}){let a=N(()=>ri(e.categories),[e]),o=br(B.value.search),s=t?rs(t,o.attempt):null,c=s?.attempt??null;j(()=>{s&&!s.valid&&Ar(xr({...o,attempt:null}))},[s?.valid]);let l=t?Aa(n,t):null,u=e=>e?()=>qt(fs(e)):null,d=e=>{if(!t||!c)return null;let n=t.attempts[t.attempts.indexOf(c)+e];return n?()=>Ar(xr({...o,attempt:n.index})):null};if(Ia({j:u(l?.next),k:u(l?.previous),"[":d(-1),"]":d(1)}),!t)return W(La,{message:`No test with this id in this report.`});let{primary:f}=tr(t),p=Oi(e.tests,t);return W(`div`,{class:`page test-page`,children:[W(ka,{label:`Tests in the current list`,position:l?.position??null,total:n.length,outside:`Not in the current list (${U(n.length,`test`)})`,previous:u(l?.previous),next:u(l?.next),previousLabel:`Previous`,nextLabel:`Next`,keys:[`k`,`j`]}),W(`header`,{class:`test-header`,children:[W(`h1`,{class:`test-title`,children:[t.suitePath.map((e,t)=>W(`span`,{class:`title-suite`,children:[e,W(`span`,{class:`title-separator`,children:` › `})]},t)),t.title,t.repeatEachIndex>0&&W(`span`,{class:`row-note`,children:[` repeat `,t.repeatEachIndex]})]}),W(`div`,{class:`test-summary`,children:[W(J,{outcome:t.outcome,labelled:!0}),W(`span`,{children:ea(t.project)}),W(`code`,{children:[t.file,`:`,t.line]}),W(`span`,{children:H(t.durationMs)}),f!==null&&W(G,{name:f,color:a.get(f)})]}),W(ms,{test:t}),W(`div`,{class:`test-actions`,children:[W(Ji,{label:`Rerun command`,help:ki,text:()=>Ti([t]),children:`Copy rerun command`}),p&&W(Ji,{label:`Rerun command`,help:`For a POSIX shell (bash, zsh), run from the Playwright root directory: paths are relative to it. A file:line argument targets the line where the test is declared, and reruns every test declared on that line. The command is only valid while the file has not changed since the run.`,text:()=>Ti(p.tests),children:[`Copy rerun command · `,p.label]}),c&&c.errors.length>0&&W(Ji,{label:`AI prompt`,help:`A description of this attempt's failure, in English, to paste in the AI assistant of your choice. Nothing is sent anywhere.`,text:()=>ls(t,c,{includeStack:i.aiPrompt.includeStack}),children:`Copy AI prompt`})]})]}),c&&t.attempts.length>1&&W(hs,{test:t,selected:c,select:e=>Ar(xr({...o,attempt:e.index}))}),c&&W(`div`,{class:`attempt-panel`,id:`attempt-panel`,role:t.attempts.length>1?`tabpanel`:void 0,"aria-labelledby":t.attempts.length>1?`attempt-tab-${c.index}`:void 0,children:W(gs,{test:t,attempt:c,params:o,groups:r,colors:a,playwrightVersion:e.run.playwrightVersion})})]})}function vs(e){let t=Pn(e);return t===null?{status:`Status`,project:`Project`,tag:`Tag`,category:`Error category`}[e]:t}function ys(e,t){return e===`status`?q(t):e===`project`?t||`(unnamed project)`:t}function bs({facet:e,value:t,colors:n}){return e===`status`?W(J,{outcome:t,labelled:!0}):e===`category`?W(G,{name:t,color:n.get(t)}):W(`span`,{class:`facet-value`,children:ys(e,t)})}function xs({state:e,facet:t,values:n,counts:r,colors:i}){let a=M(null),o=e.facets[t]??[],s=vs(t);return A(()=>{let e=e=>{let t=a.current;t?.open&&!t.contains(e.target)&&(t.open=!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[]),W(`details`,{class:`facet`,ref:a,onKeyDown:e=>{let t=a.current;e.key===`Escape`&&t?.open&&(t.open=!1,t.querySelector(`summary`)?.focus(),e.stopPropagation())},"data-facet":t,children:[W(`summary`,{class:`facet-button`,children:[W(`span`,{children:s}),o.length>0&&W(`span`,{class:`facet-selected`,children:[o.length,W(`span`,{class:`visually-hidden`,children:` selected`})]}),W(Y,{class:`chevron`})]}),W(`fieldset`,{class:`facet-menu`,children:[W(`legend`,{class:`visually-hidden`,children:s}),[...n].map(n=>{let a=r?.get(n)??0,s=o.includes(n);return W(`label`,{class:`facet-option${a===0&&!s?` facet-option-empty`:``}`,children:[W(`input`,{type:`checkbox`,checked:s,onChange:r=>kr(Wn(e,t,n,r.currentTarget.checked))}),W(bs,{facet:t,value:n,colors:i}),W(`span`,{class:`facet-count`,children:[a,W(`span`,{class:`visually-hidden`,children:[` `,a===1?`test`:`tests`]})]})]},n)})]})]})}function Ss({state:e,domain:t,counts:n,colors:r}){return W(`div`,{class:`facets`,role:`group`,"aria-label":`Filters`,children:[...t].filter(([e,t])=>e!==`project`||t.size>1).map(([t,i])=>W(xs,{state:e,facet:t,values:i,counts:n.get(t),colors:r},t))})}function Cs(e,t){let n=[];e.q.trim()!==``&&n.push({key:`q`,label:`Search: ${e.q.trim()}`,remove:e=>({...e,q:``})});let r=new Map([...t.keys()].map((e,t)=>[e,t])),i=kn(e.facets).sort(([e],[t])=>(r.get(e)??1/0)-(r.get(t)??1/0));for(let[e,t]of i)for(let r of t)n.push({key:`${e}\u0000${r}`,label:`${vs(e)}: ${ys(e,r)}`,remove:t=>Wn(t,e,r,!1)});return n}function ws({state:e,domain:t}){let n=Cs(e,t),r=M(null),i=M(null);return j(()=>{if(i.current===null)return;let e=[...r.current?.querySelectorAll(`button`)??[]],t=e[Math.min(i.current,e.length-2)]??e[e.length-1];i.current=null,t?t.focus():document.querySelector(`.facets summary`)?.focus()}),n.length===0?null:W(`div`,{class:`filter-chips`,ref:r,children:[W(`ul`,{"aria-label":`Active filters`,children:n.map((t,n)=>W(`li`,{children:W(`button`,{type:`button`,class:`chip`,"aria-label":`Remove filter ${t.label}`,onClick:()=>{i.current=n,kr(t.remove(e))},children:[W(`span`,{children:t.label}),W(Hi,{})]})},t.key))}),W(`button`,{type:`button`,class:`text-button`,onClick:()=>{i.current=0,kr(Gn(e))},children:`Clear all`})]})}var Ts=new Intl.NumberFormat(`en-US`);function $(e){return Ts.format(e)}function Es(e,t){return Math.min(e,Math.max(t,0))}function Ds(e,t,n){let r=e=>e===1?`test`:`tests`;return e<t?t===n?`Showing ${$(e)} of ${$(n)} ${r(n)}`:`Showing ${$(e)} of ${$(t)} matching ${r(t)} (${$(n)} in total)`:t===n?`${$(n)} ${r(n)}`:`${$(t)} of ${$(n)} ${r(n)}`}var Os=[{column:`status`,label:`Status`},{column:`title`,label:`Test`},{column:`project`,label:`Project`},{column:`file`,label:`File`},{column:`duration`,label:`Duration`,numeric:!0},{column:`category`,label:`Error category`},{column:`attempts`,label:`Attempts`,numeric:!0}];function ks({report:e,state:t,sorted:n}){let r=N(()=>ri(e.categories),[e]),i=N(()=>or(e.tests,t,Cr.value,wr.value),[e,Hn({...t,sort:On})]),a=e.tests.length,o=Hn(t),s=M({viewKey:o,limit:500});s.current.viewKey!==o&&(s.current={viewKey:o,limit:500});let[,c]=k(0),l=Es(n.length,s.current.limit),u=N(()=>n.slice(0,l),[n,l]),d=Ds(l,n.length,a),f=M(null),p=M(null);j(()=>{p.current!==null&&(f.current?.rows[p.current]?.querySelector(`a`)?.focus(),p.current=null)});let m=e=>{p.current=l,s.current={viewKey:o,limit:e},c(e=>e+1)};return W(`div`,{class:`page view view-tests`,children:[W(`h1`,{children:`Tests`}),a>0&&W(`div`,{class:`filter-bar`,children:[W(Ss,{state:t,domain:Cr.value,counts:i,colors:r}),W(ws,{state:t,domain:Cr.value})]}),W(`p`,{class:`result-count`,"aria-live":`polite`,"aria-atomic":`true`,children:d}),W(ra,{tests:n}),a===0?W(`p`,{class:`muted`,children:`No tests in this run.`}):n.length===0?W(`div`,{class:`empty-state`,children:[W(`p`,{children:`No tests match these filters.`}),W(`button`,{type:`button`,class:`button`,onClick:()=>kr(Gn(t)),children:`Reset filters`})]}):W(`div`,{class:`table-scroll`,children:W(`table`,{class:`tests-table`,children:[W(`thead`,{children:W(`tr`,{children:Os.map(({column:e,label:n,numeric:r})=>{let i=t.sort.column===e;return W(`th`,{scope:`col`,class:r?`numeric`:void 0,"aria-sort":i?t.sort.direction===`asc`?`ascending`:`descending`:void 0,children:W(`button`,{type:`button`,class:`sort-button`,onClick:()=>kr({...t,sort:fr(t.sort,e)}),children:[n,W(Ui,{direction:i?t.sort.direction:null,class:i?`sort-active`:`sort-idle`})]})},e)})})}),W(`tbody`,{ref:f,children:u.map(e=>W(Ms,{test:e,colors:r},`${e.id}/${e.repeatEachIndex}`))})]})}),l<n.length&&W(`div`,{class:`table-more`,children:[W(`p`,{children:d}),W(`button`,{type:`button`,class:`button`,onClick:()=>m(l+500),children:[`Show `,Math.min(500,n.length-l),` more`]}),W(`button`,{type:`button`,class:`button`,onClick:()=>m(n.length),children:`Show all`})]})]})}function As({path:e}){let t=e.split(`/`);return W(S,{children:t.map((e,n)=>W(S,{children:[e,n<t.length-1&&W(S,{children:[`/`,W(`wbr`,{})]})]},n))})}function js({test:e,colors:t}){let{primary:n,others:r}=tr(e);return n===null?null:W(`span`,{class:`category-badges`,children:[W(G,{name:n,color:t.get(n)}),r.length>0&&W(`span`,{class:`category-more`,title:`Other ${r.length===1?`category`:`categories`} in failing attempts: ${r.join(`, `)}`,children:[W(`span`,{"aria-hidden":`true`,children:[`+`,r.length]}),W(`span`,{class:`visually-hidden`,children:[`, and `,U(r.length,`other category`,`other categories`),`: `,r.join(`, `)]})]})]})}function Ms({test:e,colors:t}){return W(`tr`,{children:[W(`td`,{children:W(J,{outcome:e.outcome,labelled:!0})}),W(`td`,{class:`cell-title`,children:[W(`a`,{href:Zi(e),children:ur(e)}),e.repeatEachIndex>0&&W(`span`,{class:`row-note`,children:[` repeat `,e.repeatEachIndex]})]}),W(`td`,{class:`cell-project`,children:ea(e.project)}),W(`td`,{children:W(`code`,{children:W(As,{path:`${e.file}:${e.line}`})})}),W(`td`,{class:`numeric`,children:H(e.durationMs)}),W(`td`,{children:W(js,{test:e,colors:t})}),W(`td`,{class:`numeric`,children:e.attempts.length})]})}function Ns({version:e}){return W(`footer`,{class:`footer`,children:[`Loupe — a reporter for Playwright `,W(`span`,{class:`muted`,children:[`· v`,e]})]})}function Ps(e,t={}){if(typeof e!=`string`||e===``)return null;let n=new Date(e);if(Number.isNaN(n.getTime()))return null;let r=t.timeZone===void 0?{}:{timeZone:t.timeZone},i=new Intl.DateTimeFormat(t.locale,{year:`numeric`,month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`,timeZoneName:`short`,...r}),a=new Intl.DateTimeFormat(t.locale,{dateStyle:`full`,timeStyle:`long`,...r});return{utc:n.toISOString(),label:i.format(n),full:a.format(n),timeZone:i.resolvedOptions().timeZone}}var Fs=[`system`,`light`,`dark`],Is=`loupe.theme`,Ls=L(`system`);function Rs(e){return typeof e==`string`&&Fs.includes(e)}function zs(e){let t=Tt(Is);Ls.value=Rs(t)?t:Rs(e)?e:`system`,st(()=>{let e=document.documentElement;Ls.value===`system`?delete e.dataset.theme:e.dataset.theme=Ls.value})}function Bs(e){Ls.value=e,Et(Is,e)}var Vs={passed:`Passed`,failed:`Failed`,timedout:`Timed out`,interrupted:`Interrupted`},Hs={system:`System theme`,light:`Light theme`,dark:`Dark theme`},Us={system:Ni,light:Pi,dark:Fi};function Ws(){return W(`div`,{class:`theme-switch`,role:`group`,"aria-label":`Theme`,children:Fs.map(e=>{let t=Us[e];return W(`button`,{type:`button`,class:`icon-button`,"aria-pressed":Ls.value===e,title:Hs[e],onClick:()=>Bs(e),children:[W(t,{}),W(`span`,{class:`visually-hidden`,children:Hs[e]})]},e)})})}function Gs(){let[e,t]=k(!1);return Ia({"?":()=>t(!0)}),W(S,{children:[W(`button`,{type:`button`,class:`icon-button`,title:`Keyboard shortcuts (?)`,"aria-keyshortcuts":`?`,onClick:()=>t(!0),children:[W(Ki,{}),W(`span`,{class:`visually-hidden`,children:`Keyboard shortcuts`})]}),W(go,{open:e,onClose:()=>t(!1)})]})}function Ks({startedAt:e,durationMs:t}){let n=N(()=>Ps(e),[e]),[r,i]=k(!1);return W(`div`,{class:`run-time`,onPointerLeave:()=>i(!1),children:[W(`dt`,{class:`visually-hidden`,children:`Run`}),W(`dd`,{children:[n&&W(S,{children:[W(`time`,{dateTime:n.utc,tabIndex:0,"aria-describedby":`run-time-details`,onKeyDown:e=>e.key===`Escape`&&i(!0),onBlur:()=>i(!1),children:n.label}),` · `]}),H(t)]}),n&&W(`span`,{id:`run-time-details`,role:`tooltip`,class:`run-time-details${r?` dismissed`:``}`,children:[W(`span`,{children:n.full}),W(`span`,{children:[`Time zone: `,n.timeZone]}),W(`span`,{children:[`UTC: `,n.utc]})]})]})}function qs({outcome:e,count:t}){let n=q(e).toLowerCase(),r=W(S,{children:[W(J,{outcome:e,decorative:!0}),W(`span`,{class:`count-value`,children:t}),W(`span`,{class:`visually-hidden`,children:[` `,n]})]});return t===0?W(`li`,{class:`count zero`,title:q(e),children:r}):W(`li`,{class:`count`,children:W(`a`,{class:`count-link`,href:Or({...An,facets:{status:[e]}},{page:`tests`}),title:`Show the ${t} ${n} ${t===1?`test`:`tests`}`,children:r})})}function Js({report:e,title:t}){let{run:n}=e;return W(S,{children:[W(`header`,{class:`header`,children:[W(`div`,{class:`header-main`,children:[W(`div`,{class:`header-identity`,children:[W(`div`,{class:`header-name`,children:[W(`button`,{type:`button`,class:`icon-button`,"aria-controls":`sidebar`,"aria-expanded":R.value,title:R.value?`Hide sidebar`:`Show sidebar`,onClick:At,children:[W(Mi,{}),W(`span`,{class:`visually-hidden`,children:R.value?`Hide sidebar`:`Show sidebar`})]}),W(`div`,{class:`brand`,children:[W(`span`,{class:`wordmark`,children:`Loupe`}),W(`a`,{class:`title`,href:V({page:`dashboard`}),title:t,children:t})]})]}),W(`span`,{class:`run-status run-${n.status}`,children:[W(J,{outcome:n.status===`passed`?`passed`:`failed`,decorative:!0}),Vs[n.status]??n.status]})]}),W(`ul`,{class:`counts`,"aria-label":`Test counts`,children:Yt.map(e=>W(qs,{outcome:e,count:n.stats[e]},e))}),W(`dl`,{class:`run-meta`,children:[W(Ks,{startedAt:n.startedAt,durationMs:n.durationMs}),n.environment.name&&W(`div`,{children:[W(`dt`,{children:`Environment`}),W(`dd`,{children:n.environment.name})]})]})]}),W(`div`,{class:`header-tools`,children:[W(Gs,{}),W(Ws,{})]})]}),n.scope===`partial`&&W(`div`,{class:`banner banner-partial`,role:`note`,children:[W(Li,{}),W(`p`,{children:[W(`strong`,{children:`Partial run.`}),` Only part of the suite ran, so these results do not cover every test.`,n.scopeReasons.length>0&&W(S,{children:[` `,`Detected from: `,n.scopeReasons.map(Ha).join(`, `),`.`]})]})]})]})}function Ys({roots:e,route:t,prefix:n,expandAll:r,emptyMessage:i}){let a=t.page===`test`?si(t.id,t.repeatEachIndex):null,[o,s]=k(()=>new Set(e.map(e=>e.key))),[c,l]=k(null),u=M(new Map),d=M(!1),f=M(!1),[p,m]=k(null),h=M(null),g=jt.value;j(()=>{g&&e.some(e=>e.key===g.key)&&(m(g.key),s(e=>e.has(g.key)?e:new Set([...e,g.key])),h.current=g.key,l(g.key))},[e,g]),j(()=>{a&&m(null)},[a]),j(()=>{if(!a)return;let t=vi(e,a);t&&(f.current=!0,l(a),s(e=>t.every(t=>e.has(t))?e:new Set([...e,...t])))},[e,a]),j(()=>{if(!r)return;let t=yi(e);s(e=>t.every(t=>e.has(t))?e:new Set([...e,...t]))},[e,r]);let _=N(()=>_i(e,o),[e,o]),v=N(()=>new Map(_.map((e,t)=>[e.node.key,t])),[_]),y=c!==null&&v.has(c)?c:a!==null&&v.has(a)?a:_[0]?.node.key??null;j(()=>{f.current&&a&&u.current.has(a)&&(f.current=!1,u.current.get(a)?.scrollIntoView({block:`nearest`}));let e=h.current===null?void 0:u.current.get(h.current);e&&(h.current=null,e.focus({preventScroll:!0}),e.scrollIntoView({block:`nearest`})),d.current&&y&&(d.current=!1,u.current.get(y)?.focus())});let ee=n!==``&&W(`p`,{class:`tree-prefix`,title:`Folder shared by every test file, left out of the tree`,children:[W(`span`,{class:`visually-hidden`,children:`Files in `}),n]}),b=e=>{e&&(d.current=!0,l(e.node.key))},x=(e,t)=>{s(n=>{if(n.has(e)===t)return n;let r=new Set(n);return t?r.add(e):r.delete(e),r})};return W(`div`,{class:`tree-section`,children:[W(`div`,{class:`tree-toolbar`,children:[W(`h2`,{id:`tree-heading`,children:`Tests`}),W(`button`,{type:`button`,class:`text-button`,onClick:()=>s(new Set(yi(e))),children:`Expand all`}),W(`button`,{type:`button`,class:`text-button`,onClick:()=>s(new Set),children:`Collapse all`})]}),ee,e.length===0?W(`p`,{class:`tree-empty`,children:i}):W(`ul`,{class:`tree`,role:`tree`,"aria-labelledby":`tree-heading`,onKeyDown:e=>{if(y===null||e.altKey||e.ctrlKey||e.metaKey)return;let t=v.get(y)??0,n=_[t];if(!n)return;let{node:r}=n,i=r.kind!==`test`,a=i&&o.has(r.key);switch(e.key){case`ArrowDown`:b(_[t+1]);break;case`ArrowUp`:b(_[t-1]);break;case`Home`:b(_[0]);break;case`End`:b(_[_.length-1]);break;case`ArrowRight`:i&&!a?x(r.key,!0):a&&b(_[t+1]);break;case`ArrowLeft`:a?x(r.key,!1):n.parentKey!==null&&b(_[v.get(n.parentKey)??-1]);break;case`Enter`:case` `:r.kind===`test`?qt({page:`test`,id:r.testId,repeatEachIndex:r.repeatEachIndex}):x(r.key,!a);break;default:return}e.preventDefault()},children:_.map(e=>{let{key:t}=e.node,n={ref:e=>{e?u.current.set(t,e):u.current.delete(t)},role:`treeitem`,"aria-level":e.level,"aria-setsize":e.siblings,"aria-posinset":e.position,tabIndex:t===y?0:-1,style:{"--level":e.level},onFocus:()=>l(t)};return e.node.kind===`test`?W(`li`,{...n,class:`tree-row tree-test`,"aria-selected":t===a,children:W(Xs,{node:e.node})},t):W(`li`,{...n,class:`tree-row tree-group tree-${e.node.kind}${t===p?` revealed`:``}`,"aria-expanded":o.has(t),children:W(Qs,{node:e.node,onToggle:()=>x(t,!o.has(t))})},t)})})]})}function Xs({node:e}){return W(`a`,{class:`row-content`,tabIndex:-1,href:V({page:`test`,id:e.testId,repeatEachIndex:e.repeatEachIndex}),children:[W(J,{outcome:e.outcome}),W(`span`,{class:`row-label`,children:e.title}),e.repeatEachIndex>0&&W(`span`,{class:`row-note`,children:[`repeat `,e.repeatEachIndex]})]})}function Zs({name:e,path:t}){let[n,r]=Fr(e);return W(`span`,{class:`label-part file-name`,children:[W(`span`,{class:`name-head`,"aria-hidden":`true`,children:n}),r&&W(`span`,{class:`name-tail`,"aria-hidden":`true`,children:r}),W(`span`,{class:`visually-hidden`,children:t})]})}function Qs({node:e,onToggle:t}){let{counts:n}=e,r=[U(n.total,`test`),`${n.failed} failed`,...n.flaky>0?[`${n.flaky} flaky`]:[]].join(`, `),[i=``,...a]=e.labels,o=[e.kind===`folder`?`${e.path??i}/`:e.path??i,...a].join(` › `);return W(`div`,{class:`row-content`,onClick:t,children:[W(Y,{class:`chevron`}),W(`span`,{class:`row-label`,title:o,children:[e.kind===`file`?W(Zs,{name:i,path:e.path??i}):W(`span`,{class:`label-part`,children:i}),a.map((e,t)=>W(`span`,{class:`label-part`,children:e},t))]}),W(`span`,{class:`row-counts`,title:r,children:[W(`span`,{class:`visually-hidden`,children:r}),n.failed>0&&W(`span`,{class:`badge badge-failed`,"aria-hidden":`true`,children:n.failed}),W(`span`,{class:`row-total`,"aria-hidden":`true`,children:n.total})]})]})}var $s=200,ec=300;function tc({page:e,route:t,children:n,class:r}){return W(`li`,{children:W(`a`,{class:`nav-link ${r??``}`,href:V({page:e}),"aria-current":t.page===e?`page`:void 0,children:n})})}function nc(){let e=Dr.value.q,[t,n]=k(e),r=M(null),i=M(void 0);j(()=>{e.trim()!==t.trim()&&(clearTimeout(i.current),n(e))},[e]),j(()=>{let e=e=>{e.key===`/`&&Fa(e)&&(e.preventDefault(),R.value?r.current?.focus():(R.value=!0,setTimeout(()=>r.current?.focus(),0)))};return document.addEventListener(`keydown`,e),()=>{document.removeEventListener(`keydown`,e),clearTimeout(i.current)}},[]);let a=e=>kr({...Dr.value,q:e},`replace`);return W(`div`,{class:`search-field`,children:[W(`label`,{for:`sidebar-search`,class:`visually-hidden`,children:`Search tests`}),W(Vi,{}),W(`input`,{ref:r,id:`sidebar-search`,type:`search`,placeholder:`Search tests`,autoComplete:`off`,spellcheck:!1,"aria-keyshortcuts":`/`,value:t,onInput:e=>{let t=e.currentTarget.value;n(t),clearTimeout(i.current),i.current=setTimeout(()=>a(t),$s)},onKeyDown:e=>{e.key===`Escape`&&t!==``&&(e.preventDefault(),clearTimeout(i.current),n(``),a(``))}}),W(`kbd`,{class:`search-key`,"aria-hidden":`true`,children:`/`})]})}function rc({matched:e,route:t}){let n=Dr.value,r=Un(n);return W(`div`,{class:`filter-indicator`,"aria-live":t.page===`tests`?`off`:`polite`,children:r>0&&W(`p`,{children:[W(`span`,{children:U(r,`filter`)}),` · `,W(`a`,{href:V({page:`tests`}),children:U(e,`test`)}),W(`button`,{type:`button`,class:`text-button`,onClick:()=>kr(Gn(n)),children:`Clear`})]})})}function ic({report:e,tree:t,prefix:n,matched:r,route:i,open:a}){let o=e.run.errors.length,s=Un(Dr.value)>0;return W(`nav`,{id:`sidebar`,class:`sidebar`,"aria-label":`Report`,hidden:!a,children:[W(`div`,{class:`sidebar-search`,role:`search`,children:[W(nc,{}),W(rc,{matched:r,route:i})]}),W(`ul`,{class:`nav-fixed`,children:[W(tc,{page:`dashboard`,route:i,children:[W(Ii,{}),W(`span`,{children:`Overview`})]}),W(tc,{page:`errors`,route:i,class:o>0?`nav-has-run-errors`:void 0,children:[W(Ri,{}),W(`span`,{children:`Errors`}),o>0&&W(`span`,{class:`nav-marker`,title:U(o,`run error`),children:[W(Li,{}),W(`span`,{class:`badge badge-failed`,children:o}),W(`span`,{class:`visually-hidden`,children:[`, `,U(o,`run error`)]})]})]}),W(tc,{page:`health`,route:i,children:[W(zi,{}),W(`span`,{children:`Suite health`})]}),W(tc,{page:`tests`,route:i,children:[W(Bi,{}),W(`span`,{children:`Tests`})]})]}),W(Ys,{roots:t,route:i,prefix:n,expandAll:s&&r<=ec,emptyMessage:e.tests.length===0?`No tests in this run.`:`No tests match the filters.`})]})}function ac({report:e,settings:t}){let n=Dr.value,r=N(()=>ar(e.tests,n,wr.value),[e,Hn({...n,sort:On})]),i=N(()=>Mr(e.tests.map(e=>e.file)),[e]),a=N(()=>hi({projects:e.projects,tests:r},{prefix:i}),[e,r,i]),o=N(()=>new Map(e.tests.map(e=>[si(e.id,e.repeatEachIndex),e])),[e]),s=N(()=>hr(e.tests,e.projects.map(e=>e.name)),[e]),c=N(()=>vr(r,n.sort,s),[r,s,n.sort.column,n.sort.direction]),l=N(()=>Zt(e),[e]),u=N(()=>Qt(l),[l]),d=N(()=>new Map(l.map(e=>[e.signature,e])),[l]),{route:f}=B.value,p=M(null);A(()=>{(f.page!==`errors`||f.category===void 0)&&p.current?.scrollTo(0,0),kt()&&(R.value=!1)},[JSON.stringify(f)]);let m;switch(f.page){case`dashboard`:m=W(Za,{report:e,groups:l,matched:c});break;case`errors`:m=W(Oa,{report:e,groups:l,category:f.category});break;case`health`:m=W(Ba,{report:e});break;case`tests`:m=W(ks,{report:e,state:n,sorted:c});break;case`test`:m=W(_s,{report:e,test:o.get(si(f.id,f.repeatEachIndex)),sequence:c,groups:d,settings:t});break;case`group`:m=W(za,{report:e,groups:u,group:d.get(f.signature)});break;case`not-found`:m=W(La,{})}return W(`div`,{class:`app ${R.value?`sidebar-open`:`sidebar-closed`}`,children:[W(Js,{report:e,title:t.title}),W(`div`,{class:`layout`,children:[W(ic,{report:e,tree:a,prefix:i,matched:r.length,route:f,open:R.value}),W(`main`,{class:`main`,ref:p,tabIndex:-1,children:[m,W(Ns,{version:e.generator.version})]})]}),W(ho,{}),W(`p`,{class:`visually-hidden`,role:`status`,"aria-live":`polite`,children:[bt.value.text,bt.value.seq%2==1?`\xA0`:``]})]})}var oc={title:`Loupe report`,theme:`system`,screenshots:{defaultView:`side-by-side`},aiPrompt:{includeStack:!0}};function sc(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function cc(e){let t;try{t=JSON.parse(e??``)}catch{return{ok:!1,message:`The report data is missing or is not valid JSON.`}}return sc(t)?t.schemaVersion===1?!sc(t.run)||!Array.isArray(t.tests)||!Array.isArray(t.projects)?{ok:!1,message:`The report data is incomplete: run, projects or tests is missing.`}:{ok:!0,report:t}:{ok:!1,message:`Unsupported report schema version ${JSON.stringify(t.schemaVersion)}: this renderer reads version 1.`}:{ok:!1,message:`The report data is not a Loupe report.`}}function lc(e){try{let t=JSON.parse(e??``);return sc(t)?{...oc,...t,screenshots:{...oc.screenshots,...sc(t.screenshots)?t.screenshots:{}},aiPrompt:{...oc.aiPrompt,...sc(t.aiPrompt)?t.aiPrompt:{}}}:oc}catch{return oc}}var uc=lc(document.getElementById(`loupe-settings`)?.textContent);document.title=uc.title,zs(uc.theme);var dc=cc(document.getElementById(`loupe-data`)?.textContent),fc=document.getElementById(`app`)??document.body;dc.ok&&Tr(dc.report),ve(dc.ok?W(ac,{report:dc.report,settings:uc}):W(`div`,{class:`load-error`,role:`alert`,children:[W(`h1`,{children:`Loupe could not open this report`}),W(`p`,{children:dc.message})]}),fc);</script>
16
+ <style>@font-face{font-family:DM Sans;font-style:normal;font-weight:400;font-display:swap;src:url(data:font/woff2;base64,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)format("woff2")}@font-face{font-family:DM Sans;font-style:normal;font-weight:600;font-display:swap;src:url(data:font/woff2;base64,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)format("woff2")}:root{--bg:#f7f5f0;--bg-card:#fff;--bg-muted:#eeeae2;--fg:#111;--fg-secondary:#666;--border:#e8e4dc;--border-control:#8a857c;--status-passed:#3e6e51;--status-failed:#b3261e;--status-flaky:#6b4a05;--status-flaky-bg:#fbf0d9;--status-skipped:#666;--diff-expected:#1f6b3a;--diff-received:#b3261e;--shadow:0 8px 24px #1111111f;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#080808;--bg-card:#0d0d0d;--bg-muted:#161616;--fg:#f0ede8;--fg-secondary:#8a8a8a;--border:#262626;--border-control:#6b6b6b;--status-passed:#7da88a;--status-failed:#f28b82;--status-flaky:#f0cf8a;--status-flaky-bg:#1f1705;--status-skipped:#8a8a8a;--diff-expected:#7fc79a;--diff-received:#f28b82;--shadow:0 8px 24px #0009;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}:root:not([data-theme=light]) .category-badge,:root:not([data-theme=light]) .category-bar{--cat-text:var(--cat-text-dark);--cat-bg:var(--cat-bg-dark);--cat-border:var(--cat-border-dark)}}:root[data-theme=dark]{--bg:#080808;--bg-card:#0d0d0d;--bg-muted:#161616;--fg:#f0ede8;--fg-secondary:#8a8a8a;--border:#262626;--border-control:#6b6b6b;--status-passed:#7da88a;--status-failed:#f28b82;--status-flaky:#f0cf8a;--status-flaky-bg:#1f1705;--status-skipped:#8a8a8a;--diff-expected:#7fc79a;--diff-received:#f28b82;--shadow:0 8px 24px #0009;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}:root{--font-sans:"DM Sans", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace}.category-badge,.category-bar{--cat-text:var(--cat-text-light);--cat-bg:var(--cat-bg-light);--cat-border:var(--cat-border-light)}:root[data-theme=dark] .category-badge,:root[data-theme=dark] .category-bar{--cat-text:var(--cat-text-dark);--cat-bg:var(--cat-bg-dark);--cat-border:var(--cat-border-dark)}*{box-sizing:border-box}html,body{height:100%}body{background:var(--bg);color:var(--fg);font:14px/1.5 var(--font-sans);margin:0}#app{height:100%}a{color:var(--fg);text-decoration:underline;-webkit-text-decoration-color:var(--border-control);text-decoration-color:var(--border-control);text-underline-offset:2px}a:hover{text-decoration-color:currentColor}:focus-visible{outline:2px solid var(--fg);outline-offset:2px}code,pre,kbd{font-family:var(--font-mono);font-size:12.5px}h1,h2,h3,strong,b{font-weight:600}[hidden]{display:none!important}.visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.muted{color:var(--fg-secondary)}.icon{flex:none;display:block}.app{flex-direction:column;height:100%;display:flex}.layout{flex:1;min-height:0;display:flex;position:relative}.main{flex-direction:column;flex:1;min-width:0;display:flex;overflow:auto}.main:focus{outline:none}.main>.page{flex:1}.header{border-bottom:1px solid var(--border);background:var(--bg-card);grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:8px 16px;padding:8px 16px;display:grid}.header-main{flex-wrap:wrap;align-items:center;gap:8px 20px;min-width:0;min-height:30px;display:flex}.header-identity{align-items:center;gap:8px 12px;min-width:0;display:flex}.header-name{align-items:center;gap:8px;min-width:0;display:flex}.header-identity .run-status{flex:none}@media (width<=440px){.header-identity{flex-wrap:wrap}}.brand{align-items:baseline;gap:10px;min-width:0;display:flex}.wordmark{color:var(--status-passed);letter-spacing:-.01em;font-size:18px;font-weight:600}.header .title{min-width:0;color:inherit;text-overflow:ellipsis;white-space:nowrap;font-size:15px;font-weight:600;text-decoration:none;overflow:hidden}.header .title:hover{text-decoration:underline}.run-status{border:1px solid;border-radius:999px;align-items:center;gap:4px;padding:1px 8px 1px 4px;font-size:12px;font-weight:600;display:inline-flex}.run-passed{color:var(--status-passed)}.run-failed,.run-timedout,.run-interrupted{color:var(--status-failed)}.counts{flex-wrap:wrap;gap:4px 12px;margin:0;padding:0;list-style:none;display:flex}.count{font-variant-numeric:tabular-nums;align-items:center;gap:4px;font-weight:600;display:flex}.count.zero{font-weight:400}.count.zero .outcome-icon{color:var(--fg-secondary)}.count-link{color:inherit;border-radius:4px;align-items:center;gap:4px;margin:-2px -4px;padding:2px 4px;text-decoration:none;display:flex}.count-link:hover{background:var(--bg-muted)}.count-link:hover .count-value{text-decoration:underline}.run-meta{color:var(--fg-secondary);flex-wrap:wrap;gap:4px 16px;margin:0;font-size:13px;display:flex}.run-meta div{gap:4px;min-width:0;display:flex}.run-meta dt:after{content:":"}.run-meta dd{color:var(--fg);text-overflow:ellipsis;white-space:nowrap;margin:0;overflow:hidden}.run-time{position:relative}.run-time dd{white-space:normal;overflow:visible}.run-time time{-webkit-text-decoration:underline dotted var(--border-control);text-decoration:underline dotted var(--border-control);text-underline-offset:3px;cursor:help;border-radius:2px}.run-time-details{z-index:20;border:1px solid var(--border-control);background:var(--bg-card);box-shadow:var(--shadow);color:var(--fg);white-space:nowrap;border-radius:6px;flex-direction:column;gap:2px;margin-top:4px;padding:8px 10px;font-size:13px;display:none;position:absolute;top:100%;left:0}.run-time-details:before{content:"";height:6px;position:absolute;bottom:100%;left:0;right:0}.run-time:hover .run-time-details,.run-time:focus-within .run-time-details{display:flex}.run-time .run-time-details.dismissed{display:none}.header-tools{align-items:center;gap:8px;display:flex}.theme-switch{border:1px solid var(--border-control);border-radius:6px;display:flex}.theme-switch .icon-button{border-radius:0}.theme-switch .icon-button:first-child{border-radius:5px 0 0 5px}.theme-switch .icon-button:last-child{border-radius:0 5px 5px 0}.theme-switch [aria-pressed=true]{background:var(--bg-muted);color:var(--fg)}.icon-button{width:30px;height:30px;color:var(--fg-secondary);cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;padding:0;display:inline-flex}.icon-button:hover{background:var(--bg-muted);color:var(--fg)}.text-button{color:var(--fg-secondary);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:4px;padding:2px 6px;font-size:12px}.text-button:hover{background:var(--bg-card);color:var(--fg)}.banner{border-bottom:1px solid var(--border);background:var(--status-flaky-bg);color:var(--status-flaky);align-items:flex-start;gap:8px;padding:8px 16px;display:flex}.banner .icon{margin-top:2px}.banner p{margin:0}.outcome-icon{align-items:center;gap:6px;display:inline-flex}.outcome-passed{color:var(--status-passed)}.outcome-failed{color:var(--status-failed)}.outcome-flaky{color:var(--status-flaky)}.outcome-skipped{color:var(--status-skipped)}.outcome-text{font-weight:600}.badge{text-align:center;font-variant-numeric:tabular-nums;border-radius:999px;min-width:20px;padding:0 6px;font-size:12px;font-weight:600;line-height:16px;display:inline-block}.badge-failed{color:var(--status-failed);border:1px solid}.category-badge{border:1px solid var(--cat-border);background:var(--cat-bg);max-width:100%;color:var(--cat-text);white-space:nowrap;text-overflow:ellipsis;border-radius:999px;align-items:center;padding:0 8px;font-size:12px;font-weight:600;line-height:20px;display:inline-flex;overflow:hidden}.sidebar{border-right:1px solid var(--border);background:var(--bg-muted);flex-direction:column;flex:none;width:340px;max-width:85vw;display:flex;overflow:auto}.nav-fixed{border-bottom:1px solid var(--border);margin:0;padding:8px;list-style:none}.nav-link{color:inherit;border-radius:6px;align-items:center;gap:8px;padding:4px 8px;text-decoration:none;display:flex}.nav-link:hover{background:var(--bg-card)}.nav-link[aria-current=page]{background:var(--bg-card);box-shadow:inset 3px 0 0 var(--fg);font-weight:600}.nav-link .icon{color:var(--fg-secondary)}.nav-marker{align-items:center;gap:4px;margin-left:auto;display:inline-flex}.nav-marker .icon{color:var(--status-failed)}.sidebar-search{z-index:2;border-bottom:1px solid var(--border);background:var(--bg-muted);padding:8px 8px 0;position:sticky;top:0}.search-field{align-items:center;margin-bottom:8px;display:flex;position:relative}.search-field>.icon{color:var(--fg-secondary);pointer-events:none;position:absolute;left:8px}.search-field input{border:1px solid var(--border-control);background:var(--bg-card);width:100%;min-height:32px;color:var(--fg);font:inherit;border-radius:6px;padding:4px 30px}.search-field input::placeholder{color:var(--fg-secondary);opacity:1}.search-field input:focus-visible{outline-offset:0}.search-key{border:1px solid var(--border-control);color:var(--fg-secondary);pointer-events:none;border-radius:4px;padding:0 5px;font-size:11px;line-height:16px;position:absolute;right:8px}.search-field input:focus~.search-key,.search-field input:not(:placeholder-shown)~.search-key{display:none}.filter-indicator p{color:var(--fg-secondary);flex-wrap:wrap;align-items:center;gap:4px;margin:-2px 0 8px;padding:0 4px;font-size:13px;display:flex}.filter-indicator a{color:var(--fg);font-weight:600}.filter-indicator .text-button{text-decoration:underline;-webkit-text-decoration-color:var(--border-control);text-decoration-color:var(--border-control);text-underline-offset:2px;margin-left:auto}.tree-section{padding:8px 0}.tree-toolbar{align-items:center;gap:2px;padding:0 8px 4px 16px;display:flex}.tree-toolbar h2{color:var(--fg-secondary);text-transform:uppercase;letter-spacing:.04em;flex:1;margin:0;font-size:12px;font-weight:600}.tree-empty{color:var(--fg-secondary);padding:0 16px}.tree-prefix{color:var(--fg-secondary);font-family:var(--font-mono);text-overflow:ellipsis;white-space:nowrap;margin:0 16px 4px;font-size:12px;overflow:hidden}.tree{margin:0;padding:0 8px;list-style:none}.tree-row{outline-offset:-2px;border-radius:6px}.row-content{min-height:28px;padding:2px 8px 2px calc((var(--level) - 1) * 16px + 8px);color:inherit;cursor:pointer;align-items:center;gap:6px;text-decoration:none;display:flex}.tree-row:hover{background:var(--bg-card)}.tree-test[aria-selected=true],.tree-row.revealed{background:var(--bg-card);box-shadow:inset 3px 0 0 var(--fg)}.tree-test[aria-selected=true]{font-weight:600}.chevron{color:var(--fg-secondary);transition:transform .1s}.tree-group[aria-expanded=true]>.row-content .chevron{transform:rotate(90deg)}.tree-project>.row-content{font-weight:600}.row-label{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.tree-group .row-label{display:flex}.tree-group .label-part{text-overflow:ellipsis;white-space:pre;flex:0 auto;min-width:0;overflow:hidden}.label-part+.label-part:before{content:" › ";color:var(--fg-secondary)}.tree-group .file-name{display:flex}.tree-group .label-part+.label-part{flex-shrink:8}.name-head{text-overflow:ellipsis;min-width:0;overflow:hidden}.name-tail{flex:none}.row-note{color:var(--fg-secondary);font-size:12px;font-weight:400}.row-counts{flex:none;align-items:center;gap:6px;display:flex}.row-total{min-width:20px;color:var(--fg-secondary);text-align:right;font-variant-numeric:tabular-nums;font-size:12px}.page{padding:24px}.page h1{margin:0 0 12px;font-size:22px;line-height:1.3}.breadcrumb{color:var(--fg-secondary);overflow-wrap:anywhere;margin:0 0 4px;font-size:13px}.test-title{overflow-wrap:anywhere}pre.message{background:var(--bg-muted);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:6px;margin:0;padding:8px 12px;overflow:auto}.run-errors{flex-direction:column;gap:16px;margin:0;padding:0;list-style:none;display:flex}.run-error{border:1px solid var(--border);border-left:3px solid var(--status-failed);background:var(--bg-card);border-radius:6px;padding:12px 16px}.run-error-meta{color:var(--fg-secondary);flex-wrap:wrap;align-items:center;gap:4px 12px;font-size:13px;display:flex}.run-error pre{background:var(--bg-muted);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:6px;margin:8px 0 0;padding:8px 12px;overflow:auto}.run-error details{margin-top:8px}.run-error summary{color:var(--fg-secondary);cursor:pointer}.load-error{max-width:640px;margin:48px auto;padding:0 16px}.load-error h1{color:var(--status-failed);font-size:20px}.page{container-type:inline-size}.view{flex-direction:column;gap:16px;display:flex}.view>*,.view h1{max-width:1280px}.view>h1{margin-bottom:0}.widget{border:1px solid var(--border);background:var(--bg-card);border-radius:8px;min-width:0;padding:16px}.widget>h2{margin:0 0 12px;font-size:15px;line-height:1.3}.widget-note{color:var(--fg-secondary);margin:-8px 0 12px;font-size:13px}.widget-hint{color:var(--fg-secondary);margin:12px 0 0;font-size:13px}.widget-list{flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.widget-list>li{border-top:1px solid var(--border)}.widget-list>li:first-child{border-top:0}.widget-more{margin:8px 0 0}.run-details{grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:16px 32px;font-size:13px;display:grid}.run-details-group h3{color:var(--fg-secondary);text-transform:uppercase;letter-spacing:.04em;margin:0 0 6px;font-size:12px;font-weight:600}.run-details dl{flex-direction:column;gap:6px;margin:0;display:flex}.run-details dl>div{grid-template-columns:84px minmax(0,1fr);align-items:baseline;gap:12px;display:grid}.run-details dt{color:var(--fg-secondary)}.run-details dd{overflow-wrap:anywhere;flex-wrap:wrap;align-items:baseline;gap:4px 8px;min-width:0;margin:0;display:flex}.run-details .copy-button{min-height:0;padding:1px 6px;font-size:12px;line-height:16px}.widget-grid{grid-template-columns:repeat(auto-fit,minmax(max(380px,50% - 8px),1fr));align-items:start;gap:16px;display:grid}.widget-grid>:last-child:nth-child(odd){grid-column:1/-1}@container (width<=900px){.widget-grid{grid-template-columns:minmax(0,1fr)}}.verdict{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 32px;display:flex}.verdict-outcome{align-items:center;gap:10px;margin:0;font-size:22px;font-weight:600;display:flex}.verdict-outcome .icon{width:28px;height:28px}.verdict-outcome.outcome-flaky{background:var(--status-flaky-bg);border-radius:8px;padding:2px 12px 2px 8px}.verdict-meta{color:var(--fg-secondary);font-variant-numeric:tabular-nums;margin:0}.verdict-meta strong{color:var(--fg)}.outcome-bar{border-radius:5px;gap:2px;height:10px;margin:12px 0 8px;display:flex;overflow:hidden}.outcome-bar-part{flex-basis:0;min-width:4px}.bar-passed{background:var(--status-passed)}.bar-failed{background:var(--status-failed)}.bar-flaky{background:var(--status-flaky)}.bar-skipped{background:var(--status-skipped)}.outcome-legend{color:var(--fg-secondary);font-variant-numeric:tabular-nums;flex-wrap:wrap;gap:4px 16px;margin:0;padding:0;font-size:13px;list-style:none;display:flex}.outcome-legend li{align-items:center;gap:4px;display:flex}.widget-run-errors{border-left:3px solid var(--status-failed)}.widget-run-errors h2{align-items:center;gap:8px;display:flex}.widget-run-errors h2 .icon{color:var(--status-failed)}.widget-run-errors .widget-list code{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.widget-run-errors .widget-list li{padding:6px 0}.group-row{color:inherit;flex-direction:column;gap:2px;padding:8px 4px;text-decoration:none;display:flex}.group-row:hover{background:var(--bg-muted)}.group-row-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:4px 12px;display:flex}.group-test{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.group-row:hover .group-test{text-decoration:underline}.group-message{color:var(--fg-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.group-count{font-variant-numeric:tabular-nums;white-space:nowrap;font-weight:600}.group-split{font-variant-numeric:tabular-nums;white-space:nowrap;flex-wrap:wrap;gap:4px 12px;font-weight:600;display:inline-flex}.group-split-part{align-items:center;gap:4px;display:inline-flex}.group-row-counts{flex-wrap:wrap;align-items:center;gap:4px 10px;margin-left:auto;display:inline-flex}.group-attempts{color:var(--fg-secondary);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:13px}.category-bars{grid-template-columns:minmax(0,max-content) minmax(40px,1fr) auto;display:grid}.category-bars>li{grid-column:1/-1;grid-template-columns:subgrid;display:grid}.category-bar-row{grid-column:1/-1;grid-template-columns:subgrid;color:inherit;align-items:center;gap:8px;padding:6px 4px;text-decoration:none;display:grid}.category-bar-row:hover{background:var(--bg-muted)}.category-bar-row .category-badge{justify-self:start}.category-bar-track{height:8px;display:block}.category-bar{background:var(--cat-border);border-radius:4px;min-width:4px;height:100%;display:block}.category-list>li>details>summary{cursor:pointer;align-items:center;gap:8px;padding:8px 4px;list-style:none;display:flex}.category-list>li>details>summary::-webkit-details-marker{display:none}.category-list>li>details>summary:hover{background:var(--bg-muted)}.category-list summary .chevron{transition:transform .1s}.category-list details[open]>summary .chevron{transform:rotate(90deg)}.category-list summary .group-count{margin-left:auto}.category-list .widget-list{margin:0 0 8px 28px}.project-cards{flex-wrap:wrap;gap:12px;margin:0;padding:0;list-style:none;display:flex}.project-cards>li{flex:240px;min-width:0}.project-card{border:1px solid var(--border-control);background:var(--bg-card);width:100%;height:100%;color:inherit;font:inherit;text-align:left;cursor:pointer;border-radius:8px;flex-direction:column;gap:6px;padding:12px;display:flex}.project-card:hover{background:var(--bg-muted)}.project-name{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.project-card .counts{flex-wrap:wrap;font-size:13px}.project-meta{color:var(--fg-secondary);font-size:13px}.data-table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%}.data-table th,.data-table td{border-top:1px solid var(--border);text-align:right;vertical-align:top;padding:6px 8px}.data-table thead th{color:var(--fg-secondary);border-top:0;font-size:12px;font-weight:600}.data-table thead th .outcome-icon{justify-content:flex-end}.data-table th:first-child,.data-table td:first-child{text-align:left}.data-table .zero{color:var(--fg-secondary)}.data-table tbody th{overflow-wrap:anywhere;font-weight:400}.dimension-bars{grid-template-columns:minmax(0,max-content) minmax(60px,1fr) auto auto;align-items:center;gap:0 12px;margin:0;padding:0;list-style:none;display:grid}.dimension-bar-row{grid-column:1/-1;grid-template-columns:subgrid;border-top:1px solid var(--border);align-items:center;padding:6px 0;display:grid}.dimension-bar-row:first-child{border-top:0}.dimension-value-cell{overflow-wrap:anywhere;min-width:0}a.dimension-value{font-weight:600}.dimension-bar{height:10px;margin:0}.dimension-bar:empty{background:var(--bg-muted)}.dimension-bar-counts{justify-content:flex-end;gap:10px;font-size:13px;display:flex}.dimension-bar-counts .count{font-weight:600}.dimension-total{min-width:28px;color:var(--fg-secondary);text-align:right;font-variant-numeric:tabular-nums;font-size:13px}.tile-summary{margin:0 0 10px;font-size:13px}.dimension-tiles{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:6px;margin:0;padding:0;list-style:none;display:grid}.dimension-tiles>li{min-width:0;display:flex}.dimension-tile{color:inherit;border:1px solid var(--border);border-left:4px solid var(--tile-color);background:var(--bg-card);cursor:pointer;border-radius:6px;flex:1;align-items:center;gap:6px;min-width:0;padding:6px 8px;font-size:13px;text-decoration:none;display:flex;position:relative}span.dimension-tile{cursor:default}.dimension-tile:hover,.dimension-tile:focus-visible{background:var(--bg-muted)}.tile-failed{--tile-color:var(--status-failed)}.tile-flaky{--tile-color:var(--status-flaky);background:var(--status-flaky-bg)}.tile-passed{--tile-color:var(--status-passed)}.tile-skipped,.tile-none{--tile-color:var(--status-skipped)}.tile-failed .tile-value,.tile-flaky .tile-value{font-weight:600}.tile-value{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.tile-icon-none{border:1.4px dashed var(--status-skipped);border-radius:50%;flex:none;width:16px;height:16px}.tile-flag{color:var(--status-flaky)}.tile-details{z-index:5;border:1px solid var(--border-control);background:var(--bg-card);min-width:180px;max-width:280px;box-shadow:var(--shadow);color:var(--fg);overflow-wrap:anywhere;border-radius:6px;flex-direction:column;gap:2px;padding:8px 10px;font-weight:400;display:none;position:absolute;bottom:calc(100% + 6px);left:0}.tooltip-open .tile-details{display:flex}.tile-details:after{content:"";height:8px;position:absolute;top:100%;left:0;right:0}.tile-note{color:var(--status-flaky)}.dimension-table{margin-top:12px}.dimension-table>summary{color:var(--fg-secondary);cursor:pointer;align-items:center;gap:4px;font-size:13px;list-style:none;display:inline-flex}.dimension-table>summary::-webkit-details-marker{display:none}.dimension-table>summary:hover{color:var(--fg)}.dimension-table[open]>summary .chevron{transform:rotate(90deg)}.dimension-table>.data-table{margin-top:8px}.pass-rate{cursor:help}.pass-rate strong{color:var(--fg)}.hygiene-flag{color:var(--status-flaky);align-items:center;gap:4px;margin-top:2px;font-size:12px;display:flex}.test-line{align-items:center;gap:8px;padding:6px 0;display:flex}.test-line .test-text{flex:1;min-width:0}.test-line .test-text a{overflow-wrap:anywhere}.test-line .test-where{color:var(--fg-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:12px;display:block;overflow:hidden}.test-line .duration{font-variant-numeric:tabular-nums;flex:none}.skip-kind{border:1px solid var(--border-control);text-transform:uppercase;border-radius:4px;padding:0 6px;font-size:11px;font-weight:600}.flaky-error{align-items:center;gap:8px;min-width:0;margin-top:2px;display:flex}.flaky-error code{color:var(--fg-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.group-meta{flex-wrap:wrap;align-items:center;gap:8px 16px;margin:0 0 16px;display:flex}.group-meta div{align-items:center;gap:6px;display:flex}.group-meta dt{color:var(--fg-secondary)}.group-meta dd{margin:0}.group-page h2{margin:24px 0 8px;font-size:16px}.affected-tests{border-collapse:collapse;width:100%}.affected-tests th,.affected-tests td{border-top:1px solid var(--border);text-align:left;vertical-align:top;overflow-wrap:anywhere;padding:6px 8px}.affected-tests thead th{color:var(--fg-secondary);border-top:0;font-size:12px;font-weight:600}.affected-tests .test-cell{align-items:flex-start;gap:6px;display:flex}.filter-bar{flex-direction:column;gap:10px;display:flex}.facets{flex-wrap:wrap;gap:8px;display:flex}.facet{position:relative}.facet-button{border:1px solid var(--border-control);background:var(--bg-card);cursor:pointer;border-radius:6px;align-items:center;gap:6px;min-height:32px;padding:4px 8px 4px 12px;list-style:none;display:inline-flex}.facet-button::-webkit-details-marker{display:none}.facet-button:hover{background:var(--bg-muted)}.facet-button .chevron{transition:transform .1s;transform:rotate(90deg)}.facet[open]>.facet-button .chevron{transform:rotate(-90deg)}.facet-selected{background:var(--fg);min-width:20px;color:var(--bg-card);text-align:center;font-variant-numeric:tabular-nums;border-radius:999px;padding:0 6px;font-size:12px;font-weight:600;line-height:18px}.facet-menu{z-index:15;border:1px solid var(--border-control);background:var(--bg-card);min-width:220px;max-width:min(360px,90vw);max-height:360px;box-shadow:var(--shadow);border-radius:6px;flex-direction:column;margin:0;padding:4px;display:flex;position:absolute;top:calc(100% + 4px);left:0;overflow:auto}.facet-option{cursor:pointer;border-radius:4px;align-items:center;gap:8px;min-height:30px;padding:2px 8px;display:flex}.facet-option:hover{background:var(--bg-muted)}.facet-option input{width:16px;height:16px;accent-color:var(--fg);flex:none;margin:0}.facet-option .facet-value,.facet-option .category-badge{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.facet-count{color:var(--fg-secondary);font-variant-numeric:tabular-nums;margin-left:auto;padding-left:12px;font-size:12px}.facet-option-empty>:not(input):not(.facet-count){opacity:.7}.filter-chips{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.filter-chips ul{display:contents}.filter-chips li{list-style:none;display:flex}.chip{border:1px solid var(--border-control);background:var(--bg-muted);max-width:320px;color:var(--fg);font:inherit;cursor:pointer;border-radius:999px;align-items:center;gap:4px;padding:2px 6px 2px 10px;font-size:13px;display:inline-flex}.chip span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.chip .icon{color:var(--fg-secondary)}.chip:hover .icon{color:var(--fg)}.result-count{color:var(--fg-secondary);font-variant-numeric:tabular-nums;margin:0}.empty-state{border:1px dashed var(--border-control);border-radius:8px;flex-direction:column;align-items:flex-start;gap:8px;padding:24px;display:flex}.empty-state p{margin:0}.button{border:1px solid var(--border-control);background:var(--bg-card);min-height:32px;color:var(--fg);font:inherit;cursor:pointer;border-radius:6px;padding:4px 12px}.button:hover{background:var(--bg-muted)}.view-tests>.table-scroll{max-width:none}.table-scroll{border:1px solid var(--border);background:var(--bg-card);border-radius:8px;overflow-x:auto}.tests-table{border-collapse:collapse;width:100%;font-size:13px}.tests-table th,.tests-table td{border-top:1px solid var(--border);text-align:left;vertical-align:top;padding:6px 10px}.tests-table thead th{background:var(--bg-card);white-space:nowrap;border-top:0;position:sticky;top:0}.tests-table .numeric{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}.tests-table tbody tr:hover{background:var(--bg-muted)}.tests-table .outcome-icon{white-space:nowrap}.cell-title{overflow-wrap:anywhere;min-width:240px}.cell-project{white-space:nowrap}.category-badges{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.category-more{color:var(--fg-secondary);cursor:help;font-size:12px;font-weight:600}.table-more{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.table-more p{color:var(--fg-secondary);font-variant-numeric:tabular-nums;margin:0 8px 0 0}.sort-button{color:var(--fg-secondary);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:4px;align-items:center;gap:2px;margin:-2px -4px;padding:2px 4px;font-size:12px;font-weight:600;display:inline-flex}.numeric .sort-button{flex-direction:row-reverse}.sort-button:hover{background:var(--bg-muted);color:var(--fg)}[aria-sort]>.sort-button{color:var(--fg)}.sort-idle{opacity:.5}.copy-button{align-items:center;gap:6px;display:inline-flex}.copy-button .icon,.copy-done{color:var(--fg-secondary)}.rerun-failed{flex-wrap:wrap;align-items:center;gap:4px 12px;display:flex}.rerun-note{color:var(--fg-secondary);margin:0;font-size:13px}.widget-verdict .rerun-failed{margin-top:12px}.pager{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:16px;display:flex}.pager-button{align-items:center;gap:4px;display:inline-flex}.pager-button:disabled{color:var(--fg-secondary);cursor:default}.pager-button:disabled:hover{background:var(--bg-card)}.pager-position{color:var(--fg-secondary);font-variant-numeric:tabular-nums}.chevron-back{transform:rotate(180deg)}.test-page{flex-direction:column;max-width:1280px;display:flex}.test-header{flex-direction:column;gap:10px;display:flex}.test-header h1{margin:0}.title-suite{color:var(--fg-secondary);font-weight:400}.test-summary{flex-wrap:wrap;align-items:center;gap:4px 16px;display:flex}.test-summary code{overflow-wrap:anywhere}.test-meta{flex-wrap:wrap;gap:6px 24px;margin:0;font-size:13px;display:flex}.test-meta div{align-items:baseline;gap:6px;display:flex}.test-meta dt{color:var(--fg-secondary)}.test-meta dd{margin:0}.chips{flex-wrap:wrap;gap:4px;margin:0;padding:0;list-style:none;display:flex}.tag{border:1px solid var(--border-control);background:var(--bg-card);overflow-wrap:anywhere;border-radius:999px;padding:0 8px;font-size:12px;line-height:20px}.test-actions{flex-wrap:wrap;gap:8px;display:flex}.attempt-tabs{border-bottom:1px solid var(--border-control);flex-wrap:wrap;gap:4px;margin-top:20px;display:flex}.attempt-tab{color:var(--fg-secondary);font:inherit;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px 6px 0 0;align-items:center;gap:6px;margin-bottom:-1px;padding:6px 12px;display:inline-flex}.attempt-tab:hover{background:var(--bg-muted);color:var(--fg)}.attempt-tab[aria-selected=true]{border-color:var(--border-control) var(--border-control) var(--bg);background:var(--bg);color:var(--fg);font-weight:600}.attempt-duration{color:var(--fg-secondary);font-variant-numeric:tabular-nums;font-size:12px;font-weight:400}.attempt-panel{flex-direction:column;gap:16px;margin-top:16px;display:flex}.detail-section{border:1px solid var(--border);background:var(--bg-card);border-radius:8px;flex-direction:column;gap:10px;min-width:0;padding:16px;display:flex}.detail-section h2{margin:0;font-size:15px}.section-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;display:flex}.toggle-button[aria-pressed=true]{background:var(--bg-muted);box-shadow:inset 0 0 0 1px var(--fg)}.error-card{border:1px solid var(--border);border-left:3px solid var(--status-failed);border-radius:6px;flex-direction:column;gap:8px;padding:12px;display:flex}.error-head{flex-wrap:wrap;align-items:center;gap:4px 12px;font-size:13px;display:flex}.error-location{color:var(--fg-secondary);overflow-wrap:anywhere}.error-group-link{margin-left:auto}pre.code-snippet,pre.stack,.output-block pre,.attachment-body pre{background:var(--bg-muted);border-radius:6px;margin:0;padding:8px 12px;overflow:auto}pre.stack,.output-block pre,.attachment-body pre{white-space:pre-wrap;overflow-wrap:anywhere}.tone-expected{color:var(--diff-expected)}.tone-received{color:var(--diff-received)}.tone-marker{color:var(--status-failed);font-weight:600}.tone-strong{font-weight:600}.stack-details>summary,.attachment-body>summary,.output-block>summary{color:var(--fg-secondary);cursor:pointer;flex-wrap:wrap;align-items:center;gap:6px;list-style:none;display:inline-flex}.stack-details>summary::-webkit-details-marker{display:none}.attachment-body>summary::-webkit-details-marker{display:none}.output-block>summary::-webkit-details-marker{display:none}.stack-details>summary:hover,.attachment-body>summary:hover,.output-block>summary:hover{color:var(--fg)}.stack-details[open]>summary .chevron,.attachment-body[open]>summary .chevron,.output-block[open]>summary .chevron{transform:rotate(90deg)}.stack-details>pre,.attachment-body>pre,.output-block>pre{margin-top:6px}.step-list{margin:0;padding:0;list-style:none}.step-list .step-list{border-left:1px solid var(--border);margin-left:22px;padding-left:0}.step-row{border-radius:4px;align-items:center;gap:6px;min-height:28px;padding:2px 6px 2px 2px;display:flex}.step-row:hover{background:var(--bg-muted)}.step-failing-path>.step-row{box-shadow:inset 3px 0 0 var(--status-failed)}.step-failing>.step-row{background:var(--bg-muted);font-weight:600}.step-toggle{width:22px;height:22px;color:var(--fg-secondary);cursor:pointer;background:0 0;border:0;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.step-toggle:hover{background:var(--bg-card);color:var(--fg)}.step-toggle[aria-expanded=true] .chevron{transform:rotate(90deg)}.step-toggle-space{flex:none;width:22px}.step-icon-space{flex:none;width:16px}.step-text{overflow-wrap:anywhere;flex:1;min-width:0}.step-subtitle{color:var(--fg-secondary);font-family:var(--font-mono);font-size:12.5px;font-weight:400}.step-category{border:1px solid var(--border-control);color:var(--fg-secondary);white-space:nowrap;border-radius:4px;margin-left:8px;padding:0 6px;font-size:11px;font-weight:400}.step-location{max-width:40%;color:var(--fg-secondary);text-overflow:ellipsis;white-space:nowrap;flex:none;font-weight:400;overflow:hidden}.step-duration{min-width:56px;color:var(--fg-secondary);text-align:right;font-variant-numeric:tabular-nums;flex:none;font-size:12px;font-weight:400}pre.step-error{margin:2px 0 6px 50px;font-weight:400}.attachment-groups{flex-direction:column;gap:12px;display:flex}.attachment-group h3{margin:0 0 4px;font-size:13px}.attachment-list{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.attachment-file{flex-wrap:wrap;align-items:baseline;gap:4px 10px;display:flex}.attachment-name{overflow-wrap:anywhere}.attachment-body .attachment-name{color:var(--fg)}.attachment-meta{color:var(--fg-secondary);font-size:12px}.thumbs{flex-wrap:wrap;gap:12px;margin:0;padding:0;list-style:none;display:flex}.thumb{border:1px solid var(--border);background:var(--bg-card);width:184px;color:var(--fg);font:inherit;cursor:zoom-in;border-radius:8px;flex-direction:column;gap:4px;padding:6px;font-size:12px;display:flex}.thumb:hover{border-color:var(--border-control)}.thumb img{object-fit:contain;background:var(--bg-muted);border-radius:4px;width:100%;height:120px;display:block}.thumb-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.media-missing{border:1px dashed var(--border-control);min-height:120px;color:var(--fg-secondary);text-align:center;overflow-wrap:anywhere;border-radius:4px;flex-direction:column;justify-content:center;gap:2px;padding:8px;font-size:12px;display:flex}.media-missing strong{color:var(--fg)}.open-original{white-space:nowrap;font-size:12px}.video{margin:0 0 12px}.video video{background:#000;border-radius:6px;width:100%;max-width:960px;display:block}.video figcaption{flex-wrap:wrap;align-items:baseline;gap:4px 12px;margin-top:4px;display:flex}.dialog-actions{flex:none;align-items:center;gap:8px;display:flex}.dialog-head h2{overflow-wrap:anywhere;min-width:0}.dialog.lightbox{--stage-h:calc(100vh - 150px);width:calc(100vw - 32px);max-width:none;height:calc(100vh - 32px);max-height:none;padding:12px 16px}.lightbox[open]{flex-direction:column;display:flex}.lightbox .dialog-head{margin-bottom:8px}.lightbox-stage{flex:1;min-height:0;display:flex;overflow:auto}.lightbox-stage>*{margin:auto}.lightbox-image{max-width:100%;max-height:var(--stage-h);cursor:zoom-in;display:block}.actual-size .lightbox-image{cursor:zoom-out;max-width:none;max-height:none}.lightbox-bar{flex-wrap:wrap;justify-content:center;align-items:center;gap:8px 12px;padding-top:8px;display:flex}.lightbox-position{min-width:64px;color:var(--fg-secondary);text-align:center;font-variant-numeric:tabular-nums}.comparison-card{border:1px solid var(--border);border-radius:8px;margin-bottom:12px;padding:12px}.comparison-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;display:flex}.comparison-head h4{font-size:13px;font-family:var(--font-mono);overflow-wrap:anywhere;margin:0;font-weight:400}.comparison{flex-direction:column;align-items:flex-start;gap:8px;min-width:0;display:flex}.lightbox-stage>.comparison{align-items:center;width:100%}.actual-size .lightbox-stage>.comparison{width:max-content}.cmp-modes{flex-wrap:wrap;gap:6px;display:flex}.cmp-image,.cmp-side img{max-width:100%;max-height:var(--stage-h,70vh);background:var(--bg-muted);cursor:zoom-in;display:block}.cmp-side{align-items:flex-start;gap:12px;max-width:100%;display:flex}.cmp-side figure{flex:0 auto;min-width:0;margin:0}.cmp-scaled{width:min(calc(var(--w) * 1px + 12px), 100%, calc(var(--stage-h,70vh) * var(--w) / var(--h) + 12px))}.cmp-scaled figure{flex-shrink:1;flex-basis:0}.cmp-side.cmp-scaled img{width:100%;max-height:none}.cmp-side figcaption,.cmp-opacity,.cmp-sizes,.cmp-hint{color:var(--fg-secondary);font-size:12px}.cmp-stack{width:min(calc(var(--w) * 1px), 100%, calc(var(--stage-h,70vh) * var(--w) / var(--h)));aspect-ratio:var(--w) / var(--h);background:var(--bg-muted);position:relative;overflow:hidden}.cmp-layer{max-width:none;height:auto;display:block;position:absolute;top:0;left:0}.cmp-top{position:absolute;inset:0}.cmp-range{opacity:0;cursor:ew-resize;width:100%;height:100%;margin:0;position:absolute;inset:0}.cmp-divider{background:var(--fg);width:2px;box-shadow:0 0 0 1px var(--bg-card);pointer-events:none;margin-left:-1px;position:absolute;top:0;bottom:0}.cmp-range:focus-visible+.cmp-divider{outline:2px solid var(--fg);outline-offset:2px}.cmp-opacity{align-items:center;gap:8px;display:flex}.cmp-opacity output{font-variant-numeric:tabular-nums;min-width:40px}.cmp-sizes{flex-wrap:wrap;gap:4px 14px;margin:0;display:flex}.cmp-hint{margin:0}.cmp-differ{color:var(--status-failed);font-weight:600}.trace-card{flex-direction:column;align-items:flex-start;gap:6px;margin-bottom:12px;display:flex}.trace-actions{flex-wrap:wrap;gap:8px;display:flex}.trace-download{align-items:center;text-decoration:none;display:inline-flex}.trace-help{color:var(--fg-secondary);margin:0;font-size:12px}.cmp-loading{background:var(--bg-muted);border-radius:4px;width:100%;height:120px}.actual-size .cmp-image,.actual-size .cmp-side img{cursor:zoom-out;max-width:none;max-height:none}.actual-size .cmp-side{max-width:none}.actual-size .cmp-scaled{width:calc(var(--w) * 1px + 12px)}.actual-size .cmp-stack{width:calc(var(--w) * 1px)}.output-block>summary .output-name{color:var(--fg);font-family:var(--font-mono)}.output-truncated{color:var(--status-flaky);border:1px solid;border-radius:4px;padding:0 6px;font-size:11px;font-weight:600}.output-notice{color:var(--status-flaky);margin:6px 0 0;font-size:13px}.dialog{border:1px solid var(--border-control);background:var(--bg-card);width:min(640px,100vw - 32px);max-height:calc(100vh - 64px);box-shadow:var(--shadow);color:var(--fg);border-radius:8px;padding:16px 20px 20px}.dialog::backdrop{background:#0006}.dialog-head{justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.dialog-head h2{margin:0;font-size:16px}.dialog-note{color:var(--fg-secondary);margin:12px 0 0;font-size:13px}.copy-dialog .dialog-note{margin:0 0 8px}.copy-text{border:1px solid var(--border-control);background:var(--bg-muted);width:100%;color:var(--fg);font-family:var(--font-mono);resize:vertical;border-radius:6px;padding:8px;font-size:12.5px}.shortcuts-table{border-collapse:collapse;width:100%;font-size:13px}.shortcuts-table th,.shortcuts-table td{border-top:1px solid var(--border);text-align:left;vertical-align:top;padding:6px 8px}.shortcuts-table thead th{color:var(--fg-secondary);border-top:0;font-size:12px;font-weight:600}.shortcuts-table td:first-child{white-space:nowrap}.shortcuts-table kbd{border:1px solid var(--border-control);background:var(--bg-muted);border-radius:4px;padding:0 5px;font-size:12px}.footer{border-top:1px solid var(--border);color:var(--fg-secondary);padding:16px 24px;font-size:12px}@media (width<=760px){.header{padding:8px 12px}.sidebar{z-index:10;box-shadow:var(--shadow);position:absolute;inset:0 auto 0 0}.page{padding:16px}.footer{padding:12px 16px}.affected-tests thead{display:none}.affected-tests tr{border-top:1px solid var(--border);padding:6px 0;display:block}.affected-tests td{border:0;padding:2px 0;display:block}.run-time-details{white-space:normal}.step-location{display:none}pre.step-error,.error-group-link{margin-left:0}}
11
17
  /*$vite$:1*/</style>
12
18
  </head>
13
19
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qartisan/playwright-loupe",
3
- "version": "0.0.5",
3
+ "version": "0.1.0",
4
4
  "description": "HTML reporter for Playwright: dashboard, error groups by normalized signature, tests by project and suite, dimensions from tags and annotations.",
5
5
  "keywords": [
6
6
  "playwright",