qapture2 0.7.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +43 -5
- package/dist/{chunk-QBBWY3BF.js → chunk-JSEFC2VP.js} +545 -40
- package/dist/{chunk-UOUFJCPF.cjs → chunk-WAOYPLZA.cjs} +545 -40
- package/dist/index.cjs +5 -5
- package/dist/index.js +1 -1
- package/dist/next.cjs +4 -4
- package/dist/next.js +1 -1
- package/dist/standalone.cjs +2 -2
- package/dist/standalone.js +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -298,6 +298,23 @@ You can measure this yourself — `npm run capture-accuracy-test` captures a
|
|
|
298
298
|
rectangle straddling a colour boundary and reports the error in pixels. It
|
|
299
299
|
reads 0.0px on 0.4.0 and 20px (of a 40px capture) on 0.3.1.
|
|
300
300
|
|
|
301
|
+
**v0.7.1 fixed a second, much louder failure: no screenshot at all.**
|
|
302
|
+
html2canvas ships its own CSS colour parser, and it predates CSS Color 4.
|
|
303
|
+
Handed `oklch(...)` it throws, and the throw aborts the whole render — so the
|
|
304
|
+
tester saw "Screenshot failed" and a Retry that re-ran the identical render and
|
|
305
|
+
could never succeed. Tailwind v4 emits `oklch()` for its entire default
|
|
306
|
+
palette and shadcn/ui inherits it, so on those stacks screenshots never worked
|
|
307
|
+
at all, on any page. `lab()`, `lch()`, `oklab()`, `color()` and `color-mix()`
|
|
308
|
+
failed the same way.
|
|
309
|
+
|
|
310
|
+
Qapture now rewrites those colours to plain sRGB inside the clone html2canvas
|
|
311
|
+
renders — never in your page. The conversion paints each colour onto a 1×1
|
|
312
|
+
canvas and reads the pixel back rather than reading `fillStyle` as a string,
|
|
313
|
+
because Chrome round-trips `oklch(...)` unchanged. Gradients and shadows are
|
|
314
|
+
rewritten in place, and a render that still throws is retried once with
|
|
315
|
+
decoration stripped. `npm run modern-css-test` proves it, and proves itself:
|
|
316
|
+
it first asserts that raw html2canvas *still* dies on the same fixture.
|
|
317
|
+
|
|
301
318
|
### `exact` — opt-in, pixel-for-pixel
|
|
302
319
|
|
|
303
320
|
Uses the Screen Capture API to photograph **this tab's real composited
|
|
@@ -359,9 +376,22 @@ Behaviour worth knowing:
|
|
|
359
376
|
than having to find the folder again.
|
|
360
377
|
- Export is unchanged and still works; this is a second, always-on copy.
|
|
361
378
|
|
|
362
|
-
**
|
|
363
|
-
|
|
364
|
-
|
|
379
|
+
**Everywhere, by one of two routes (v0.7.1).** Writing into a folder the
|
|
380
|
+
tester picked is the File System Access API, which is Chromium desktop only —
|
|
381
|
+
Safari has never shipped `showDirectoryPicker`, and its only filesystem API is
|
|
382
|
+
a sandbox the tester cannot see.
|
|
383
|
+
|
|
384
|
+
So on Safari, Firefox and phones the same feature runs a second way: name the
|
|
385
|
+
project and campaign as usual, and Qapture assembles the identical tree and
|
|
386
|
+
hands it over as a **ZIP whose internal paths are `<Project>/<Campaign>/…`**.
|
|
387
|
+
Unzip it into your QA folder and you get the same layout, the same filenames
|
|
388
|
+
and the same sequence numbers Chromium writes live. It refreshes itself every
|
|
389
|
+
few points, and **Save folder now** grabs it on demand.
|
|
390
|
+
|
|
391
|
+
The engine is chosen by feature detection rather than by sniffing the browser,
|
|
392
|
+
so Safari upgrades itself to live writing the day WebKit ships the picker.
|
|
393
|
+
Stopping a campaign and restarting it keeps its numbering, so a later ZIP never
|
|
394
|
+
disagrees with one already in your folder.
|
|
365
395
|
|
|
366
396
|
---
|
|
367
397
|
|
|
@@ -412,7 +442,7 @@ All fields are optional. Passing an empty object (or no config at all) produces
|
|
|
412
442
|
| `brand` | `{ label?: string }` | `{ label: 'Qapture' }` | Panel heading label. |
|
|
413
443
|
| `loginField` | `{ en: string; ar?: string }` | `{ en: 'Username', ar: 'اسم المستخدم' }` | Display label for the login column in the Credentials tab. |
|
|
414
444
|
| `credentials` | `QaCredential[]` | `[]` | DEV/TEST/SEED login rows shown in the Credentials tab. |
|
|
415
|
-
| `journey` | `QaJourneyLane[]` | `[]` | Role-grouped testing journey shown in the Guide tab. |
|
|
445
|
+
| `journey` | `QaJourneyLane[]` | `[]` | Role-grouped testing journey shown in the Guide tab. **If you leave this empty, the Guide falls back to a built-in generic plan** (see below) rather than rendering an empty tab. |
|
|
416
446
|
| `preamble` | `QaPreamble` | `null` | AI agent handoff context block embedded in the export. |
|
|
417
447
|
| `rtl` | `boolean` | `false` | When `true`, the UI initialises in Arabic / RTL mode. |
|
|
418
448
|
| `visible` | `boolean \| undefined` | `undefined` | `true` = always show; `false` = always hide; `undefined` = dev-only (hidden in production). |
|
|
@@ -492,6 +522,13 @@ Array fields also accept a plain newline-separated string; the export normalises
|
|
|
492
522
|
|
|
493
523
|
## Graded Risk Model
|
|
494
524
|
|
|
525
|
+
**If you define no journey at all (v0.7.1),** the Guide shows a built-in
|
|
526
|
+
generic plan instead of an empty page — first look, moving around, the main
|
|
527
|
+
task, when it goes wrong, on a phone. It is labelled in the UI as generic, with
|
|
528
|
+
a pointer to `qa.config`, so nobody mistakes it for coverage of *your* app; it
|
|
529
|
+
exists because an empty checklist taught the tester nothing and silently asked
|
|
530
|
+
them to invent one. Define `journey` and it disappears.
|
|
531
|
+
|
|
495
532
|
Each journey step carries a `risk` value. The Guide tab shows a coloured dot beside every step; the export leads with a coverage report scored on RED steps.
|
|
496
533
|
|
|
497
534
|
| Risk | When to use | Verification rule |
|
|
@@ -737,7 +774,8 @@ The **capture hotkey** (default: `Shift+Alt+C`, i.e. `Option+Shift+C` on macOS)
|
|
|
737
774
|
| Capture, notes, export | ✅ | ✅ | ✅ |
|
|
738
775
|
| `dom` screenshots (default) | ✅ | ✅ | ✅ |
|
|
739
776
|
| Pixel-exact screenshots | ✅ opt-in | — | — |
|
|
740
|
-
| Save to a folder | ✅ opt-in | — | — |
|
|
777
|
+
| Save to a folder, live | ✅ opt-in | — | — |
|
|
778
|
+
| Save to a folder, as a zip | ✅ | ✅ | ✅ |
|
|
741
779
|
| Storage meter | ✅ | ✅ (Safari reports coarse numbers) | ✅ |
|
|
742
780
|
| Persistent storage request | ✅ | Firefox prompts; Safari ignores | varies |
|
|
743
781
|
|