tuffgal 0.1.0-alpha.8 → 0.1.0-alpha.9

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
@@ -6,6 +6,28 @@ this project uses [Pride Versioning](https://pridever.org) → `PROUD.DEFAULT.SH
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ _Nothing right now_
10
+
11
+ ## [0.1.0-alpha.9] — 2026-06-21
12
+
13
+ ### Added
14
+
15
+ - Breakpoint modes, replacing the single `viewport` config
16
+ - `mobile` 375×667 / `tablet` 768×1024 / `laptop` 1024×768 / `desktop` 1280×800
17
+ - Each mode runs in its own browser context + produces its own baselines
18
+ - Each `config.breakpoints` entry is a bare name (registry dimensions) or `{ name, width?, height? }` to override that mode's size; an omitted axis inherits the registry default
19
+ - Order preserved; when a name repeats, the first entry wins
20
+ - Omit `breakpoints` to run a single `desktop` mode (1280×800)
21
+ - Per-story `breakpoints` field, same shape, that **replaces** the project's modes for that story — a story may run a mode the project does not configure, and its overrides resolve against the registry
22
+ - Breakpoint grouping in the HTML report, each group labelled with the real capture size; a single-mode story renders as a flat list with no breakpoint chrome
23
+ - Pre-breakpoint baselines at `<action>/0.png` are read as fallbacks until promoted
24
+
25
+ ### Removed
26
+
27
+ **Breaking:** `viewport` config field + per-story `viewport` override. Set
28
+ a single mode's size with `breakpoints: [{ name: 'desktop', width, height }]`
29
+ instead.
30
+
9
31
  ## [0.1.0-alpha.8] — 2026-06-20
10
32
 
11
33
  ### Fixed
@@ -117,7 +139,8 @@ styling or interactivity.
117
139
  Initial public alpha. Tuffgal extracted from [Linklater](https://github.com/nschneble/linklater)'s
118
140
  in-tree visual testing workspace.
119
141
 
120
- [Unreleased]: https://github.com/nschneble/tuffgal/compare/v0.1.0-alpha.8...HEAD
142
+ [Unreleased]: https://github.com/nschneble/tuffgal/compare/v0.1.0-alpha.9...HEAD
143
+ [0.1.0-alpha.9]: https://github.com/nschneble/tuffgal/releases/tag/v0.1.0-alpha.9
121
144
  [0.1.0-alpha.8]: https://github.com/nschneble/tuffgal/releases/tag/v0.1.0-alpha.8
122
145
  [0.1.0-alpha.7]: https://github.com/nschneble/tuffgal/releases/tag/v0.1.0-alpha.7
123
146
  [0.1.0-alpha.6]: https://github.com/nschneble/tuffgal/releases/tag/v0.1.0-alpha.6
package/README.md CHANGED
@@ -6,7 +6,7 @@ JSON-driven visual regression testing for web apps.
6
6
 
7
7
  <img src="tuffgal.png" alt="Tuffgal" />
8
8
 
9
- **Status:** Pre-1.0. Published on npm as `tuffgal@0.1.0-alpha.7` with
9
+ **Status:** Pre-1.0. Published on npm as `tuffgal@0.1.0-alpha.{n}` with
10
10
  provenance. [Linklater](https://github.com/nschneble/linklater) is the
11
11
  pilot consumer.
12
12
 
@@ -27,6 +27,9 @@ When a screenshot changes, a human reviews the diff and decides what to do.
27
27
  - 9 step primitives composed into actions: `click`, `input`, `intercept`,
28
28
  `navigate`, `read`, `scroll`, `type`, `wait`, `waitFor`
29
29
  - An implicit screenshot at the end of every action
30
+ - Named breakpoint modes (`mobile`, `tablet`, `laptop`, `desktop`) keyed to
31
+ Tailwind widths. Pick which to run per project or per story. Each mode
32
+ gets its own baseline and a per-mode group in the HTML report
30
33
  - DAG scheduler with `needs`/`produces` labels and parallel workers
31
34
  - SSIM-gated visual diff + pixelmatch overlay + a11y-tree snapshots
32
35
  - Trace zip on failure (Playwright trace viewer)
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAwEA,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":"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"}
@@ -30,7 +30,14 @@ export default defineConfig({
30
30
  // leave this empty — cookies always persist via Playwright storage state.
31
31
  // storageStatePins: ['session_token'],
32
32
 
33
- viewport: { width: 1280, height: 800 },
33
+ // Breakpoint modes to run, keyed to Tailwind widths:
34
+ // mobile 375x667 · tablet 768x1024 · laptop 1024x768 · desktop 1280x800
35
+ // Each mode gets its own baseline + a group in the report. Omit to run a
36
+ // single \`desktop\` mode (1280x800). Override a mode's size with an object,
37
+ // e.g. { name: 'desktop', width: 1440, height: 900 }. A story can run its own
38
+ // modes via its own \`breakpoints\` field, which replace these for that story.
39
+ // breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],
40
+
34
41
  defaultTimeoutMs: 10_000,
35
42
  navigationTimeoutMs: 15_000,
36
43
  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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqDvB,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
package/dist/config.d.ts CHANGED
@@ -41,6 +41,63 @@ export interface DevServerBridge {
41
41
  /** Grace period before `SIGKILL`. Defaults to 5000. */
42
42
  shutdownGraceMs?: number;
43
43
  }
44
+ /**
45
+ * Built-in named viewport modes. Widths track Tailwind's default dimensional
46
+ * breakpoints (sm=640, md=768, lg=1024, xl=1280) so a project's Tuffgal runs
47
+ * line up with the responsive cutoffs its CSS already keys off of:
48
+ * - mobile sits below the sm=640 cutoff (small-phone portrait)
49
+ * - tablet lands exactly on md=768
50
+ * - laptop lands exactly on lg=1024
51
+ * - desktop lands exactly on xl=1280, and preserves the historical
52
+ * 1280x800 default so projects that never opt into breakpoints render
53
+ * identically to before this feature existed.
54
+ * Heights are conventional companions to each width, not Tailwind values
55
+ * (Tailwind breakpoints are width-only).
56
+ */
57
+ export declare const BREAKPOINTS: {
58
+ readonly mobile: {
59
+ readonly width: 375;
60
+ readonly height: 667;
61
+ };
62
+ readonly tablet: {
63
+ readonly width: 768;
64
+ readonly height: 1024;
65
+ };
66
+ readonly laptop: {
67
+ readonly width: 1024;
68
+ readonly height: 768;
69
+ };
70
+ readonly desktop: {
71
+ readonly width: 1280;
72
+ readonly height: 800;
73
+ };
74
+ };
75
+ /** A built-in breakpoint name. Other modules reuse this for per-mode work. */
76
+ export type BreakpointName = keyof typeof BREAKPOINTS;
77
+ /**
78
+ * One resolved breakpoint mode: a name plus the viewport dimensions to render
79
+ * at. Built from a {@link BreakpointSelector} (a registry entry, optionally
80
+ * with a dimension override). Exported so the runner consumes the same shape
81
+ * `resolveConfig` emits instead of redeclaring its own copy.
82
+ */
83
+ export type ResolvedBreakpoint = {
84
+ name: string;
85
+ width: number;
86
+ height: number;
87
+ };
88
+ /**
89
+ * One breakpoint selection in `config.breakpoints` (and per-story
90
+ * `breakpoints`): either a bare registry name — render at that mode's built-in
91
+ * dimensions — or `{ name, width?, height? }` to override the viewport for that
92
+ * mode. An omitted `width`/`height` inherits the registry default for the
93
+ * named mode. Bare-string entries keep older `['mobile', 'desktop']` configs
94
+ * working unchanged.
95
+ */
96
+ export type BreakpointSelector = BreakpointName | {
97
+ name: BreakpointName;
98
+ width?: number;
99
+ height?: number;
100
+ };
44
101
  /**
45
102
  * Static paths Tuffgal reads + writes. All relative to the config file's
46
103
  * location.
@@ -77,11 +134,16 @@ export interface TuffgalConfig {
77
134
  * state.
78
135
  */
79
136
  storageStatePins?: string[];
80
- /** Browser viewport. Defaults to 1280x800. */
81
- viewport?: {
82
- width: number;
83
- height: number;
84
- };
137
+ /**
138
+ * Breakpoint modes this project runs, drawn from the built-in
139
+ * {@link BREAKPOINTS} registry (`mobile` | `tablet` | `laptop` | `desktop`).
140
+ * Each entry is either a bare name (registry dimensions) or
141
+ * `{ name, width?, height? }` to override that mode's viewport — an omitted
142
+ * `width`/`height` inherits the registry default. Order is preserved; when a
143
+ * name repeats, the first entry wins and later duplicates are dropped. Omit
144
+ * the field to run a single `desktop` breakpoint (1280x800).
145
+ */
146
+ breakpoints?: BreakpointSelector[];
85
147
  /** Default Playwright locator + action timeout. Defaults to 10_000. */
86
148
  defaultTimeoutMs?: number;
87
149
  /** Default navigation timeout. Defaults to 15_000. */
@@ -117,10 +179,14 @@ export interface ResolvedConfig {
117
179
  baseUrl: string;
118
180
  apiHost: string | undefined;
119
181
  storageStatePins: string[];
120
- viewport: {
121
- width: number;
122
- height: number;
123
- };
182
+ /**
183
+ * Resolved breakpoint modes, always non-empty. Each entry carries the
184
+ * viewport dimensions to render at. Built from `config.breakpoints` when set,
185
+ * else a single `desktop` default. Typed as a non-empty tuple so callers can
186
+ * read `breakpoints[0]` without an undefined check under
187
+ * noUncheckedIndexedAccess.
188
+ */
189
+ breakpoints: [ResolvedBreakpoint, ...ResolvedBreakpoint[]];
124
190
  defaultTimeoutMs: number;
125
191
  navigationTimeoutMs: number;
126
192
  frozenTime: string;
@@ -150,4 +216,12 @@ export declare function loadConfig(cwd: string): Promise<ResolvedConfig>;
150
216
  * own call sites. `source` is the config file path, surfaced in every message.
151
217
  */
152
218
  export declare function assertValidConfig(input: unknown, source: string): void;
219
+ /**
220
+ * Resolves a list of selectors to concrete breakpoints, preserving order and
221
+ * dropping duplicate names (first entry wins). Shared by config-level and
222
+ * per-story breakpoint resolution so both normalise the same way: each list
223
+ * stands alone, resolved against the registry, never cross-referencing the
224
+ * other. The caller guarantees the input is non-empty.
225
+ */
226
+ export declare function resolveSelectorList(selectors: BreakpointSelector[]): ResolvedBreakpoint[];
153
227
  //# sourceMappingURL=config.d.ts.map
@@ -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
@@ -9,8 +9,26 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
9
9
  import { pathToFileURL } from 'node:url';
10
10
  import { resolve } from 'node:path';
11
11
  import { access } from 'node:fs/promises';
12
+ /**
13
+ * Built-in named viewport modes. Widths track Tailwind's default dimensional
14
+ * breakpoints (sm=640, md=768, lg=1024, xl=1280) so a project's Tuffgal runs
15
+ * line up with the responsive cutoffs its CSS already keys off of:
16
+ * - mobile sits below the sm=640 cutoff (small-phone portrait)
17
+ * - tablet lands exactly on md=768
18
+ * - laptop lands exactly on lg=1024
19
+ * - desktop lands exactly on xl=1280, and preserves the historical
20
+ * 1280x800 default so projects that never opt into breakpoints render
21
+ * identically to before this feature existed.
22
+ * Heights are conventional companions to each width, not Tailwind values
23
+ * (Tailwind breakpoints are width-only).
24
+ */
25
+ export const BREAKPOINTS = {
26
+ mobile: { width: 375, height: 667 },
27
+ tablet: { width: 768, height: 1024 },
28
+ laptop: { width: 1024, height: 768 },
29
+ desktop: { width: 1280, height: 800 },
30
+ };
12
31
  const DEFAULTS = {
13
- viewport: { width: 1280, height: 800 },
14
32
  defaultTimeoutMs: 10_000,
15
33
  navigationTimeoutMs: 15_000,
16
34
  frozenTime: '2026-01-15T12:00:00.000Z',
@@ -96,17 +114,34 @@ export function assertValidConfig(input, source) {
96
114
  fail(`\`${key}\` must be a string when provided.`);
97
115
  }
98
116
  }
99
- if (config.viewport !== undefined) {
100
- const viewport = config.viewport;
101
- if (typeof viewport !== 'object' ||
102
- viewport === null ||
103
- typeof viewport.width !== 'number' ||
104
- typeof viewport.height !== 'number') {
105
- fail('`viewport` must be `{ width: number, height: number }`.');
117
+ if (config.breakpoints !== undefined) {
118
+ const validNames = Object.keys(BREAKPOINTS);
119
+ const breakpoints = config.breakpoints;
120
+ if (!Array.isArray(breakpoints) || breakpoints.length === 0) {
121
+ fail('`breakpoints` must be a non-empty array of breakpoint names or ' +
122
+ 'override objects.');
123
+ }
124
+ for (const entry of breakpoints) {
125
+ const name = typeof entry === 'string'
126
+ ? entry
127
+ : entry?.name;
128
+ if (typeof name !== 'string' || !validNames.includes(name)) {
129
+ fail(`\`breakpoints\` contains an unknown breakpoint ${JSON.stringify(entry)}. Valid names: ${validNames.join(', ')}.`);
130
+ }
131
+ if (typeof entry === 'object' && entry !== null) {
132
+ const override = entry;
133
+ for (const dim of ['width', 'height']) {
134
+ if (override[dim] !== undefined &&
135
+ (typeof override[dim] !== 'number' || override[dim] <= 0)) {
136
+ fail(`\`breakpoints[].${dim}\` must be a positive number when provided.`);
137
+ }
138
+ }
139
+ }
106
140
  }
107
141
  }
108
142
  }
109
143
  function resolveConfig(input, rootDir) {
144
+ const breakpoints = resolveBreakpoints(input);
110
145
  return {
111
146
  rootDir,
112
147
  paths: {
@@ -119,7 +154,7 @@ function resolveConfig(input, rootDir) {
119
154
  baseUrl: input.baseUrl,
120
155
  apiHost: input.apiHost,
121
156
  storageStatePins: input.storageStatePins ?? [],
122
- viewport: input.viewport ?? DEFAULTS.viewport,
157
+ breakpoints,
123
158
  defaultTimeoutMs: input.defaultTimeoutMs ?? DEFAULTS.defaultTimeoutMs,
124
159
  navigationTimeoutMs: input.navigationTimeoutMs ?? DEFAULTS.navigationTimeoutMs,
125
160
  frozenTime: input.frozenTime ?? DEFAULTS.frozenTime,
@@ -131,4 +166,55 @@ function resolveConfig(input, rootDir) {
131
166
  : undefined,
132
167
  };
133
168
  }
169
+ /**
170
+ * Resolves one {@link BreakpointSelector} to its concrete dimensions: a bare
171
+ * name takes the registry defaults, an override object layers its `width`/
172
+ * `height` over them. Validation guarantees the name is a valid registry key
173
+ * by the time we get here.
174
+ */
175
+ function normaliseSelector(selector) {
176
+ if (typeof selector === 'string') {
177
+ return { name: selector, ...BREAKPOINTS[selector] };
178
+ }
179
+ const base = BREAKPOINTS[selector.name];
180
+ return {
181
+ name: selector.name,
182
+ width: selector.width ?? base.width,
183
+ height: selector.height ?? base.height,
184
+ };
185
+ }
186
+ /**
187
+ * Resolves a list of selectors to concrete breakpoints, preserving order and
188
+ * dropping duplicate names (first entry wins). Shared by config-level and
189
+ * per-story breakpoint resolution so both normalise the same way: each list
190
+ * stands alone, resolved against the registry, never cross-referencing the
191
+ * other. The caller guarantees the input is non-empty.
192
+ */
193
+ export function resolveSelectorList(selectors) {
194
+ const seen = new Set();
195
+ const resolved = [];
196
+ for (const selector of selectors) {
197
+ const breakpoint = normaliseSelector(selector);
198
+ if (seen.has(breakpoint.name))
199
+ continue;
200
+ seen.add(breakpoint.name);
201
+ resolved.push(breakpoint);
202
+ }
203
+ return resolved;
204
+ }
205
+ /**
206
+ * Resolves `config.breakpoints` to an always-non-empty list: the explicit
207
+ * selectors when set (order preserved, duplicate names dropped — first wins),
208
+ * else a single `desktop` breakpoint (1280x800). `assertValidConfig` has
209
+ * already rejected unknown/empty `breakpoints`, so a non-empty input dedupes to
210
+ * at least one entry; the cast restores the non-empty tuple type that lets
211
+ * `breakpoints[0]` read without an undefined check under
212
+ * noUncheckedIndexedAccess.
213
+ */
214
+ function resolveBreakpoints(input) {
215
+ if (input.breakpoints && input.breakpoints.length > 0) {
216
+ return resolveSelectorList(input.breakpoints);
217
+ }
218
+ return [{ name: 'desktop', ...BREAKPOINTS.desktop }];
219
+ }
134
220
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { defineConfig, loadConfig, type DatabaseBridge, type DevServerBridge, type PathsConfig, type ResolvedConfig, type TuffgalConfig, } from './config.ts';
1
+ export { BREAKPOINTS, defineConfig, loadConfig, type BreakpointName, type BreakpointSelector, type DatabaseBridge, type DevServerBridge, type PathsConfig, type ResolvedConfig, type TuffgalConfig, } from './config.ts';
2
2
  export { init, type InitOptions } from './commands/init.ts';
3
3
  export { supervise, type SuperviseOptions } from './commands/supervise.ts';
4
4
  export { approveAll, type ApproveOptions } from './runner/approve.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,YAAY,EACZ,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3E,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE7D,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC7D,YAAY,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,WAAW,EACX,WAAW,GACZ,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,WAAW,EACX,YAAY,EACZ,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3E,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE7D,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC7D,YAAY,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,WAAW,EACX,WAAW,GACZ,MAAM,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  // Public API. Consumer projects only import what's exported here. Anything
2
2
  // else comes with a giant "DON'T DO IT" sticker and may change, break, or
3
3
  // straight up disappear between releases.
4
- export { defineConfig, loadConfig, } from "./config.js";
4
+ export { BREAKPOINTS, defineConfig, loadConfig, } from "./config.js";
5
5
  export { init } from "./commands/init.js";
6
6
  export { supervise } from "./commands/supervise.js";
7
7
  export { approveAll } from "./runner/approve.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,0EAA0E;AAC1E,0CAA0C;AAE1C,OAAO,EACL,YAAY,EACZ,UAAU,GAMX,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,IAAI,EAAoB,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAyB,MAAM,yBAAyB,CAAC;AAE3E,OAAO,EAAE,UAAU,EAAuB,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,MAAM,EAAsB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,0EAA0E;AAC1E,0CAA0C;AAE1C,OAAO,EACL,WAAW,EACX,YAAY,EACZ,UAAU,GAQX,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,IAAI,EAAoB,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAyB,MAAM,yBAAyB,CAAC;AAE3E,OAAO,EAAE,UAAU,EAAuB,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,MAAM,EAAsB,MAAM,iBAAiB,CAAC"}
@@ -380,6 +380,32 @@ h2 {
380
380
  text-wrap: pretty;
381
381
  }
382
382
 
383
+ .breakpoint-group + .breakpoint-group {
384
+ margin-top: 0.75rem;
385
+ padding-top: 0.75rem;
386
+ border-top: 1px dashed var(--border);
387
+ }
388
+
389
+ .breakpoint-label {
390
+ display: flex;
391
+ align-items: baseline;
392
+ gap: 0.5rem;
393
+ margin: 0 0 0.25rem;
394
+ font-size: 0.75rem;
395
+ letter-spacing: 0.05em;
396
+ text-transform: uppercase;
397
+ }
398
+
399
+ .breakpoint-name {
400
+ color: var(--accent);
401
+ font-weight: 600;
402
+ }
403
+
404
+ .breakpoint-dimensions {
405
+ color: var(--text-subtle);
406
+ text-transform: none;
407
+ }
408
+
383
409
  .actions {
384
410
  position: relative;
385
411
  margin: 0;
@@ -561,11 +587,13 @@ summary.action-row:focus-visible {
561
587
  padding: 0.5rem;
562
588
  border: 1px solid var(--border);
563
589
  background: var(--bg);
590
+ width: fit-content;
591
+ max-width: 100%;
564
592
  }
565
593
 
566
594
  .shot-panel img {
567
595
  display: block;
568
- width: 100%;
596
+ max-width: 100%;
569
597
  height: auto;
570
598
  outline: 1px solid var(--img-outline);
571
599
  outline-offset: -1px;
@@ -132,9 +132,6 @@ function storyFilterRadio(status, checked) {
132
132
  `;
133
133
  }
134
134
  function renderStory(story, storyIndex, reportDir) {
135
- const actions = story.actions
136
- .map((action, actionIndex) => renderAction(action, `s${storyIndex}-a${actionIndex}`, reportDir))
137
- .join('\n');
138
135
  return `
139
136
  <li class="story" data-status="${story.status}">
140
137
  <div class="story-row">
@@ -145,10 +142,101 @@ function renderStory(story, storyIndex, reportDir) {
145
142
  </div>
146
143
  <p class="story-prose">${escapeHtml(story.story)}</p>
147
144
  <br/>
148
- <ol class="actions" aria-label="Actions">
145
+ ${renderStoryActions(story, storyIndex, reportDir)}
146
+ </li>
147
+ `;
148
+ }
149
+ /**
150
+ * Renders a story's action results as one labelled group per breakpoint, in
151
+ * first-seen order (which the runner emits in run-set order). Two shapes:
152
+ *
153
+ * - Single mode: when the story ran at exactly one breakpoint (the common
154
+ * default `desktop` project), we render the historical flat
155
+ * `<ol class="actions">` with no per-mode caption — no breakpoint chrome
156
+ * when there is only one mode to show.
157
+ * - Multi mode: when the story ran at two or more breakpoints, we render one
158
+ * labelled group per mode so a reader sees results per mode instead of a
159
+ * flat interleaved list. An action with `screenshot:false` still appears
160
+ * once per breakpoint — it simply renders as a shot-less row in its mode's
161
+ * group, no special-casing needed.
162
+ *
163
+ * `actionId` is keyed by the action's index in the original flat array
164
+ * (`s<story>-a<flatIndex>`), NOT a per-group counter, so radio `name`s and
165
+ * shot-panel `id`s stay globally unique across groups and report.js's
166
+ * `name="<actionId>-shot"` radio grouping never collides between modes.
167
+ */
168
+ function renderStoryActions(story, storyIndex, reportDir) {
169
+ // Bucket actions by breakpoint, preserving first-seen order.
170
+ const order = [];
171
+ const buckets = new Map();
172
+ story.actions.forEach((action, actionIndex) => {
173
+ const key = action.breakpoint ?? '';
174
+ if (!buckets.has(key)) {
175
+ buckets.set(key, []);
176
+ order.push(key);
177
+ }
178
+ buckets.get(key).push({ action, id: `s${storyIndex}-a${actionIndex}` });
179
+ });
180
+ // One mode (or untagged) → flat list, no caption. Captions only earn their
181
+ // chrome when there is more than one mode to tell apart.
182
+ if (order.length <= 1) {
183
+ const actions = story.actions
184
+ .map((action, actionIndex) => renderAction(action, `s${storyIndex}-a${actionIndex}`, reportDir))
185
+ .join('\n');
186
+ return `<ol class="actions" aria-label="Actions">
187
+ ${actions}
188
+ </ol>`;
189
+ }
190
+ return order
191
+ .map((key, groupIndex) => renderBreakpointGroup(key, buckets.get(key), `s${storyIndex}-bp${groupIndex}`, reportDir))
192
+ .join('\n');
193
+ }
194
+ /**
195
+ * One labelled per-breakpoint subsection. The mode label carries the breakpoint
196
+ * NAME and its DIMENSIONS — the real capture size recorded on the result, so
197
+ * per-config and per-story overrides show their actual size. The label is a
198
+ * non-heading caption: stories live inside an `<ol>` list, not a heading
199
+ * outline, so injecting an `<h3>` here would orphan it under the story's
200
+ * list-item subtree. Instead the action list is a labelled region — its
201
+ * `<ol aria-labelledby>` points at the visible caption, so assistive tech
202
+ * announces e.g. "mobile 375 by 667 pixels actions" without minting a heading
203
+ * level. The trailing "actions" is an sr-only token inside the caption —
204
+ * "actions" never appears in the visible label, only in the computed accessible
205
+ * name, so the region reads as a list of actions rather than a bare dimension
206
+ * string.
207
+ *
208
+ * Dimensions render in their own `aria-hidden` span (decorative "375×667")
209
+ * with an sr-only longhand ("375 by 667 pixels") so screen readers don't read
210
+ * the `×` glyph as "x" mid-stream.
211
+ */
212
+ function renderBreakpointGroup(key, entries, groupId, reportDir) {
213
+ const labelId = `${groupId}-label`;
214
+ const name = key;
215
+ // The capture dimensions recorded on the result reflect per-config and
216
+ // per-story overrides. A result always carries them post-migration; the guard
217
+ // only keeps a malformed entry from emitting a half-empty dimension span.
218
+ const recorded = entries[0]?.action;
219
+ const dimensions = recorded?.breakpointWidth !== undefined &&
220
+ recorded.breakpointHeight !== undefined
221
+ ? { width: recorded.breakpointWidth, height: recorded.breakpointHeight }
222
+ : undefined;
223
+ const dimensionMarkup = dimensions
224
+ ? `<span class="breakpoint-dimensions" aria-hidden="true">${dimensions.width}×${dimensions.height}</span><span class="sr-only">${dimensions.width} by ${dimensions.height} pixels</span>`
225
+ : '';
226
+ const actions = entries
227
+ .map(({ action, id }) => renderAction(action, id, reportDir))
228
+ .join('\n');
229
+ return `
230
+ <div class="breakpoint-group">
231
+ <p class="breakpoint-label" id="${labelId}">
232
+ <span class="breakpoint-name">${escapeHtml(name)}</span>
233
+ ${dimensionMarkup}
234
+ <span class="sr-only"> actions</span>
235
+ </p>
236
+ <ol class="actions" aria-labelledby="${labelId}">
149
237
  ${actions}
150
238
  </ol>
151
- </li>
239
+ </div>
152
240
  `;
153
241
  }
154
242
  function renderAction(action, actionId, reportDir) {
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/reporter/template.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/reporter/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AASrC,MAAM,aAAa,GAAiC;IAClD,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,GAAG,EAAE,cAAc;CACpB,CAAC;AAEF,MAAM,cAAc,GAAiC;IACnD,IAAI,EAAE,GAAG;IACT,OAAO,EAAE,GAAG;IACZ,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,GAAG;IACZ,GAAG,EAAE,GAAG;CACT,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAAiB,EAAE,SAAiB;IAC/D,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAChD,OAAO;;;;;;8BAMqB,SAAS;;;;;;;;0BAQb,MAAM,CAAC,UAAU,KAAK,SAAS;;4CAEb,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC;;;;QAIrE,aAAa,CAAC,MAAM,CAAC;QACrB,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC;;;;;CAKvC,CAAC;AACF,CAAC;AAED,SAAS,aAAa,CAAC,MAAiB;IACtC,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC;IAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC;IAC1C,OAAO;;;;MAIH,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;MAC7C,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;MACnD,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC;MACxD,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;MACrD,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC;MAChC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC;;;CAGjC,CAAC;AACF,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,MAAsB;IACzD,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAClD,OAAO;;wBAEe,GAAG;wBACH,KAAK;uDAC0B,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK;0BAC3D,MAAM,CAAC,OAAO,OAAO,MAAM,CAAC,KAAK,IAAI,KAAK;;CAEnE,CAAC;AACF,CAAC;AAED,SAAS,WAAW,CAClB,KAAa,EACb,KAAa,EACb,SAAwB;IAExB,OAAO;0BACiB,SAAS,CAAC,CAAC,CAAC,iBAAiB,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE;wBAChD,KAAK;kCACK,KAAK;;CAEtC,CAAC;AACF,CAAC;AAED,SAAS,aAAa,CAAC,MAAiB,EAAE,SAAiB;IACzD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO;SACzB,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;SAC3D,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;IACpC,OAAO;;;;;;QAMD,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC;QAC7B,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC;QACjC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC;QAClC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC;;kFAEyC,KAAK;;;;;;;;MAQjF,KAAK;;;;CAIV,CAAC;AACF,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc,EAAE,OAAgB;IACxD,MAAM,OAAO,GAAG,gBAAgB,MAAM,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IACpD,OAAO;cACK,OAAO;;;;UAIX,OAAO;aACJ,KAAK;wBACM,MAAM;MACxB,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;;IAE1B,MAAM;;CAET,CAAC;AACF,CAAC;AAED,SAAS,WAAW,CAClB,KAAkB,EAClB,UAAkB,EAClB,SAAiB;IAEjB,OAAO;iCACwB,KAAK,CAAC,MAAM;;oDAEO,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC;4BACpD,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC;+BACxB,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;mCAClB,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC;;2BAExC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;;IAE9C,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC;;CAEnD,CAAC;AACF,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAS,kBAAkB,CACzB,KAAkB,EAClB,UAAkB,EAClB,SAAiB;IAEjB,6DAA6D;IAC7D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,IAAI,GAAG,EAGpB,CAAC;IACJ,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;QAC5C,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,UAAU,KAAK,WAAW,EAAE,EAAE,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,2EAA2E;IAC3E,yDAAyD;IACzD,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;aAC1B,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAC3B,YAAY,CAAC,MAAM,EAAE,IAAI,UAAU,KAAK,WAAW,EAAE,EAAE,SAAS,CAAC,CAClE;aACA,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,OAAO;MACL,OAAO;QACL,CAAC;IACP,CAAC;IAED,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,CACvB,qBAAqB,CACnB,GAAG,EACH,OAAO,CAAC,GAAG,CAAC,GAAG,CAAE,EACjB,IAAI,UAAU,MAAM,UAAU,EAAE,EAChC,SAAS,CACV,CACF;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAS,qBAAqB,CAC5B,GAAW,EACX,OAAoD,EACpD,OAAe,EACf,SAAiB;IAEjB,MAAM,OAAO,GAAG,GAAG,OAAO,QAAQ,CAAC;IACnC,MAAM,IAAI,GAAG,GAAG,CAAC;IACjB,uEAAuE;IACvE,8EAA8E;IAC9E,0EAA0E;IAC1E,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;IACpC,MAAM,UAAU,GACd,QAAQ,EAAE,eAAe,KAAK,SAAS;QACvC,QAAQ,CAAC,gBAAgB,KAAK,SAAS;QACrC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,CAAC,gBAAgB,EAAE;QACxE,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,eAAe,GAAG,UAAU;QAChC,CAAC,CAAC,0DAA0D,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,MAAM,gCAAgC,UAAU,CAAC,KAAK,OAAO,UAAU,CAAC,MAAM,gBAAgB;QACzL,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,OAAO,GAAG,OAAO;SACpB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;SAC5D,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO;;oCAE2B,OAAO;oCACP,UAAU,CAAC,IAAI,CAAC;MAC9C,eAAe;;;yCAGoB,OAAO;MAC1C,OAAO;;;CAGZ,CAAC;AACF,CAAC;AAED,SAAS,YAAY,CACnB,MAAoB,EACpB,QAAgB,EAChB,SAAiB;IAEjB,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IACnE,MAAM,UAAU,GACd,MAAM,CAAC,MAAM,KAAK,QAAQ;QACxB,CAAC,CAAC,6BAA6B,UAAU,CAAC,MAAM,CAAC,cAAc,IAAI,eAAe,CAAC,QAAQ;QAC3F,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAEvD,MAAM,QAAQ,GAAG;EACjB,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;4BACA,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;gCACrB,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC;CAChE,CAAC;IAEA,MAAM,GAAG,GAAG,WAAW;QACrB,CAAC,CAAC;;;MAGA,QAAQ;;;IAGV,WAAW;WACJ;QACP,CAAC,CAAC;;IAEF,QAAQ;;CAEX,CAAC;IAEA,OAAO;kCACyB,MAAM,CAAC,MAAM;IAC3C,GAAG;IACH,UAAU;IACV,UAAU;;CAEb,CAAC;AACF,CAAC;AAED,SAAS,gBAAgB,CACvB,UAA8C;IAE9C,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;SACvC,GAAG,CACF,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CACf,OAAO,UAAU,CAAC,GAAG,CAAC,YAAY,UAAU,CAAC,KAAK,CAAC,OAAO,CAC7D;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,iCAAiC,OAAO,OAAO,CAAC;AACzD,CAAC;AAED,SAAS,iBAAiB,CACxB,MAAoB,EACpB,QAAgB,EAChB,SAAiB;IAEjB,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QAC/C,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY;QAClC,CAAC,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,YAAY,CAAC;QAClD,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU;QAC9B,CAAC,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC;QAChD,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ;QAC1B,CAAC,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC;QAC9C,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC5C,MAAM,SAAS,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC7C,MAAM,UAAU,GACd,SAAS,CAAC,UAAU,CAAC,KAAK,SAAS;QACjC,CAAC,CAAC,UAAU;QACZ,CAAC,CAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAW,CAAC,IAAI,CAC5C,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,SAAS,CACxC,CAAC;IACR,MAAM,WAAW,GAAG,GAAG,QAAQ,aAAa,CAAC;IAC7C,MAAM,SAAS,GACb,MAAM,CAAC,SAAS,KAAK,SAAS;QAC5B,CAAC,CAAC,6BAA6B,WAAW,yBAAyB,UAAU,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,+EAA+E,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,oBAAoB;QACrQ,CAAC,CAAC,EAAE,CAAC;IACT,OAAO;iDACwC,UAAU;;IAEvD,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,KAAK,SAAS,EAAE,UAAU,KAAK,UAAU,CAAC;IAClF,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE,UAAU,KAAK,QAAQ,CAAC;IAC5E,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,KAAK,SAAS,EAAE,UAAU,KAAK,MAAM,CAAC;IACtE,SAAS;;EAEX,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,sBAAsB,EAAE,UAAU,KAAK,UAAU,CAAC;EAC5G,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,kCAAkC,EAAE,UAAU,KAAK,QAAQ,CAAC;EAClH,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,MAAM,CAAC,MAAM,mCAAmC,EAAE,UAAU,KAAK,MAAM,EAAE,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;CAC/L,CAAC;AACF,CAAC;AAED,SAAS,SAAS,CAChB,QAAgB,EAChB,IAAY,EACZ,QAAiB,EACjB,OAAgB;IAEhB,MAAM,OAAO,GAAG,GAAG,QAAQ,UAAU,IAAI,EAAE,CAAC;IAC5C,OAAO;cACK,OAAO;;;YAGT,QAAQ;UACV,OAAO;aACJ,IAAI;gBACD,IAAI;MACd,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;MAC1B,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;;IAE1B,IAAI;;CAEP,CAAC;AACF,CAAC;AAED,SAAS,SAAS,CAChB,QAAgB,EAChB,IAAY,EACZ,GAAuB,EACvB,GAAW,EACX,OAAgB,EAChB,aAAsB;IAEtB,OAAO;;;cAGK,QAAQ,IAAI,IAAI;cAChB,IAAI;IACd,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ;;IAGvB,GAAG;QACD,CAAC,CAAC,aAAa,UAAU,CAAC,GAAG,CAAC,UAAU,UAAU,CAAC,GAAG,CAAC,mBAAmB,aAAa,CAAC,CAAC,CAAC,sBAAsB,aAAa,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK;QAC1I,CAAC,CAAC,8BAA8B,IAAI,iCACxC;;CAED,CAAC;AACF,CAAC;AAED,SAAS,WAAW,CAAC,MAAoB;IACvC,OAAO;oCAC2B,MAAM;0BAChB,aAAa,CAAC,MAAM,CAAC;kDACG,aAAa,CAAC,MAAM,CAAC;;CAEtE,CAAC;AACF,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAiB,EAAE,QAAgB;IAC3D,OAAO,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,WAAW,GAAG;IAClB,SAAS;IACT,UAAU;IACV,OAAO;IACP,OAAO;IACP,KAAK;IACL,MAAM;IACN,MAAM;IACN,QAAQ;IACR,WAAW;IACX,SAAS;IACT,UAAU;IACV,UAAU;CACX,CAAC;AAEF,SAAS,UAAU,CAAC,GAAW;IAC7B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5C,MAAM,OAAO,GAAG,OAAO,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC;IACvD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC3D,OAAO,GAAG,KAAK,IAAI,GAAG,KAAK,OAAO,IAAI,OAAO,GAAG,QAAQ,EAAE,CAAC;AAC7D,CAAC;AAED,SAAS,cAAc,CAAC,EAAU;IAChC,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,GAAG,EAAE,IAAI,CAAC;IAChC,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACtC,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK;SACT,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;SACxB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC;SACzB,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC9B,CAAC"}
@@ -8,6 +8,12 @@ export interface RunActionOptions {
8
8
  parameters: Record<string, string>;
9
9
  storyFile: string;
10
10
  config: ResolvedConfig;
11
+ /**
12
+ * Named breakpoint this action is rendering at. `runStory` threads the
13
+ * current breakpoint context's name down so the resulting paths (and the
14
+ * `ActionResult.breakpoint` tag) key per-mode captures apart.
15
+ */
16
+ breakpoint: string;
11
17
  }
12
18
  /**
13
19
  * Runs every step of an action in order, applies optional step-level retry on
@@ -1 +1 @@
1
- {"version":3,"file":"runAction.d.ts","sourceRoot":"","sources":["../../src/runner/runAction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,qBAAqB,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAyBnD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;CACxB;AAMD;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,YAAY,CAAC,CAkDvB;AA+TD,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;gBAE3B,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAC1C,UAAU,EAAE,OAAO,EACnB,SAAS,EAAE,MAAM;CAYpB"}
1
+ {"version":3,"file":"runAction.d.ts","sourceRoot":"","sources":["../../src/runner/runAction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,qBAAqB,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAyBnD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;IACvB;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,YAAY,CAAC,CAgEvB;AAgXD,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;gBAE3B,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAC1C,UAAU,EAAE,OAAO,EACnB,SAAS,EAAE,MAAM;CAYpB"}