From 8d92b2901061225370ff2619854fc0c88c19c8ea Mon Sep 17 00:00:00 2001 From: Jeremy Walton Date: Thu, 22 Oct 2026 16:19:10 -0400 Subject: [PATCH 1/4] Add a --mode option to the contrast checker optics-check-contrast takes --mode=light or --mode=dark to check only one color mode. Apps that force one mode no longer need to filter --report output to ignore the other. Both modes are still checked by default, and an unknown mode exits with 2. Co-Authored-By: Claude Opus 5.5 --- src/tools/check-contrast.cjs | 5 +-- src/tools/contrast/contrast-check.cjs | 5 +-- src/tools/contrast/contrast-reporter.cjs | 5 +-- src/tools/contrast/tool-options.cjs | 9 +++++- test/contrast/check-contrast.test.cjs | 40 ++++++++++++++++++++++-- 5 files changed, 54 insertions(+), 10 deletions(-) diff --git a/src/tools/check-contrast.cjs b/src/tools/check-contrast.cjs index 2e75df1c..cb5b3765 100755 --- a/src/tools/check-contrast.cjs +++ b/src/tools/check-contrast.cjs @@ -1,18 +1,19 @@ #!/usr/bin/env node /** * Checks WCAG 2.1 contrast between every Optics scale step and its `on` text - * colors, in light and dark mode, for your theme: + * colors, in light and dark mode (or just one, with --mode), for your theme: * * --op-color-primary-plus-five vs --op-color-primary-on-plus-five (needs --min) * --op-color-primary-plus-five vs --op-color-primary-on-plus-five-alt (needs --alt-min) * * Usage: - * optics-check-contrast [files...] [--hsl | --oklch] [--min=4.5] [--alt-min=4.5] [--report] + * optics-check-contrast [files...] [--hsl | --oklch] [--mode=light | --mode=dark] [--min=4.5] [--alt-min=4.5] [--report] * * files CSS with your --op-* overrides: theme files, or your compiled CSS bundle. * They are applied on top of the Optics tokens, the last value of each token wins. * --hsl Check against the HSL tokens (optics.css). Detected from -s / hsl() in your files. * --oklch Check against the OKLCH tokens (optics-oklch.css). Detected from -c / oklch(). + * --mode Check only light or dark mode. Both are checked by default. * --report List every pair, and don't fail. * * Tokens are read without their selectors, so overrides scoped to a class or diff --git a/src/tools/contrast/contrast-check.cjs b/src/tools/contrast/contrast-check.cjs index 0c56111c..8df8629f 100644 --- a/src/tools/contrast/contrast-check.cjs +++ b/src/tools/contrast/contrast-check.cjs @@ -3,7 +3,7 @@ const ColorPair = require('./color-pair.cjs') const ContrastResult = require('./contrast-result.cjs') const ThemedColor = require('./colors/themed-color.cjs') -// Measures every scale step against its `on` and `on-alt` text colors, in light and dark mode. +// Measures every scale step against its `on` and `on-alt` text colors, in light and dark mode, or just --mode. class ContrastCheck { #theme #options @@ -15,10 +15,11 @@ class ContrastCheck { // Yields one result per pair and mode, so a report can print each one as it is measured. *results() { + const modes = this.#options.mode ? [this.#options.mode] : ThemedColor.MODES for (const pair of ColorPair.findAll(this.#theme)) { const background = this.#colorOf(pair.background) const text = this.#colorOf(pair.text) - for (const mode of ThemedColor.MODES) { + for (const mode of modes) { const ratio = background.in(mode).contrastWith(text.in(mode)) // NaN < min is false, so an unmeasurable pair would otherwise pass. if (!Number.isFinite(ratio)) diff --git a/src/tools/contrast/contrast-reporter.cjs b/src/tools/contrast/contrast-reporter.cjs index a1c6ebbb..1fcfe49a 100644 --- a/src/tools/contrast/contrast-reporter.cjs +++ b/src/tools/contrast/contrast-reporter.cjs @@ -19,10 +19,11 @@ class ContrastReporter { } finish() { - const { min, altMin, report } = this.#options + const { mode, min, altMin, report } = this.#options const passed = this.#count - this.#failures.length + const checked = mode ? ` (${mode})` : '' this.#print( - `Optics ${this.#build.name} contrast: ${passed}/${this.#count} pairs pass (on >= ${min}, on-alt >= ${altMin})` + `Optics ${this.#build.name} contrast${checked}: ${passed}/${this.#count} pairs pass (on >= ${min}, on-alt >= ${altMin})` ) if (report || !this.#failures.length) return 0 diff --git a/src/tools/contrast/tool-options.cjs b/src/tools/contrast/tool-options.cjs index 77594645..5419b192 100644 --- a/src/tools/contrast/tool-options.cjs +++ b/src/tools/contrast/tool-options.cjs @@ -1,9 +1,10 @@ const CheckError = require('./check-error.cjs') +const ThemedColor = require('./colors/themed-color.cjs') const DEFAULT_MIN = 4.5 const FLAG = /^--([a-z-]+)(?:=(.*))?$/ -// The command-line arguments: optics-check-contrast [files...] [--hsl | --oklch] [--min=4.5] [--alt-min=4.5] [--report] +// The command-line arguments: optics-check-contrast [files...] [--hsl | --oklch] [--mode=light | --mode=dark] [--min=4.5] [--alt-min=4.5] [--report] class ToolOptions { static parse(args) { const flags = {} @@ -19,6 +20,7 @@ class ToolOptions { constructor(files, flags) { this.files = files this.buildName = forcedBuildName(flags) + this.mode = mode(flags.mode) this.min = threshold(flags.min) this.altMin = threshold(flags['alt-min']) this.report = Boolean(flags.report) @@ -31,6 +33,11 @@ function forcedBuildName(flags) { return undefined } +function mode(value) { + if (value === undefined || ThemedColor.MODES.includes(value)) return value + throw new CheckError('--mode must be light or dark') +} + function threshold(value) { if (value === undefined) return DEFAULT_MIN // A bare --min (true) or empty --min= ('') would become 1 or 0 with Number(), so require a numeric string. diff --git a/test/contrast/check-contrast.test.cjs b/test/contrast/check-contrast.test.cjs index 4f273e83..a5fe865e 100644 --- a/test/contrast/check-contrast.test.cjs +++ b/test/contrast/check-contrast.test.cjs @@ -17,9 +17,11 @@ const AMBIGUOUS = 'Could not tell if your theme is HSL or OKLCH. Pass --hsl or - const onBase = (color, channel = '--op-color-primary-c: 0.1;') => `:root { --op-color-primary-on-base: ${color}; ${channel} }` const HSL_CHANNEL = '--op-color-primary-s: 1%;' +const DARK_ONLY_FAILURE = ':root { --op-color-primary-h: 60; --op-color-primary-c: 0.2; --op-color-primary-l: 0.9; }' // Each case gives `css` (theme files to pass, as theme-0.css and on), `files` (other files it can @import) -// and `args`, then either the `error` it must stop with (exit 2), or the `exit` code and the lines it must print. +// and `args`, then either the `error` it must stop with (exit 2), or the `exit` code, the lines it must print, +// and the lines it `omits`. const CASES = [ // Results and flags { @@ -47,10 +49,41 @@ const CASES = [ }, { name: 'fails a pair only in dark mode', - css: ':root { --op-color-primary-h: 60; --op-color-primary-c: 0.2; --op-color-primary-l: 0.9; }', + css: DARK_ONLY_FAILURE, exit: 1, prints: ' --op-color-primary-on-minus-four (dark): 4.40 < 4.5', }, + { + name: 'checks only light mode with --mode=light', + css: DARK_ONLY_FAILURE, + args: ['--mode=light'], + exit: 0, + prints: 'Optics oklch contrast (light): 228/228 pairs pass (on >= 4.5, on-alt >= 4.5)', + }, + { + name: 'checks only dark mode with --mode=dark', + css: DARK_ONLY_FAILURE, + args: ['--mode=dark'], + exit: 1, + prints: [ + 'Optics oklch contrast (dark): 226/228 pairs pass (on >= 4.5, on-alt >= 4.5)', + ' --op-color-primary-on-minus-four (dark): 4.40 < 4.5', + ], + }, + { + name: 'lists only the chosen mode with --mode and --report', + css: OKLCH_THEME, + args: ['--mode=dark', '--report'], + exit: 0, + prints: 'FAIL 4.26 dark --op-color-primary-on-plus-one', + omits: 'pass 5.98 light --op-color-primary-on-base', + }, + ...['--mode', '--mode=', '--mode=night'].map((flag) => ({ + name: `rejects ${flag}`, + css: OKLCH_THEME, + args: [flag], + error: '--mode must be light or dark', + })), { name: 'lists every pair with --report, and does not fail', css: OKLCH_THEME, @@ -340,7 +373,7 @@ describe('optics-check-contrast', { concurrency: true }, () => { after(() => fs.rmSync(tempDir, { recursive: true, force: true })) - CASES.forEach(({ name, css = [], files = {}, args = [], error, exit = 2, prints = [] }, index) => { + CASES.forEach(({ name, css = [], files = {}, args = [], error, exit = 2, prints = [], omits = [] }, index) => { test(name, () => { const dir = path.join(tempDir, 'themes', `case-${index}`) fs.mkdirSync(dir) @@ -360,6 +393,7 @@ describe('optics-check-contrast', { concurrency: true }, () => { assert.strictEqual(status, exit, output) for (const line of error ? [`optics-check-contrast: ${error}`] : [prints].flat()) assert.ok(lines.includes(line), `Missing line: ${line}\n\n${output}`) + for (const line of [omits].flat()) assert.ok(!lines.includes(line), `Unexpected line: ${line}\n\n${output}`) }) }) }) From cd6a2ef92fe38ee123252841c98605a707b7f4f4 Mon Sep 17 00:00:00 2001 From: Jeremy Walton Date: Thu, 22 Oct 2026 16:19:10 -0400 Subject: [PATCH 2/4] Document --mode and each option's default on the Contrast Checker page Co-Authored-By: Claude Opus 5.5 --- src/stories/Tools/ContrastChecker.mdx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/stories/Tools/ContrastChecker.mdx b/src/stories/Tools/ContrastChecker.mdx index 4ff9bcc6..93c7d8db 100644 --- a/src/stories/Tools/ContrastChecker.mdx +++ b/src/stories/Tools/ContrastChecker.mdx @@ -34,10 +34,11 @@ Pass your theme files or your compiled CSS. Your `--op-*` values are applied on ## Options -- `--hsl` or `--oklch`: the build to check against. By default it is detected from your files (`-s` or `hsl()` means HSL, `-c` or `oklch()` means OKLCH). -- `--min=4.5`: the ratio `on` text needs. -- `--alt-min=4.5`: the ratio `on-alt` text needs. Use `--alt-min=3` to allow AA large text. -- `--report`: list every pair and its ratio, without failing. +- `--hsl` or `--oklch`: the build to check against. Default: detected from your files (`-s` or `hsl()` means HSL, `-c` or `oklch()` means OKLCH). +- `--mode=light` or `--mode=dark`: check only one color mode. Use it if your app forces one mode, such as with `data-theme-mode="light"`. Default: both modes. +- `--min`: the ratio `on` text needs. Default: `4.5`. +- `--alt-min`: the ratio `on-alt` text needs. Use `--alt-min=3` to allow AA large text. Default: `4.5`. +- `--report`: list every pair and its ratio, without failing. Default: off, so only failures are listed. It exits with `1` if any pair fails, and `2` if it can't read your theme. From f7610cac63b087fddfb093903014697759577f99 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Oct 2026 10:53:27 +0000 Subject: [PATCH 3/4] Bump vite from 8.1.4 to 8.1.6 Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 8.1.4 to 8.1.6. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/v8.1.6/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v8.1.6/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-version: 8.1.6 dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- yarn.lock | 320 +++++++++++++++++++++++++++--------------------------- 1 file changed, 162 insertions(+), 158 deletions(-) diff --git a/yarn.lock b/yarn.lock index dfdaaec8..7cbaf738 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1239,16 +1239,6 @@ __metadata: languageName: node linkType: hard -"@emnapi/core@npm:1.11.1": - version: 1.11.1 - resolution: "@emnapi/core@npm:1.11.1" - dependencies: - "@emnapi/wasi-threads": "npm:1.2.2" - tslib: "npm:^2.4.0" - checksum: 10c0/2c6defdac2d1d26090384655d7d6c9614fa553853b1760597686749e9375dc2aa0dae80a2615b81c254600f5d531d07d8466cde0d331a8caae64b93f3ca5937e - languageName: node - linkType: hard - "@emnapi/core@npm:1.9.2": version: 1.9.2 resolution: "@emnapi/core@npm:1.9.2" @@ -1268,15 +1258,6 @@ __metadata: languageName: node linkType: hard -"@emnapi/runtime@npm:1.11.1": - version: 1.11.1 - resolution: "@emnapi/runtime@npm:1.11.1" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/04332fb62076afc440aa23316c04bec42f584ca8b074e5507d08e2b33a47cbe0493b1aadb8f3c1057b64ae1e17f5bde1a7bc37f7facc9d0bc25c18197cbd366f - languageName: node - linkType: hard - "@emnapi/runtime@npm:1.9.2": version: 1.9.2 resolution: "@emnapi/runtime@npm:1.9.2" @@ -1699,7 +1680,7 @@ __metadata: languageName: node linkType: hard -"@napi-rs/wasm-runtime@npm:^1.1.4, @napi-rs/wasm-runtime@npm:^1.1.5, @napi-rs/wasm-runtime@npm:^1.1.6": +"@napi-rs/wasm-runtime@npm:^1.1.4, @napi-rs/wasm-runtime@npm:^1.1.5": version: 1.1.6 resolution: "@napi-rs/wasm-runtime@npm:1.1.6" dependencies: @@ -1882,10 +1863,10 @@ __metadata: languageName: node linkType: hard -"@oxc-project/types@npm:=0.139.0": - version: 0.139.0 - resolution: "@oxc-project/types@npm:0.139.0" - checksum: 10c0/ad57d1bee4b972ecf6784183da12ac6865edfff326bd83712fb75262b901868bc2b72d6fb502465a5f0dbaaded2910003f73365caf3821901dad565cc0b7fdf2 +"@oxc-project/types@npm:=0.155.0": + version: 0.155.0 + resolution: "@oxc-project/types@npm:0.155.0" + checksum: 10c0/07227fb2c2e03b07453129f2407b49b165eadaa679a34dad68e0b0526420506cea223431807983413f6968053de873c13b05d3978a9a43cabb3999ca97ba2ec5 languageName: node linkType: hard @@ -2071,111 +2052,107 @@ __metadata: languageName: unknown linkType: soft -"@rolldown/binding-android-arm64@npm:1.1.5": - version: 1.1.5 - resolution: "@rolldown/binding-android-arm64@npm:1.1.5" +"@rolldown/binding-android-arm-eabi@npm:1.2.15": + version: 1.2.15 + resolution: "@rolldown/binding-android-arm-eabi@npm:1.2.15" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@rolldown/binding-android-arm64@npm:1.2.15": + version: 1.2.15 + resolution: "@rolldown/binding-android-arm64@npm:1.2.15" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@rolldown/binding-darwin-arm64@npm:1.1.5": - version: 1.1.5 - resolution: "@rolldown/binding-darwin-arm64@npm:1.1.5" +"@rolldown/binding-darwin-arm64@npm:1.2.15": + version: 1.2.15 + resolution: "@rolldown/binding-darwin-arm64@npm:1.2.15" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rolldown/binding-darwin-x64@npm:1.1.5": - version: 1.1.5 - resolution: "@rolldown/binding-darwin-x64@npm:1.1.5" +"@rolldown/binding-darwin-x64@npm:1.2.15": + version: 1.2.15 + resolution: "@rolldown/binding-darwin-x64@npm:1.2.15" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rolldown/binding-freebsd-x64@npm:1.1.5": - version: 1.1.5 - resolution: "@rolldown/binding-freebsd-x64@npm:1.1.5" +"@rolldown/binding-freebsd-x64@npm:1.2.15": + version: 1.2.15 + resolution: "@rolldown/binding-freebsd-x64@npm:1.2.15" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@rolldown/binding-linux-arm-gnueabihf@npm:1.1.5": - version: 1.1.5 - resolution: "@rolldown/binding-linux-arm-gnueabihf@npm:1.1.5" +"@rolldown/binding-linux-arm-gnueabihf@npm:1.2.15": + version: 1.2.15 + resolution: "@rolldown/binding-linux-arm-gnueabihf@npm:1.2.15" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@rolldown/binding-linux-arm64-gnu@npm:1.1.5": - version: 1.1.5 - resolution: "@rolldown/binding-linux-arm64-gnu@npm:1.1.5" +"@rolldown/binding-linux-arm64-gnu@npm:1.2.15": + version: 1.2.15 + resolution: "@rolldown/binding-linux-arm64-gnu@npm:1.2.15" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@rolldown/binding-linux-arm64-musl@npm:1.1.5": - version: 1.1.5 - resolution: "@rolldown/binding-linux-arm64-musl@npm:1.1.5" +"@rolldown/binding-linux-arm64-musl@npm:1.2.15": + version: 1.2.15 + resolution: "@rolldown/binding-linux-arm64-musl@npm:1.2.15" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rolldown/binding-linux-ppc64-gnu@npm:1.1.5": - version: 1.1.5 - resolution: "@rolldown/binding-linux-ppc64-gnu@npm:1.1.5" +"@rolldown/binding-linux-ppc64-gnu@npm:1.2.15": + version: 1.2.15 + resolution: "@rolldown/binding-linux-ppc64-gnu@npm:1.2.15" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@rolldown/binding-linux-s390x-gnu@npm:1.1.5": - version: 1.1.5 - resolution: "@rolldown/binding-linux-s390x-gnu@npm:1.1.5" +"@rolldown/binding-linux-s390x-gnu@npm:1.2.15": + version: 1.2.15 + resolution: "@rolldown/binding-linux-s390x-gnu@npm:1.2.15" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@rolldown/binding-linux-x64-gnu@npm:1.1.5": - version: 1.1.5 - resolution: "@rolldown/binding-linux-x64-gnu@npm:1.1.5" +"@rolldown/binding-linux-x64-gnu@npm:1.2.15": + version: 1.2.15 + resolution: "@rolldown/binding-linux-x64-gnu@npm:1.2.15" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@rolldown/binding-linux-x64-musl@npm:1.1.5": - version: 1.1.5 - resolution: "@rolldown/binding-linux-x64-musl@npm:1.1.5" +"@rolldown/binding-linux-x64-musl@npm:1.2.15": + version: 1.2.15 + resolution: "@rolldown/binding-linux-x64-musl@npm:1.2.15" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@rolldown/binding-openharmony-arm64@npm:1.1.5": - version: 1.1.5 - resolution: "@rolldown/binding-openharmony-arm64@npm:1.1.5" +"@rolldown/binding-openharmony-arm64@npm:1.2.15": + version: 1.2.15 + resolution: "@rolldown/binding-openharmony-arm64@npm:1.2.15" conditions: os=openharmony & cpu=arm64 languageName: node linkType: hard -"@rolldown/binding-wasm32-wasi@npm:1.1.5": - version: 1.1.5 - resolution: "@rolldown/binding-wasm32-wasi@npm:1.1.5" - dependencies: - "@emnapi/core": "npm:1.11.1" - "@emnapi/runtime": "npm:1.11.1" - "@napi-rs/wasm-runtime": "npm:^1.1.6" - conditions: cpu=wasm32 - languageName: node - linkType: hard - -"@rolldown/binding-win32-arm64-msvc@npm:1.1.5": - version: 1.1.5 - resolution: "@rolldown/binding-win32-arm64-msvc@npm:1.1.5" +"@rolldown/binding-win32-arm64-msvc@npm:1.2.15": + version: 1.2.15 + resolution: "@rolldown/binding-win32-arm64-msvc@npm:1.2.15" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rolldown/binding-win32-x64-msvc@npm:1.1.5": - version: 1.1.5 - resolution: "@rolldown/binding-win32-x64-msvc@npm:1.1.5" +"@rolldown/binding-win32-x64-msvc@npm:1.2.15": + version: 1.2.15 + resolution: "@rolldown/binding-win32-x64-msvc@npm:1.2.15" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -4676,99 +4653,99 @@ __metadata: languageName: node linkType: hard -"lightningcss-android-arm64@npm:1.32.0": - version: 1.32.0 - resolution: "lightningcss-android-arm64@npm:1.32.0" +"lightningcss-android-arm64@npm:1.33.0": + version: 1.33.0 + resolution: "lightningcss-android-arm64@npm:1.33.0" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"lightningcss-darwin-arm64@npm:1.32.0": - version: 1.32.0 - resolution: "lightningcss-darwin-arm64@npm:1.32.0" +"lightningcss-darwin-arm64@npm:1.33.0": + version: 1.33.0 + resolution: "lightningcss-darwin-arm64@npm:1.33.0" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"lightningcss-darwin-x64@npm:1.32.0": - version: 1.32.0 - resolution: "lightningcss-darwin-x64@npm:1.32.0" +"lightningcss-darwin-x64@npm:1.33.0": + version: 1.33.0 + resolution: "lightningcss-darwin-x64@npm:1.33.0" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"lightningcss-freebsd-x64@npm:1.32.0": - version: 1.32.0 - resolution: "lightningcss-freebsd-x64@npm:1.32.0" +"lightningcss-freebsd-x64@npm:1.33.0": + version: 1.33.0 + resolution: "lightningcss-freebsd-x64@npm:1.33.0" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"lightningcss-linux-arm-gnueabihf@npm:1.32.0": - version: 1.32.0 - resolution: "lightningcss-linux-arm-gnueabihf@npm:1.32.0" +"lightningcss-linux-arm-gnueabihf@npm:1.33.0": + version: 1.33.0 + resolution: "lightningcss-linux-arm-gnueabihf@npm:1.33.0" conditions: os=linux & cpu=arm languageName: node linkType: hard -"lightningcss-linux-arm64-gnu@npm:1.32.0": - version: 1.32.0 - resolution: "lightningcss-linux-arm64-gnu@npm:1.32.0" +"lightningcss-linux-arm64-gnu@npm:1.33.0": + version: 1.33.0 + resolution: "lightningcss-linux-arm64-gnu@npm:1.33.0" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"lightningcss-linux-arm64-musl@npm:1.32.0": - version: 1.32.0 - resolution: "lightningcss-linux-arm64-musl@npm:1.32.0" +"lightningcss-linux-arm64-musl@npm:1.33.0": + version: 1.33.0 + resolution: "lightningcss-linux-arm64-musl@npm:1.33.0" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"lightningcss-linux-x64-gnu@npm:1.32.0": - version: 1.32.0 - resolution: "lightningcss-linux-x64-gnu@npm:1.32.0" +"lightningcss-linux-x64-gnu@npm:1.33.0": + version: 1.33.0 + resolution: "lightningcss-linux-x64-gnu@npm:1.33.0" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"lightningcss-linux-x64-musl@npm:1.32.0": - version: 1.32.0 - resolution: "lightningcss-linux-x64-musl@npm:1.32.0" +"lightningcss-linux-x64-musl@npm:1.33.0": + version: 1.33.0 + resolution: "lightningcss-linux-x64-musl@npm:1.33.0" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"lightningcss-win32-arm64-msvc@npm:1.32.0": - version: 1.32.0 - resolution: "lightningcss-win32-arm64-msvc@npm:1.32.0" +"lightningcss-win32-arm64-msvc@npm:1.33.0": + version: 1.33.0 + resolution: "lightningcss-win32-arm64-msvc@npm:1.33.0" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"lightningcss-win32-x64-msvc@npm:1.32.0": - version: 1.32.0 - resolution: "lightningcss-win32-x64-msvc@npm:1.32.0" +"lightningcss-win32-x64-msvc@npm:1.33.0": + version: 1.33.0 + resolution: "lightningcss-win32-x64-msvc@npm:1.33.0" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"lightningcss@npm:^1.32.0": - version: 1.32.0 - resolution: "lightningcss@npm:1.32.0" +"lightningcss@npm:^1.33.0": + version: 1.33.0 + resolution: "lightningcss@npm:1.33.0" dependencies: detect-libc: "npm:^2.0.3" - lightningcss-android-arm64: "npm:1.32.0" - lightningcss-darwin-arm64: "npm:1.32.0" - lightningcss-darwin-x64: "npm:1.32.0" - lightningcss-freebsd-x64: "npm:1.32.0" - lightningcss-linux-arm-gnueabihf: "npm:1.32.0" - lightningcss-linux-arm64-gnu: "npm:1.32.0" - lightningcss-linux-arm64-musl: "npm:1.32.0" - lightningcss-linux-x64-gnu: "npm:1.32.0" - lightningcss-linux-x64-musl: "npm:1.32.0" - lightningcss-win32-arm64-msvc: "npm:1.32.0" - lightningcss-win32-x64-msvc: "npm:1.32.0" + lightningcss-android-arm64: "npm:1.33.0" + lightningcss-darwin-arm64: "npm:1.33.0" + lightningcss-darwin-x64: "npm:1.33.0" + lightningcss-freebsd-x64: "npm:1.33.0" + lightningcss-linux-arm-gnueabihf: "npm:1.33.0" + lightningcss-linux-arm64-gnu: "npm:1.33.0" + lightningcss-linux-arm64-musl: "npm:1.33.0" + lightningcss-linux-x64-gnu: "npm:1.33.0" + lightningcss-linux-x64-musl: "npm:1.33.0" + lightningcss-win32-arm64-msvc: "npm:1.33.0" + lightningcss-win32-x64-msvc: "npm:1.33.0" dependenciesMeta: lightningcss-android-arm64: optional: true @@ -4792,7 +4769,7 @@ __metadata: optional: true lightningcss-win32-x64-msvc: optional: true - checksum: 10c0/70945bd55097af46fc9fab7f5ed09cd5869d85940a2acab7ee06d0117004a1d68155708a2d462531cea2fc3c67aefc9333a7068c80b0b78dd404c16838809e03 + checksum: 10c0/ce1f8279fbae636dbf37fa6e7385d5f98ed881d72af3362f24afbd4685e19c1fcdfecf17e5dd77f2ebee3d0c23ade276230d85842d07292229a2cffba8ff20a3 languageName: node linkType: hard @@ -5057,6 +5034,15 @@ __metadata: languageName: node linkType: hard +"nanoid@npm:^3.3.20": + version: 3.3.20 + resolution: "nanoid@npm:3.3.20" + bin: + nanoid: bin/nanoid.cjs + checksum: 10c0/856e8bf3bddb959d65997bd94908be030dbc5e6ed88fb3af2a638e51d1938f4d4f454c7c7231aba340775224f88b8cfd3ce1693c70471bfd05f5b6a2227c0c1e + languageName: node + linkType: hard + "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" @@ -5419,13 +5405,20 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^4.0.3, picomatch@npm:^4.0.4, picomatch@npm:^4.0.5": +"picomatch@npm:^4.0.3, picomatch@npm:^4.0.4": version: 4.0.5 resolution: "picomatch@npm:4.0.5" checksum: 10c0/947bc6b6e1ff1e6c5aaf95b107a0839d12802f4f7b867663f67d47accba939ca1cb582cf99dfc30438efa1c4648ac5990967e783e8929c36b03e8440704ef1bd languageName: node linkType: hard +"picomatch@npm:^4.0.7": + version: 4.0.7 + resolution: "picomatch@npm:4.0.7" + checksum: 10c0/beb6ae02c43ae44e84883b90830196d9046b1726ead292adcf7f57945e0bb0d992d68563d87e03b484b6f3c9a5c6defda7523477f047d7f0e663f126cc01787f + languageName: node + linkType: hard + "pify@npm:^2.3.0": version: 2.3.0 resolution: "pify@npm:2.3.0" @@ -5875,6 +5868,17 @@ __metadata: languageName: node linkType: hard +"postcss@npm:^8.5.30": + version: 8.5.31 + resolution: "postcss@npm:8.5.31" + dependencies: + nanoid: "npm:^3.3.20" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.2" + checksum: 10c0/52f94c6655f86f568a803ce9c8eb3c749e109cc711d26644c4cde953b30c1b947a2f25af3b9453de68584ac655572f46ed8e830b8ab2f21dd226b3f640992e00 + languageName: node + linkType: hard + "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -6209,28 +6213,30 @@ __metadata: languageName: node linkType: hard -"rolldown@npm:~1.1.4": - version: 1.1.5 - resolution: "rolldown@npm:1.1.5" - dependencies: - "@oxc-project/types": "npm:=0.139.0" - "@rolldown/binding-android-arm64": "npm:1.1.5" - "@rolldown/binding-darwin-arm64": "npm:1.1.5" - "@rolldown/binding-darwin-x64": "npm:1.1.5" - "@rolldown/binding-freebsd-x64": "npm:1.1.5" - "@rolldown/binding-linux-arm-gnueabihf": "npm:1.1.5" - "@rolldown/binding-linux-arm64-gnu": "npm:1.1.5" - "@rolldown/binding-linux-arm64-musl": "npm:1.1.5" - "@rolldown/binding-linux-ppc64-gnu": "npm:1.1.5" - "@rolldown/binding-linux-s390x-gnu": "npm:1.1.5" - "@rolldown/binding-linux-x64-gnu": "npm:1.1.5" - "@rolldown/binding-linux-x64-musl": "npm:1.1.5" - "@rolldown/binding-openharmony-arm64": "npm:1.1.5" - "@rolldown/binding-wasm32-wasi": "npm:1.1.5" - "@rolldown/binding-win32-arm64-msvc": "npm:1.1.5" - "@rolldown/binding-win32-x64-msvc": "npm:1.1.5" +"rolldown@npm:~1.2.14": + version: 1.2.15 + resolution: "rolldown@npm:1.2.15" + dependencies: + "@oxc-project/types": "npm:=0.155.0" + "@rolldown/binding-android-arm-eabi": "npm:1.2.15" + "@rolldown/binding-android-arm64": "npm:1.2.15" + "@rolldown/binding-darwin-arm64": "npm:1.2.15" + "@rolldown/binding-darwin-x64": "npm:1.2.15" + "@rolldown/binding-freebsd-x64": "npm:1.2.15" + "@rolldown/binding-linux-arm-gnueabihf": "npm:1.2.15" + "@rolldown/binding-linux-arm64-gnu": "npm:1.2.15" + "@rolldown/binding-linux-arm64-musl": "npm:1.2.15" + "@rolldown/binding-linux-ppc64-gnu": "npm:1.2.15" + "@rolldown/binding-linux-s390x-gnu": "npm:1.2.15" + "@rolldown/binding-linux-x64-gnu": "npm:1.2.15" + "@rolldown/binding-linux-x64-musl": "npm:1.2.15" + "@rolldown/binding-openharmony-arm64": "npm:1.2.15" + "@rolldown/binding-win32-arm64-msvc": "npm:1.2.15" + "@rolldown/binding-win32-x64-msvc": "npm:1.2.15" "@rolldown/pluginutils": "npm:^1.0.0" dependenciesMeta: + "@rolldown/binding-android-arm-eabi": + optional: true "@rolldown/binding-android-arm64": optional: true "@rolldown/binding-darwin-arm64": @@ -6255,15 +6261,13 @@ __metadata: optional: true "@rolldown/binding-openharmony-arm64": optional: true - "@rolldown/binding-wasm32-wasi": - optional: true "@rolldown/binding-win32-arm64-msvc": optional: true "@rolldown/binding-win32-x64-msvc": optional: true bin: rolldown: ./bin/cli.mjs - checksum: 10c0/93072aa9d95882f9fa5cd57fe7db6a48efd6f85a25a32137425052ecca02df653651eed0c33a865c33511681bd6a40691d5c88900b8e95ce1334f4f75ba826ff + checksum: 10c0/084cbdcc222e534c9aff90e77488cdeb6a685a20a34e6e3ba77c3b8646723cea2f090f05522f452ed51217cce68b7aa67df8661b49b4ac0227a5edfcb0383b68 languageName: node linkType: hard @@ -6395,7 +6399,7 @@ __metadata: languageName: node linkType: hard -"source-map-js@npm:^1.0.1, source-map-js@npm:^1.2.1": +"source-map-js@npm:^1.0.1, source-map-js@npm:^1.2.1, source-map-js@npm:^1.2.2": version: 1.2.2 resolution: "source-map-js@npm:1.2.2" checksum: 10c0/d5d6dec62266834f83dd4f8a2606a196fb1a006ca5d53b0ef80ee513b7eba2f4e2ae241f4bc129ae7e9b80dea24f6e3d92b446b7e6e96be7653cab8888168a94 @@ -6993,18 +6997,18 @@ __metadata: linkType: hard "vite@npm:^8.1.4": - version: 8.1.4 - resolution: "vite@npm:8.1.4" + version: 8.3.5 + resolution: "vite@npm:8.3.5" dependencies: fsevents: "npm:~2.3.3" - lightningcss: "npm:^1.32.0" - picomatch: "npm:^4.0.5" - postcss: "npm:^8.5.16" - rolldown: "npm:~1.1.4" + lightningcss: "npm:^1.33.0" + picomatch: "npm:^4.0.7" + postcss: "npm:^8.5.30" + rolldown: "npm:~1.2.14" tinyglobby: "npm:^0.2.17" peerDependencies: "@types/node": ^20.19.0 || >=22.12.0 - "@vitejs/devtools": ^0.3.0 + "@vitejs/devtools": ^0.7.1 || ^0.8.0 esbuild: ^0.27.0 || ^0.28.0 jiti: ">=1.21.0" less: ^4.0.0 @@ -7045,7 +7049,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10c0/4262cdd0dd00ca99b00a8aef91fc00e58b66e80b54adbef49353bfbbae7342c2d6ddf1180351956086ff53ad186bec03784f57b96e36ab4dad1246547236d79b + checksum: 10c0/33991600925b6717429c14a2c2907554aed077489ee6ff7815f9f49d5de559f5173ccb0472f2b3f9eef2a49e2e014f6cb624db8d4adebb37baad3a8cbc15065a languageName: node linkType: hard From 42a11f58bacea307e18e9a71a29355e96197476f Mon Sep 17 00:00:00 2001 From: Jeremy Walton Date: Thu, 22 Oct 2026 16:19:10 -0400 Subject: [PATCH 4/4] Bump the version to 2.6.1 Co-Authored-By: Claude Opus 5.5 --- .storybook/assets/example-layout.html | 2 +- .storybook/assets/login-layout.html | 2 +- .storybook/assets/spinner-layout.html | 2 +- CHANGELOG.md | 17 +++++++++++++++++ package.json | 2 +- 5 files changed, 21 insertions(+), 4 deletions(-) diff --git a/.storybook/assets/example-layout.html b/.storybook/assets/example-layout.html index 5918d89c..0036ac3d 100644 --- a/.storybook/assets/example-layout.html +++ b/.storybook/assets/example-layout.html @@ -5,7 +5,7 @@ - + Optics Example Layout diff --git a/.storybook/assets/login-layout.html b/.storybook/assets/login-layout.html index d2dc63a2..b1934a77 100644 --- a/.storybook/assets/login-layout.html +++ b/.storybook/assets/login-layout.html @@ -5,7 +5,7 @@ - + Optics Login Layout