raven-mcp 1.11.0 → 1.12.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 CHANGED
@@ -55,7 +55,7 @@ cd raven-mcp && npm install && npm run build
55
55
  | `get_principles` | Get design principles relevant to a UI context |
56
56
  | `get_pattern` | Get proven patterns for a specific UI type |
57
57
  | `get_business_strategy` | Get business/monetization strategies |
58
- | `evaluate_design` | Evaluate a design description against principles. Pass base64 PNG screenshots (`before_screenshot`/`after_screenshot`) for a structured before/after pixel diff with `fix_confirmed`, `changed_ratio`, and changed region. |
58
+ | `evaluate_design` | Evaluate a design description against principles. Pass base64 PNG screenshots (`before_screenshot`/`after_screenshot`) for a structured before/after pixel diff with `fix_confirmed`, `changed_ratio`, and changed region. Pass `compact: true` to return only scores and violations (drops full principle/pattern bodies) when the full payload is too large. |
59
59
  | `search_knowledge` | Search across all principles, patterns, and strategies |
60
60
  | `get_checklist` | Get a pre-publish checklist for a UI type |
61
61
  | `get_d4d_framework` | Get Design for Delight framework templates |
@@ -63,11 +63,12 @@ cd raven-mcp && npm install && npm run build
63
63
  | `get_design_system` | Get tokens for a specific design system |
64
64
  | `compose_system` | Mix tokens from different systems |
65
65
  | `get_brand_system` | Get a full system styled like a well-known brand |
66
- | `audit_page` | Audit HTML/CSS against Raven's quality standards — pass `html` for static audit, or `url` to render headless with optional `scroll_settle` (scroll to bottom + settle reveals) and `viewport` parameters; `containerMaxWidth` makes container checks token-aware |
66
+ | `audit_page` | Audit HTML/CSS against Raven's quality standards — pass `html` for static audit, or `url` to render headless with optional `scroll_settle` (scroll to bottom + settle reveals) and `viewport` parameters; `containerMaxWidth` makes container checks token-aware. Pass `compact: true` to return only scores, violations, and fix_priority (drops embedded base64 screenshots) when the full payload is too large. |
67
67
  | `audit_layout` | Evaluate visual rhythm, alignment, and optical balance |
68
68
  | `audit_responsive_visibility` | Render a URL at multiple breakpoints and flag content elements that are visible on desktop but hidden on mobile (display:none/opacity:0/zero-size) — categorises each as likely-oversight (content vanishing on mobile) vs intentional (decorative) |
69
69
  | `audit_contrast` | Compute WCAG contrast ratios for every text element on a rendered page and report AA (4.5:1 / 3:1 large) and AAA pass-fail per element, with delta-to-pass for failures |
70
- | `audit_url` | Render a live URL at each viewport×theme, scroll-settle, fire interactions, capture real pixels + DOM, then run the page/contrast/responsive/blank-media checks **plus** sliced-image edge-symmetry and hover-state white-wash detection over the captures every finding tagged confirmed/likely-artifact/inconclusive, ranked by severity |
70
+ | `suggest_contrast_fix` | Given failing WCAG color pairs, return the minimal fg/bg change that clears the AA/AAA targetconcrete passing values to fix `audit_contrast` failures |
71
+ | `audit_url` | Render a live URL at each viewport×theme, scroll-settle, fire interactions, capture real pixels + DOM, then run the page/contrast/responsive/blank-media checks **plus** sliced-image edge-symmetry and hover-state white-wash detection over the captures — every finding tagged confirmed/likely-artifact/inconclusive, ranked by severity. Pass `compact: true` to return only findings and summary (drops per-capture base64 screenshots) when the full payload is too large. |
71
72
  | `audit_content` | Per-item content verdicts (pass/warn/fail) for headings, prose, CTAs, labels, captions, metrics & outcomes against UX-writing principles + deterministic heuristics (metric needs number+unit; CTA action-led ≤4 words; prose flags passive/jargon/hedging; caption-vs-heading duplication) — with a before→after rewrite suggestion per item. Pure offline |
