@a11y-oracle/axe-bridge 1.1.4 → 1.2.0
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 +14 -4
- package/dist/lib/axe-bridge.d.ts.map +1 -1
- package/dist/lib/axe-bridge.js +4 -1
- package/dist/lib/types.d.ts +12 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -49,7 +49,12 @@ const resolved = await resolveAllIncomplete(cdpSession, axeResults);
|
|
|
49
49
|
```typescript
|
|
50
50
|
const resolved = await resolveAllIncomplete(cdpSession, axeResults, {
|
|
51
51
|
wcagLevel: 'wcag22aa',
|
|
52
|
-
contrast: {
|
|
52
|
+
contrast: {
|
|
53
|
+
threshold: 4.5, // normal text contrast ratio
|
|
54
|
+
largeTextThreshold: 3.0, // large text contrast ratio
|
|
55
|
+
supermajorityPassRatio: 0.75, // auto-pass split decisions when 75%+ pixels pass
|
|
56
|
+
bestCaseMultiplier: 2.0, // auto-pass when best-case CR exceeds 2× threshold
|
|
57
|
+
},
|
|
53
58
|
focusIndicator: { focusSettleDelay: 150, diffThreshold: 0.2 },
|
|
54
59
|
skipRules: ['frame-tested'], // skip specific resolvers
|
|
55
60
|
});
|
|
@@ -118,9 +123,14 @@ Orchestrator that pipes results through all 10 resolvers in sequence. Each resol
|
|
|
118
123
|
|
|
119
124
|
#### `resolveIncompleteContrast(cdp, axeResults, options?)`
|
|
120
125
|
|
|
121
|
-
Resolves `color-contrast` incomplete entries using CSS halo heuristics and pixel-level screenshot analysis.
|
|
126
|
+
Resolves `color-contrast` incomplete entries using CSS halo heuristics and pixel-level screenshot analysis. Resolved nodes (both passes and violations) are enriched with contrast data in the axe check's `data` field, including `contrastRatio`, `expectedRatio`, `fgColor`, `bgColorLightest`, `bgColorDarkest`, and `algorithm` (`'visual-pixel'` or `'visual-halo'`).
|
|
122
127
|
|
|
123
|
-
- **Options:** `ContrastResolutionOptions
|
|
128
|
+
- **Options:** `ContrastResolutionOptions`:
|
|
129
|
+
- `wcagLevel` — WCAG conformance level (default: `'wcag22aa'`). Thresholds are derived automatically (AA → 4.5/3.0). Level A has no contrast SC so the resolver is skipped.
|
|
130
|
+
- `threshold` — Override minimum contrast ratio for normal text (overrides `wcagLevel`)
|
|
131
|
+
- `largeTextThreshold` — Override minimum contrast ratio for large text (overrides `wcagLevel`)
|
|
132
|
+
- `supermajorityPassRatio` — During a split decision (one extreme passes, one fails), auto-pass if at least this fraction of pixels pass (default: `0.75`)
|
|
133
|
+
- `bestCaseMultiplier` — During a split decision, auto-pass if the best-case contrast ratio exceeds the threshold multiplied by this value (default: `2.0`)
|
|
124
134
|
- Automatically detects large text from axe-core's check data (>= 24px or bold >= 18.66px)
|
|
125
135
|
|
|
126
136
|
#### `resolveIdenticalLinksSamePurpose(cdp, axeResults)`
|
|
@@ -167,7 +177,7 @@ Resolves `aria-hidden-focus` via a single keyboard Tab traversal across all flag
|
|
|
167
177
|
|
|
168
178
|
#### `resolveFocusIndicator(cdp, axeResults, options?)`
|
|
169
179
|
|
|
170
|
-
Resolves `focus-indicator` by pixel-diffing before/after focus screenshots.
|
|
180
|
+
Resolves `focus-indicator` by pixel-diffing before/after focus screenshots. Elements are scrolled into the viewport before capture, ensuring off-screen elements produce valid screenshots. Enables focus emulation via `Emulation.setFocusEmulationEnabled` so focus indicators render even in headless browsers or Cypress AUT iframes.
|
|
171
181
|
|
|
172
182
|
- **Options:** `FocusIndicatorOptions` — `focusSettleDelay` (default: 100), `diffThreshold` (default: 0.1%)
|
|
173
183
|
- Screenshots are identical → **Violation**; pixels changed → **Pass**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axe-bridge.d.ts","sourceRoot":"","sources":["../../src/lib/axe-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D,OAAO,KAAK,EACV,UAAU,EAEV,yBAAyB,EAC1B,MAAM,YAAY,CAAC;AA2CpB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,cAAc,EACnB,UAAU,EAAE,UAAU,EACtB,OAAO,CAAC,EAAE,yBAAyB,GAClC,OAAO,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"axe-bridge.d.ts","sourceRoot":"","sources":["../../src/lib/axe-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D,OAAO,KAAK,EACV,UAAU,EAEV,yBAAyB,EAC1B,MAAM,YAAY,CAAC;AA2CpB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,cAAc,EACnB,UAAU,EAAE,UAAU,EACtB,OAAO,CAAC,EAAE,yBAAyB,GAClC,OAAO,CAAC,UAAU,CAAC,CAoErB"}
|
package/dist/lib/axe-bridge.js
CHANGED
|
@@ -72,7 +72,10 @@ export async function resolveIncompleteContrast(cdp, axeResults, options) {
|
|
|
72
72
|
if (!found)
|
|
73
73
|
return clone;
|
|
74
74
|
const { index: ccIndex, rule: ccRule } = found;
|
|
75
|
-
const analyzer = new VisualContrastAnalyzer(cdp
|
|
75
|
+
const analyzer = new VisualContrastAnalyzer(cdp, {
|
|
76
|
+
supermajorityPassRatio: options?.supermajorityPassRatio,
|
|
77
|
+
bestCaseMultiplier: options?.bestCaseMultiplier,
|
|
78
|
+
});
|
|
76
79
|
const passNodes = [];
|
|
77
80
|
const violationNodes = [];
|
|
78
81
|
const incompleteNodes = [];
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -106,6 +106,18 @@ export interface ContrastResolutionOptions {
|
|
|
106
106
|
threshold?: number;
|
|
107
107
|
/** Minimum contrast ratio for large text. Overrides wcagLevel. */
|
|
108
108
|
largeTextThreshold?: number;
|
|
109
|
+
/**
|
|
110
|
+
* If at least this fraction of pixels pass during a split decision,
|
|
111
|
+
* auto-pass the element (supermajority rule).
|
|
112
|
+
* Default: `0.75`.
|
|
113
|
+
*/
|
|
114
|
+
supermajorityPassRatio?: number;
|
|
115
|
+
/**
|
|
116
|
+
* If the best-case extreme CR exceeds the WCAG threshold multiplied
|
|
117
|
+
* by this value, auto-pass regardless of pixel distribution.
|
|
118
|
+
* Default: `2.0`.
|
|
119
|
+
*/
|
|
120
|
+
bestCaseMultiplier?: number;
|
|
109
121
|
}
|
|
110
122
|
/** Options for the `link-in-text-block` resolver. */
|
|
111
123
|
export interface LinkInTextBlockOptions {
|
package/dist/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@a11y-oracle/axe-bridge",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Axe-core result post-processor that resolves 10 incomplete rules using visual analysis, keyboard interaction, and CDP inspection",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "a11y-oracle",
|
|
@@ -44,10 +44,10 @@
|
|
|
44
44
|
"!**/*.tsbuildinfo"
|
|
45
45
|
],
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@a11y-oracle/cdp-types": "1.
|
|
48
|
-
"@a11y-oracle/focus-analyzer": "1.
|
|
49
|
-
"@a11y-oracle/keyboard-engine": "1.
|
|
50
|
-
"@a11y-oracle/visual-engine": "1.
|
|
47
|
+
"@a11y-oracle/cdp-types": "1.2.0",
|
|
48
|
+
"@a11y-oracle/focus-analyzer": "1.2.0",
|
|
49
|
+
"@a11y-oracle/keyboard-engine": "1.2.0",
|
|
50
|
+
"@a11y-oracle/visual-engine": "1.2.0",
|
|
51
51
|
"tslib": "^2.3.0"
|
|
52
52
|
}
|
|
53
53
|
}
|