tuffgal 0.1.0-alpha.7 → 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 +31 -1
- package/README.md +4 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +8 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/config.d.ts +83 -9
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +95 -9
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/reporter/assets/report.css +29 -1
- package/dist/reporter/template.js +93 -5
- package/dist/reporter/template.js.map +1 -1
- package/dist/runner/runAction.d.ts +6 -0
- package/dist/runner/runAction.d.ts.map +1 -1
- package/dist/runner/runAction.js +39 -13
- package/dist/runner/runAction.js.map +1 -1
- package/dist/runner/runStory.d.ts +29 -2
- package/dist/runner/runStory.d.ts.map +1 -1
- package/dist/runner/runStory.js +166 -55
- package/dist/runner/runStory.js.map +1 -1
- package/dist/schema/result.d.ts +18 -0
- package/dist/schema/result.d.ts.map +1 -1
- package/dist/schema/result.js.map +1 -1
- package/dist/schema/story.d.ts +15 -4
- package/dist/schema/story.d.ts.map +1 -1
- package/dist/schema/story.js +35 -11
- package/dist/schema/story.js.map +1 -1
- package/dist/screenshots/baselineStore.d.ts +24 -0
- package/dist/screenshots/baselineStore.d.ts.map +1 -1
- package/dist/screenshots/baselineStore.js +40 -12
- package/dist/screenshots/baselineStore.js.map +1 -1
- package/dist/screenshots/capture.d.ts.map +1 -1
- package/dist/screenshots/capture.js +12 -0
- package/dist/screenshots/capture.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,34 @@ 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
|
+
|
|
31
|
+
## [0.1.0-alpha.8] — 2026-06-20
|
|
32
|
+
|
|
33
|
+
### Fixed
|
|
34
|
+
|
|
35
|
+
- Reset page scroll to origin before each full-page capture, so `position: sticky` and `fixed` elements no longer render shifted by `scrollY`
|
|
36
|
+
|
|
9
37
|
## [0.1.0-alpha.7] — 2026-06-20
|
|
10
38
|
|
|
11
39
|
### Added
|
|
@@ -111,7 +139,9 @@ styling or interactivity.
|
|
|
111
139
|
Initial public alpha. Tuffgal extracted from [Linklater](https://github.com/nschneble/linklater)'s
|
|
112
140
|
in-tree visual testing workspace.
|
|
113
141
|
|
|
114
|
-
[Unreleased]: https://github.com/nschneble/tuffgal/compare/v0.1.0-alpha.
|
|
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
|
|
144
|
+
[0.1.0-alpha.8]: https://github.com/nschneble/tuffgal/releases/tag/v0.1.0-alpha.8
|
|
115
145
|
[0.1.0-alpha.7]: https://github.com/nschneble/tuffgal/releases/tag/v0.1.0-alpha.7
|
|
116
146
|
[0.1.0-alpha.6]: https://github.com/nschneble/tuffgal/releases/tag/v0.1.0-alpha.6
|
|
117
147
|
[0.1.0-alpha.5]: https://github.com/nschneble/tuffgal/releases/tag/v0.1.0-alpha.5
|
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.
|
|
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":"
|
|
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"}
|
package/dist/commands/init.js
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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
|
-
/**
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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
|
-
|
|
121
|
-
|
|
122
|
-
|
|
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
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;CAChD;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,WAAW,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,sDAAsD;IACtD,cAAc,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC;IAChC,uDAAuD;IACvD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,2DAA2D;IAC3D,KAAK,EAAE,WAAW,CAAC;IACnB,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;CAChD;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,WAAW,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,sDAAsD;IACtD,cAAc,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC;IAChC,uDAAuD;IACvD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;CAKd,CAAC;AAEX,8EAA8E;AAC9E,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,WAAW,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,kBAAkB,GAC1B,cAAc,GACd;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9D;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,2DAA2D;IAC3D,KAAK,EAAE,WAAW,CAAC;IACnB,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACnC,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,sDAAsD;IACtD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,+EAA+E;IAC/E,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B;;;;;;OAMG;IACH,WAAW,EAAE,CAAC,kBAAkB,EAAE,GAAG,kBAAkB,EAAE,CAAC,CAAC;IAC3D,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,QAAQ,EAAE,cAAc,GAAG,SAAS,CAAC;IACrC,UAAU,EAAE,eAAe,GAAG,SAAS,CAAC;IACxC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AASD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAEjE;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAyBrE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CA+EtE;AAmDD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,kBAAkB,EAAE,GAC9B,kBAAkB,EAAE,CAUtB"}
|
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.
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
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
|
-
|
|
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
|
package/dist/config.js.map
CHANGED
|
@@ -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;
|
|
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"}
|
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';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
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
|
-
</
|
|
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":"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"}
|
|
@@ -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
|