72
73
  | `audit_typography` | Typographic-**scale** report over rendered DOM text nodes (or a supplied snapshot) — detects the dominant modular-scale ratio and flags off-scale sizes, checks line-height consistency vs the body rhythm, and flags weight ladders >4 weights or non-standard values. Goes beyond `audit_page`'s pass/fail typography checks |
73
74
  | `audit_tap_targets` | WCAG 2.5.5 / Apple 44pt **web** tap-target audit — enumerates every interactive element (rendered URL or snapshot) and emits a per-element fix table: selector, role, text, measured w/h, per-axis pixel deficit, and a concrete CSS fix, sorted worst-first |
@@ -149,7 +150,7 @@ Returns flagged elements with selector, hiding class, visibility at each breakpo
149
150
 
150
151
  ## Contrast audits
151
152
 
152
- `audit_contrast` computes WCAG contrast ratios for every text element on a rendered page, reporting AA (4.5:1 normal text, 3:1 large) and AAA (7:1 normal, 4.5:1 large) pass-fail. Useful for catching small-text / low-contrast pairs that a screenshot eyedropper would catch manually — Raven replaces the math.
153
+ `audit_contrast` computes WCAG contrast ratios for every text element on a rendered page, reporting AA (4.5:1 normal text, 3:1 large) and AAA (7:1 normal, 4.5:1 large) pass-fail. Useful for catching small-text / low-contrast pairs that a screenshot eyedropper would catch manually — Raven replaces the math. The background color is composited from the full ancestor stack (nearest opaque layer onward) for accurate contrast on layered UIs.
153
154
 
154
155
  **Usage:**
155
156
  - `audit_contrast(url)` — render a live page and audit all text.
