@mp3wizard/figma-console-mcp 1.14.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/LICENSE +21 -0
- package/README.md +816 -0
- package/dist/apps/design-system-dashboard/scoring/accessibility.d.ts +14 -0
- package/dist/apps/design-system-dashboard/scoring/accessibility.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/accessibility.js +278 -0
- package/dist/apps/design-system-dashboard/scoring/accessibility.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/component-metadata.d.ts +29 -0
- package/dist/apps/design-system-dashboard/scoring/component-metadata.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/component-metadata.js +358 -0
- package/dist/apps/design-system-dashboard/scoring/component-metadata.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/consistency.d.ts +14 -0
- package/dist/apps/design-system-dashboard/scoring/consistency.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/consistency.js +342 -0
- package/dist/apps/design-system-dashboard/scoring/consistency.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/coverage.d.ts +14 -0
- package/dist/apps/design-system-dashboard/scoring/coverage.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/coverage.js +231 -0
- package/dist/apps/design-system-dashboard/scoring/coverage.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/engine.d.ts +27 -0
- package/dist/apps/design-system-dashboard/scoring/engine.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/engine.js +93 -0
- package/dist/apps/design-system-dashboard/scoring/engine.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/naming-semantics.d.ts +14 -0
- package/dist/apps/design-system-dashboard/scoring/naming-semantics.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/naming-semantics.js +309 -0
- package/dist/apps/design-system-dashboard/scoring/naming-semantics.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/token-architecture.d.ts +14 -0
- package/dist/apps/design-system-dashboard/scoring/token-architecture.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/token-architecture.js +350 -0
- package/dist/apps/design-system-dashboard/scoring/token-architecture.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/types.d.ts +89 -0
- package/dist/apps/design-system-dashboard/scoring/types.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/types.js +41 -0
- package/dist/apps/design-system-dashboard/scoring/types.js.map +1 -0
- package/dist/apps/design-system-dashboard/server.d.ts +24 -0
- package/dist/apps/design-system-dashboard/server.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/server.js +160 -0
- package/dist/apps/design-system-dashboard/server.js.map +1 -0
- package/dist/apps/token-browser/server.d.ts +26 -0
- package/dist/apps/token-browser/server.d.ts.map +1 -0
- package/dist/apps/token-browser/server.js +137 -0
- package/dist/apps/token-browser/server.js.map +1 -0
- package/dist/browser/base.d.ts +58 -0
- package/dist/browser/base.d.ts.map +1 -0
- package/dist/browser/base.js +6 -0
- package/dist/browser/base.js.map +1 -0
- package/dist/browser/local.d.ts +87 -0
- package/dist/browser/local.d.ts.map +1 -0
- package/dist/browser/local.js +318 -0
- package/dist/browser/local.js.map +1 -0
- package/dist/cloudflare/apps/design-system-dashboard/scoring/accessibility.js +277 -0
- package/dist/cloudflare/apps/design-system-dashboard/scoring/component-metadata.js +357 -0
- package/dist/cloudflare/apps/design-system-dashboard/scoring/consistency.js +341 -0
- package/dist/cloudflare/apps/design-system-dashboard/scoring/coverage.js +230 -0
- package/dist/cloudflare/apps/design-system-dashboard/scoring/engine.js +92 -0
- package/dist/cloudflare/apps/design-system-dashboard/scoring/naming-semantics.js +308 -0
- package/dist/cloudflare/apps/design-system-dashboard/scoring/token-architecture.js +349 -0
- package/dist/cloudflare/apps/design-system-dashboard/scoring/types.js +40 -0
- package/dist/cloudflare/apps/design-system-dashboard/server.js +159 -0
- package/dist/cloudflare/apps/token-browser/server.js +136 -0
- package/dist/cloudflare/browser/base.js +5 -0
- package/dist/cloudflare/browser/cloudflare.js +156 -0
- package/dist/cloudflare/browser-manager.js +157 -0
- package/dist/cloudflare/core/cloud-websocket-connector.js +267 -0
- package/dist/cloudflare/core/cloud-websocket-relay.js +199 -0
- package/dist/cloudflare/core/comment-tools.js +292 -0
- package/dist/cloudflare/core/config.js +161 -0
- package/dist/cloudflare/core/console-monitor.js +427 -0
- package/dist/cloudflare/core/design-code-tools.js +2504 -0
- package/dist/cloudflare/core/design-system-manifest.js +260 -0
- package/dist/cloudflare/core/design-system-tools.js +863 -0
- package/dist/cloudflare/core/enrichment/enrichment-service.js +272 -0
- package/dist/cloudflare/core/enrichment/index.js +7 -0
- package/dist/cloudflare/core/enrichment/relationship-mapper.js +351 -0
- package/dist/cloudflare/core/enrichment/style-resolver.js +326 -0
- package/dist/cloudflare/core/figma-api.js +409 -0
- package/dist/cloudflare/core/figma-connector.js +7 -0
- package/dist/cloudflare/core/figma-desktop-connector.js +1184 -0
- package/dist/cloudflare/core/figma-reconstruction-spec.js +402 -0
- package/dist/cloudflare/core/figma-style-extractor.js +311 -0
- package/dist/cloudflare/core/figma-tools.js +2947 -0
- package/dist/cloudflare/core/logger.js +53 -0
- package/dist/cloudflare/core/port-discovery.js +282 -0
- package/dist/cloudflare/core/snippet-injector.js +96 -0
- package/dist/cloudflare/core/types/design-code.js +4 -0
- package/dist/cloudflare/core/types/enriched.js +5 -0
- package/dist/cloudflare/core/types/index.js +4 -0
- package/dist/cloudflare/core/websocket-connector.js +256 -0
- package/dist/cloudflare/core/websocket-server.js +646 -0
- package/dist/cloudflare/core/write-tools.js +2091 -0
- package/dist/cloudflare/index.js +2899 -0
- package/dist/cloudflare/test-browser.js +88 -0
- package/dist/core/comment-tools.d.ts +11 -0
- package/dist/core/comment-tools.d.ts.map +1 -0
- package/dist/core/comment-tools.js +293 -0
- package/dist/core/comment-tools.js.map +1 -0
- package/dist/core/config.d.ts +17 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +162 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/console-monitor.d.ts +82 -0
- package/dist/core/console-monitor.d.ts.map +1 -0
- package/dist/core/console-monitor.js +428 -0
- package/dist/core/console-monitor.js.map +1 -0
- package/dist/core/design-code-tools.d.ts +127 -0
- package/dist/core/design-code-tools.d.ts.map +1 -0
- package/dist/core/design-code-tools.js +2505 -0
- package/dist/core/design-code-tools.js.map +1 -0
- package/dist/core/design-system-manifest.d.ts +272 -0
- package/dist/core/design-system-manifest.d.ts.map +1 -0
- package/dist/core/design-system-manifest.js +261 -0
- package/dist/core/design-system-manifest.js.map +1 -0
- package/dist/core/design-system-tools.d.ts +17 -0
- package/dist/core/design-system-tools.d.ts.map +1 -0
- package/dist/core/design-system-tools.js +864 -0
- package/dist/core/design-system-tools.js.map +1 -0
- package/dist/core/enrichment/enrichment-service.d.ts +52 -0
- package/dist/core/enrichment/enrichment-service.d.ts.map +1 -0
- package/dist/core/enrichment/enrichment-service.js +273 -0
- package/dist/core/enrichment/enrichment-service.js.map +1 -0
- package/dist/core/enrichment/index.d.ts +8 -0
- package/dist/core/enrichment/index.d.ts.map +1 -0
- package/dist/core/enrichment/index.js +8 -0
- package/dist/core/enrichment/index.js.map +1 -0
- package/dist/core/enrichment/relationship-mapper.d.ts +106 -0
- package/dist/core/enrichment/relationship-mapper.d.ts.map +1 -0
- package/dist/core/enrichment/relationship-mapper.js +352 -0
- package/dist/core/enrichment/relationship-mapper.js.map +1 -0
- package/dist/core/enrichment/style-resolver.d.ts +80 -0
- package/dist/core/enrichment/style-resolver.d.ts.map +1 -0
- package/dist/core/enrichment/style-resolver.js +327 -0
- package/dist/core/enrichment/style-resolver.js.map +1 -0
- package/dist/core/figma-api.d.ts +201 -0
- package/dist/core/figma-api.d.ts.map +1 -0
- package/dist/core/figma-api.js +410 -0
- package/dist/core/figma-api.js.map +1 -0
- package/dist/core/figma-connector.d.ts +48 -0
- package/dist/core/figma-connector.d.ts.map +1 -0
- package/dist/core/figma-connector.js +8 -0
- package/dist/core/figma-connector.js.map +1 -0
- package/dist/core/figma-desktop-connector.d.ts +265 -0
- package/dist/core/figma-desktop-connector.d.ts.map +1 -0
- package/dist/core/figma-desktop-connector.js +1184 -0
- package/dist/core/figma-desktop-connector.js.map +1 -0
- package/dist/core/figma-reconstruction-spec.d.ts +166 -0
- package/dist/core/figma-reconstruction-spec.d.ts.map +1 -0
- package/dist/core/figma-reconstruction-spec.js +403 -0
- package/dist/core/figma-reconstruction-spec.js.map +1 -0
- package/dist/core/figma-style-extractor.d.ts +76 -0
- package/dist/core/figma-style-extractor.d.ts.map +1 -0
- package/dist/core/figma-style-extractor.js +312 -0
- package/dist/core/figma-style-extractor.js.map +1 -0
- package/dist/core/figma-tools.d.ts +23 -0
- package/dist/core/figma-tools.d.ts.map +1 -0
- package/dist/core/figma-tools.js +2948 -0
- package/dist/core/figma-tools.js.map +1 -0
- package/dist/core/logger.d.ts +22 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +54 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/port-discovery.d.ts +110 -0
- package/dist/core/port-discovery.d.ts.map +1 -0
- package/dist/core/port-discovery.js +283 -0
- package/dist/core/port-discovery.js.map +1 -0
- package/dist/core/snippet-injector.d.ts +24 -0
- package/dist/core/snippet-injector.d.ts.map +1 -0
- package/dist/core/snippet-injector.js +97 -0
- package/dist/core/snippet-injector.js.map +1 -0
- package/dist/core/types/design-code.d.ts +262 -0
- package/dist/core/types/design-code.d.ts.map +1 -0
- package/dist/core/types/design-code.js +5 -0
- package/dist/core/types/design-code.js.map +1 -0
- package/dist/core/types/enriched.d.ts +213 -0
- package/dist/core/types/enriched.d.ts.map +1 -0
- package/dist/core/types/enriched.js +6 -0
- package/dist/core/types/enriched.js.map +1 -0
- package/dist/core/types/index.d.ts +112 -0
- package/dist/core/types/index.d.ts.map +1 -0
- package/dist/core/types/index.js +5 -0
- package/dist/core/types/index.js.map +1 -0
- package/dist/core/websocket-connector.d.ts +55 -0
- package/dist/core/websocket-connector.d.ts.map +1 -0
- package/dist/core/websocket-connector.js +257 -0
- package/dist/core/websocket-connector.js.map +1 -0
- package/dist/core/websocket-server.d.ts +191 -0
- package/dist/core/websocket-server.d.ts.map +1 -0
- package/dist/core/websocket-server.js +647 -0
- package/dist/core/websocket-server.js.map +1 -0
- package/dist/core/write-tools.d.ts +7 -0
- package/dist/core/write-tools.d.ts.map +1 -0
- package/dist/core/write-tools.js +2092 -0
- package/dist/core/write-tools.js.map +1 -0
- package/dist/local.d.ts +84 -0
- package/dist/local.d.ts.map +1 -0
- package/dist/local.js +5039 -0
- package/dist/local.js.map +1 -0
- package/figma-desktop-bridge/README.md +313 -0
- package/figma-desktop-bridge/code.js +2818 -0
- package/figma-desktop-bridge/manifest.json +67 -0
- package/figma-desktop-bridge/ui.html +1236 -0
- package/package.json +87 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Accessibility Scorer (weight: 0.15)
|
|
3
|
+
*
|
|
4
|
+
* Checks accessibility-related signals in the design system.
|
|
5
|
+
* Evaluates color contrast ratios, state variant coverage,
|
|
6
|
+
* and semantic color naming patterns.
|
|
7
|
+
*/
|
|
8
|
+
import type { CategoryScore, DesignSystemRawData } from "./types.js";
|
|
9
|
+
/**
|
|
10
|
+
* Accessibility category scorer.
|
|
11
|
+
* Returns the average score across all accessibility checks.
|
|
12
|
+
*/
|
|
13
|
+
export declare function scoreAccessibility(data: DesignSystemRawData): CategoryScore;
|
|
14
|
+
//# sourceMappingURL=accessibility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accessibility.d.ts","sourceRoot":"","sources":["../../../../src/apps/design-system-dashboard/scoring/accessibility.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAW,MAAM,YAAY,CAAC;AAiU9E;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,GAAG,aAAa,CAmB3E"}
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Accessibility Scorer (weight: 0.15)
|
|
3
|
+
*
|
|
4
|
+
* Checks accessibility-related signals in the design system.
|
|
5
|
+
* Evaluates color contrast ratios, state variant coverage,
|
|
6
|
+
* and semantic color naming patterns.
|
|
7
|
+
*/
|
|
8
|
+
import { clamp, getSeverity } from "./types.js";
|
|
9
|
+
/** Maximum examples to include in a finding. */
|
|
10
|
+
const MAX_EXAMPLES = 5;
|
|
11
|
+
/** WCAG AA minimum contrast ratio for normal text. */
|
|
12
|
+
const WCAG_AA_RATIO = 4.5;
|
|
13
|
+
/** State-related variant values that indicate accessible component design. */
|
|
14
|
+
const STATE_VARIANTS = [
|
|
15
|
+
"disabled",
|
|
16
|
+
"error",
|
|
17
|
+
"focus",
|
|
18
|
+
"hover",
|
|
19
|
+
"active",
|
|
20
|
+
"pressed",
|
|
21
|
+
"selected",
|
|
22
|
+
];
|
|
23
|
+
/** Semantic color token name patterns that indicate accessibility awareness. */
|
|
24
|
+
const SEMANTIC_COLOR_NAMES = ["error", "warning", "success", "info", "danger"];
|
|
25
|
+
/**
|
|
26
|
+
* Linearize an sRGB channel value for luminance calculation.
|
|
27
|
+
* Input: channel value in 0-1 range.
|
|
28
|
+
*/
|
|
29
|
+
function linearize(channel) {
|
|
30
|
+
return channel <= 0.04045
|
|
31
|
+
? channel / 12.92
|
|
32
|
+
: ((channel + 0.055) / 1.055) ** 2.4;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Calculate relative luminance of a color.
|
|
36
|
+
* r, g, b are in 0-1 range (as Figma provides them).
|
|
37
|
+
*/
|
|
38
|
+
function luminance(r, g, b) {
|
|
39
|
+
return 0.2126 * linearize(r) + 0.7152 * linearize(g) + 0.0722 * linearize(b);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Calculate contrast ratio between two colors.
|
|
43
|
+
* Returns a ratio >= 1 (e.g., 4.5 for WCAG AA compliance).
|
|
44
|
+
*/
|
|
45
|
+
function contrastRatio(r1, g1, b1, r2, g2, b2) {
|
|
46
|
+
const lum1 = luminance(r1, g1, b1);
|
|
47
|
+
const lum2 = luminance(r2, g2, b2);
|
|
48
|
+
const lighter = Math.max(lum1, lum2);
|
|
49
|
+
const darker = Math.min(lum1, lum2);
|
|
50
|
+
return (lighter + 0.05) / (darker + 0.05);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Check if a value is a direct color (not an alias).
|
|
54
|
+
*/
|
|
55
|
+
function isDirectColor(value) {
|
|
56
|
+
if (typeof value !== "object" || value === null)
|
|
57
|
+
return false;
|
|
58
|
+
const v = value;
|
|
59
|
+
return (typeof v.r === "number" &&
|
|
60
|
+
typeof v.g === "number" &&
|
|
61
|
+
typeof v.b === "number" &&
|
|
62
|
+
v.type !== "VARIABLE_ALIAS");
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Extract resolved color values from variables.
|
|
66
|
+
* Returns an array of { name, r, g, b } objects for direct color values.
|
|
67
|
+
*/
|
|
68
|
+
function extractColorValues(variables) {
|
|
69
|
+
const colors = [];
|
|
70
|
+
for (const variable of variables) {
|
|
71
|
+
if (variable.resolvedType !== "COLOR" || !variable.valuesByMode)
|
|
72
|
+
continue;
|
|
73
|
+
for (const value of Object.values(variable.valuesByMode)) {
|
|
74
|
+
if (isDirectColor(value)) {
|
|
75
|
+
colors.push({
|
|
76
|
+
name: variable.name,
|
|
77
|
+
r: value.r,
|
|
78
|
+
g: value.g,
|
|
79
|
+
b: value.b,
|
|
80
|
+
});
|
|
81
|
+
break; // Use the first direct color value per variable
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return colors;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Identify likely foreground/background color pairs and check contrast.
|
|
89
|
+
*
|
|
90
|
+
* Strategy: pair colors whose names suggest fg/bg relationships:
|
|
91
|
+
* - Names containing "background"/"bg"/"surface" are backgrounds
|
|
92
|
+
* - Names containing "text"/"foreground"/"fg"/"on" are foregrounds
|
|
93
|
+
* Falls back to pairing dark colors with light colors if no naming convention found.
|
|
94
|
+
*/
|
|
95
|
+
function scoreColorContrast(data) {
|
|
96
|
+
const colors = extractColorValues(data.variables);
|
|
97
|
+
if (colors.length < 2) {
|
|
98
|
+
return {
|
|
99
|
+
id: "a11y-color-contrast",
|
|
100
|
+
label: "Color contrast",
|
|
101
|
+
score: 100,
|
|
102
|
+
severity: "info",
|
|
103
|
+
tooltip: "Foreground/background color pairs should meet WCAG AA contrast ratio (4.5:1). Low contrast makes content unreadable for users with vision impairments.",
|
|
104
|
+
details: colors.length === 0
|
|
105
|
+
? "No direct color values to evaluate."
|
|
106
|
+
: "Only one color found; need at least two to check contrast.",
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
const bgPattern = /background|bg|surface|canvas|base/i;
|
|
110
|
+
const fgPattern = /text|foreground|fg|on-|on\.|label|title|body|heading/i;
|
|
111
|
+
const backgrounds = colors.filter((c) => bgPattern.test(c.name));
|
|
112
|
+
const foregrounds = colors.filter((c) => fgPattern.test(c.name));
|
|
113
|
+
// If naming conventions are not used, use luminance-based heuristic
|
|
114
|
+
let pairs = [];
|
|
115
|
+
if (backgrounds.length > 0 && foregrounds.length > 0) {
|
|
116
|
+
// Pair foregrounds with backgrounds by naming proximity
|
|
117
|
+
for (const fg of foregrounds) {
|
|
118
|
+
for (const bg of backgrounds) {
|
|
119
|
+
pairs.push({ fg, bg });
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
// Heuristic: separate into light (luminance > 0.5) and dark (luminance <= 0.5)
|
|
125
|
+
const lightColors = colors.filter((c) => luminance(c.r, c.g, c.b) > 0.5);
|
|
126
|
+
const darkColors = colors.filter((c) => luminance(c.r, c.g, c.b) <= 0.5);
|
|
127
|
+
for (const dark of darkColors) {
|
|
128
|
+
for (const light of lightColors) {
|
|
129
|
+
pairs.push({ fg: dark, bg: light });
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
if (pairs.length === 0) {
|
|
134
|
+
return {
|
|
135
|
+
id: "a11y-color-contrast",
|
|
136
|
+
label: "Color contrast",
|
|
137
|
+
score: 50,
|
|
138
|
+
severity: "warning",
|
|
139
|
+
tooltip: "Foreground/background color pairs should meet WCAG AA contrast ratio (4.5:1). Low contrast makes content unreadable for users with vision impairments.",
|
|
140
|
+
details: "Could not identify foreground/background color pairs to check contrast.",
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
// Limit pair evaluation to avoid performance issues with large token sets
|
|
144
|
+
const maxPairs = 50;
|
|
145
|
+
if (pairs.length > maxPairs) {
|
|
146
|
+
pairs = pairs.slice(0, maxPairs);
|
|
147
|
+
}
|
|
148
|
+
let passingPairs = 0;
|
|
149
|
+
const failingExamples = [];
|
|
150
|
+
for (const { fg, bg } of pairs) {
|
|
151
|
+
const ratio = contrastRatio(fg.r, fg.g, fg.b, bg.r, bg.g, bg.b);
|
|
152
|
+
if (ratio >= WCAG_AA_RATIO) {
|
|
153
|
+
passingPairs++;
|
|
154
|
+
}
|
|
155
|
+
else if (failingExamples.length < MAX_EXAMPLES) {
|
|
156
|
+
failingExamples.push(`${fg.name} / ${bg.name} (${ratio.toFixed(1)}:1)`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
const passRatio = passingPairs / pairs.length;
|
|
160
|
+
const score = clamp(passRatio * 100);
|
|
161
|
+
return {
|
|
162
|
+
id: "a11y-color-contrast",
|
|
163
|
+
label: "Color contrast",
|
|
164
|
+
score,
|
|
165
|
+
severity: getSeverity(score),
|
|
166
|
+
tooltip: "Foreground/background color pairs should meet WCAG AA contrast ratio (4.5:1). Low contrast makes content unreadable for users with vision impairments.",
|
|
167
|
+
details: `${passingPairs} of ${pairs.length} color pairs meet WCAG AA contrast ratio (${WCAG_AA_RATIO}:1).`,
|
|
168
|
+
examples: failingExamples.length > 0 ? failingExamples : undefined,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Score state variant coverage.
|
|
173
|
+
* Components should include state-related variants for accessibility.
|
|
174
|
+
*/
|
|
175
|
+
function scoreStateVariants(data) {
|
|
176
|
+
const components = data.components;
|
|
177
|
+
if (components.length === 0) {
|
|
178
|
+
return {
|
|
179
|
+
id: "a11y-state-variants",
|
|
180
|
+
label: "State variants",
|
|
181
|
+
score: 100,
|
|
182
|
+
severity: "info",
|
|
183
|
+
tooltip: "Interactive components should include state variants (disabled, error, focus, hover, active, pressed, selected) for accessible interactions.",
|
|
184
|
+
details: "No components to evaluate.",
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
// Check which state variants exist across all component names
|
|
188
|
+
const allNames = components.map((c) => c.name.toLowerCase()).join(" ");
|
|
189
|
+
const foundStates = STATE_VARIANTS.filter((state) => allNames.includes(state));
|
|
190
|
+
const ratio = foundStates.length / STATE_VARIANTS.length;
|
|
191
|
+
const score = clamp(ratio * 100);
|
|
192
|
+
const missingStates = STATE_VARIANTS.filter((state) => !allNames.includes(state));
|
|
193
|
+
return {
|
|
194
|
+
id: "a11y-state-variants",
|
|
195
|
+
label: "State variants",
|
|
196
|
+
score,
|
|
197
|
+
severity: getSeverity(score),
|
|
198
|
+
tooltip: "Interactive components should include state variants (disabled, error, focus, hover, active, pressed, selected) for accessible interactions.",
|
|
199
|
+
details: missingStates.length > 0
|
|
200
|
+
? `Found ${foundStates.length} of ${STATE_VARIANTS.length} state variants. Missing: ${missingStates.join(", ")}.`
|
|
201
|
+
: `All ${STATE_VARIANTS.length} state variants are represented.`,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Score semantic color naming.
|
|
206
|
+
* The token set should include semantic color tokens for error/warning/success/info.
|
|
207
|
+
*/
|
|
208
|
+
function variableDataUnavailable(data) {
|
|
209
|
+
return (data.dataAvailability !== undefined && !data.dataAvailability.variables);
|
|
210
|
+
}
|
|
211
|
+
function scoreSemanticColorNaming(data) {
|
|
212
|
+
const colorVars = data.variables.filter((v) => v.resolvedType === "COLOR");
|
|
213
|
+
if (colorVars.length === 0) {
|
|
214
|
+
const unavailable = variableDataUnavailable(data);
|
|
215
|
+
return {
|
|
216
|
+
id: "a11y-semantic-colors",
|
|
217
|
+
label: "Semantic color naming",
|
|
218
|
+
score: 0,
|
|
219
|
+
severity: unavailable ? "info" : "fail",
|
|
220
|
+
tooltip: "The token set should include semantic color categories (error, warning, success, info, danger) to convey meaning beyond color alone.",
|
|
221
|
+
details: unavailable
|
|
222
|
+
? `Variable data unavailable: ${data.dataAvailability?.variableError || "Requires Desktop Bridge or Enterprise plan."}`
|
|
223
|
+
: "No color variables found.",
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
const foundSemantic = [];
|
|
227
|
+
const missingSemantic = [];
|
|
228
|
+
const semanticExamples = [];
|
|
229
|
+
for (const name of SEMANTIC_COLOR_NAMES) {
|
|
230
|
+
const matching = colorVars.filter((v) => v.name.toLowerCase().includes(name));
|
|
231
|
+
if (matching.length > 0) {
|
|
232
|
+
foundSemantic.push(name);
|
|
233
|
+
semanticExamples.push(`${name}: ${matching
|
|
234
|
+
.slice(0, 2)
|
|
235
|
+
.map((v) => v.name)
|
|
236
|
+
.join(", ")}`);
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
missingSemantic.push(name);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
const ratio = foundSemantic.length / SEMANTIC_COLOR_NAMES.length;
|
|
243
|
+
const score = clamp(ratio * 100);
|
|
244
|
+
return {
|
|
245
|
+
id: "a11y-semantic-colors",
|
|
246
|
+
label: "Semantic color naming",
|
|
247
|
+
score,
|
|
248
|
+
severity: getSeverity(score),
|
|
249
|
+
tooltip: "The token set should include semantic color categories (error, warning, success, info, danger) to convey meaning beyond color alone.",
|
|
250
|
+
details: missingSemantic.length > 0
|
|
251
|
+
? `Found ${foundSemantic.length} of ${SEMANTIC_COLOR_NAMES.length} semantic color categories. Missing: ${missingSemantic.join(", ")}.`
|
|
252
|
+
: "All semantic color categories (error, warning, success, info, danger) are present.",
|
|
253
|
+
examples: semanticExamples.length > 0
|
|
254
|
+
? semanticExamples.slice(0, MAX_EXAMPLES)
|
|
255
|
+
: undefined,
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Accessibility category scorer.
|
|
260
|
+
* Returns the average score across all accessibility checks.
|
|
261
|
+
*/
|
|
262
|
+
export function scoreAccessibility(data) {
|
|
263
|
+
const findings = [
|
|
264
|
+
scoreColorContrast(data),
|
|
265
|
+
scoreStateVariants(data),
|
|
266
|
+
scoreSemanticColorNaming(data),
|
|
267
|
+
];
|
|
268
|
+
const score = clamp(findings.reduce((sum, f) => sum + f.score, 0) / findings.length);
|
|
269
|
+
return {
|
|
270
|
+
id: "accessibility",
|
|
271
|
+
label: "Accessibility",
|
|
272
|
+
shortLabel: "Accessibility",
|
|
273
|
+
score,
|
|
274
|
+
weight: 0.15,
|
|
275
|
+
findings,
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=accessibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accessibility.js","sourceRoot":"","sources":["../../../../src/apps/design-system-dashboard/scoring/accessibility.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Component Metadata Scorer (weight: 0.20)
|
|
3
|
+
*
|
|
4
|
+
* Checks component quality and completeness within the design system.
|
|
5
|
+
* Evaluates description presence, description quality, property completeness,
|
|
6
|
+
* variant structure, and category organization.
|
|
7
|
+
*
|
|
8
|
+
* Scores against "scorable units" (component sets + standalone components)
|
|
9
|
+
* rather than raw variant count to avoid inflated totals.
|
|
10
|
+
*/
|
|
11
|
+
import type { CategoryScore, DesignSystemRawData } from "./types.js";
|
|
12
|
+
export interface ComponentClassification {
|
|
13
|
+
standalone: any[];
|
|
14
|
+
variants: any[];
|
|
15
|
+
componentSets: any[];
|
|
16
|
+
scorableUnits: any[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Classify components into standalone, variants, and component sets.
|
|
20
|
+
* Scoring evaluates `scorableUnits` (standalone + componentSets)
|
|
21
|
+
* instead of the raw component list which double-counts variants.
|
|
22
|
+
*/
|
|
23
|
+
export declare function classifyComponents(data: DesignSystemRawData): ComponentClassification;
|
|
24
|
+
/**
|
|
25
|
+
* Component Metadata category scorer.
|
|
26
|
+
* Returns the average score across all component metadata checks.
|
|
27
|
+
*/
|
|
28
|
+
export declare function scoreComponentMetadata(data: DesignSystemRawData): CategoryScore;
|
|
29
|
+
//# sourceMappingURL=component-metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-metadata.d.ts","sourceRoot":"","sources":["../../../../src/apps/design-system-dashboard/scoring/component-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAW,MAAM,YAAY,CAAC;AAa9E,MAAM,WAAW,uBAAuB;IACvC,UAAU,EAAE,GAAG,EAAE,CAAC;IAClB,QAAQ,EAAE,GAAG,EAAE,CAAC;IAChB,aAAa,EAAE,GAAG,EAAE,CAAC;IACrB,aAAa,EAAE,GAAG,EAAE,CAAC;CACrB;AAoDD;;;;GAIG;AACH,wBAAgB,kBAAkB,CACjC,IAAI,EAAE,mBAAmB,GACvB,uBAAuB,CAmBzB;AAwUD;;;GAGG;AACH,wBAAgB,sBAAsB,CACrC,IAAI,EAAE,mBAAmB,GACvB,aAAa,CAwBf"}
|