@gusnips/vite 0.8.44 → 0.8.46
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 +105 -1
- package/dist/contrast.d.ts +66 -1
- package/dist/contrast.d.ts.map +1 -1
- package/dist/contrast.js +297 -9
- package/dist/contrast.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/package.json +2 -2
- package/src/contrast-tokens.test.ts +293 -0
- package/src/contrast.ts +401 -8
- package/src/fixtures/contrast/tokens/ok-media.css +32 -0
- package/src/fixtures/contrast/tokens/ok.css +30 -0
- package/src/index.ts +1 -1
package/README.md
CHANGED
|
@@ -370,7 +370,8 @@ process.exit(report.problems.some((p) => p.level === "error") ? 1 : 0);
|
|
|
370
370
|
```
|
|
371
371
|
|
|
372
372
|
The tokens package measures the placeholder colours it ships. This measures yours: it compiles
|
|
373
|
-
your entry with the real Tailwind CLI and reads the CSS that comes back.
|
|
373
|
+
your entry with the real Tailwind CLI and reads the CSS that comes back. No Tailwind? The next
|
|
374
|
+
section reads plain CSS custom properties instead.
|
|
374
375
|
|
|
375
376
|
| It fails when | Because the reader gets |
|
|
376
377
|
| ------------------------------------------------------------------ | --------------------------------------------------------- |
|
|
@@ -389,6 +390,109 @@ not have, or a class built dynamically that no scan can see.
|
|
|
389
390
|
Pass `allow: [/^bg-brand-/]` for the classes a repo means. Floors take no allow list: a
|
|
390
391
|
measured ratio is not a judgement call.
|
|
391
392
|
|
|
393
|
+
## Check your contrast without Tailwind
|
|
394
|
+
|
|
395
|
+
If your colours are plain CSS custom properties, there is no `@theme` to compile. Name the file,
|
|
396
|
+
the selector of the dark block, and the pairs that must stay readable:
|
|
397
|
+
|
|
398
|
+
```ts
|
|
399
|
+
// scripts/check-contrast.ts
|
|
400
|
+
import { checkTokenPairs, formatContrastReport } from "@gusnips/vite/contrast";
|
|
401
|
+
|
|
402
|
+
const report = await checkTokenPairs([
|
|
403
|
+
{
|
|
404
|
+
name: "site",
|
|
405
|
+
css: "src/tokens.css",
|
|
406
|
+
dark: ':root[data-theme="dark"]',
|
|
407
|
+
textPairs: [["--ground", "--ink"]],
|
|
408
|
+
},
|
|
409
|
+
]);
|
|
410
|
+
|
|
411
|
+
console.log(formatContrastReport(report));
|
|
412
|
+
process.exit(report.problems.some((p) => p.level === "error") ? 1 : 0);
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
It reads the colours in `:root { … }` as the light theme and the colours in your dark block as the
|
|
416
|
+
dark one. A product with no dark theme leaves `dark` off: each pair is then measured once, in the
|
|
417
|
+
light block, and no token needs a dark twin. If `--ink` on `--ground` is under 4.5:1 in either, it prints the line and exits 1:
|
|
418
|
+
|
|
419
|
+
```
|
|
420
|
+
site
|
|
421
|
+
✖ floor: src/tokens.css:8 dark: --ink (#3a3a3a) on --ground (#121212) is 1.65:1, under the 4.5:1 floor for text (WCAG 1.4.3)
|
|
422
|
+
✖ contrast: 1 error(s)
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
Nothing is compiled, so it needs no Tailwind and no other peer. It returns the same report as
|
|
426
|
+
`checkContrast`, so the formatter is the same, and you can join the two before you exit:
|
|
427
|
+
`report.problems.push(...other.problems)`.
|
|
428
|
+
|
|
429
|
+
| It fails when | Because the reader gets |
|
|
430
|
+
| ----------------------------------------------------------------------- | ------------------------------------------------ |
|
|
431
|
+
| a pair is under its floor in the light or the dark theme | text or a border some people cannot see |
|
|
432
|
+
| a colour is in one theme and not the other | one mode keeping, or lacking, a colour |
|
|
433
|
+
| a pair names a token that no block declares | a typo that looks like a pair that passes |
|
|
434
|
+
| a pair holds a colour that is not hex | a floor nobody is keeping |
|
|
435
|
+
| the system block differs from the dark block, or is not in the `@media` | a page with no saved choice that looks different |
|
|
436
|
+
|
|
437
|
+
`textPairs` are held to 4.5:1 and `nonTextPairs` (borders, focus rings, icons) to 3:1. Change
|
|
438
|
+
them with `textFloor` and `nonTextFloor`. A pair is `[background, foreground]`; the ratio is the
|
|
439
|
+
same either way round, so the order only decides how the message reads. Write the names as the CSS
|
|
440
|
+
does, with the `--`. The light block is `:root` unless you set `light`.
|
|
441
|
+
|
|
442
|
+
**The system block.** A page that has not chosen a theme follows the system, so many apps write
|
|
443
|
+
the dark colours twice: once for the chosen theme and once for everyone else.
|
|
444
|
+
|
|
445
|
+
```css
|
|
446
|
+
:root {
|
|
447
|
+
--ground: #ffffff;
|
|
448
|
+
--ink: #1a1a1a;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
:root[data-theme="dark"] {
|
|
452
|
+
--ground: #121212;
|
|
453
|
+
--ink: #f2f2f2;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
@media (prefers-color-scheme: dark) {
|
|
457
|
+
:root:not([data-theme]) {
|
|
458
|
+
--ground: #121212;
|
|
459
|
+
--ink: #f2f2f2;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
Pass `system: ":root:not([data-theme])"` and the check holds the second block to the first: the
|
|
465
|
+
same tokens, the same colours (`#FFF` and `#ffffff` are the same colour), and inside
|
|
466
|
+
`@media (prefers-color-scheme: dark)`. Either dark block can sit inside `@media screen { … }`.
|
|
467
|
+
|
|
468
|
+
**Your own checks.** `loadTokenThemes` hands back the two palettes as hex, with the same file and
|
|
469
|
+
selectors:
|
|
470
|
+
|
|
471
|
+
```ts
|
|
472
|
+
import { loadTokenThemes } from "@gusnips/vite/contrast";
|
|
473
|
+
|
|
474
|
+
const { light, dark } = await loadTokenThemes({
|
|
475
|
+
css: "src/tokens.css",
|
|
476
|
+
dark: ':root[data-theme="dark"]',
|
|
477
|
+
});
|
|
478
|
+
light.get("--ground"); // "#ffffff"
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
Use it for what only your app knows: that the browser's toolbar colour is the page's ground in
|
|
482
|
+
each theme, for example. It throws, and says what is missing, if the file or a block is not there.
|
|
483
|
+
|
|
484
|
+
**What it does not read.** It reads text, not CSS, and there is no CSS parser behind it.
|
|
485
|
+
|
|
486
|
+
- Only hex colours (`#fff` or `#ffffff`) are measured. A token in a pair that holds `rgb()`,
|
|
487
|
+
`oklch()` or `var()` fails as one it cannot measure. Tokens no pair uses, like `--radius`, are
|
|
488
|
+
left alone.
|
|
489
|
+
- A block is found by its selector text, inside any `@media`, and must hold declarations only. A
|
|
490
|
+
block with another rule inside it (nested CSS) is not read, and the check says it found no
|
|
491
|
+
block.
|
|
492
|
+
- A media query is read, not run. A `@media print` block with your dark selector counts as that
|
|
493
|
+
selector. If one selector is written twice, the later token wins, as it does in CSS.
|
|
494
|
+
- Light and dark need different selectors.
|
|
495
|
+
|
|
392
496
|
## The vite preset
|
|
393
497
|
|
|
394
498
|
```ts
|
package/dist/contrast.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export interface CheckContrastOptions {
|
|
|
12
12
|
/** What `entry` and `sources` are relative to. Default: the working directory. */
|
|
13
13
|
root?: string;
|
|
14
14
|
}
|
|
15
|
-
export type ContrastRule = "load" | "floor" | "retune" | "rebind" | "untokened" | "hover" | "dead";
|
|
15
|
+
export type ContrastRule = "load" | "floor" | "retune" | "rebind" | "untokened" | "hover" | "dead" | "missing" | "mirror";
|
|
16
16
|
export interface ContrastProblem {
|
|
17
17
|
rule: ContrastRule;
|
|
18
18
|
/** A warning is shown and does not fail the gate. */
|
|
@@ -40,4 +40,69 @@ export declare function checkContrast(bundles: readonly ContrastBundle[], option
|
|
|
40
40
|
/** The report as lines for a terminal: one per problem, grouped by bundle, and a last line that
|
|
41
41
|
* says whether the gate passed. */
|
|
42
42
|
export declare function formatContrastReport(report: ContrastReport): string;
|
|
43
|
+
/** Two custom properties, `[background, foreground]`, written as the CSS names them:
|
|
44
|
+
* `["--ground", "--ink"]`. The ratio is the same either way round; the order only decides how a
|
|
45
|
+
* problem reads. */
|
|
46
|
+
export type TokenPair = readonly [background: string, foreground: string];
|
|
47
|
+
export interface TokenPairsBundle {
|
|
48
|
+
/** Shown beside every problem: `"apps/site"`. */
|
|
49
|
+
name: string;
|
|
50
|
+
/** The stylesheet holding the colour blocks, relative to `root`. */
|
|
51
|
+
css: string;
|
|
52
|
+
/** The selector of the light block. Default `":root"`. It must differ from `dark`. */
|
|
53
|
+
light?: string;
|
|
54
|
+
/**
|
|
55
|
+
* The selector of the dark block: `':root[data-theme="dark"]'`. Leave it off for a light-only
|
|
56
|
+
* stylesheet: each pair is then measured once, and no token needs a dark twin.
|
|
57
|
+
*/
|
|
58
|
+
dark?: string;
|
|
59
|
+
/**
|
|
60
|
+
* The selector of the system fallback: the dark colours again, for a page that has chosen no
|
|
61
|
+
* theme, inside `@media (prefers-color-scheme: dark)`: `":root:not([data-theme])"`. It must
|
|
62
|
+
* hold exactly the dark block's tokens and values. Leave it off when there is none, and always
|
|
63
|
+
* when there is no `dark` block.
|
|
64
|
+
*/
|
|
65
|
+
system?: string;
|
|
66
|
+
/** Pairs read as text. Held to `textFloor`. */
|
|
67
|
+
textPairs?: readonly TokenPair[];
|
|
68
|
+
/** Pairs that are not text: borders, focus rings, icons. Held to `nonTextFloor`. */
|
|
69
|
+
nonTextPairs?: readonly TokenPair[];
|
|
70
|
+
/** Default 4.5 (WCAG 1.4.3). */
|
|
71
|
+
textFloor?: number;
|
|
72
|
+
/** Default 3 (WCAG 1.4.11). */
|
|
73
|
+
nonTextFloor?: number;
|
|
74
|
+
}
|
|
75
|
+
/** The hex colours of each theme, `--ground` → `#ffffff`, for a check of your own. */
|
|
76
|
+
export interface TokenThemes {
|
|
77
|
+
light: Map<string, string>;
|
|
78
|
+
dark: Map<string, string>;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* The two palettes of a bundle as hex maps, for a check of your own that needs the colours
|
|
82
|
+
* (the browser's toolbar colour should be the page's ground, in each theme):
|
|
83
|
+
*
|
|
84
|
+
* ```ts
|
|
85
|
+
* const { light, dark } = await loadTokenThemes({ css: "src/tokens.css", dark: '[data-theme="dark"]' });
|
|
86
|
+
* light.get("--ground"); // "#ffffff"
|
|
87
|
+
* ```
|
|
88
|
+
*
|
|
89
|
+
* Throws, saying what is missing, when the file or one of the two blocks is not there.
|
|
90
|
+
*/
|
|
91
|
+
export declare function loadTokenThemes(bundle: Pick<TokenPairsBundle, "css" | "light"> & {
|
|
92
|
+
dark: string;
|
|
93
|
+
}, options?: CheckContrastOptions): Promise<TokenThemes>;
|
|
94
|
+
/**
|
|
95
|
+
* The plain-CSS gate: for each stylesheet, the contrast of every pair in both themes, a token
|
|
96
|
+
* both themes have, and a system fallback that matches the dark block. Returns what it found,
|
|
97
|
+
* the same report `checkContrast` returns, so `formatContrastReport` prints either and a repo
|
|
98
|
+
* can join the two (`report.problems.push(...other.problems)`) and fail CI once.
|
|
99
|
+
*
|
|
100
|
+
* ```ts
|
|
101
|
+
* const report = await checkTokenPairs([
|
|
102
|
+
* { name: "site", css: "src/tokens.css", dark: ':root[data-theme="dark"]', textPairs: [["--ground", "--ink"]] },
|
|
103
|
+
* ]);
|
|
104
|
+
* console.log(formatContrastReport(report));
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
export declare function checkTokenPairs(bundles: readonly TokenPairsBundle[], options?: CheckContrastOptions): Promise<ContrastReport>;
|
|
43
108
|
//# sourceMappingURL=contrast.d.ts.map
|
package/dist/contrast.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contrast.d.ts","sourceRoot":"","sources":["../src/contrast.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"contrast.d.ts","sourceRoot":"","sources":["../src/contrast.ts"],"names":[],"mappings":"AAqDA,MAAM,WAAW,cAAc;IAC7B,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,kGAAkG;IAClG,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,kFAAkF;IAClF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,YAAY,GACtB,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEjG,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,YAAY,CAAC;IACnB,qDAAqD;IACrD,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AA2YD;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,SAAS,cAAc,EAAE,EAClC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,cAAc,CAAC,CAIzB;AAED;oCACoC;AACpC,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAoBnE;AAYD;;qBAEqB;AACrB,MAAM,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;AAE1E,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,GAAG,EAAE,MAAM,CAAC;IACZ,sFAAsF;IACtF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IACjC,oFAAoF;IACpF,YAAY,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IACpC,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,sFAAsF;AACtF,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3B;AA6ID;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,KAAK,GAAG,OAAO,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAClE,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,WAAW,CAAC,CAKtB;AAqJD;;;;;;;;;;;;GAYG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,SAAS,gBAAgB,EAAE,EACpC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,cAAc,CAAC,CAIzB"}
|
package/dist/contrast.js
CHANGED
|
@@ -30,9 +30,20 @@
|
|
|
30
30
|
* - **dead**: a class that compiles to no rule at all — a token Tailwind does not have, or a
|
|
31
31
|
* name the scanner caught half of. A warning: dynamic construction reads the same way.
|
|
32
32
|
*
|
|
33
|
+
* `checkContrast` is the Tailwind reading. `checkTokenPairs` (further down) is the other one, for
|
|
34
|
+
* an app whose colours are plain CSS custom properties: it reads a light block and a dark block as
|
|
35
|
+
* text, holds a list of pairs to a floor in both, and reports through the same problems and the
|
|
36
|
+
* same formatter. It adds two rules:
|
|
37
|
+
*
|
|
38
|
+
* - **missing**: a colour one theme declares and the other does not, or a pair that names a token
|
|
39
|
+
* neither declares. A typo in a pair would otherwise read as a pair that passes.
|
|
40
|
+
* - **mirror**: the system fallback (the dark colours repeated under `prefers-color-scheme` for a
|
|
41
|
+
* page that has chosen no theme) differs from the dark block, or sits outside that query.
|
|
42
|
+
*
|
|
33
43
|
* Runs on node and bun: `fs.promises.glob`, never Bun's `Glob`, and no `import.meta.dir`.
|
|
34
|
-
*
|
|
35
|
-
* `@gusnips/vite/contrast`), because the fixture is compiled, not guessed.
|
|
44
|
+
* `checkContrast` needs `@tailwindcss/cli` installed where it runs (an optional peer, reachable
|
|
45
|
+
* only from `@gusnips/vite/contrast`), because the fixture is compiled, not guessed.
|
|
46
|
+
* `checkTokenPairs` compiles nothing and needs no peer.
|
|
36
47
|
*/
|
|
37
48
|
import { spawnSync } from "node:child_process";
|
|
38
49
|
import { glob, mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
@@ -101,6 +112,14 @@ function measured(value, map) {
|
|
|
101
112
|
const ATTR = /\bclass(?:Name)?\s*=\s*(?:"([^"]*)"|'([^']*)'|`((?:[^`$]|\$(?!\{))*)`)/g;
|
|
102
113
|
const HELPER = /\b(?:cn|clsx|cva|twMerge|twJoin)\s*\(([^)]*)\)/g;
|
|
103
114
|
const STR = /"([^"]*)"|'([^']*)'/g;
|
|
115
|
+
/** The 1-based line a character offset falls on. */
|
|
116
|
+
function lineAt(source, index) {
|
|
117
|
+
let line = 1;
|
|
118
|
+
for (let i = 0; i < index; i++)
|
|
119
|
+
if (source.charCodeAt(i) === 10)
|
|
120
|
+
line++;
|
|
121
|
+
return line;
|
|
122
|
+
}
|
|
104
123
|
const skipped = (file) => /(?:^|\/)__tests__\//.test(file) || /\.(test|spec)\.[tj]sx?$/.test(file);
|
|
105
124
|
/** Every class string the sources use, with the first `file:line` that uses it. */
|
|
106
125
|
async function scanSources(root, patterns) {
|
|
@@ -112,13 +131,6 @@ async function scanSources(root, patterns) {
|
|
|
112
131
|
files.add(file);
|
|
113
132
|
}
|
|
114
133
|
}
|
|
115
|
-
const lineAt = (source, index) => {
|
|
116
|
-
let line = 1;
|
|
117
|
-
for (let i = 0; i < index; i++)
|
|
118
|
-
if (source.charCodeAt(i) === 10)
|
|
119
|
-
line++;
|
|
120
|
-
return line;
|
|
121
|
-
};
|
|
122
134
|
const keep = (raw, file, index, source) => {
|
|
123
135
|
for (const cls of raw.split(/\s+/).filter(Boolean)) {
|
|
124
136
|
// A token that would break the fixture's quoting is skipped rather than escaped:
|
|
@@ -426,4 +438,280 @@ export function formatContrastReport(report) {
|
|
|
426
438
|
: `✖ contrast: ${errors} error(s)${warnings > 0 ? `, ${warnings} warning(s)` : ""}`);
|
|
427
439
|
return lines.join("\n");
|
|
428
440
|
}
|
|
441
|
+
const PREFERS_DARK = /\(\s*prefers-color-scheme\s*:\s*dark\s*\)/;
|
|
442
|
+
/** `:root[data-theme='dark']` and `:root[data-theme="dark"]` are the same selector. */
|
|
443
|
+
const selectorOf = (text) => text.replace(/\s+/g, " ").replace(/'/g, '"').trim();
|
|
444
|
+
/** The comparable form of a value: `#FFF` and `#ffffff` are one colour. */
|
|
445
|
+
const canonical = (value) => normalizeHex(value) ?? value.replace(/\s+/g, " ").toLowerCase();
|
|
446
|
+
/**
|
|
447
|
+
* Every innermost `selector { … }` block with the at-rules around it, and the custom properties
|
|
448
|
+
* it declares. Text, not syntax: a brace or semicolon inside a string or `url()` is not understood.
|
|
449
|
+
*/
|
|
450
|
+
function leafRules(css) {
|
|
451
|
+
// Comments become spaces, so a `{` in one is not a block and every offset still names its line.
|
|
452
|
+
const source = css.replace(/\/\*[\s\S]*?\*\//g, (comment) => comment.replace(/[^\n]/g, " "));
|
|
453
|
+
const rules = [];
|
|
454
|
+
const open = [];
|
|
455
|
+
let preludeFrom = 0;
|
|
456
|
+
for (let i = 0; i < source.length; i++) {
|
|
457
|
+
const char = source[i];
|
|
458
|
+
if (char === "{") {
|
|
459
|
+
const parent = open.at(-1);
|
|
460
|
+
if (parent !== undefined)
|
|
461
|
+
parent.nested = true;
|
|
462
|
+
open.push({ prelude: source.slice(preludeFrom, i).trim(), bodyAt: i + 1, nested: false });
|
|
463
|
+
preludeFrom = i + 1;
|
|
464
|
+
}
|
|
465
|
+
else if (char === "}") {
|
|
466
|
+
const block = open.pop();
|
|
467
|
+
preludeFrom = i + 1;
|
|
468
|
+
if (block === undefined || block.nested || block.prelude.startsWith("@"))
|
|
469
|
+
continue;
|
|
470
|
+
const tokens = new Map();
|
|
471
|
+
for (const match of source.slice(block.bodyAt, i).matchAll(/(--[\w-]+)\s*:\s*([^;]*)/g)) {
|
|
472
|
+
tokens.set(match[1] ?? "", {
|
|
473
|
+
value: (match[2] ?? "").trim(),
|
|
474
|
+
line: lineAt(source, block.bodyAt + match.index),
|
|
475
|
+
});
|
|
476
|
+
}
|
|
477
|
+
rules.push({
|
|
478
|
+
selectors: block.prelude.split(",").map(selectorOf),
|
|
479
|
+
within: open
|
|
480
|
+
.map((parent) => parent.prelude)
|
|
481
|
+
.filter((prelude) => prelude.startsWith("@"))
|
|
482
|
+
.join(" "),
|
|
483
|
+
tokens,
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
else if (char === ";") {
|
|
487
|
+
preludeFrom = i + 1;
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
return rules;
|
|
491
|
+
}
|
|
492
|
+
/** Every block written with this selector, merged: a later token wins, as it does in CSS. */
|
|
493
|
+
function blockOf(rules, selector) {
|
|
494
|
+
const wanted = selectorOf(selector);
|
|
495
|
+
const found = rules.filter((rule) => rule.selectors.includes(wanted));
|
|
496
|
+
if (found.length === 0)
|
|
497
|
+
return null;
|
|
498
|
+
const tokens = new Map();
|
|
499
|
+
for (const rule of found)
|
|
500
|
+
for (const [name, decl] of rule.tokens)
|
|
501
|
+
tokens.set(name, decl);
|
|
502
|
+
return { tokens, within: found.map((rule) => rule.within) };
|
|
503
|
+
}
|
|
504
|
+
/** Throws when the file or a block the bundle names is not there. The system block may be absent:
|
|
505
|
+
* whether that is a problem is the check's question, not the loader's. */
|
|
506
|
+
async function readTokenBlocks(bundle, root) {
|
|
507
|
+
const css = await readFile(resolve(root, bundle.css), "utf8").catch(() => null);
|
|
508
|
+
// A stylesheet that does not load reads as one with no tokens, which would pass every rule
|
|
509
|
+
// below. It fails instead, the same reason `checkContrast` has a load rule.
|
|
510
|
+
if (css === null)
|
|
511
|
+
throw new Error(`${bundle.css} could not be read`);
|
|
512
|
+
const rules = leafRules(css);
|
|
513
|
+
const required = (label, selector) => {
|
|
514
|
+
const block = blockOf(rules, selector);
|
|
515
|
+
if (block === null) {
|
|
516
|
+
throw new Error(`${bundle.css} has no \`${selector}\` block for the ${label} colours. A block is found by ` +
|
|
517
|
+
`its selector text, inside any @media, and holds declarations only`);
|
|
518
|
+
}
|
|
519
|
+
return block;
|
|
520
|
+
};
|
|
521
|
+
const lightSelector = bundle.light ?? ":root";
|
|
522
|
+
if (bundle.dark === undefined) {
|
|
523
|
+
if (bundle.system !== undefined) {
|
|
524
|
+
throw new Error(`a system block repeats the dark colours, and this bundle names no dark block. Name the ` +
|
|
525
|
+
`dark block, or leave \`system\` off for a light-only stylesheet`);
|
|
526
|
+
}
|
|
527
|
+
return { light: required("light", lightSelector), dark: null, system: null };
|
|
528
|
+
}
|
|
529
|
+
if (selectorOf(lightSelector) === selectorOf(bundle.dark)) {
|
|
530
|
+
throw new Error(`the light and dark selectors are both \`${lightSelector}\`; they must differ`);
|
|
531
|
+
}
|
|
532
|
+
return {
|
|
533
|
+
light: required("light", lightSelector),
|
|
534
|
+
dark: required("dark", bundle.dark),
|
|
535
|
+
system: bundle.system === undefined ? null : blockOf(rules, bundle.system),
|
|
536
|
+
};
|
|
537
|
+
}
|
|
538
|
+
/** The tokens whose value is a hex colour, as `#rrggbb`. Type and geometry are left out. */
|
|
539
|
+
function hexTokens(tokens) {
|
|
540
|
+
const hex = new Map();
|
|
541
|
+
for (const [name, { value }] of tokens) {
|
|
542
|
+
const colour = normalizeHex(value);
|
|
543
|
+
if (colour !== null)
|
|
544
|
+
hex.set(name, colour);
|
|
545
|
+
}
|
|
546
|
+
return hex;
|
|
547
|
+
}
|
|
548
|
+
/**
|
|
549
|
+
* The two palettes of a bundle as hex maps, for a check of your own that needs the colours
|
|
550
|
+
* (the browser's toolbar colour should be the page's ground, in each theme):
|
|
551
|
+
*
|
|
552
|
+
* ```ts
|
|
553
|
+
* const { light, dark } = await loadTokenThemes({ css: "src/tokens.css", dark: '[data-theme="dark"]' });
|
|
554
|
+
* light.get("--ground"); // "#ffffff"
|
|
555
|
+
* ```
|
|
556
|
+
*
|
|
557
|
+
* Throws, saying what is missing, when the file or one of the two blocks is not there.
|
|
558
|
+
*/
|
|
559
|
+
export async function loadTokenThemes(bundle, options = {}) {
|
|
560
|
+
const { light, dark } = await readTokenBlocks(bundle, options.root ?? process.cwd());
|
|
561
|
+
// Unreachable: a bundle that names a dark block either has one or throws above.
|
|
562
|
+
if (dark === null)
|
|
563
|
+
throw new Error(`${bundle.css} has no \`${bundle.dark}\` block`);
|
|
564
|
+
return { light: hexTokens(light.tokens), dark: hexTokens(dark.tokens) };
|
|
565
|
+
}
|
|
566
|
+
async function checkTokenBundle(bundle, options, report) {
|
|
567
|
+
const problem = (p) => {
|
|
568
|
+
report.problems.push({ bundle: bundle.name, level: "error", ...p });
|
|
569
|
+
};
|
|
570
|
+
const at = (decl) => decl === undefined ? bundle.css : `${bundle.css}:${String(decl.line)}`;
|
|
571
|
+
let blocks;
|
|
572
|
+
try {
|
|
573
|
+
blocks = await readTokenBlocks(bundle, options.root ?? process.cwd());
|
|
574
|
+
}
|
|
575
|
+
catch (error) {
|
|
576
|
+
problem({ rule: "load", message: error instanceof Error ? error.message : String(error) });
|
|
577
|
+
return;
|
|
578
|
+
}
|
|
579
|
+
const { light, dark, system } = blocks;
|
|
580
|
+
const themes = [["light", light.tokens]];
|
|
581
|
+
if (dark !== null)
|
|
582
|
+
themes.push(["dark", dark.tokens]);
|
|
583
|
+
const textPairs = bundle.textPairs ?? [];
|
|
584
|
+
const nonTextPairs = bundle.nonTextPairs ?? [];
|
|
585
|
+
// ── Every colour has both themes, and every pair names a real token ──
|
|
586
|
+
// A light-only bundle has one theme, so only the pairs' names are checked against it.
|
|
587
|
+
const wanted = new Set([
|
|
588
|
+
...(dark === null ? [] : [...hexTokens(light.tokens).keys(), ...hexTokens(dark.tokens).keys()]),
|
|
589
|
+
...[...textPairs, ...nonTextPairs].flat(),
|
|
590
|
+
]);
|
|
591
|
+
for (const token of wanted) {
|
|
592
|
+
const inLight = light.tokens.get(token);
|
|
593
|
+
if (dark === null) {
|
|
594
|
+
if (inLight === undefined) {
|
|
595
|
+
problem({
|
|
596
|
+
rule: "missing",
|
|
597
|
+
at: bundle.css,
|
|
598
|
+
message: `a pair names \`${token}\`, which the light block does not declare` +
|
|
599
|
+
(token.startsWith("--") ? "" : ". Custom property names start with --"),
|
|
600
|
+
});
|
|
601
|
+
}
|
|
602
|
+
continue;
|
|
603
|
+
}
|
|
604
|
+
const inDark = dark.tokens.get(token);
|
|
605
|
+
if (inLight !== undefined && inDark !== undefined)
|
|
606
|
+
continue;
|
|
607
|
+
if (inLight === undefined && inDark === undefined) {
|
|
608
|
+
problem({
|
|
609
|
+
rule: "missing",
|
|
610
|
+
at: bundle.css,
|
|
611
|
+
message: `a pair names \`${token}\`, which neither the light nor the dark block declares` +
|
|
612
|
+
(token.startsWith("--") ? "" : ". Custom property names start with --"),
|
|
613
|
+
});
|
|
614
|
+
continue;
|
|
615
|
+
}
|
|
616
|
+
const [have, lack] = inLight === undefined ? ["dark", "light"] : ["light", "dark"];
|
|
617
|
+
problem({
|
|
618
|
+
rule: "missing",
|
|
619
|
+
at: at(inLight ?? inDark),
|
|
620
|
+
message: `\`${token}\` is in the ${have} block but not in the ${lack} block. Declare it in both, ` +
|
|
621
|
+
`even when the colour is the same, so each theme says what it means`,
|
|
622
|
+
});
|
|
623
|
+
}
|
|
624
|
+
// ── The pairs, on the values that ship in each theme ──
|
|
625
|
+
// A token missing from a theme was reported above, so its pairs are skipped here, not repeated.
|
|
626
|
+
const unmeasurable = new Set();
|
|
627
|
+
const cannotMeasure = (mode, token, decl) => {
|
|
628
|
+
if (unmeasurable.has(`${mode}:${token}`))
|
|
629
|
+
return;
|
|
630
|
+
unmeasurable.add(`${mode}:${token}`);
|
|
631
|
+
problem({
|
|
632
|
+
rule: "floor",
|
|
633
|
+
at: at(decl),
|
|
634
|
+
message: `${mode}: cannot measure ${token} (${decl.value}), because it is not a hex colour. ` +
|
|
635
|
+
`Keep the values hex, or teach this check the new notation; ` +
|
|
636
|
+
`do not let a pair go unmeasured.`,
|
|
637
|
+
});
|
|
638
|
+
};
|
|
639
|
+
const measure = (pairs, floor, why) => {
|
|
640
|
+
for (const [background, foreground] of pairs) {
|
|
641
|
+
for (const [mode, tokens] of themes) {
|
|
642
|
+
const bg = tokens.get(background);
|
|
643
|
+
const fg = tokens.get(foreground);
|
|
644
|
+
if (bg === undefined || fg === undefined)
|
|
645
|
+
continue;
|
|
646
|
+
const bgHex = normalizeHex(bg.value);
|
|
647
|
+
const fgHex = normalizeHex(fg.value);
|
|
648
|
+
if (bgHex === null || fgHex === null) {
|
|
649
|
+
if (bgHex === null)
|
|
650
|
+
cannotMeasure(mode, background, bg);
|
|
651
|
+
if (fgHex === null)
|
|
652
|
+
cannotMeasure(mode, foreground, fg);
|
|
653
|
+
continue;
|
|
654
|
+
}
|
|
655
|
+
const ratio = contrast(fgHex, bgHex);
|
|
656
|
+
if (ratio < floor) {
|
|
657
|
+
problem({
|
|
658
|
+
rule: "floor",
|
|
659
|
+
at: at(fg),
|
|
660
|
+
message: `${mode}: ${foreground} (${fgHex}) on ${background} (${bgHex}) is ` +
|
|
661
|
+
`${ratio.toFixed(2)}:1, under the ${floor}:1 floor for ${why}`,
|
|
662
|
+
});
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
};
|
|
667
|
+
measure(textPairs, bundle.textFloor ?? 4.5, "text (WCAG 1.4.3)");
|
|
668
|
+
measure(nonTextPairs, bundle.nonTextFloor ?? 3, "a control or icon (WCAG 1.4.11)");
|
|
669
|
+
// ── The system fallback says what the dark block says ──
|
|
670
|
+
if (bundle.system === undefined || dark === null)
|
|
671
|
+
return;
|
|
672
|
+
const mirror = (decl, message) => problem({ rule: "mirror", at: at(decl), message });
|
|
673
|
+
if (system === null) {
|
|
674
|
+
mirror(undefined, `no \`${bundle.system}\` block for the system fallback. Without it a page that has ` +
|
|
675
|
+
`chosen no theme stays light on a dark system`);
|
|
676
|
+
return;
|
|
677
|
+
}
|
|
678
|
+
if (!system.within.every((within) => PREFERS_DARK.test(within))) {
|
|
679
|
+
mirror([...system.tokens.values()][0], `\`${bundle.system}\` is not inside @media (prefers-color-scheme: dark), so it paints ` +
|
|
680
|
+
`the dark colours for everyone who has chosen no theme`);
|
|
681
|
+
}
|
|
682
|
+
for (const token of new Set([...dark.tokens.keys(), ...system.tokens.keys()])) {
|
|
683
|
+
const chosen = dark.tokens.get(token);
|
|
684
|
+
const followed = system.tokens.get(token);
|
|
685
|
+
if (chosen !== undefined && followed !== undefined) {
|
|
686
|
+
if (canonical(chosen.value) !== canonical(followed.value)) {
|
|
687
|
+
mirror(followed, `\`${token}\` is ${chosen.value} in the dark block but ${followed.value} in the system block`);
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
else if (chosen !== undefined) {
|
|
691
|
+
mirror(chosen, `\`${token}\` is in the dark block but not in the system block`);
|
|
692
|
+
}
|
|
693
|
+
else {
|
|
694
|
+
mirror(followed, `\`${token}\` is in the system block but not in the dark block`);
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
/**
|
|
699
|
+
* The plain-CSS gate: for each stylesheet, the contrast of every pair in both themes, a token
|
|
700
|
+
* both themes have, and a system fallback that matches the dark block. Returns what it found,
|
|
701
|
+
* the same report `checkContrast` returns, so `formatContrastReport` prints either and a repo
|
|
702
|
+
* can join the two (`report.problems.push(...other.problems)`) and fail CI once.
|
|
703
|
+
*
|
|
704
|
+
* ```ts
|
|
705
|
+
* const report = await checkTokenPairs([
|
|
706
|
+
* { name: "site", css: "src/tokens.css", dark: ':root[data-theme="dark"]', textPairs: [["--ground", "--ink"]] },
|
|
707
|
+
* ]);
|
|
708
|
+
* console.log(formatContrastReport(report));
|
|
709
|
+
* ```
|
|
710
|
+
*/
|
|
711
|
+
export async function checkTokenPairs(bundles, options = {}) {
|
|
712
|
+
const report = { problems: [] };
|
|
713
|
+
for (const bundle of bundles)
|
|
714
|
+
await checkTokenBundle(bundle, options, report);
|
|
715
|
+
return report;
|
|
716
|
+
}
|
|
429
717
|
//# 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":"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"}
|
|
1
|
+
{"version":3,"file":"contrast.js","sourceRoot":"","sources":["../src/contrast.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* otherwise force on everyone: the vite config preset at `@gusnips/vite/preset` (the React and
|
|
14
14
|
* Tailwind plugins), `renderTree` at `@gusnips/vite/render`, the theme pre-paint plugin at
|
|
15
15
|
* `@gusnips/vite/theme` (both React itself), the catalog check at `@gusnips/vite/i18n`, and the
|
|
16
|
-
* contrast gate at `@gusnips/vite/contrast` (tailwindcss). The last two run in CI and never in a
|
|
16
|
+
* contrast gate at `@gusnips/vite/contrast` (tailwindcss, for the class reading only). The last two run in CI and never in a
|
|
17
17
|
* build. Nothing here imports React, vite or tailwindcss, so a prerender script, an OG generator
|
|
18
18
|
* and a repo that only wants a sitemap all install exactly what they use.
|
|
19
19
|
*/
|