@@ -0,0 +1,3 @@
1
+ export declare function compactAuditPage(result: any): any;
2
+ export declare function compactEvaluation(evaluation: any): any;
3
+ export declare function compactAuditUrl(result: any): any;
@@ -0,0 +1,103 @@
1
+ // src/compact.ts
2
+ // Compact response shaping for the heavy audit/eval tools. Pure, no side effects.
3
+ // Strips embedded reference bulk (base64 screenshots, principle/pattern bodies, raw DOM)
4
+ // while preserving the decision-grade signal: scores, violations, fix_priority.
5
+ export function compactAuditPage(result) {
6
+ const out = {};
7
+ if ("score" in result)
8
+ out.score = result.score;
9
+ if ("grade" in result)
10
+ out.grade = result.grade;
11
+ if ("summary" in result)
12
+ out.summary = result.summary;
13
+ if ("passes" in result && Array.isArray(result.passes)) {
14
+ out.passes_count = result.passes.length;
15
+ }
16
+ else if ("passes_count" in result) {
17
+ out.passes_count = result.passes_count;
18
+ }
19
+ if ("errors" in result)
20
+ out.errors = result.errors;
21
+ if ("warnings" in result)
22
+ out.warnings = result.warnings;
23
+ if ("fix_priority" in result)
24
+ out.fix_priority = result.fix_priority;
25
+ if ("notes" in result)
26
+ out.notes = result.notes;
27
+ if ("unloaded_video_artifacts" in result)
28
+ out.unloaded_video_artifacts = result.unloaded_video_artifacts;
29
+ if ("adversarial_verification" in result)
30
+ out.adversarial_verification = result.adversarial_verification;
31
+ if (result.capture && typeof result.capture === "object") {
32
+ const cap = {};
33
+ if ("url" in result.capture)
34
+ cap.url = result.capture.url;
35
+ if ("viewport" in result.capture)
36
+ cap.viewport = result.capture.viewport;
37
+ if ("scrolledToBottom" in result.capture)
38
+ cap.scrolledToBottom = result.capture.scrolledToBottom;
39
+ out.capture = cap; // screenshot_bytes (the base64) intentionally dropped
40
+ }
41
+ return out;
42
+ }
43
+ export function compactEvaluation(evaluation) {
44
+ const out = {};
45
+ if ("design_description" in evaluation)
46
+ out.design_description = evaluation.design_description;
47
+ if ("context" in evaluation)
48
+ out.context = evaluation.context;
49
+ if ("goals" in evaluation)
50
+ out.goals = evaluation.goals;
51
+ if ("evaluation_guidance" in evaluation)
52
+ out.evaluation_guidance = evaluation.evaluation_guidance;
53
+ if (Array.isArray(evaluation.principles_to_check)) {
54
+ out.principles_to_check = evaluation.principles_to_check.map((p) => ({ id: p.id, name: p.name }));
55
+ }
56
+ if (Array.isArray(evaluation.applicable_patterns)) {
57
+ out.applicable_patterns = evaluation.applicable_patterns.map((p) => ({ id: p.id, name: p.name }));
58
+ }
59
+ if ("total_principles" in evaluation)
60
+ out.total_principles = evaluation.total_principles;
61
+ if ("total_patterns" in evaluation)
62
+ out.total_patterns = evaluation.total_patterns;
63
+ if ("before_after_diff" in evaluation)
64
+ out.before_after_diff = evaluation.before_after_diff;
65
+ if ("fix_confirmed" in evaluation)
66
+ out.fix_confirmed = evaluation.fix_confirmed;
67
+ return out;
68
+ }
69
+ export function compactAuditUrl(result) {
70
+ const out = {};
71
+ if ("tool" in result)
72
+ out.tool = result.tool;
73
+ if ("url" in result)
74
+ out.url = result.url;
75
+ if ("viewports" in result)
76
+ out.viewports = result.viewports;
77
+ if ("themes" in result)
78
+ out.themes = result.themes;
79
+ if ("findings" in result)
80
+ out.findings = result.findings;
81
+ if ("counts" in result)
82
+ out.counts = result.counts;
83
+ if ("summary" in result)
84
+ out.summary = result.summary;
85
+ if ("warnings" in result)
86
+ out.warnings = result.warnings;
87
+ if (Array.isArray(result.captures)) {
88
+ out.captures = result.captures.map((c) => {
89
+ const cc = {};
90
+ if ("viewport" in c)
91
+ cc.viewport = c.viewport;
92
+ if ("theme" in c)
93
+ cc.theme = c.theme;
94
+ if ("scrolledToBottom" in c)
95
+ cc.scrolledToBottom = c.scrolledToBottom;
96
+ if ("screenshot_bytes" in c)
97
+ cc.screenshot_bytes = c.screenshot_bytes;
98
+ return cc; // base64 `screenshot` intentionally dropped
99
+ });
100
+ }
101
+ return out;
102
+ }
103
+ //# sourceMappingURL=compact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compact.js","sourceRoot":"","sources":["../src/compact.ts"],"names":[],"mappings":"AAAA,iBAAiB;AACjB,kFAAkF;AAClF,yFAAyF;AACzF,gFAAgF;AAEhF,MAAM,UAAU,gBAAgB,CAAC,MAAW;IAC1C,MAAM,GAAG,GAAQ,EAAE,CAAC;IACpB,IAAI,OAAO,IAAI,MAAM;QAAE,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAChD,IAAI,OAAO,IAAI,MAAM;QAAE,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAChD,IAAI,SAAS,IAAI,MAAM;QAAE,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IACtD,IAAI,QAAQ,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACvD,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;IAC1C,CAAC;SAAM,IAAI,cAAc,IAAI,MAAM,EAAE,CAAC;QACpC,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IACzC,CAAC;IACD,IAAI,QAAQ,IAAI,MAAM;QAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IACnD,IAAI,UAAU,IAAI,MAAM;QAAE,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACzD,IAAI,cAAc,IAAI,MAAM;QAAE,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IACrE,IAAI,OAAO,IAAI,MAAM;QAAE,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAChD,IAAI,0BAA0B,IAAI,MAAM;QAAE,GAAG,CAAC,wBAAwB,GAAG,MAAM,CAAC,wBAAwB,CAAC;IACzG,IAAI,0BAA0B,IAAI,MAAM;QAAE,GAAG,CAAC,wBAAwB,GAAG,MAAM,CAAC,wBAAwB,CAAC;IACzG,IAAI,MAAM,CAAC,OAAO,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzD,MAAM,GAAG,GAAQ,EAAE,CAAC;QACpB,IAAI,KAAK,IAAI,MAAM,CAAC,OAAO;YAAE,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;QAC1D,IAAI,UAAU,IAAI,MAAM,CAAC,OAAO;YAAE,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;QACzE,IAAI,kBAAkB,IAAI,MAAM,CAAC,OAAO;YAAE,GAAG,CAAC,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;QACjG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,sDAAsD;IAC3E,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,UAAe;IAC/C,MAAM,GAAG,GAAQ,EAAE,CAAC;IACpB,IAAI,oBAAoB,IAAI,UAAU;QAAE,GAAG,CAAC,kBAAkB,GAAG,UAAU,CAAC,kBAAkB,CAAC;IAC/F,IAAI,SAAS,IAAI,UAAU;QAAE,GAAG,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;IAC9D,IAAI,OAAO,IAAI,UAAU;QAAE,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;IACxD,IAAI,qBAAqB,IAAI,UAAU;QAAE,GAAG,CAAC,mBAAmB,GAAG,UAAU,CAAC,mBAAmB,CAAC;IAClG,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAClD,GAAG,CAAC,mBAAmB,GAAG,UAAU,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACzG,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAClD,GAAG,CAAC,mBAAmB,GAAG,UAAU,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACzG,CAAC;IACD,IAAI,kBAAkB,IAAI,UAAU;QAAE,GAAG,CAAC,gBAAgB,GAAG,UAAU,CAAC,gBAAgB,CAAC;IACzF,IAAI,gBAAgB,IAAI,UAAU;QAAE,GAAG,CAAC,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC;IACnF,IAAI,mBAAmB,IAAI,UAAU;QAAE,GAAG,CAAC,iBAAiB,GAAG,UAAU,CAAC,iBAAiB,CAAC;IAC5F,IAAI,eAAe,IAAI,UAAU;QAAE,GAAG,CAAC,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC;IAChF,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAW;IACzC,MAAM,GAAG,GAAQ,EAAE,CAAC;IACpB,IAAI,MAAM,IAAI,MAAM;QAAE,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAC7C,IAAI,KAAK,IAAI,MAAM;QAAE,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;IAC1C,IAAI,WAAW,IAAI,MAAM;QAAE,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAC5D,IAAI,QAAQ,IAAI,MAAM;QAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IACnD,IAAI,UAAU,IAAI,MAAM;QAAE,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACzD,IAAI,QAAQ,IAAI,MAAM;QAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IACnD,IAAI,SAAS,IAAI,MAAM;QAAE,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IACtD,IAAI,UAAU,IAAI,MAAM;QAAE,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACzD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE;YAC5C,MAAM,EAAE,GAAQ,EAAE,CAAC;YACnB,IAAI,UAAU,IAAI,CAAC;gBAAE,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;YAC9C,IAAI,OAAO,IAAI,CAAC;gBAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;YACrC,IAAI,kBAAkB,IAAI,CAAC;gBAAE,EAAE,CAAC,gBAAgB,GAAG,CAAC,CAAC,gBAAgB,CAAC;YACtE,IAAI,kBAAkB,IAAI,CAAC;gBAAE,EAAE,CAAC,gBAAgB,GAAG,CAAC,CAAC,gBAAgB,CAAC;YACtE,OAAO,EAAE,CAAC,CAAC,4CAA4C;QACzD,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -42,6 +42,15 @@ export declare function relativeLuminance(rgb: [number, number, number]): number
42
42
  * contrastRatio([0,0,0], [255,255,255]) === 21 (±0.01).
