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 +5 -4
- package/dist/compact.d.ts +3 -0
- package/dist/compact.js +103 -0
- package/dist/compact.js.map +1 -0
- package/dist/contrast.d.ts +32 -0
- package/dist/contrast.js +217 -15
- package/dist/contrast.js.map +1 -1
- package/dist/index.js +46 -10
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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
|
-
| `
|
|
70
|
+
| `suggest_contrast_fix` | Given failing WCAG color pairs, return the minimal fg/bg change that clears the AA/AAA target — concrete 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.
|
package/dist/compact.js
ADDED
|
@@ -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":"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"}
|
package/dist/contrast.d.ts
CHANGED
|
@@ -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
|
-
//
|
|
115
|
-
|
|
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:
|
|
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
|
|
229
|
-
* Returns
|
|
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
|
|
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
|
|
238
|
-
const
|
|
239
|
-
if (
|
|
240
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
package/dist/contrast.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contrast.js","sourceRoot":"","sources":["../src/contrast.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEvD,OAAO,EAAE,uBAAuB,EAAE,CAAC;AA8BnC,8EAA8E;AAC9E,sCAAsC;AACtC,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAEnC,IAAI,CAAC,KAAK,OAAO;QAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK,OAAO;QAAE,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAC7C,IAAI,CAAC,KAAK,aAAa;QAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAE7C,OAAO;IACP,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnB,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnB,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;YAC1C,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnB,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnB,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;YAC5C,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACtB,CAAC;IAED,iBAAiB;IACjB,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,6EAA6E,CAAC,CAAC;IACzG,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,CAAS;IAC1B,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACpB,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,KAAK,EAAE,GAAG,CAAC,CAAC;AAC7E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAA6B;IAC7D,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,OAAO,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,EAA4B,EAC5B,EAA4B;IAE5B,MAAM,EAAE,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACjC,MAAM,EAAE,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACjC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED,8EAA8E;AAC9E,6BAA6B;AAC7B,8EAA8E;AAE9E,SAAS,kBAAkB,CACzB,CAAS,EACT,CAAS,EACT,CAAS,EACT,CAAS;IAET,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,8EAA8E;AAC9E,+CAA+C;AAC/C,8EAA8E;AAE9E;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAOE;IAEF,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAkB,EAAE,CAAC;IAE/B,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QAEhD,8CAA8C;QAC9C,MAAM,KAAK,GACT,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAE7D,8CAA8C;QAC9C,MAAM,KAAK,GACT,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAE7D,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,IAAI,KAAK,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,IAAI,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC;QACxD,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACpC,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAErC,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,KAAK,IAAI,WAAW,CAAC;QAChC,MAAM,GAAG,GAAG,KAAK,IAAI,YAAY,CAAC;QAClC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC,CAAC;QAErD,IAAI,CAAC,IAAI,CAAC;YACR,QAAQ,EAAE,EAAE,CAAC,QAAQ;YACrB,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE;YACnB,UAAU,EAAE,EAAE,CAAC,KAAK;YACpB,UAAU,EAAE,EAAE,CAAC,OAAO;YACtB,MAAM;YACN,IAAI;YACJ,KAAK;YACL,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG;YACpC,EAAE;YACF,GAAG;YACH,WAAW;YACX,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,GAAG;SACjD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAE9C,OAAO;QACL,mBAAmB,EAAE,IAAI,CAAC,MAAM;QAChC,IAAI;QACJ,WAAW;QACX,aAAa,EAAE,WAAW,CAAC,MAAM;QACjC,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAW,EACX,IAA4F;IAE5F,IAAI,QAA0C,CAAC;IAC/C,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;QACtC,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,uBAAuB,CAC/B,yEAAyE,CAC1E,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,GAAwC,IAAI,CAAC;IACxD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,CAAC;QACH,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,uBAAuB,CAC/B,yEAAyE,CAC1E,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,IAAI,CAAC,eAAe,CAAC;YACzB,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,IAAI,IAAI;YAChC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,IAAI,GAAG;SACjC,CAAC,CAAC;QACH,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACvD,CAAC;YAAC,MAAM,CAAC;gBACP,4EAA4E;YAC9E,CAAC;QACH,CAAC;QACD,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACnB,SAAS,EAAE,MAAM;YACjB,OAAO,EAAE,IAAI,EAAE,SAAS,IAAI,KAAK;SAClC,CAAC,CAAC;QACH,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAS,EAAE,EAAE;oBAChC,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;oBACvD,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC;oBAChE,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC;gBACpE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBACf,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC;YAAC,MAAM,CAAC;gBACP,6CAA6C;YAC/C,CAAC;QACH,CAAC;QAYD,MAAM,GAAG,GAAY,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAW,EAAE,EAAE;YACvD,MAAM,OAAO,GAAY,EAAE,CAAC;YAE5B;;;eAGG;YACH,SAAS,cAAc,CAAC,EAAW;gBACjC,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;gBAC9C,IAAI,MAAM;oBAAE,OAAO,iBAAiB,MAAM,IAAI,CAAC;gBAC/C,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACjC,IAAI,EAAE;oBAAE,OAAO,IAAI,EAAE,EAAE,CAAC;gBACxB,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBACrC,MAAM,MAAM,GAAG,EAAE,CAAC,aAAa,CAAC;gBAChC,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CACjD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,CAChC,CAAC;oBACF,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACrC,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,GAAG,gBAAgB,GAAG,GAAG,CAAC;gBAClE,CAAC;gBACD,OAAO,GAAG,CAAC;YACb,CAAC;YAED;;;eAGG;YACH,SAAS,gBAAgB,CAAC,EAAW;gBACnC,IAAI,IAAI,GAAmB,EAAE,CAAC;gBAC9B,OAAO,IAAI,EAAE,CAAC;oBACZ,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;oBAC5C,MAAM,EAAE,GAAG,KAAK,CAAC,eAAe,CAAC;oBACjC,IAAI,EAAE,IAAI,EAAE,KAAK,aAAa,IAAI,EAAE,KAAK,kBAAkB,EAAE,CAAC;wBAC5D,mCAAmC;wBACnC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;wBACrD,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;4BAC/B,OAAO,EAAE,CAAC;wBACZ,CAAC;oBACH,CAAC;oBACD,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC;gBAC5B,CAAC;gBACD,OAAO,oBAAoB,CAAC,CAAC,gBAAgB;YAC/C,CAAC;YAED;;eAEG;YACH,SAAS,SAAS,CAAC,EAAW;gBAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;gBAC1C,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,QAAQ;oBAAE,OAAO,KAAK,CAAC;gBAC5E,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;gBACxC,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAC3C,CAAC;YAED;;eAEG;YACH,SAAS,aAAa,CAAC,EAAW;gBAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC9C,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;oBAC9B,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC/F,OAAO,IAAI,CAAC;oBACd,CAAC;gBACH,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,WAAW,GAAG,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;YACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5C,IAAI,OAAO,CAAC,MAAM,IAAI,GAAG;oBAAE,MAAM;gBACjC,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;oBAAE,SAAS;gBACjC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;oBAAE,SAAS;gBAE7B,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;gBAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,YAAY,CAAC;gBAC1C,MAAM,OAAO,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;gBACrC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAChD,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC;gBAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,EAAE,KAAK,MAAM,CAAC;gBAClD,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxD,MAAM,QAAQ,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;gBAEpC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC,EAAE,WAAW,CAAC,CAAC;QAEhB,IAAI,GAAG,CAAC,MAAM,IAAI,WAAW,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CACX,2BAA2B,WAAW,wCAAwC,CAC/E,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;QACjB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QAClC,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"contrast.js","sourceRoot":"","sources":["../src/contrast.ts"],"names":[],"mappings":"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"}
|