@setsquare/review-sdk 0.0.1 → 0.1.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/NOTICE +3 -2
- package/README.md +287 -3
- package/dist/autoscan.d.ts +23 -1
- package/dist/autoscan.d.ts.map +1 -1
- package/dist/autoscan.js +220 -15
- package/dist/autoscan.js.map +1 -1
- package/dist/brand.d.ts +51 -2
- package/dist/brand.d.ts.map +1 -1
- package/dist/brand.js +560 -5
- package/dist/brand.js.map +1 -1
- package/dist/checks/context-change.d.ts +96 -0
- package/dist/checks/context-change.d.ts.map +1 -0
- package/dist/checks/context-change.js +655 -0
- package/dist/checks/context-change.js.map +1 -0
- package/dist/checks/focus.d.ts +154 -0
- package/dist/checks/focus.d.ts.map +1 -0
- package/dist/checks/focus.js +1123 -0
- package/dist/checks/focus.js.map +1 -0
- package/dist/checks/heuristics.d.ts +117 -0
- package/dist/checks/heuristics.d.ts.map +1 -0
- package/dist/checks/heuristics.js +961 -0
- package/dist/checks/heuristics.js.map +1 -0
- package/dist/checks/keyboard.d.ts +106 -0
- package/dist/checks/keyboard.d.ts.map +1 -0
- package/dist/checks/keyboard.js +452 -0
- package/dist/checks/keyboard.js.map +1 -0
- package/dist/checks/reflow.d.ts +75 -0
- package/dist/checks/reflow.d.ts.map +1 -0
- package/dist/checks/reflow.js +285 -0
- package/dist/checks/reflow.js.map +1 -0
- package/dist/checks/rule-pack.d.ts +1 -1
- package/dist/checks/rule-pack.d.ts.map +1 -1
- package/dist/checks/rule-pack.js +350 -45
- package/dist/checks/rule-pack.js.map +1 -1
- package/dist/checks/shortcuts.d.ts +71 -0
- package/dist/checks/shortcuts.d.ts.map +1 -0
- package/dist/checks/shortcuts.js +196 -0
- package/dist/checks/shortcuts.js.map +1 -0
- package/dist/checks/versions.d.ts.map +1 -1
- package/dist/checks/versions.js +33 -1
- package/dist/checks/versions.js.map +1 -1
- package/dist/contract.d.ts +32 -0
- package/dist/contract.d.ts.map +1 -1
- package/dist/covers.d.ts +56 -0
- package/dist/covers.d.ts.map +1 -0
- package/dist/covers.js +135 -0
- package/dist/covers.js.map +1 -0
- package/dist/dedupe.d.ts +23 -0
- package/dist/dedupe.d.ts.map +1 -1
- package/dist/dedupe.js +96 -2
- package/dist/dedupe.js.map +1 -1
- package/dist/document.d.ts.map +1 -1
- package/dist/document.js +144 -0
- package/dist/document.js.map +1 -1
- package/dist/envelope.d.ts +8 -0
- package/dist/envelope.d.ts.map +1 -1
- package/dist/envelope.js +106 -16
- package/dist/envelope.js.map +1 -1
- package/dist/fixture.d.ts.map +1 -1
- package/dist/fixture.js +33 -4
- package/dist/fixture.js.map +1 -1
- package/dist/html-report.d.ts +24 -7
- package/dist/html-report.d.ts.map +1 -1
- package/dist/html-report.js +608 -136
- package/dist/html-report.js.map +1 -1
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/dist/insights.d.ts.map +1 -1
- package/dist/insights.js +9 -12
- package/dist/insights.js.map +1 -1
- package/dist/links.d.ts +43 -0
- package/dist/links.d.ts.map +1 -1
- package/dist/links.js +43 -0
- package/dist/links.js.map +1 -1
- package/dist/observe.d.ts +8 -0
- package/dist/observe.d.ts.map +1 -1
- package/dist/observe.js +45 -1
- package/dist/observe.js.map +1 -1
- package/dist/options.d.ts +53 -0
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +3 -0
- package/dist/options.js.map +1 -1
- package/dist/reading-level.d.ts +22 -1
- package/dist/reading-level.d.ts.map +1 -1
- package/dist/reading-level.js +122 -19
- package/dist/reading-level.js.map +1 -1
- package/dist/reporter.d.ts.map +1 -1
- package/dist/reporter.js +31 -15
- package/dist/reporter.js.map +1 -1
- package/dist/scan.d.ts +36 -1
- package/dist/scan.d.ts.map +1 -1
- package/dist/scan.js +16 -2
- package/dist/scan.js.map +1 -1
- package/dist/screens.d.ts +55 -4
- package/dist/screens.d.ts.map +1 -1
- package/dist/screens.js +243 -43
- package/dist/screens.js.map +1 -1
- package/dist/settle.d.ts +35 -0
- package/dist/settle.d.ts.map +1 -1
- package/dist/settle.js +43 -2
- package/dist/settle.js.map +1 -1
- package/dist/summary.d.ts +35 -0
- package/dist/summary.d.ts.map +1 -1
- package/dist/summary.js +248 -28
- package/dist/summary.js.map +1 -1
- package/dist/unscannable-reasons.d.ts +30 -0
- package/dist/unscannable-reasons.d.ts.map +1 -0
- package/dist/unscannable-reasons.js +53 -0
- package/dist/unscannable-reasons.js.map +1 -0
- package/dist/viewports.d.ts +105 -0
- package/dist/viewports.d.ts.map +1 -0
- package/dist/viewports.js +134 -0
- package/dist/viewports.js.map +1 -0
- package/package.json +5 -4
package/dist/autoscan.js
CHANGED
|
@@ -2,6 +2,12 @@ import { engineVersion, rulesetDigest, runAxe } from './axe.js';
|
|
|
2
2
|
import { SCAN_RECORD_ATTACHMENT, SCAN_RECORD_VERSION } from './contract.js';
|
|
3
3
|
import { toFindings, toInapplicable, toPasses } from './findings.js';
|
|
4
4
|
import { runStatusMessages, runTextSpacing } from './checks/dynamic.js';
|
|
5
|
+
import { runFocusNotObscured } from './checks/focus.js';
|
|
6
|
+
import { runKeyboardTrap } from './checks/keyboard.js';
|
|
7
|
+
import { runOnFocus, runOnInput } from './checks/context-change.js';
|
|
8
|
+
import { runReflow } from './checks/reflow.js';
|
|
9
|
+
import { heuristicEvidence, readHeuristicSignals } from './checks/heuristics.js';
|
|
10
|
+
import { runKeyShortcuts } from './checks/shortcuts.js';
|
|
5
11
|
import { setsquareCheckVersions } from './checks/versions.js';
|
|
6
12
|
import { runReadingLevel } from './reading-level.js';
|
|
7
13
|
import { readingLevelEnabled } from './runtime.js';
|
|
@@ -12,7 +18,7 @@ import { recordUnscannable } from './unscannable.js';
|
|
|
12
18
|
import { changedOnlyRoutes } from './options.js';
|
|
13
19
|
import { tagsFor } from './rules.js';
|
|
14
20
|
import { toUrlPattern } from './sanitise.js';
|
|
15
|
-
import { MUTATION_TOTAL, SETTLE_BINDING, settleScript } from './settle.js';
|
|
21
|
+
import { MUTATION_TOTAL, SETTLE_BINDING, WENT_QUIET, settleScript, } from './settle.js';
|
|
16
22
|
const state = new WeakMap();
|
|
17
23
|
let visitCounter = 0;
|
|
18
24
|
function stateFor(page, url) {
|
|
@@ -26,6 +32,9 @@ function stateFor(page, url) {
|
|
|
26
32
|
perfCaptured: false,
|
|
27
33
|
scans: existing?.scans ?? 0,
|
|
28
34
|
scanned: existing?.scanned ?? new Map(),
|
|
35
|
+
teardownScanned: existing?.teardownScanned ?? new Set(),
|
|
36
|
+
...(existing?.axeVersion ? { axeVersion: existing.axeVersion } : {}),
|
|
37
|
+
...(existing?.rulesetDigest ? { rulesetDigest: existing.rulesetDigest } : {}),
|
|
29
38
|
};
|
|
30
39
|
state.set(page, next);
|
|
31
40
|
return next;
|
|
@@ -73,6 +82,22 @@ export function installAutoScan(context, options, testInfo, warn) {
|
|
|
73
82
|
pageState.queue = pageState.queue.then(async () => {
|
|
74
83
|
if (page.isClosed())
|
|
75
84
|
return;
|
|
85
|
+
/*
|
|
86
|
+
* Checked HERE, inside the queued work, not at the callback's entry.
|
|
87
|
+
*
|
|
88
|
+
* A settle callback can fire while teardown is already running: it passes
|
|
89
|
+
* any entry check, queues behind the teardown scan, and lands second.
|
|
90
|
+
* Dedupe breaks a tie in favour of the later scan, so it replaced the
|
|
91
|
+
* teardown scan with a row carrying no driven checks at all — those only
|
|
92
|
+
* ever run at teardown. A page that had three real violations reported
|
|
93
|
+
* none.
|
|
94
|
+
*
|
|
95
|
+
* By the time this runs, the teardown scan has finished and said so. The
|
|
96
|
+
* test is over; this scan is looking at a page nobody is using any more,
|
|
97
|
+
* and it is never the better evidence.
|
|
98
|
+
*/
|
|
99
|
+
if (pageState.teardownScanned.has(signal.url))
|
|
100
|
+
return;
|
|
76
101
|
try {
|
|
77
102
|
await scanSettledPage(page, signal, options, testInfo, warn);
|
|
78
103
|
}
|
|
@@ -167,20 +192,23 @@ async function scanSettledPage(page, signal, options, testInfo, warn) {
|
|
|
167
192
|
const passes = toPasses(results);
|
|
168
193
|
const inapplicable = toInapplicable(results);
|
|
169
194
|
/*
|
|
170
|
-
*
|
|
171
|
-
*
|
|
172
|
-
*
|
|
173
|
-
*
|
|
195
|
+
* Driven checks only at TEARDOWN, never mid-test: they mutate the live page,
|
|
196
|
+
* and an auto-scan firing between a customer's actions would make us the
|
|
197
|
+
* flake in their screenshot assertion. At teardown the test is over and the
|
|
198
|
+
* page is about to be discarded.
|
|
174
199
|
*/
|
|
175
200
|
if (signal.reason === 'teardown') {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
201
|
+
/*
|
|
202
|
+
* Asked at teardown rather than inferred from the signal.
|
|
203
|
+
*
|
|
204
|
+
* A teardown signal carries `settleTimedOut: false` because no ceiling
|
|
205
|
+
* fired, which is true and is NOT the same as "the page had finished". The
|
|
206
|
+
* test simply ended, and it may have ended mid-render.
|
|
207
|
+
*/
|
|
208
|
+
const checks = await runDrivenChecks(page, options, await wentQuiet(page));
|
|
209
|
+
findings.push(...checks.findings);
|
|
210
|
+
passes.push(...checks.passes);
|
|
211
|
+
inapplicable.push(...checks.inapplicable);
|
|
184
212
|
}
|
|
185
213
|
const record = {
|
|
186
214
|
recordVersion: SCAN_RECORD_VERSION,
|
|
@@ -244,6 +272,10 @@ async function scanSettledPage(page, signal, options, testInfo, warn) {
|
|
|
244
272
|
...(probesMs > 0 ? { probesMs } : {}),
|
|
245
273
|
};
|
|
246
274
|
pageState.scanned.set(url, await mutationTotal(page));
|
|
275
|
+
if (signal.reason === 'teardown')
|
|
276
|
+
pageState.teardownScanned.add(url);
|
|
277
|
+
pageState.axeVersion = record.axeVersion;
|
|
278
|
+
pageState.rulesetDigest = record.rulesetDigest;
|
|
247
279
|
await testInfo.attach(SCAN_RECORD_ATTACHMENT, {
|
|
248
280
|
body: Buffer.from(JSON.stringify(record), 'utf8'),
|
|
249
281
|
contentType: 'application/json',
|
|
@@ -262,6 +294,142 @@ function engineOf(page) {
|
|
|
262
294
|
const name = page.context().browser()?.browserType().name();
|
|
263
295
|
return name === 'firefox' || name === 'webkit' ? name : 'chromium';
|
|
264
296
|
}
|
|
297
|
+
/**
|
|
298
|
+
* Setsquare's own driven checks: the ones that need the page acted on rather
|
|
299
|
+
* than read.
|
|
300
|
+
*
|
|
301
|
+
* Extracted so the teardown scan and the checks-only teardown record run
|
|
302
|
+
* exactly the same set. Two call sites with two hand-maintained lists is how a
|
|
303
|
+
* check ends up silently missing from half the runs.
|
|
304
|
+
*/
|
|
305
|
+
export async function runDrivenChecks(page, options,
|
|
306
|
+
/**
|
|
307
|
+
* Had this page met the quiet definition when the checks ran?
|
|
308
|
+
*
|
|
309
|
+
* Defaults to true, so an explicit `setsquare.scan()` suppresses nothing: the
|
|
310
|
+
* customer chose the moment, and second-guessing their choice would be us
|
|
311
|
+
* deciding their page was not ready when they said it was.
|
|
312
|
+
*/
|
|
313
|
+
pageWentQuiet = true) {
|
|
314
|
+
const findings = [];
|
|
315
|
+
const passes = [];
|
|
316
|
+
const inapplicable = [];
|
|
317
|
+
for (const check of [
|
|
318
|
+
await runTextSpacing(page),
|
|
319
|
+
await runStatusMessages(page),
|
|
320
|
+
// The focus walk is teardown-ONLY, unlike the two above — it is the one
|
|
321
|
+
// check that cannot also run inside an awaited explicit scan. Focusing
|
|
322
|
+
// fires the page's own focus, focusin and blur handlers, and a handler
|
|
323
|
+
// that opened a menu or started a request has already run by the time we
|
|
324
|
+
// restore scroll and the previous activeElement. See checks/focus.ts.
|
|
325
|
+
...(await runFocusNotObscured(page, options.rules.target)),
|
|
326
|
+
// Same teardown-only reasoning, one step further: this one presses keys.
|
|
327
|
+
await runKeyboardTrap(page),
|
|
328
|
+
// And one step further again: this one RESIZES the page. It restores the
|
|
329
|
+
// viewport, but a resize mid-test is not a race we could win.
|
|
330
|
+
await runReflow(page),
|
|
331
|
+
// 3.2.1 rides the same focusing the walk above already does, so it adds no
|
|
332
|
+
// new class of side effect. 3.2.2 CHANGES a control's value, which is where
|
|
333
|
+
// an application saves — opt-in, and off by default.
|
|
334
|
+
await runOnFocus(page),
|
|
335
|
+
...(options.onInput ? [await runOnInput(page)] : []),
|
|
336
|
+
// Reads what the init script recorded, if one was installed. Returns
|
|
337
|
+
// nothing when it was not, which is the honest answer for a check that is
|
|
338
|
+
// off rather than a pass it did not earn.
|
|
339
|
+
await runKeyShortcuts(page),
|
|
340
|
+
// Seven read-only heuristics sharing one page evaluate. They can never
|
|
341
|
+
// fail a build — everything they emit is needs-review — so they are on by
|
|
342
|
+
// default and individually switchable.
|
|
343
|
+
...(await heuristics(page, options, pageWentQuiet)),
|
|
344
|
+
]) {
|
|
345
|
+
if (check.finding)
|
|
346
|
+
findings.push(check.finding);
|
|
347
|
+
if (check.pass)
|
|
348
|
+
passes.push(check.pass);
|
|
349
|
+
if (check.inapplicable)
|
|
350
|
+
inapplicable.push(check.inapplicable);
|
|
351
|
+
}
|
|
352
|
+
return { findings, passes, inapplicable };
|
|
353
|
+
}
|
|
354
|
+
/** The seven DOM heuristics, or nothing if the page could not be read. */
|
|
355
|
+
async function heuristics(page, options, pageWentQuiet) {
|
|
356
|
+
const signals = await readHeuristicSignals(page);
|
|
357
|
+
if (!signals)
|
|
358
|
+
return [];
|
|
359
|
+
return heuristicEvidence(signals, options.rules.target, options.heuristics, pageWentQuiet);
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Did this page ever go quiet, as the in-page detector defines it?
|
|
363
|
+
*
|
|
364
|
+
* Read rather than measured — see `WENT_QUIET`. Defaults to TRUE on any failure,
|
|
365
|
+
* which is the conservative direction here: a page we cannot ask about should
|
|
366
|
+
* behave exactly as it did before this flag existed, rather than having its
|
|
367
|
+
* heuristics silently switched off by a `page.evaluate` that threw.
|
|
368
|
+
*/
|
|
369
|
+
async function wentQuiet(page) {
|
|
370
|
+
try {
|
|
371
|
+
return await page.evaluate((key) => window[key] !== false, WENT_QUIET);
|
|
372
|
+
}
|
|
373
|
+
catch {
|
|
374
|
+
return true;
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Run the driven checks on a page that was already scanned and has not changed,
|
|
379
|
+
* and attach them as a checks-only record.
|
|
380
|
+
*
|
|
381
|
+
* No axe run: there is genuinely nothing new for it to find, and paying for a
|
|
382
|
+
* second one on every page of every test would be a real cost for no evidence.
|
|
383
|
+
* `toScans` merges this into the scan that shares its `visitRef`, so the
|
|
384
|
+
* envelope ends up with one row carrying both kinds of result rather than two
|
|
385
|
+
* rows fighting over one context in dedupe.
|
|
386
|
+
*/
|
|
387
|
+
async function flushChecksOnly(page, options, testInfo, pageState, url, warn) {
|
|
388
|
+
/*
|
|
389
|
+
* No earlier scan on this page means nothing for the merge to attach to, and
|
|
390
|
+
* no ruleset identity to state. Reaching here without one would mean the skip
|
|
391
|
+
* above fired without a scan having happened, which cannot occur — but
|
|
392
|
+
* fabricating a digest to satisfy the type would be a fake that looks real,
|
|
393
|
+
* and this file's rule is that a digest is always a hash of a stated input.
|
|
394
|
+
*/
|
|
395
|
+
if (!pageState.axeVersion || !pageState.rulesetDigest)
|
|
396
|
+
return;
|
|
397
|
+
try {
|
|
398
|
+
const checks = await runDrivenChecks(page, options);
|
|
399
|
+
if (checks.findings.length === 0 &&
|
|
400
|
+
checks.passes.length === 0 &&
|
|
401
|
+
checks.inapplicable.length === 0) {
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
404
|
+
const record = {
|
|
405
|
+
recordVersion: SCAN_RECORD_VERSION,
|
|
406
|
+
kind: 'scan',
|
|
407
|
+
checksOnly: true,
|
|
408
|
+
page: { project: testInfo.project.name, engine: engineOf(page), url },
|
|
409
|
+
declared: { surface: '' },
|
|
410
|
+
visitRef: pageState.visitRef,
|
|
411
|
+
// Stated from the run's configuration, as everywhere else: these fields
|
|
412
|
+
// describe what the evidence is relative to, and a checks-only record is
|
|
413
|
+
// relative to exactly the same configuration as the scan it merges into.
|
|
414
|
+
axeVersion: pageState.axeVersion,
|
|
415
|
+
rulesetDigest: pageState.rulesetDigest,
|
|
416
|
+
wcagTarget: options.rules.target,
|
|
417
|
+
findings: checks.findings,
|
|
418
|
+
passes: checks.passes,
|
|
419
|
+
...(checks.inapplicable.length > 0 ? { inapplicable: checks.inapplicable } : {}),
|
|
420
|
+
};
|
|
421
|
+
const viewport = page.viewportSize();
|
|
422
|
+
if (viewport)
|
|
423
|
+
record.page.viewport = viewport;
|
|
424
|
+
await testInfo.attach(SCAN_RECORD_ATTACHMENT, {
|
|
425
|
+
body: Buffer.from(JSON.stringify(record), 'utf8'),
|
|
426
|
+
contentType: 'application/json',
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
catch (error) {
|
|
430
|
+
warn(`Setsquare could not run its driven checks on ${url}: ${error instanceof Error ? error.message : String(error)}. That page has no focus, keyboard or reflow evidence in this run.`);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
265
433
|
/**
|
|
266
434
|
* Scan whatever the test left on screen, at teardown.
|
|
267
435
|
*
|
|
@@ -284,8 +452,27 @@ function engineOf(page) {
|
|
|
284
452
|
*/
|
|
285
453
|
export async function flushAutoScan(context, options, testInfo, warn) {
|
|
286
454
|
for (const page of context.pages()) {
|
|
287
|
-
if (page.isClosed())
|
|
455
|
+
if (page.isClosed()) {
|
|
456
|
+
/*
|
|
457
|
+
* A page closed by the test before teardown reached it.
|
|
458
|
+
*
|
|
459
|
+
* `page.url()` is not trustworthy here, so the last URL auto-scan actually
|
|
460
|
+
* saw is used instead — which is the one the teardown sweep would have
|
|
461
|
+
* scanned had the page still been open.
|
|
462
|
+
*
|
|
463
|
+
* Recorded rather than skipped, and this is why `page-closed` exists in the
|
|
464
|
+
* contract. Without it these surfaces fell through to the reporter's
|
|
465
|
+
* visited-but-never-scanned accounting and were attributed to a settle
|
|
466
|
+
* window they never reached, which is a cause nobody observed. The ledger's
|
|
467
|
+
* WeakMap is keyed on the page object and outlives the page itself, so this
|
|
468
|
+
* still lands.
|
|
469
|
+
*/
|
|
470
|
+
const last = state.get(page);
|
|
471
|
+
if (last?.visitUrl && last.visitUrl !== 'about:blank' && !last.scanned.has(last.visitUrl)) {
|
|
472
|
+
recordUnscannable(page, toUrlPattern(last.visitUrl).pattern, 'page-closed');
|
|
473
|
+
}
|
|
288
474
|
continue;
|
|
475
|
+
}
|
|
289
476
|
const url = page.url();
|
|
290
477
|
// `about:blank` is Playwright opening a context, not the suite visiting
|
|
291
478
|
// anything. Scanning it would put a surface in the grid nobody asked for.
|
|
@@ -306,8 +493,26 @@ export async function flushAutoScan(context, options, testInfo, warn) {
|
|
|
306
493
|
* everything changed".
|
|
307
494
|
*/
|
|
308
495
|
const lastScannedAt = pageState.scanned.get(url);
|
|
309
|
-
if (lastScannedAt !== undefined && (await mutationTotal(page)) === lastScannedAt)
|
|
496
|
+
if (lastScannedAt !== undefined && (await mutationTotal(page)) === lastScannedAt) {
|
|
497
|
+
/*
|
|
498
|
+
* Right for axe, wrong for the driven checks — and that asymmetry was a
|
|
499
|
+
* silent hole for months.
|
|
500
|
+
*
|
|
501
|
+
* Nothing has changed, so re-running axe would find the same rows twice.
|
|
502
|
+
* But the driven checks never ran at all: they are teardown-only by
|
|
503
|
+
* construction, and this page's only scan happened mid-test when it went
|
|
504
|
+
* quiet. So a page that settles during its own test — a static page, a
|
|
505
|
+
* fast test, most of the web — got no text-spacing, focus, keyboard,
|
|
506
|
+
* reflow or context evidence, and the criteria those checks exist for
|
|
507
|
+
* stayed at "no automated result" on exactly the pages they would have
|
|
508
|
+
* had most to say about.
|
|
509
|
+
*
|
|
510
|
+
* Found by adding 3.2.1 and 3.2.2 and watching the fixture site report
|
|
511
|
+
* them as passing everywhere on a page built to fail both.
|
|
512
|
+
*/
|
|
513
|
+
await flushChecksOnly(page, options, testInfo, pageState, url, warn);
|
|
310
514
|
continue;
|
|
515
|
+
}
|
|
311
516
|
try {
|
|
312
517
|
// Chained onto the same queue as settle-triggered scans, so a scan that was
|
|
313
518
|
// already in flight when the test ended is not raced.
|
package/dist/autoscan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autoscan.js","sourceRoot":"","sources":["../src/autoscan.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"autoscan.js","sourceRoot":"","sources":["../src/autoscan.ts"],"names":[],"mappings":"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"}
|
package/dist/brand.d.ts
CHANGED
|
@@ -67,7 +67,7 @@ export declare const MARK_DARK: string;
|
|
|
67
67
|
* for the CSS custom-property namespace only; everything a customer types is
|
|
68
68
|
* still `setsquare` in full.
|
|
69
69
|
*/
|
|
70
|
-
export declare const BRAND_CSS = "\n :root {\n /* Surfaces. The base is now the LIGHTER of the two, inverted from the\n previous palette, so the raised step is the worse ground here. */\n --ss-surface: #ffffff;\n --ss-surface-raised: #f2f2f2;\n\n /* Text, measured against --ss-surface-raised (the worse case in this theme) */\n --ss-ink: #000000; /* 18.76:1 raised, 21.00:1 surface */\n --ss-ink-muted: #4f4f4f; /* 7.32:1 raised, 8.19:1 surface */\n\n --ss-border: #8c8c8c; /* 3.00:1 raised \u2014 non-text, meets 1.4.11 */\n --ss-grid-line: #d4d4d4; /* 1.32:1 raised \u2014 decorative only */\n\n --ss-accent: #005392; /* 7.07:1 raised, 7.92:1 surface */\n --ss-accent-ink: #ffffff; /* on accent \u2014 7.92:1 */\n\n /* Status roles. Used as text on a surface, or as a fill under their -ink. */\n --ss-danger: #a70019; /* 7.06:1 raised, 7.90:1 surface */\n --ss-danger-ink: #ffffff; /* on danger \u2014 7.90:1 */\n --ss-success: #005f29; /* 7.03:1 raised, 7.87:1 surface */\n --ss-success-ink: #ffffff;/* on success \u2014 7.87:1 */\n --ss-warning: #704a00; /* 7.03:1 raised, 7.87:1 surface */\n --ss-warning-ink: #ffffff;/* on warning \u2014 7.87:1 */\n\n --ss-code-bg: #f2f2f2;\n --ss-mark: url('data:image/png;base64,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');\n }\n\n @media (prefers-color-scheme: dark) {\n :root {\n --ss-surface: #0a0a0a;\n --ss-surface-raised: #1a1a1a;\n\n /* Measured against --ss-surface-raised, the worse case here. The chromatic\n values are unchanged; the grounds got darker, so every one of them GAINED\n headroom (7.0x -> 8.0x) rather than needing re-derivation. */\n --ss-ink: #ffffff; /* 17.40:1 raised, 19.80:1 surface */\n --ss-ink-muted: #a8a8a8; /* 7.32:1 raised, 8.33:1 surface */\n\n --ss-border: #676767; /* 3.08:1 raised */\n --ss-grid-line: #333333; /* 1.38:1 raised \u2014 decorative only */\n\n --ss-accent: #6bb5fe; /* 8.01:1 raised, 9.11:1 surface */\n --ss-accent-ink: #0b0e11; /* on accent \u2014 8.91:1 */\n\n --ss-danger: #fe928a; /* 8.03:1 raised, 9.14:1 surface */\n --ss-danger-ink: #0b0e11; /* on danger \u2014 8.93:1 */\n --ss-success: #62c47b; /* 8.04:1 raised, 9.15:1 surface */\n --ss-success-ink: #0b0e11;/* on success \u2014 8.94:1 */\n --ss-warning: #e9a228; /* 8.01:1 raised, 9.11:1 surface */\n --ss-warning-ink: #0b0e11;/* on warning \u2014 8.91:1 */\n\n --ss-code-bg: #1a1a1a;\n --ss-mark: url('data:image/png;base64,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');\n }\n }\n";
|
|
70
|
+
export declare const BRAND_CSS = "\n :root {\n /* Surfaces. The base is now the LIGHTER of the two, inverted from the\n previous palette, so the raised step is the worse ground here. */\n --ss-surface: #ffffff;\n --ss-surface-raised: #f2f2f2;\n\n /* Text, measured against --ss-surface-raised (the worse case in this theme) */\n --ss-ink: #000000; /* 18.76:1 raised, 21.00:1 surface */\n --ss-ink-muted: #4f4f4f; /* 7.32:1 raised, 8.19:1 surface */\n\n --ss-border: #8c8c8c; /* 3.00:1 raised \u2014 non-text, meets 1.4.11 */\n --ss-grid-line: #d4d4d4; /* 1.32:1 raised \u2014 decorative only */\n\n --ss-accent: #005392; /* 7.07:1 raised, 7.92:1 surface */\n --ss-accent-ink: #ffffff; /* on accent \u2014 7.92:1 */\n\n /* Status roles. Used as text on a surface, or as a fill under their -ink. */\n --ss-danger: #a70019; /* 7.06:1 raised, 7.90:1 surface */\n --ss-danger-ink: #ffffff; /* on danger \u2014 7.90:1 */\n --ss-success: #005f29; /* 7.03:1 raised, 7.87:1 surface */\n --ss-success-ink: #ffffff;/* on success \u2014 7.87:1 */\n --ss-warning: #704a00; /* 7.03:1 raised, 7.87:1 surface */\n --ss-warning-ink: #ffffff;/* on warning \u2014 7.87:1 */\n\n /*\n The conformance-level ramp. Two tokens per level: the wash is the ground\n the letters sit on and the thing you see at a glance, the other is the\n indicator \u2014 a border, non-text, held to 4.5:1 where 1.4.11 asks 3:1.\n The letters are never coloured; on a light ground a colour dark enough\n to carry text is dark, and a dark yellow is olive.\n */\n --ss-level-a: #db0024; /* 4.65:1 raised, 5.20:1 surface */\n --ss-level-a-wash: #ffdfdc; /* ink on this \u2014 16.84:1 */\n --ss-level-aa: #a15c02; /* 4.63:1 raised, 5.19:1 surface */\n --ss-level-aa-wash: #fee2cb; /* ink on this \u2014 16.96:1 */\n --ss-level-aaa: #816b05; /* 4.64:1 raised, 5.20:1 surface */\n --ss-level-aaa-wash: #ffe88f; /* ink on this \u2014 17.19:1 */\n\n --ss-code-bg: #f2f2f2;\n --ss-mark: url('data:image/png;base64,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');\n }\n\n @media (prefers-color-scheme: dark) {\n :root {\n --ss-surface: #0a0a0a;\n --ss-surface-raised: #1a1a1a;\n\n /* Measured against --ss-surface-raised, the worse case here. The chromatic\n values are unchanged; the grounds got darker, so every one of them GAINED\n headroom (7.0x -> 8.0x) rather than needing re-derivation. */\n --ss-ink: #ffffff; /* 17.40:1 raised, 19.80:1 surface */\n --ss-ink-muted: #a8a8a8; /* 7.32:1 raised, 8.33:1 surface */\n\n --ss-border: #676767; /* 3.08:1 raised */\n --ss-grid-line: #333333; /* 1.38:1 raised \u2014 decorative only */\n\n --ss-accent: #6bb5fe; /* 8.01:1 raised, 9.11:1 surface */\n --ss-accent-ink: #0b0e11; /* on accent \u2014 8.91:1 */\n\n --ss-danger: #fe928a; /* 8.03:1 raised, 9.14:1 surface */\n --ss-danger-ink: #0b0e11; /* on danger \u2014 8.93:1 */\n --ss-success: #62c47b; /* 8.04:1 raised, 9.15:1 surface */\n --ss-success-ink: #0b0e11;/* on success \u2014 8.94:1 */\n --ss-warning: #e9a228; /* 8.01:1 raised, 9.11:1 surface */\n --ss-warning-ink: #0b0e11;/* on warning \u2014 8.91:1 */\n\n /* The level ramp, dark: same hues, the wash deep and the indicator light. */\n --ss-level-a: #ff1d32; /* 4.54:1 raised, 5.16:1 surface */\n --ss-level-a-wash: #5c0109; /* ink on this \u2014 14.35:1 */\n --ss-level-aa: #c1700c; /* 4.63:1 raised, 5.27:1 surface */\n --ss-level-aa-wash: #452501; /* ink on this \u2014 13.83:1 */\n --ss-level-aaa: #9b8207; /* 4.63:1 raised, 5.27:1 surface */\n --ss-level-aaa-wash: #372d02; /* ink on this \u2014 13.65:1 */\n\n --ss-code-bg: #1a1a1a;\n --ss-mark: url('data:image/png;base64,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');\n }\n }\n";
|
|
71
71
|
/**
|
|
72
72
|
* The masthead: mark plus wordmark, shared by both artifacts.
|
|
73
73
|
*
|
|
@@ -80,5 +80,54 @@ export declare const BRAND_CSS = "\n :root {\n /* Surfaces. The base is now
|
|
|
80
80
|
*/
|
|
81
81
|
export declare const masthead: (title: string, subtitle: string) => string;
|
|
82
82
|
/** Masthead styling, kept beside the markup that needs it. */
|
|
83
|
-
export declare const MASTHEAD_CSS = "\n .masthead {
|
|
83
|
+
export declare const MASTHEAD_CSS = "\n /*\n * The mark sits on the TOP of the title block rather than its centre, because\n * the subtitle is a two-line mono string at narrow widths and centring against\n * it drags the mark off the h1's cap line \u2014 the one alignment a reader notices.\n */\n .masthead {\n display: flex; align-items: flex-start; gap: 16px;\n margin: 0 0 var(--ss-stack);\n padding-bottom: var(--ss-block);\n border-bottom: 1px solid var(--ss-border);\n }\n .masthead h1 { margin: 0; }\n /*\n * The provenance line is mono, like every other machine fact in these\n * documents \u2014 a timestamp, a branch and a commit are strings a person copies,\n * and the site gives those the same treatment (.ss-citation, .ss-evidence dt).\n */\n .masthead .provenance {\n margin: 10px 0 0;\n font-family: ui-monospace, SFMono-Regular, Menlo, monospace;\n font-size: 12px; letter-spacing: .04em;\n /* Not measured: this is one unbreakable machine string, not a line of prose. */\n max-width: none;\n color: var(--ss-ink-muted);\n }\n .mark {\n flex: 0 0 auto; width: 44px; height: 44px; margin-top: 4px;\n background: var(--ss-mark) center / contain no-repeat;\n }\n @media (max-width: 30rem) { .mark { width: 32px; height: 32px; margin-top: 2px; } }\n";
|
|
84
|
+
/**
|
|
85
|
+
* The band legend, rendered once per document that groups by viewport.
|
|
86
|
+
*
|
|
87
|
+
* Here beside its styles, and beside `masthead()`, because it is the other
|
|
88
|
+
* shared piece of markup both artifacts print. It takes the bands it was
|
|
89
|
+
* actually given rather than all three — a run that never went below 1024 has
|
|
90
|
+
* no business defining "mobile" for a reader, and a legend listing bands that
|
|
91
|
+
* are not on the page reads as a list of things we looked at.
|
|
92
|
+
*/
|
|
93
|
+
export declare const viewportLegend: (bands: readonly {
|
|
94
|
+
label: string;
|
|
95
|
+
range: string;
|
|
96
|
+
}[], note: string) => string;
|
|
97
|
+
/**
|
|
98
|
+
* The design system the two artifacts share with the public site.
|
|
99
|
+
*
|
|
100
|
+
* ## Why this exists at all
|
|
101
|
+
*
|
|
102
|
+
* `BRAND_CSS` made the report and the contact sheet use the product's COLOURS.
|
|
103
|
+
* They still did not look like the product: 16px/1.5 system-ui, two bold
|
|
104
|
+
* headings, 8px corners on everything and a table with a border round every
|
|
105
|
+
* cell is what any document looks like when nobody decided. The site has a
|
|
106
|
+
* pattern language — a type ladder, a mono ordinal spine, a radius ladder, one
|
|
107
|
+
* device for "we could not check" and one for a data table — and a customer who
|
|
108
|
+
* meets us through a report should meet the same one.
|
|
109
|
+
*
|
|
110
|
+
* The values are copied from `apps/marketing/app/site.css` for the reason the
|
|
111
|
+
* palette above is copied from `tokens.css`: that app is not a dependency of a
|
|
112
|
+
* published package. Unlike the palette there is no test diffing them, and that
|
|
113
|
+
* is a deliberate difference rather than an oversight — `brand.test.ts` guards
|
|
114
|
+
* the palette because a drifted COLOUR is a silent accessibility failure, and
|
|
115
|
+
* nothing here can fail: a radius that drifts by a pixel is untidy, not wrong.
|
|
116
|
+
*
|
|
117
|
+
* ## What is NOT copied, and why
|
|
118
|
+
*
|
|
119
|
+
* The hero rhythm, the mark keyframes, the price table and the docs rail — none
|
|
120
|
+
* of them has a counterpart in a report. The section spine, the type ladder, the
|
|
121
|
+
* radius ladder, the absence device and the data-table treatment do, and they
|
|
122
|
+
* are the ones that make a page recognisable.
|
|
123
|
+
*
|
|
124
|
+
* NO COLOUR IS NAMED HERE. Every rule below reaches for a `--ss-*` role, so the
|
|
125
|
+
* palette stays the single place a colour is decided and `brand.test.ts` stays
|
|
126
|
+
* the single place it is checked.
|
|
127
|
+
*
|
|
128
|
+
* (No backticks anywhere in this string or the comments inside it. It is a
|
|
129
|
+
* template literal, and one would end it with the parse error landing pages
|
|
130
|
+
* away.)
|
|
131
|
+
*/
|
|
132
|
+
export declare const SYSTEM_CSS = "\n :root {\n /*\n * THE TYPE LADDER, at the site's docs altitude rather than its marketing\n * one. A report is a document you read, not a page that has to hold an eye\n * before the argument starts, so the display and hero steps are omitted and\n * h1 is the site's --ss-h1-docs.\n */\n --ss-h1: clamp(28px, 3.6vw, 44px);\n --ss-h2: clamp(24px, 2.8vw, 34px);\n --ss-h3: clamp(18px, 1.6vw, 21px);\n\n /* The spacing ladder, verbatim. */\n --ss-section-gap: clamp(46px, 5.6vw, 96px);\n --ss-lead-gap: clamp(30px, 3.4vw, 48px);\n --ss-stack: clamp(24px, 2.8vw, 36px);\n --ss-block: clamp(18px, 2.2vw, 26px);\n\n /* Radius ladder: cards, inner blocks, controls, small mono, pills. */\n --ss-radius-card: 9px;\n --ss-radius-inner: 8px;\n --ss-radius-block: 7px;\n --ss-radius-control: 5px;\n --ss-radius-mono: 4px;\n --ss-radius-pill: 3px;\n\n /*\n * WCAG 1.4.8 asks for 1.5 line spacing within a paragraph, and these\n * documents are held to AAA because of what they are. It is a property\n * rather than a literal so the floor has one definition.\n */\n --ss-line-prose: 1.55;\n\n /* The measure 1.4.8 caps. Overridden per document for the body width. */\n --ss-measure: 68ch;\n\n --ss-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n\n /*\n * The document's own names for brand roles. Both artifacts used to declare\n * this block themselves, in two copies that had already diverged (the sheet\n * never mapped a warning colour). One place, one vocabulary.\n */\n --bg: var(--ss-surface);\n --fg: var(--ss-ink);\n --muted: var(--ss-ink-muted);\n --line: var(--ss-border);\n --code-bg: var(--ss-surface-raised);\n --bad-fg: var(--ss-danger);\n --warn-fg: var(--ss-warning);\n --good-fg: var(--ss-success);\n /*\n * The faint grey a \"nothing here\" glyph would want does not exist: the\n * palette has no second grey that clears 7:1, and the untested glyph is\n * already distinct by content.\n */\n --none-fg: var(--ss-ink-muted);\n }\n\n * { box-sizing: border-box; }\n\n body {\n margin: 0 auto;\n padding: var(--ss-stack) var(--ss-block) calc(var(--ss-section-gap) * 1.2);\n max-width: var(--doc-width, 72rem);\n background: var(--bg); color: var(--fg);\n font: 16px/var(--ss-line-prose) system-ui, -apple-system, \"Segoe UI\", sans-serif;\n text-wrap: pretty;\n }\n\n /* ------------------------------------------------------------- headings */\n\n /*\n * A default gap per heading role, scaled with the type. One value for a 34px\n * h2 and a 21px h3 is what makes a page feel squashed.\n */\n h1, h2, h3 { font-weight: 600; }\n h1 { font-size: var(--ss-h1); line-height: 1.08; letter-spacing: -.03em; margin: 0; }\n h2 {\n font-size: var(--ss-h2); line-height: 1.12; letter-spacing: -.026em;\n margin: 0 0 clamp(14px, 1.5vw, 18px);\n }\n h3 { font-size: var(--ss-h3); line-height: 1.3; letter-spacing: -.012em; margin: 0 0 8px; }\n\n /* --------------------------------------------------------------- spine */\n\n /*\n * THE SECTION SPINE: a 22px rule, a mono ordinal, and an uppercase category.\n * This is the site's structural device and the single thing that makes these\n * documents read as ours rather than as any tool's output.\n *\n * THE ORDINAL IS A CSS COUNTER, NOT A NUMBER WE RENDER. Half of this report's\n * sections are conditional \u2014 no performance table without timings, no run\n * group unless the run was merged, no captures unless Playwright wrote some \u2014\n * so a hand-numbered spine would have gaps in it on most real runs, and\n * numbering correctly in the renderer would mean threading a counter through\n * a dozen independently-built strings. The browser already counts the\n * sections that exist. It stays deterministic: two renders of one run emit\n * identical markup, and the counter is a function of that markup.\n *\n * R, because these are Review artifacts. The site numbers per module for the\n * same reason: R on Review surfaces, C on Consent.\n *\n * The rule is an absolutely positioned ::after rather than an inline ::before,\n * so a category that wraps at 320px wraps under itself instead of leaving the\n * rule alone on the first line looking like a stray dash.\n */\n main { counter-reset: ss-section; }\n section { counter-increment: ss-section; }\n\n .eyebrow {\n position: relative;\n max-width: 64ch;\n margin: 0 0 18px;\n padding-left: 32px;\n font-family: var(--ss-mono);\n font-size: 12px;\n letter-spacing: .1em;\n text-transform: uppercase;\n color: var(--muted);\n }\n .eyebrow::before { content: 'R' counter(ss-section, decimal-leading-zero) ' / '; }\n .eyebrow::after {\n content: ''; position: absolute; left: 0; top: .62em;\n width: 22px; height: 1px; background: var(--line);\n }\n\n main > section { margin-top: var(--ss-section-gap); }\n main > section:first-child { margin-top: 0; }\n\n /* ---------------------------------------------------------------- prose */\n\n /*\n * 1.4.8 caps the line a reader tracks, and an unbounded block is unbounded\n * whatever happens to be in it today. Scoped to prose: a table cell and a\n * figure caption set their own width from their content.\n */\n p, ul, ol { max-width: var(--ss-measure); }\n p { margin: 0 0 .75rem; }\n\n a { color: inherit; }\n :focus-visible { outline: 3px solid var(--fg); outline-offset: 2px; }\n\n code {\n background: var(--code-bg); padding: .1em .35em;\n border-radius: var(--ss-radius-mono);\n font-family: var(--ss-mono); font-size: .875em; overflow-wrap: anywhere;\n }\n\n .muted { color: var(--muted); }\n .good, .ok { color: var(--good-fg); }\n .bad { color: var(--bad-fg); font-weight: 600; }\n .check { color: var(--warn-fg); font-weight: 600; }\n\n .sr-only {\n position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;\n overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0;\n }\n\n footer {\n margin-top: var(--ss-section-gap); padding-top: var(--ss-block);\n border-top: 1px solid var(--line); color: var(--muted); font-size: .875rem;\n }\n footer code { font-size: .8rem; }\n\n /* ------------------------------------------------------------ the level tag */\n\n /*\n * A, AA, AAA \u2014 one treatment, and the SAME one the site uses. Ink on a wash\n * with an indicator border: the hue makes a level findable across a grid\n * without reading every chip, and the letters are what say which one, because\n * red, orange and yellow are inseparable under deuteranopia and no contrast\n * ratio changes that.\n *\n * A LEVEL IS ALWAYS THIS SHAPE AND A STATUS IS NEVER ONE. That is what stops\n * the A tag reading as a failure next to a danger-coloured word.\n *\n * One width for all three, so A does not read as a smaller thing than AAA.\n * The padding is asymmetric by a pixel because uppercase mono has no\n * descenders and a symmetric box sits the ink high. The radius is the pill\n * step, 3px \u2014 it used to be 999px here, which is a different design language\n * from the one the site ships.\n */\n .level {\n display: inline-flex; align-items: center; justify-content: center;\n flex: none; min-width: 40px;\n padding: 5px 9px 4px;\n border: 1px solid var(--ss-border);\n border-radius: var(--ss-radius-pill);\n background: var(--ss-surface-raised);\n color: var(--ss-ink);\n font-family: var(--ss-mono); font-size: 10.5px; line-height: 1;\n /* Trailing space trimmed, so the letters sit centred rather than pushed left. */\n letter-spacing: .09em; text-indent: .09em;\n white-space: nowrap;\n }\n .level-a { border-color: var(--ss-level-a); background: var(--ss-level-a-wash); }\n .level-aa { border-color: var(--ss-level-aa); background: var(--ss-level-aa-wash); }\n .level-aaa { border-color: var(--ss-level-aaa); background: var(--ss-level-aaa-wash); }\n /*\n * Under forced colours the wash and the border are the user's, so the hue is\n * gone \u2014 which is fine, because it never carried the meaning. The border is\n * kept so the tag stays a tag.\n */\n @media (forced-colors: active) {\n .level { border-color: CanvasText; background: Canvas; color: CanvasText; }\n }\n\n /* --------------------------------------------------------------- absence */\n\n /*\n * \"WE COULD NOT CHECK\" IS ITS OWN STATE, and most products render it as a\n * failure. One visual language for it: a broken 4px rule rather than a solid\n * one, and a sentence saying what would resolve it. Never the danger colour,\n * never a pass \u2014 which is this repository's honesty vocabulary drawn rather\n * than written.\n *\n * The same device covers every absence these documents carry, and they are\n * the same KIND of thing rather than four coincidences: a criterion the\n * engine could not decide, a run that scanned nothing, a capture whose file\n * has gone, and a viewport nothing was measured at. Every one is a gap in\n * knowledge rather than a fault.\n */\n .absence {\n display: flex; flex-direction: column; gap: 8px;\n max-width: var(--ss-measure);\n margin: 0 0 var(--ss-block);\n padding: 16px 18px;\n background: var(--ss-surface-raised);\n border: 1px solid var(--line);\n border-left: 4px dotted var(--line);\n border-radius: 0 var(--ss-radius-inner) var(--ss-radius-inner) 0;\n }\n .absence p { margin: 0; max-width: none; }\n .absence ul { margin: 0; max-width: none; }\n /*\n * A code chip inside an absence takes the FLAT ground, because the box it is\n * in has already used the raised one and a chip the same colour as the box it\n * sits in is not a chip. The same inversion the site does for an absence\n * inside a raised section.\n */\n .absence code { background: var(--ss-surface); }\n .absence__label {\n margin: 0;\n font-family: var(--ss-mono); font-size: 11px;\n letter-spacing: .1em; text-transform: uppercase;\n color: var(--ss-ink);\n }\n\n /* ------------------------------------------------------------ data tables */\n\n /*\n * A REGION THAT SCROLLS WITH A MOUSE MUST BE REACHABLE WITH A KEYBOARD.\n *\n * That is WCAG 2.1.1, and axe enforces it as scrollable-region-focusable. The\n * conformance grid is nineteen columns wide inside this scroller, so on any\n * ordinary window it scrolls \u2014 and for the whole of this document's life that\n * was a level A failure nothing caught, because no suite scans the report.\n * Found by pointing axe at it by hand, which is worth doing again.\n *\n * The markup carries the tabindex and a name: a bare tab stop announces\n * nothing, and a reader who lands in a nineteen-column grid deserves to be\n * told which one they are in.\n */\n .tablewrap { overflow-x: auto; }\n .tablewrap:focus-visible { outline: 3px solid var(--fg); outline-offset: 2px; }\n table { border-collapse: collapse; width: 100%; margin: .75rem 0 var(--ss-block); }\n caption { text-align: left; margin-bottom: .5rem; }\n th, td {\n border: 1px solid var(--line); padding: .5rem .7rem;\n text-align: left; vertical-align: top;\n }\n td.num { text-align: right; font-variant-numeric: tabular-nums; }\n\n /*\n * THE EVIDENCE TABLES: a filled header and a zebra stripe, which is the\n * site's treatment and arrived there with both halves measured first.\n *\n * The header is ink with the ground reversed out of it \u2014 21.00:1 in light and\n * 19.80:1 in dark, the strongest pairing the palette has.\n *\n * The stripe is grid-line, the decorative token, at 1.48:1 against the flat\n * ground in light and 1.57:1 in dark. The raised surface was the obvious\n * choice and measures 1.12:1 and 1.14:1, which is a stripe nobody can see.\n *\n * THE CELLS ARE INK, AND THAT IS WHAT MAKES THE STRIPE POSSIBLE. On grid-line\n * the palette's muted grey measures 5.53:1 in light and 5.31:1 in dark, and\n * every status colour lands within a hundredth of the same place \u2014 all of\n * them under 1.4.6's 7:1. So a cell in one of these tables carries no colour\n * at all: where a state has to appear, it appears as a pill, whose fill is a\n * role under its own -ink and is therefore a pair that was measured.\n *\n * That constraint is also why the conformance grid is NOT one of these tables\n * \u2014 see the note beside it in html-report.ts.\n *\n * There is no hover state. One was built for the site and removed for being\n * too heavy, and a static evidence document has even less use for it.\n */\n .data-table thead th {\n background: var(--ss-ink); color: var(--ss-surface); border-bottom: none;\n }\n .data-table thead th:not(:first-child) { border-left-color: var(--ss-surface); }\n .data-table tbody th, .data-table tbody td { color: var(--ss-ink); }\n /*\n * A code chip in a striped cell gets the mono face and no ground at all. Its\n * usual raised background lands lighter than the flat row and darker than the\n * stripe, so it reads as two different chips down one column \u2014 and the thing\n * that makes a rule id look like a rule id is the typeface, not the box.\n */\n .data-table code { background: none; padding: 0; }\n .data-table tbody tr:nth-child(even) th,\n .data-table tbody tr:nth-child(even) td { background: var(--ss-grid-line); }\n /*\n * Under forced colours the grounds are the user's, so the stripe goes. The\n * borders survive, which is the right thing to keep: the stripe was always an\n * aid to tracking a row and never the structure.\n */\n @media (forced-colors: active) {\n .data-table thead th {\n background: Canvas; color: CanvasText; border-bottom: 2px solid CanvasText;\n }\n .data-table tbody tr:nth-child(even) th,\n .data-table tbody tr:nth-child(even) td { background: Canvas; }\n }\n\n /*\n * The straight-to-a-band links out of the report's captures section. Mono and\n * uppercase because they are the same vocabulary as the band headings they\n * land on, and a reader should recognise where they are going to arrive.\n */\n .band-links {\n list-style: none; padding: 0; margin: 0 0 .75rem; max-width: none;\n display: flex; flex-direction: column; gap: 6px;\n }\n .band-links a {\n font-family: var(--ss-mono); font-size: 12px;\n letter-spacing: .12em; text-transform: uppercase; font-weight: 600;\n }\n .band-links .muted {\n font-family: var(--ss-mono); font-size: 12px; letter-spacing: .04em;\n }\n\n /* ----------------------------------------------------- viewport bands */\n\n /*\n * A ROW THAT IS A HEADING, inside its own tbody.\n *\n * The grouping is real table structure rather than a visual break: each band\n * is its own row group, and this is that group's header cell scoped to it, so\n * a screen reader announces which band a cell belongs to the same way it\n * announces which column. A styled row with no header semantics would group\n * the rows for sighted readers only, which on an accessibility report is a\n * poor joke. (No backticks in this block \u2014 it is inside a template literal.)\n *\n * Reversed out of ink, like the column header above it, because it is a\n * header \u2014 21.00:1 light and 19.80:1 dark, the same measured pairing. The\n * size sits beside the name at a lighter weight and never replaces it: the\n * band is shorthand and the pixels are the fact.\n */\n /*\n * THE TABLE CLASS IS IN THE SELECTOR, and it has to be. The cell-colour rule\n * above is scoped to a data table's body header cells, which out-specifies a\n * bare band-row rule \u2014 so the heading took the body's ink on its own ink\n * ground and rendered as a black bar with nothing in it. Caught by looking at\n * the page; no test asserts a colour, and a contrast checker would have\n * called 1:1 a pass for text nobody can see. (No backticks: template literal.)\n */\n .data-table .band-row th,\n .data-table .band-row td {\n background: var(--ss-ink); color: var(--ss-surface);\n font-family: var(--ss-mono); font-size: 11px;\n letter-spacing: .12em; text-transform: uppercase;\n padding: .45rem .7rem;\n }\n /*\n * No border between the two cells, so the header and the sizes read as one\n * bar. They are two cells because axe cannot resolve a header that spans\n * every column \u2014 see the note beside bandHeader in html-report.ts.\n */\n .data-table .band-row th { border-right: 0; }\n .data-table .band-row td { border-left: 0; }\n .data-table .band-row .sizes {\n letter-spacing: .04em; text-transform: none; opacity: .78;\n }\n @media (forced-colors: active) {\n .data-table .band-row th,\n .data-table .band-row td {\n background: Canvas; color: CanvasText; border-bottom: 2px solid CanvasText;\n }\n }\n\n /*\n * The legend, and it is not decoration.\n *\n * \"Mobile\" is a claim about a device and these documents cannot make one \u2014 a\n * viewport is a number of CSS pixels and the machine behind it is unknowable.\n * The band names are kept because they are what a reader is actually asking\n * about, and the legend is the price: every artifact that prints a band name\n * prints this beside it, with the ranges, once.\n */\n .legend {\n margin: 0 0 var(--ss-block);\n padding: 14px 16px;\n max-width: var(--ss-measure);\n background: var(--ss-surface-raised);\n border: 1px solid var(--line);\n border-radius: var(--ss-radius-block);\n }\n .legend dl {\n display: flex; flex-wrap: wrap; gap: 6px 20px;\n margin: 0 0 8px;\n font-family: var(--ss-mono); font-size: 12px;\n }\n .legend div { display: flex; align-items: baseline; gap: 8px; }\n .legend dt {\n letter-spacing: .12em; text-transform: uppercase; font-weight: 600;\n }\n .legend dd { margin: 0; color: var(--muted); }\n .legend p { margin: 0; max-width: none; font-size: .875rem; color: var(--muted); }\n\n /* ------------------------------------------------------------------ pills */\n\n /*\n * The one solid fill in either document: a role under its own -ink is a pair\n * the palette measured, and nothing here invents a tint.\n */\n .pill {\n display: inline-block; min-width: 4.5ch; text-align: center;\n padding: .1em .5em; border-radius: var(--ss-radius-mono);\n font-family: var(--ss-mono); font-size: .8125em; letter-spacing: .04em;\n }\n .pill.s-failed { background: var(--ss-danger); color: var(--ss-danger-ink); font-weight: 700; }\n .pill.s-cantTell { background: var(--ss-warning); color: var(--ss-warning-ink); font-weight: 600; }\n .pill.s-rulesPassed { background: var(--ss-success); color: var(--ss-success-ink); }\n .pill.s-inapplicable {\n background: var(--ss-surface); color: var(--ss-ink); border: 1px solid var(--line);\n }\n /*\n * The two declared states are HOLLOW, never filled.\n *\n * Every solid pill is something a rule observed. A declaration is the\n * customer's claim about their own test, and a dashed outline reads as\n * provisional next to a solid fill \u2014 and survives forced colours, where a\n * background fill does not. The word inside carries the meaning regardless.\n */\n .pill.s-assertedFailing {\n background: none; color: var(--bad-fg);\n border: 1px dashed var(--bad-fg); font-weight: 700;\n }\n .pill.s-assertedBySuite {\n background: none; color: var(--fg); border: 1px dashed var(--line);\n }\n";
|
|
84
133
|
//# sourceMappingURL=brand.d.ts.map
|
package/dist/brand.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../src/brand.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../src/brand.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,UAAU,QA2EiD,CAAC;AAEzE,sFAAsF;AACtF,eAAO,MAAM,SAAS,QAyGsB,CAAC;AAE7C;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,26oBA+ErB,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,QAAQ,GAAI,OAAO,MAAM,EAAE,UAAU,MAAM,KAAG,MAO/C,CAAC;AAEb,8DAA8D;AAC9D,eAAO,MAAM,YAAY,6wCA+BxB,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,GACzB,OAAO,SAAS;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,EAClD,MAAM,MAAM,KACX,MAWF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,eAAO,MAAM,UAAU,gtmBAoctB,CAAC"}
|