tuffgal 0.1.0-alpha.10 → 0.1.0-alpha.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/CHANGELOG.md +28 -17
  2. package/README.md +2 -0
  3. package/dist/cli.d.ts +20 -0
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +68 -13
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/init.d.ts.map +1 -1
  8. package/dist/commands/init.js +5 -0
  9. package/dist/commands/init.js.map +1 -1
  10. package/dist/config.d.ts +29 -1
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/config.js +15 -1
  13. package/dist/config.js.map +1 -1
  14. package/dist/reporter/assets/report.css +88 -1
  15. package/dist/reporter/assets/report.js +194 -5
  16. package/dist/reporter/template.d.ts +1 -1
  17. package/dist/reporter/template.d.ts.map +1 -1
  18. package/dist/reporter/template.js +171 -24
  19. package/dist/reporter/template.js.map +1 -1
  20. package/dist/reporter/writeReport.d.ts +1 -1
  21. package/dist/reporter/writeReport.d.ts.map +1 -1
  22. package/dist/reporter/writeReport.js +2 -2
  23. package/dist/reporter/writeReport.js.map +1 -1
  24. package/dist/runner/approve.d.ts +11 -3
  25. package/dist/runner/approve.d.ts.map +1 -1
  26. package/dist/runner/approve.js +15 -3
  27. package/dist/runner/approve.js.map +1 -1
  28. package/dist/runner/breakpointPasses.d.ts +39 -0
  29. package/dist/runner/breakpointPasses.d.ts.map +1 -0
  30. package/dist/runner/breakpointPasses.js +107 -0
  31. package/dist/runner/breakpointPasses.js.map +1 -0
  32. package/dist/runner/bridges/database.d.ts +4 -3
  33. package/dist/runner/bridges/database.d.ts.map +1 -1
  34. package/dist/runner/bridges/database.js +4 -3
  35. package/dist/runner/bridges/database.js.map +1 -1
  36. package/dist/runner/run.d.ts +10 -1
  37. package/dist/runner/run.d.ts.map +1 -1
  38. package/dist/runner/run.js +80 -12
  39. package/dist/runner/run.js.map +1 -1
  40. package/dist/runner/runAction.js +1 -1
  41. package/dist/runner/runAction.js.map +1 -1
  42. package/dist/runner/runStory.d.ts +7 -4
  43. package/dist/runner/runStory.d.ts.map +1 -1
  44. package/dist/runner/runStory.js +35 -27
  45. package/dist/runner/runStory.js.map +1 -1
  46. package/dist/runner/storyFilter.d.ts +8 -0
  47. package/dist/runner/storyFilter.d.ts.map +1 -1
  48. package/dist/runner/storyFilter.js +11 -0
  49. package/dist/runner/storyFilter.js.map +1 -1
  50. package/dist/schema/result.d.ts +11 -1
  51. package/dist/schema/result.d.ts.map +1 -1
  52. package/dist/schema/result.js.map +1 -1
  53. package/dist/screenshots/capture.d.ts +10 -5
  54. package/dist/screenshots/capture.d.ts.map +1 -1
  55. package/dist/screenshots/capture.js +17 -12
  56. package/dist/screenshots/capture.js.map +1 -1
  57. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -6,29 +6,38 @@ this project uses [Pride Versioning](https://pridever.org) → `PROUD.DEFAULT.SH
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
- _Nothing right now_
9
+ _Nothing just yet_
10
10
 
11
- ## [0.1.0-alpha.10] — 2026-06-22
11
+ ## [0.1.0-alpha.11] — 2026-06-26
12
+
13
+ ### Added
14
+
15
+ - Approve by breakpoint (e.g. `approve --desktop`, `approve --breakpoint <name>`)
16
+ - Approve by story (e.g. `approve user-logs-in`)
17
+ - `captureMode` config to limit screenshots to viewport-only or full page
18
+ - Documentation for CLI and reports
19
+ - `interactiveMode` config to view baseline/actual/diffs in a single-image view
20
+ - New baselines can now be filtered in the HTML report
21
+ - New baselines are now listed in the terminal summary report
22
+
23
+ ### Changed
24
+
25
+ - Screenshots default to viewport-only (were previously full page)
12
26
 
13
27
  ### Fixed
14
28
 
15
- - **Per-breakpoint database isolation.** alpha.9 ran each breakpoint in its own
16
- browser context but applied a story's fixtures only once, before the
17
- breakpoint loop — so a story that mutated server state passed at the first
18
- mode and then ran the next mode against the mutated rows (a registered user
19
- collided on the second mode, an already-read link no longer showed as unread,
20
- an emptied list had nothing left to empty). Fixtures are now re-applied before
21
- **every** breakpoint, resetting that state to a known baseline per mode.
22
- Fixtures are idempotent, so non-mutating stories are unaffected.
29
+ - Multiple breakpoint runs no longer leak database state
30
+ - Report filters now only show matching actions inside each story
31
+
32
+ ## [0.1.0-alpha.10] — 2026-06-22
23
33
 
24
34
  ### Added
25
35
 
26
- - **`${breakpoint}` interpolation token.** The current mode name is exposed to
27
- action interpolation as `${breakpoint}`, so a story can key data it creates
28
- through the app (with no backing fixture to reset) per mode — e.g.
29
- `fresh+${breakpoint}@example.test` registers a distinct user at each viewport
30
- instead of colliding on a shared value. A story parameter literally named
31
- `breakpoint` overrides the injected value.
36
+ - `${breakpoint}` interpolation token
37
+
38
+ ### Fixed
39
+
40
+ - Per-breakpoint database isolation
32
41
 
33
42
  ## [0.1.0-alpha.9] — 2026-06-21
34
43
 
@@ -161,7 +170,9 @@ styling or interactivity.
161
170
  Initial public alpha. Tuffgal extracted from [Linklater](https://github.com/nschneble/linklater)'s
162
171
  in-tree visual testing workspace.
163
172
 
164
- [Unreleased]: https://github.com/nschneble/tuffgal/compare/v0.1.0-alpha.9...HEAD
173
+ [Unreleased]: https://github.com/nschneble/tuffgal/compare/v0.1.0-alpha.11...HEAD
174
+ [0.1.0-alpha.11]: https://github.com/nschneble/tuffgal/releases/tag/v0.1.0-alpha.11
175
+ [0.1.0-alpha.10]: https://github.com/nschneble/tuffgal/releases/tag/v0.1.0-alpha.10
165
176
  [0.1.0-alpha.9]: https://github.com/nschneble/tuffgal/releases/tag/v0.1.0-alpha.9
166
177
  [0.1.0-alpha.8]: https://github.com/nschneble/tuffgal/releases/tag/v0.1.0-alpha.8
167
178
  [0.1.0-alpha.7]: https://github.com/nschneble/tuffgal/releases/tag/v0.1.0-alpha.7
package/README.md CHANGED
@@ -67,10 +67,12 @@ composite action.
67
67
  - [Authoring guide](docs/authoring.md)
68
68
  - [Changelog](CHANGELOG.md)
69
69
  - [CI integration](docs/ci.md)
70
+ - [CLI reference](docs/cli.md)
70
71
  - [Config reference](docs/config.md)
71
72
  - [Migrating from Cypress](docs/migration-cypress.md)
72
73
  - [Migrating from Playwright](docs/migration-playwright.md)
73
74
  - [Product requirements](docs/prd-v1.md)
75
+ - [Reporting data (results.json)](docs/reporting.md)
74
76
  - [Supervisor](docs/supervisor.md)
75
77
 
76
78
  ## License
package/dist/cli.d.ts CHANGED
@@ -1,3 +1,23 @@
1
1
  #!/usr/bin/env node
2
+ declare const COMMANDS: readonly ["approve", "help", "init", "run", "supervise"];
3
+ type Command = (typeof COMMANDS)[number];
4
+ interface ParsedArguments {
5
+ command: Command;
6
+ coverage: boolean;
7
+ headed: boolean;
8
+ manageServers: boolean;
9
+ healthcheckIntervalMs?: number;
10
+ idleLimitMs?: number;
11
+ maxRespawns?: number;
12
+ maxRuntimeMs?: number;
13
+ newOnly: boolean;
14
+ storyFilter?: string;
15
+ /** Bare positional argument (e.g. `approve user-logs-in`). */
16
+ positional?: string;
17
+ /** `--breakpoint <name>` (repeatable) plus `--<name>` shorthands. */
18
+ breakpoints: string[];
19
+ workers?: number;
20
+ }
21
+ export declare function parseArguments(argv: string[]): ParsedArguments;
2
22
  export {};
3
23
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AASA,QAAA,MAAM,QAAQ,0DAA2D,CAAC;AAC1E,KAAK,OAAO,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAKzC,UAAU,eAAe;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,eAAe,CAgG9D"}
package/dist/cli.js CHANGED
@@ -1,11 +1,15 @@
1
1
  #!/usr/bin/env node
2
+ import { pathToFileURL } from 'node:url';
2
3
  import { approveAll } from "./runner/approve.js";
3
4
  import { init } from "./commands/init.js";
4
- import { loadConfig } from "./config.js";
5
+ import { BREAKPOINTS, loadConfig } from "./config.js";
5
6
  import { runAll } from "./runner/run.js";
7
+ import { normaliseStoryArg } from "./runner/storyFilter.js";
6
8
  import { supervise } from "./commands/supervise.js";
7
9
  const COMMANDS = ['approve', 'help', 'init', 'run', 'supervise'];
8
- function parseArguments(argv) {
10
+ /** Registry breakpoint names that double as `--<name>` approve shorthands. */
11
+ const BREAKPOINT_FLAGS = Object.keys(BREAKPOINTS);
12
+ export function parseArguments(argv) {
9
13
  const [command, ...rest] = argv;
10
14
  const parsed = {
11
15
  command: COMMANDS.includes(command)
@@ -15,6 +19,14 @@ function parseArguments(argv) {
15
19
  manageServers: false,
16
20
  coverage: false,
17
21
  newOnly: false,
22
+ breakpoints: [],
23
+ };
24
+ const addBreakpoint = (name) => {
25
+ if (name === undefined || name === '') {
26
+ throw new Error('--breakpoint requires a mode name (e.g. desktop)');
27
+ }
28
+ if (!parsed.breakpoints.includes(name))
29
+ parsed.breakpoints.push(name);
18
30
  };
19
31
  for (let index = 0; index < rest.length; index += 1) {
20
32
  const arg = rest[index];
@@ -30,6 +42,23 @@ function parseArguments(argv) {
30
42
  else if (arg.startsWith('--story=')) {
31
43
  parsed.storyFilter = arg.slice('--story='.length);
32
44
  }
45
+ else if (arg === '--breakpoint') {
46
+ addBreakpoint(rest[index + 1]);
47
+ index += 1;
48
+ }
49
+ else if (arg.startsWith('--breakpoint=')) {
50
+ addBreakpoint(arg.slice('--breakpoint='.length));
51
+ }
52
+ else if (arg.startsWith('--') &&
53
+ BREAKPOINT_FLAGS.includes(arg.slice(2))) {
54
+ addBreakpoint(arg.slice(2));
55
+ }
56
+ else if (!arg.startsWith('-')) {
57
+ if (parsed.positional !== undefined) {
58
+ throw new Error(`unexpected extra argument "${arg}" (already got "${parsed.positional}")`);
59
+ }
60
+ parsed.positional = arg;
61
+ }
33
62
  else if (arg === '--workers') {
34
63
  parsed.workers = numericFlag('--workers', rest[index + 1]);
35
64
  index += 1;
@@ -113,7 +142,9 @@ function printHelp() {
113
142
  ' --coverage Capture V8 JS + CSS coverage and emit a monocart report.',
114
143
  '',
115
144
  'Approve options:',
145
+ ' <story> Positional story to approve (name or path); same as --story.',
116
146
  ' --new-only Only promote new baselines; skip changed.',
147
+ ' --breakpoint <name> Only approve this mode; repeatable. Also --desktop/--mobile/etc.',
117
148
  '',
118
149
  'Supervise options:',
119
150
  ' --healthcheck-interval N Probe interval in ms (default 30_000).',
@@ -122,14 +153,24 @@ function printHelp() {
122
153
  ' --max-respawns N Respawn budget after unhealthy/exit (default 3).',
123
154
  ].join('\n') + '\n');
124
155
  }
156
+ function failExit(message) {
157
+ process.stderr.write(`tuffgal error: ${message}\n`);
158
+ process.exit(1);
159
+ }
125
160
  async function main() {
126
161
  const args = parseArguments(process.argv.slice(2));
127
- if (args.newOnly &&
128
- (args.command === 'run' ||
129
- args.command === 'supervise' ||
130
- args.command === 'init')) {
131
- process.stderr.write('tuffgal error: --new-only is only valid with the `approve` subcommand\n');
132
- process.exit(1);
162
+ // `--new-only` and the breakpoint filters narrow an approval set; they have no
163
+ // meaning on the other subcommands.
164
+ if (args.command !== 'approve') {
165
+ if (args.newOnly) {
166
+ failExit('--new-only is only valid with the `approve` subcommand');
167
+ }
168
+ if (args.breakpoints.length > 0) {
169
+ failExit('--breakpoint (and --desktop/--mobile/…) is only valid with the `approve` subcommand');
170
+ }
171
+ if (args.positional !== undefined) {
172
+ failExit(`unexpected argument "${args.positional}"`);
173
+ }
133
174
  }
134
175
  if (args.command === 'help') {
135
176
  printHelp();
@@ -151,9 +192,18 @@ async function main() {
151
192
  process.exit(result.totals.failed > 0 ? 1 : 0);
152
193
  }
153
194
  if (args.command === 'approve') {
195
+ // A story may be named positionally (`approve user-logs-in`) or via
196
+ // `--story`, but not both.
197
+ if (args.positional !== undefined && args.storyFilter !== undefined) {
198
+ failExit('name a story positionally or with --story, not both');
199
+ }
200
+ const storyFilter = args.positional !== undefined
201
+ ? normaliseStoryArg(args.positional)
202
+ : args.storyFilter;
154
203
  const summary = await approveAll(config, {
155
- storyFilter: args.storyFilter,
204
+ storyFilter,
156
205
  newOnly: args.newOnly,
206
+ breakpoints: args.breakpoints,
157
207
  });
158
208
  process.stdout.write(`\nApproved ${summary.approved} baselines; skipped ${summary.skipped} actions.\n`);
159
209
  }
@@ -166,8 +216,13 @@ async function main() {
166
216
  });
167
217
  }
168
218
  }
169
- main().catch((error) => {
170
- process.stderr.write(`tuffgal error: ${error instanceof Error ? error.message : String(error)}\n`);
171
- process.exit(1);
172
- });
219
+ // Only drive the CLI when run as the entry point. Importing this module (e.g.
220
+ // from a unit test exercising `parseArguments`) must not kick off a real run.
221
+ if (process.argv[1] &&
222
+ import.meta.url === pathToFileURL(process.argv[1]).href) {
223
+ main().catch((error) => {
224
+ process.stderr.write(`tuffgal error: ${error instanceof Error ? error.message : String(error)}\n`);
225
+ process.exit(1);
226
+ });
227
+ }
173
228
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AA+EA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA6C9D"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAoFA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA6C9D"}
@@ -38,6 +38,11 @@ export default defineConfig({
38
38
  // modes via its own \`breakpoints\` field, which replace these for that story.
39
39
  // breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],
40
40
 
41
+ // Screenshot scope. 'viewport' (default) crops to each breakpoint's
42
+ // width x height — what the user sees above the fold. 'fullPage' composites
43
+ // the whole scrollable document, however tall.
44
+ // captureMode: 'viewport',
45
+
41
46
  defaultTimeoutMs: 10_000,
42
47
  navigationTimeoutMs: 15_000,
43
48
  frozenTime: '2026-01-15T12:00:00.000Z',
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,YAAY,GAAG,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;AAEhE,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4DvB,CAAC;AAEF,MAAM,sBAAsB,GAAG;IAC7B,iBAAiB;IACjB,iBAAiB;IACjB,mBAAmB;CACpB,CAAC;AAEF,MAAM,gBAAgB,GAAG;;;CAGxB,CAAC;AAMF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAoB;IAC7C,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IAExB,KAAK,MAAM,SAAS,IAAI,YAAY,EAAE,CAAC;QACrC,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CACb,GAAG,SAAS,sBAAsB,GAAG,2BAA2B;gBAC9D,+CAA+C,CAClD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IAClD,MAAM,SAAS,CAAC,UAAU,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;IACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,SAAS,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,mBAAmB,IAAI,CAC9D,CAAC;IAEF,KAAK,MAAM,YAAY,IAAI,sBAAsB,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACzC,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YACjC,MAAM,SAAS,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;YACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IACzD,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;QACvC,MAAM,SAAS,CAAC,aAAa,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;QACzD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB;QACE,EAAE;QACF,qCAAqC;QACrC,0DAA0D;QAC1D,sDAAsD;QACtD,qDAAqD;QACrD,kDAAkD;QAClD,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,YAAY,GAAG,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;AAEhE,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiEvB,CAAC;AAEF,MAAM,sBAAsB,GAAG;IAC7B,iBAAiB;IACjB,iBAAiB;IACjB,mBAAmB;CACpB,CAAC;AAEF,MAAM,gBAAgB,GAAG;;;CAGxB,CAAC;AAMF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAoB;IAC7C,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IAExB,KAAK,MAAM,SAAS,IAAI,YAAY,EAAE,CAAC;QACrC,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CACb,GAAG,SAAS,sBAAsB,GAAG,2BAA2B;gBAC9D,+CAA+C,CAClD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IAClD,MAAM,SAAS,CAAC,UAAU,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;IACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,SAAS,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,mBAAmB,IAAI,CAC9D,CAAC;IAEF,KAAK,MAAM,YAAY,IAAI,sBAAsB,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACzC,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YACjC,MAAM,SAAS,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;YACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IACzD,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;QACvC,MAAM,SAAS,CAAC,aAAa,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;QACzD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB;QACE,EAAE;QACF,qCAAqC;QACrC,0DAA0D;QAC1D,sDAAsD;QACtD,qDAAqD;QACrD,kDAAkD;QAClD,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;AACJ,CAAC"}
package/dist/config.d.ts CHANGED
@@ -6,7 +6,9 @@
6
6
  export interface DatabaseBridge {
7
7
  /**
8
8
  * Wipes the test database and reseeds the deterministic test user. Called
9
- * once before the scheduler dispatches the first story.
9
+ * once per breakpoint pass, before that pass dispatches its first story — so
10
+ * a single-breakpoint run calls it once, and an N-breakpoint run calls it N
11
+ * times, giving each breakpoint a pristine database. Keep it fast.
10
12
  */
11
13
  reset?: () => Promise<void>;
12
14
  /**
@@ -74,6 +76,15 @@ export declare const BREAKPOINTS: {
74
76
  };
75
77
  /** A built-in breakpoint name. Other modules reuse this for per-mode work. */
76
78
  export type BreakpointName = keyof typeof BREAKPOINTS;
79
+ /**
80
+ * How much of the page each screenshot captures:
81
+ * - `viewport` — only the breakpoint's `width x height` box, matching what a
82
+ * real user sees above the fold. The default.
83
+ * - `fullPage` — the whole scrollable document, however tall. Catches
84
+ * below-the-fold regressions at the cost of viewport fidelity (a long page
85
+ * renders at e.g. 1280x2500 instead of 1280x800).
86
+ */
87
+ export type CaptureMode = 'viewport' | 'fullPage';
77
88
  /**
78
89
  * One resolved breakpoint mode: a name plus the viewport dimensions to render
79
90
  * at. Built from a {@link BreakpointSelector} (a registry entry, optionally
@@ -144,6 +155,13 @@ export interface TuffgalConfig {
144
155
  * the field to run a single `desktop` breakpoint (1280x800).
145
156
  */
146
157
  breakpoints?: BreakpointSelector[];
158
+ /**
159
+ * How much of the page each screenshot captures. `viewport` (default) crops
160
+ * to the breakpoint's `width x height` so diffs reflect what the user sees
161
+ * above the fold; `fullPage` composites the whole scrollable document. See
162
+ * {@link CaptureMode}.
163
+ */
164
+ captureMode?: CaptureMode;
147
165
  /** Default Playwright locator + action timeout. Defaults to 10_000. */
148
166
  defaultTimeoutMs?: number;
149
167
  /** Default navigation timeout. Defaults to 15_000. */
@@ -167,6 +185,12 @@ export interface TuffgalConfig {
167
185
  * `customCoverage.flows` in the report.
168
186
  */
169
187
  flowInventory?: string;
188
+ /**
189
+ * Render the interactive screenshot viewer instead of the static radio-tab
190
+ * report. Defaults to `false`, so the report keeps its historical radio-tab
191
+ * output unless a project explicitly opts in.
192
+ */
193
+ interactiveMode?: boolean;
170
194
  }
171
195
  /**
172
196
  * Resolved config — every optional field replaced with a concrete value
@@ -187,6 +211,8 @@ export interface ResolvedConfig {
187
211
  * noUncheckedIndexedAccess.
188
212
  */
189
213
  breakpoints: [ResolvedBreakpoint, ...ResolvedBreakpoint[]];
214
+ /** Resolved screenshot scope; defaults to `viewport`. */
215
+ captureMode: CaptureMode;
190
216
  defaultTimeoutMs: number;
191
217
  navigationTimeoutMs: number;
192
218
  frozenTime: string;
@@ -194,6 +220,8 @@ export interface ResolvedConfig {
194
220
  database: DatabaseBridge | undefined;
195
221
  devServers: DevServerBridge | undefined;
196
222
  flowInventory: string | undefined;
223
+ /** Resolved interactive-viewer flag; defaults to `false`. */
224
+ interactiveMode: boolean;
197
225
  }
198
226
  /**
199
227
  * Helper that returns its argument unchanged. Use in a `tuffgal.config.ts`
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/config.js CHANGED
@@ -29,10 +29,12 @@ export const BREAKPOINTS = {
29
29
  desktop: { width: 1280, height: 800 },
30
30
  };
31
31
  const DEFAULTS = {
32
+ captureMode: 'viewport',
32
33
  defaultTimeoutMs: 10_000,
33
34
  navigationTimeoutMs: 15_000,
34
35
  frozenTime: '2026-01-15T12:00:00.000Z',
35
36
  authStateRelative: '.auth',
37
+ interactiveMode: false,
36
38
  };
37
39
  /**
38
40
  * Helper that returns its argument unchanged. Use in a `tuffgal.config.ts`
@@ -114,6 +116,15 @@ export function assertValidConfig(input, source) {
114
116
  fail(`\`${key}\` must be a string when provided.`);
115
117
  }
116
118
  }
119
+ if (config.interactiveMode !== undefined &&
120
+ typeof config.interactiveMode !== 'boolean') {
121
+ fail('`interactiveMode` must be a boolean when provided.');
122
+ }
123
+ if (config.captureMode !== undefined &&
124
+ config.captureMode !== 'viewport' &&
125
+ config.captureMode !== 'fullPage') {
126
+ fail("`captureMode` must be 'viewport' or 'fullPage' when provided.");
127
+ }
117
128
  if (config.breakpoints !== undefined) {
118
129
  const validNames = Object.keys(BREAKPOINTS);
119
130
  const breakpoints = config.breakpoints;
@@ -132,7 +143,8 @@ export function assertValidConfig(input, source) {
132
143
  const override = entry;
133
144
  for (const dim of ['width', 'height']) {
134
145
  if (override[dim] !== undefined &&
135
- (typeof override[dim] !== 'number' || override[dim] <= 0)) {
146
+ (typeof override[dim] !== 'number' ||
147
+ override[dim] <= 0)) {
136
148
  fail(`\`breakpoints[].${dim}\` must be a positive number when provided.`);
137
149
  }
138
150
  }
@@ -155,6 +167,7 @@ function resolveConfig(input, rootDir) {
155
167
  apiHost: input.apiHost,
156
168
  storageStatePins: input.storageStatePins ?? [],
157
169
  breakpoints,
170
+ captureMode: input.captureMode ?? DEFAULTS.captureMode,
158
171
  defaultTimeoutMs: input.defaultTimeoutMs ?? DEFAULTS.defaultTimeoutMs,
159
172
  navigationTimeoutMs: input.navigationTimeoutMs ?? DEFAULTS.navigationTimeoutMs,
160
173
  frozenTime: input.frozenTime ?? DEFAULTS.frozenTime,
@@ -164,6 +177,7 @@ function resolveConfig(input, rootDir) {
164
177
  flowInventory: input.flowInventory
165
178
  ? resolve(rootDir, input.flowInventory)
166
179
  : undefined,
180
+ interactiveMode: input.interactiveMode ?? DEFAULTS.interactiveMode,
167
181
  };
168
182
  }
169
183
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AA4C1C;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;IACnC,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;IACpC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;IACpC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;CAC7B,CAAC;AAiIX,MAAM,QAAQ,GAAG;IACf,gBAAgB,EAAE,MAAM;IACxB,mBAAmB,EAAE,MAAM;IAC3B,UAAU,EAAE,0BAA0B;IACtC,iBAAiB,EAAE,OAAO;CAClB,CAAC;AAEX;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAAqB;IAChD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW;IAC1C,MAAM,UAAU,GAAG,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;IAC9D,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,kCAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAC,CAEzD,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,GAAG,SAAS,aAAa,QAAQ,uCAAuC;gBACtE,0DAA0D,CAC7D,CAAC;QACJ,CAAC;QACD,iBAAiB,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC5C,OAAO,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,MAAM,IAAI,KAAK,CACb,sDAAsD,GAAG,QAAQ;QAC/D,uCAAuC,CAC1C,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAc,EAAE,MAAc;IAC9D,MAAM,IAAI,GAAG,CAAC,MAAc,EAAS,EAAE;QACrC,MAAM,IAAI,KAAK,CAAC,6BAA6B,MAAM,KAAK,MAAM,EAAE,CAAC,CAAC;IACpE,CAAC,CAAC;IACF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,IAAI,CAAC,6CAA6C,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,MAAM,GAAG,KAAgC,CAAC;IAEhD,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QAC9D,IAAI,CAAC,4CAA4C,CAAC,CAAC;IACrD,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAgC,CAAC;IACtD,KAAK,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAU,EAAE,CAAC;QACzE,IAAI,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,WAAW,GAAG,sCAAsC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QACzE,IAAI,CAAC,mDAAmD,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACvC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,MAAM,GAAG,IAAI;QAChB,kBAAkB;QAClB,qBAAqB;QACrB,SAAS;KACD,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC;YACrE,IAAI,CAAC,KAAK,GAAG,6CAA6C,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,EAAE,eAAe,CAAU,EAAE,CAAC;QACtE,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;YACjE,IAAI,CAAC,KAAK,GAAG,oCAAoC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5D,IAAI,CACF,iEAAiE;gBAC/D,mBAAmB,CACtB,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,WAAwB,EAAE,CAAC;YAC7C,MAAM,IAAI,GACR,OAAO,KAAK,KAAK,QAAQ;gBACvB,CAAC,CAAC,KAAK;gBACP,CAAC,CAAE,KAAmC,EAAE,IAAI,CAAC;YACjD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3D,IAAI,CACF,kDAAkD,IAAI,CAAC,SAAS,CAC9D,KAAK,CACN,kBAAkB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC5C,CAAC;YACJ,CAAC;YACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAChD,MAAM,QAAQ,GAAG,KAAgC,CAAC;gBAClD,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAU,EAAE,CAAC;oBAC/C,IACE,QAAQ,CAAC,GAAG,CAAC,KAAK,SAAS;wBAC3B,CAAC,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAK,QAAQ,CAAC,GAAG,CAAY,IAAI,CAAC,CAAC,EACrE,CAAC;wBACD,IAAI,CACF,mBAAmB,GAAG,6CAA6C,CACpE,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAoB,EAAE,OAAe;IAC1D,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO;QACL,OAAO;QACP,KAAK,EAAE;YACL,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;YAC9C,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;YAC9C,SAAS,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;YAClD,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;YAC5C,SAAS,EAAE,OAAO,CAChB,OAAO,EACP,KAAK,CAAC,KAAK,CAAC,SAAS,IAAI,QAAQ,CAAC,iBAAiB,CACpD;SACF;QACD,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,IAAI,EAAE;QAC9C,WAAW;QACX,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,IAAI,QAAQ,CAAC,gBAAgB;QACrE,mBAAmB,EACjB,KAAK,CAAC,mBAAmB,IAAI,QAAQ,CAAC,mBAAmB;QAC3D,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU;QACnD,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,aAAa,EAAE,KAAK,CAAC,aAAa;YAChC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC;YACvC,CAAC,CAAC,SAAS;KACd,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,QAA4B;IACrD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;IACtD,CAAC;IACD,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK;QACnC,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM;KACvC,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,SAA+B;IAE/B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,QAAQ,GAAyB,EAAE,CAAC;IAC1C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QACxC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC1B,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,kBAAkB,CACzB,KAAoB;IAEpB,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,OAAO,mBAAmB,CAAC,KAAK,CAAC,WAAW,CAG3C,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;AACvD,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -57,6 +57,15 @@
57
57
  box-sizing: border-box;
58
58
  }
59
59
 
60
+ /* The story filter prunes stories, breakpoint groups, and actions by toggling
61
+ the native `hidden` attribute. Those are layout containers, so a future
62
+ `display:` rule on `.action`/`.breakpoint-group` would outrank the UA
63
+ `[hidden]` default and silently resurrect filtered rows as visible and
64
+ keyboard-focusable. Pin it so `hidden` always wins. */
65
+ [hidden] {
66
+ display: none !important;
67
+ }
68
+
60
69
  html {
61
70
  -webkit-font-smoothing: antialiased;
62
71
  -moz-osx-font-smoothing: grayscale;
@@ -182,6 +191,10 @@ h2 {
182
191
  color: var(--pass);
183
192
  }
184
193
 
194
+ .summary-item[data-status='new'] .indicator {
195
+ color: var(--new);
196
+ }
197
+
185
198
  .summary-item[data-status='changed'] .indicator {
186
199
  color: var(--changed);
187
200
  }
@@ -331,6 +344,10 @@ h2 {
331
344
  box-shadow: inset 3px 0 0 var(--failed);
332
345
  }
333
346
 
347
+ .story[data-status='new'] {
348
+ box-shadow: inset 3px 0 0 var(--new);
349
+ }
350
+
334
351
  .story[data-status='changed'] {
335
352
  box-shadow: inset 3px 0 0 var(--changed);
336
353
  }
@@ -357,6 +374,11 @@ h2 {
357
374
  color: var(--pass);
358
375
  }
359
376
 
377
+ .story[data-status='new'] .story-marker,
378
+ .story[data-status='new'] .story-file {
379
+ color: var(--new);
380
+ }
381
+
360
382
  .story[data-status='changed'] .story-marker,
361
383
  .story[data-status='changed'] .story-file {
362
384
  color: var(--changed);
@@ -380,7 +402,9 @@ h2 {
380
402
  text-wrap: pretty;
381
403
  }
382
404
 
383
- .breakpoint-group + .breakpoint-group {
405
+ /* `:not([hidden])` on both sides so a filter that hides the first group does
406
+ not strand its separator on the new first-visible group. */
407
+ .breakpoint-group:not([hidden]) + .breakpoint-group:not([hidden]) {
384
408
  margin-top: 0.75rem;
385
409
  padding-top: 0.75rem;
386
410
  border-top: 1px dashed var(--border);
@@ -629,6 +653,69 @@ summary.action-row:focus-visible {
629
653
  color: var(--text-subtle);
630
654
  }
631
655
 
656
+ /* No diff image to show (dimension mismatch). The note IS the primary content
657
+ of this slot, so it keeps full `--text` weight; italic alone marks the
658
+ "no data" state. */
659
+ .diff-stats--unavailable .label {
660
+ font-style: italic;
661
+ }
662
+
663
+ /* Interactive screenshot viewer (interactiveMode). The radio group + caption
664
+ sit in this fieldset, which lives OUTSIDE the clipped `.shot-stage`, so the
665
+ chip focus ring is never clipped by the stage overflow nor painted over
666
+ screenshot pixels. The chips reuse `.chip--toggle` (border `--border-bright`,
667
+ `--accent` focus ring), so no new focus tokens are introduced here. */
668
+ .shot-interactive {
669
+ display: flex;
670
+ flex-wrap: wrap;
671
+ align-items: center;
672
+ gap: 0.5rem;
673
+ margin: 0.5rem 0 0.5rem 2.2rem;
674
+ padding: 0;
675
+ border: 0;
676
+ }
677
+
678
+ /* Persistent caption naming the committed variant. Text on `--text` (≥4.5:1),
679
+ so the active variant is never conveyed by color alone — it pairs the checked
680
+ chip's accent border with this readable label. aria-hidden keeps it visual
681
+ only: the checked radio is the single accessible source of committed state. */
682
+ .shot-caption {
683
+ margin: 0 0 0 0.25rem;
684
+ color: var(--text);
685
+ font-size: 0.8125rem;
686
+ }
687
+
688
+ .shot-caption-variant {
689
+ font-weight: 600;
690
+ }
691
+
692
+ /* The stage clips the screenshot to the viewport height. Its border uses
693
+ `--border-bright` (3:1 non-text contrast). overflow:hidden only ever clips
694
+ the image — the controls live in the sibling fieldset above. */
695
+ .shot-stage {
696
+ margin-top: 0.5rem;
697
+ margin-left: 2.2rem;
698
+ padding: 0.5rem;
699
+ border: 1px solid var(--border-bright);
700
+ background: var(--bg);
701
+ width: fit-content;
702
+ max-width: 100%;
703
+ overflow: hidden;
704
+ }
705
+
706
+ /* Scale the screenshot to fit within the viewport height (and the panel width)
707
+ so a tall capture never forces the page to scroll. width/height:auto preserve
708
+ the aspect ratio while `max-height` caps it to the viewport. */
709
+ .shot-image {
710
+ display: block;
711
+ width: auto;
712
+ height: auto;
713
+ max-width: 100%;
714
+ max-height: 85vh;
715
+ outline: 1px solid var(--img-outline);
716
+ outline-offset: -1px;
717
+ }
718
+
632
719
  @media (prefers-reduced-motion: reduce) {
633
720
  .skip-link,
634
721
  summary.action-row::after,