43
43
  */
44
44
  export declare function contrastRatio(fg: [number, number, number], bg: [number, number, number]): number;
45
+ /**
46
+ * Composite an ordered stack of CSS color strings onto an opaque white base.
47
+ *
48
+ * @param layers - CSS color strings ordered **nearest ancestor first → furthest last**.
49
+ * Each is parsed with parseColor. Fully-transparent layers (a === 0) are skipped.
50
+ * The stack is composited alpha-over from furthest→nearest onto white [255,255,255].
51
+ * @returns An opaque [r, g, b] triple. Empty or all-transparent input → [255,255,255].
52
+ */
53
+ export declare function compositeBackground(layers: string[]): [number, number, number];
45
54
  /**
46
55
  * Score a pre-collected snapshot of elements. No browser required.
47
56
  */
@@ -49,6 +58,7 @@ export declare function auditContrastSnapshot(elements: Array<{
49
58
  selector: string;
50
59
  color: string;
51
60
  bgColor: string;
61
+ bgColors?: string[];
52
62
  fontPx?: number;
53
63
  bold?: boolean;
54
64
  text?: string;
@@ -65,3 +75,25 @@ export declare function auditContrastUrl(url: string, opts?: {
65
75
  timeoutMs?: number;
66
76
  theme?: "light" | "dark";
67
77
  }): Promise<ContrastResult>;
78
+ export type ContrastFixDetail = {
79
+ color: string;
80
+ ratio: number;
81
+ direction: "lighter" | "darker";
82
+ };
83
+ export type SuggestContrastFix = {
84
+ fg: string;
85
+ bg: string;
86
+ currentRatio: number;
87
+ targetRatio: number;
88
+ passes: boolean;
89
+ fgFix: ContrastFixDetail | null;
90
+ bgFix: ContrastFixDetail | null;
91
+ reachable: boolean;
92
+ recommendation: string;
93
+ };
94
+ export declare function suggestContrastFix(fg: string, bg: string, opts?: {
95
+ targetRatio?: number;
96
+ level?: "AA" | "AAA";
97
+ fontPx?: number;
98
+ bold?: boolean;
99
+ }): SuggestContrastFix;
package/dist/contrast.js CHANGED
@@ -97,6 +97,39 @@ function compositeOverWhite(r, g, b, a) {
97
97
  const bOut = Math.round(b * a + 255 * (1 - a));
98
98
  return [rOut, gOut, bOut];
99
99
  }
100
+ /**
101
+ * Composite an ordered stack of CSS color strings onto an opaque white base.
102
+ *
103
+ * @param layers - CSS color strings ordered **nearest ancestor first → furthest last**.
104
+ * Each is parsed with parseColor. Fully-transparent layers (a === 0) are skipped.
105
+ * The stack is composited alpha-over from furthest→nearest onto white [255,255,255].
106
+ * @returns An opaque [r, g, b] triple. Empty or all-transparent input → [255,255,255].
107
+ */
108
+ export function compositeBackground(layers) {
109
+ // Start with an opaque white base
110
+ let baseR = 255;
111
+ let baseG = 255;
112
+ let baseB = 255;
113
+ // Parse all layers, skipping fully transparent ones
114
+ const parsed = [];
115
+ for (const layer of layers) {
116
+ const [r, g, b, a] = parseColor(layer);
117
+ if (a === 0)
118
+ continue; // skip transparent
119
+ parsed.push([r, g, b, a]);
120
+ }
121
+ if (parsed.length === 0) {
122
+ return [255, 255, 255];
123
+ }
124
+ // Composite furthest→nearest (reverse order) onto the base
125
+ for (let i = parsed.length - 1; i >= 0; i--) {
126
+ const [r, g, b, a] = parsed[i];
127
+ baseR = Math.round(r * a + baseR * (1 - a));
128
+ baseG = Math.round(g * a + baseG * (1 - a));
129
+ baseB = Math.round(b * a + baseB * (1 - a));
130
+ }
131
+ return [baseR, baseG, baseB];
132
+ }
100
133
  // ---------------------------------------------------------------------------
101
134
  // Snapshot audit (pure — no Playwright needed)
102
135
  // ---------------------------------------------------------------------------
@@ -108,11 +141,23 @@ export function auditContrastSnapshot(elements) {
108
141
  const rows = [];
109
142
  for (const el of elements) {
110
143
  const [fr, fg, fb, fa] = parseColor(el.color);
111
- const [br, bg, bb, ba] = parseColor(el.bgColor);
112
144
  // Composite fg over white if semi-transparent
113
145
  const fgRgb = fa < 1 ? compositeOverWhite(fr, fg, fb, fa) : [fr, fg, fb];
114
- // Composite bg over white if semi-transparent
115
- const bgRgb = ba < 1 ? compositeOverWhite(br, bg, bb, ba) : [br, bg, bb];
146
+ // Background: use ancestor stack when available, else fall back to single bgColor path
147
+ let bgRgb;
148
+ let bgDisplay;
149
+ if (el.bgColors && el.bgColors.length > 0) {
150
+ bgRgb = compositeBackground(el.bgColors);
151
+ bgDisplay = `rgb(${bgRgb[0]}, ${bgRgb[1]}, ${bgRgb[2]})`;
152
+ }
153
+ else {
154
+ const [br, bg, bb, ba] = parseColor(el.bgColor);
155
+ // Composite bg over white if semi-transparent (existing path, unchanged)
156
+ bgRgb = ba < 1 ? compositeOverWhite(br, bg, bb, ba) : [br, bg, bb];
157
+ // Report the effective opaque color the ratio was computed against, not
158
+ // the raw translucent input (AC4). Opaque inputs are reported verbatim.
159
+ bgDisplay = ba < 1 ? `rgb(${bgRgb[0]}, ${bgRgb[1]}, ${bgRgb[2]})` : el.bgColor;
160
+ }
116
161
  const fontPx = el.fontPx ?? 16;
117
162
  const bold = el.bold ?? false;
118
163
  const large = fontPx >= 24 || (fontPx >= 18.66 && bold);
@@ -126,7 +171,7 @@ export function auditContrastSnapshot(elements) {
126
171
  selector: el.selector,
127
172
  text: el.text ?? "",
128
173
  foreground: el.color,
129
- background: el.bgColor,
174
+ background: bgDisplay,
130
175
  fontPx,
131
176
  bold,
132
177
  large,
@@ -225,24 +270,39 @@ export async function auditContrastUrl(url, opts) {
225
270
  return tag;
226
271
  }
227
272
  /**
228
- * Walk ancestors to find the effective opaque background colour.
229
- * Returns a CSS colour string.
273
+ * Walk ancestors and collect the ordered background color stack.
274
+ * Returns CSS color strings ordered nearest ancestor first → furthest last.
275
+ * Includes each non-transparent background up to and including the first
276
+ * fully-opaque background (alpha === 1), or to the root if none opaque.
230
277
  */
231
- function effectiveBgColor(el) {
278
+ function effectiveBgColors(el) {
279
+ const stack = [];
232
280
  let node = el;
233
281
  while (node) {
234
282
  const style = window.getComputedStyle(node);
235
283
  const bg = style.backgroundColor;
236
284
  if (bg && bg !== "transparent" && bg !== "rgba(0, 0, 0, 0)") {
237
- // Check if it has meaningful alpha
238
- const m = bg.match(/rgba?\([\d.,\s]+,\s*([\d.]+)\)/);
239
- if (!m || parseFloat(m[1]) > 0) {
240
- return bg;
285
+ // Check alpha: rgba(..., alpha) or rgb(...) which is fully opaque
286
+ const rgbaMatch = bg.match(/rgba\(\s*[\d.]+\s*,\s*[\d.]+\s*,\s*[\d.]+\s*,\s*([\d.]+)\s*\)/);
287
+ if (rgbaMatch) {
288
+ const alpha = parseFloat(rgbaMatch[1]);
289
+ if (alpha > 0) {
290
+ stack.push(bg);
291
+ if (alpha >= 1) {
292
+ break; // stop at the first fully-opaque background
293
+ }
294
+ }
295
+ // alpha === 0: skip (fully transparent)
296
+ }
297
+ else {
298
+ // rgb(...) form — fully opaque
299
+ stack.push(bg);
300
+ break; // stop at the first fully-opaque background
241
301
  }
242
302
  }
243
303
  node = node.parentElement;
244
304
  }
245
- return "rgb(255, 255, 255)"; // default white
305
+ return stack;
246
306
  }
247
307
  /**
248
308
  * Check whether an element is visible (non-zero rect, not hidden).
@@ -277,20 +337,35 @@ export async function auditContrastUrl(url, opts) {
277
337
  continue;
278
338
  const style = window.getComputedStyle(el);
279
339
  const color = style.color || "rgb(0,0,0)";
280
- const bgColor = effectiveBgColor(el);
340
+ const bgColors = effectiveBgColors(el);
341
+ // Back-compat: bgColor is the first (nearest) entry, or white if empty
342
+ const bgColor = bgColors.length > 0 ? bgColors[0] : "rgb(255, 255, 255)";
281
343
  const fontPx = parseFloat(style.fontSize) || 16;
282
344
  const fw = style.fontWeight;
283
345
  const bold = parseInt(fw) >= 600 || fw === "bold";
284
346
  const text = (el.textContent || "").trim().slice(0, 60);
285
347
  const selector = stableSelector(el);
286
- results.push({ selector, color, bgColor, fontPx, bold, text });
348
+ results.push({ selector, color, bgColor, bgColors, fontPx, bold, text });
287
349
  }
288
350
  return results;
289
351
  }, ELEMENT_CAP);
290
352
  if (raw.length >= ELEMENT_CAP) {
291
353
  warnings.push(`Element count capped at ${ELEMENT_CAP}. Some text elements were not audited.`);
292
354
  }
293
- const result = auditContrastSnapshot(raw);
355
+ // Back-compat contract: each element's single `bgColor` must be the
356
+ // composited OPAQUE result of its ancestor stack (not the raw nearest,
357
+ // possibly-translucent layer) — so any consumer reading `bgColor` alone
358
+ // gets the true effective background instead of re-running the over-white
359
+ // path. (compositeBackground isn't reachable inside the page.evaluate
360
+ // browser context, so we resolve it here on the Node side.)
361
+ const normalized = raw.map((el) => {
362
+ if (el.bgColors && el.bgColors.length > 0) {
363
+ const [r, g, b] = compositeBackground(el.bgColors);
364
+ return { ...el, bgColor: `rgb(${r}, ${g}, ${b})` };
365
+ }
366
+ return el;
367
+ });
368
+ const result = auditContrastSnapshot(normalized);
294
369
  result.url = url;
295
370
  result.warnings.push(...warnings);
296
371
  return result;
@@ -301,4 +376,131 @@ export async function auditContrastUrl(url, opts) {
301
376
  }
302
377
  }
303
378
  }
379
+ function round2(n) {
380
+ return Math.round(n * 100) / 100;
381
+ }
382
+ function rgbStr(c) {
383
+ return "rgb(" + c[0] + ", " + c[1] + ", " + c[2] + ")";
384
+ }
385
+ function toOpaque(css, over) {
386
+ const [r, g, b, a] = parseColor(css);
387
+ if (a >= 1)
388
+ return [r, g, b];
389
+ return [
390
+ Math.round(r * a + over[0] * (1 - a)),
391
+ Math.round(g * a + over[1] * (1 - a)),
392
+ Math.round(b * a + over[2] * (1 - a)),
393
+ ];
394
+ }
395
+ function lerpRgb(c, pole, t) {
396
+ return [
397
+ Math.round(c[0] + (pole[0] - c[0]) * t),
398
+ Math.round(c[1] + (pole[1] - c[1]) * t),
399
+ Math.round(c[2] + (pole[2] - c[2]) * t),
400
+ ];
401
+ }
402
+ function rgbDistance(a, b) {
403
+ return Math.sqrt((a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2 + (a[2] - b[2]) ** 2);
404
+ }
405
+ // Adjust `color` toward the higher-contrast pole vs the fixed color until target met.
406
+ function solveAdjust(color, fixed, target) {
407
+ const black = [0, 0, 0];
408
+ const white = [255, 255, 255];
409
+ const useBlack = contrastRatio(black, fixed) >= contrastRatio(white, fixed);
410
+ const pole = useBlack ? black : white;
411
+ const direction = useBlack ? "darker" : "lighter";
412
+ const poleRatio = contrastRatio(pole, fixed);
413
+ if (poleRatio < target) {
414
+ return { detail: { color: rgbStr(pole), ratio: round2(poleRatio), direction }, reachable: false };
415
+ }
416
+ let lo = 0;
417
+ let hi = 1;
418
+ for (let i = 0; i < 24; i++) {
419
+ const mid = (lo + hi) / 2;
420
+ if (contrastRatio(lerpRgb(color, pole, mid), fixed) >= target)
421
+ hi = mid;
422
+ else
423
+ lo = mid;
424
+ }
425
+ let c = lerpRgb(color, pole, hi);
426
+ let guard = 0;
427
+ // rounding to ints may dip just under target — nudge toward the pole until cleared
428
+ while (contrastRatio(c, fixed) < target && guard < 24) {
429
+ hi = hi + (1 - hi) / 2 + 0.0005;
430
+ if (hi > 1)
431
+ hi = 1;
432
+ c = lerpRgb(color, pole, hi);
433
+ guard++;
434
+ }
435
+ return { detail: { color: rgbStr(c), ratio: round2(contrastRatio(c, fixed)), direction }, reachable: true };
436
+ }
437
+ export function suggestContrastFix(fg, bg, opts) {
438
+ const options = opts || {};
439
+ const bgOpaque = toOpaque(bg, [255, 255, 255]);
440
+ const fgOpaque = toOpaque(fg, bgOpaque);
441
+ // target derivation
442
+ let target;
443
+ if (typeof options.targetRatio === "number") {
444
+ target = options.targetRatio;
445
+ }
446
+ else {
447
+ const level = options.level || "AA";
448
+ const fontPx = typeof options.fontPx === "number" ? options.fontPx : 0;
449
+ const isLarge = fontPx >= 24 || (fontPx >= 18.66 && options.bold === true);
450
+ if (level === "AAA")
451
+ target = isLarge ? 4.5 : 7.0;
452
+ else
453
+ target = isLarge ? 3.0 : 4.5;
454
+ }
455
+ const currentRatio = contrastRatio(fgOpaque, bgOpaque);
456
+ const fgStr = rgbStr(fgOpaque);
457
+ const bgStr = rgbStr(bgOpaque);
458
+ if (currentRatio >= target) {
459
+ return {
460
+ fg: fgStr,
461
+ bg: bgStr,
462
+ currentRatio: round2(currentRatio),
463
+ targetRatio: target,
464
+ passes: true,
465
+ fgFix: null,
466
+ bgFix: null,
467
+ reachable: true,
468
+ recommendation: "Already passes — contrast " + round2(currentRatio) + " meets the " + target + " target.",
469
+ };
470
+ }
471
+ const fgSolved = solveAdjust(fgOpaque, bgOpaque, target);
472
+ const bgSolved = solveAdjust(bgOpaque, fgOpaque, target);
473
+ const reachable = fgSolved.reachable || bgSolved.reachable;
474
+ // recommend the smaller perceptual change among reachable fixes
475
+ const fgDist = rgbDistance(fgOpaque, toOpaque(fgSolved.detail.color, bgOpaque));
476
+ const bgDist = rgbDistance(bgOpaque, toOpaque(bgSolved.detail.color, fgOpaque));
477
+ let recommendation;
478
+ if (!reachable) {
479
+ const best = fgSolved.detail.ratio >= bgSolved.detail.ratio ? fgSolved.detail : bgSolved.detail;
480
+ recommendation =
481
+ "Target " + target + " cannot be reached by adjusting one color alone. Best achievable ratio " +
482
+ best.ratio + " (foreground " + best.color + "). Consider changing both colors or lowering the target.";
483
+ }
484
+ else if (fgSolved.reachable && (!bgSolved.reachable || fgDist <= bgDist)) {
485
+ recommendation =
486
+ "Set foreground to " + fgSolved.detail.color + " (" + fgSolved.detail.direction + ", ratio " +
487
+ fgSolved.detail.ratio + ")." + (bgSolved.reachable ? " Alternatively set background to " + bgSolved.detail.color + " (ratio " + bgSolved.detail.ratio + ")." : "");
488
+ }
489
+ else {
490
+ recommendation =
491
+ "Set background to " + bgSolved.detail.color + " (" + bgSolved.detail.direction + ", ratio " +
492
+ bgSolved.detail.ratio + ")." + (fgSolved.reachable ? " Alternatively set foreground to " + fgSolved.detail.color + " (ratio " + fgSolved.detail.ratio + ")." : "");
493
+ }
494
+ return {
495
+ fg: fgStr,
496
+ bg: bgStr,
497
+ currentRatio: round2(currentRatio),
498
+ targetRatio: target,
499
+ passes: false,
500
+ fgFix: fgSolved.detail,
501
+ bgFix: bgSolved.detail,
502
+ reachable,
503
+ recommendation,
504
+ };
505
+ }
304
506
  //# sourceMappingURL=contrast.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contrast.js","sourceRoot":"","sources":["../src/contrast.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contrast.js","sourceRoot":"","sources":["../src/contrast.ts"],"names":[],"mappings":"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"}