remarque-tokens 0.9.0 → 0.10.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/CHANGELOG.md CHANGED
@@ -4,6 +4,27 @@ All notable changes to `remarque-tokens` are documented here. Token value
4
4
  changes always state the design rationale — downstream sites pin against
5
5
  these entries when syncing.
6
6
 
7
+ ## 0.10.0 — 2026-07-23
8
+
9
+ Color-provider Phase 2 groundwork: the upstream dataset now pairs its own
10
+ themes, so the bridge no longer needs to be told what goes with what.
11
+
12
+ ### Changed
13
+ - **`remarque-theme`: `--dark` is now optional.** Dataset 0.2.0 of
14
+ `@williamzujkowski/oklch-terminal-themes` ships a `counterpart` field
15
+ (canonical light↔dark pairing, curated for ambiguous families —
16
+ upstream #128); when the light theme declares one, the bridge uses it.
17
+ A counterpart slug is validated exactly like a user-supplied `--dark`
18
+ (index membership before any path resolution). Lights without a
19
+ counterpart still require `--dark`; nothing is guessed from names.
20
+ - **Corpus test now enumerates pairs from the `counterpart` field**
21
+ instead of the name-stem heuristic it shipped with — the dataset is
22
+ authoritative; the heuristic is gone.
23
+ - Dev-pinned dataset bumped `0.1.0` → `0.2.0` (485 → 547 themes; the
24
+ corpus now includes deriving Remarque's palette from its own upstreamed
25
+ `remarque-light`/`remarque-dark` terminal themes, upstream #127).
26
+ `peerDependencies` widened to `>=0.1.0 <0.3.0`.
27
+
7
28
  ## 0.9.0 — 2026-07-22
8
29
 
9
30
  Color-provider bridge release (consensus-ratified 7-0, higher_order panel;
package/REMARQUE.md CHANGED
@@ -77,14 +77,14 @@ The palette tier (all `--color-*` tokens) can be *supplied* rather than hand-aut
77
77
  [`@williamzujkowski/oklch-terminal-themes`](https://www.npmjs.com/package/@williamzujkowski/oklch-terminal-themes) is the reference provider: a dataset of terminal color schemes converted to OKLCH. Run it through the bundled bridge:
78
78
 
79
79
  ```
80
- npx remarque-theme <light-slug> --dark <dark-slug> [-o palette-override.css]
80
+ npx remarque-theme <light-slug> [--dark <dark-slug>] [-o palette-override.css]
81
81
  ```
82
82
 
83
83
  Terminal themes carry only `background/foreground/cursor/selection` + 16 ANSI slots — a few of Remarque's 15 semantic slots map directly, and most themes fail the AAA `fg-muted` 7:1 line as authored. So `remarque-theme` *derives* rather than maps: **hue and chroma carry the theme's personality; lightness is solved per slot** (binary search against the same contrast targets as the Enforcement Checklist below, with in-gamut chroma clamping) so the output passes `remarque-audit` by construction. The accent hue comes from the theme's cursor color if it's chromatic, otherwise the most saturated classic ANSI color, and is kept consistent between the light and dark half of a pair.
84
84
 
85
85
  The audit remains the gate regardless of provenance — `remarque-theme` self-verifies its own output against the same checks before it will emit anything, but a site that hand-edits a generated palette (or points at a provider with pathological input colors) still runs through `remarque-audit` in CI like any other palette.
86
86
 
87
- **Pairing contract:** the dataset does not yet carry light/dark pairing metadata (tracked upstream: [`oklch-terminal-themes#128`](https://github.com/williamzujkowski/oklch-terminal-themes/issues/128)), so `--dark <slug>` is explicitly required there is no implicit or guessed dark counterpart. `remarque-theme` also rejects a light slug that isn't tagged `isDark: false` and a dark slug that isn't tagged `isDark: true`.
87
+ **Pairing contract:** dataset 0.2.0+ carries a `counterpart` field linking each paired theme to its canonical opposite-polarity variant ([`oklch-terminal-themes#128`](https://github.com/williamzujkowski/oklch-terminal-themes/issues/128)), and `--dark` defaults to it`npx remarque-theme rose-pine-dawn` alone derives the rosé-pine pair. For a light theme without a counterpart (or an older dataset), `--dark <slug>` remains required; nothing is ever guessed from names. `remarque-theme` also rejects a light slug that isn't tagged `isDark: false` and a dark slug that isn't tagged `isDark: true`.
88
88
 
89
89
  ---
90
90
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "remarque-tokens",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "engines": {
5
5
  "node": ">=18"
6
6
  },
@@ -31,10 +31,10 @@
31
31
  "drift": "node scripts/drift-check.mjs"
32
32
  },
33
33
  "devDependencies": {
34
- "@williamzujkowski/oklch-terminal-themes": "0.1.0"
34
+ "@williamzujkowski/oklch-terminal-themes": "0.2.0"
35
35
  },
36
36
  "peerDependencies": {
37
- "@williamzujkowski/oklch-terminal-themes": "^0.1.0"
37
+ "@williamzujkowski/oklch-terminal-themes": ">=0.1.0 <0.3.0"
38
38
  },
39
39
  "peerDependenciesMeta": {
40
40
  "@williamzujkowski/oklch-terminal-themes": {
package/scripts/theme.mjs CHANGED
@@ -41,12 +41,12 @@ try {
41
41
  OWN_VERSION = JSON.parse(readFileSync(join(HERE, '..', 'package.json'), 'utf8')).version;
42
42
  } catch { /* provenance is best-effort */ }
43
43
 
44
- const USAGE = `usage: remarque-theme <light-slug> --dark <dark-slug> [-o out.css]
44
+ const USAGE = `usage: remarque-theme <light-slug> [--dark <dark-slug>] [-o out.css]
45
45
 
46
46
  <light-slug> slug of a theme with isDark=false in ${PKG_SPEC}
47
- --dark <slug> slug of a theme with isDark=true (required the
48
- dataset has no light/dark pairing metadata yet, see
49
- oklch-terminal-themes#128)
47
+ --dark <slug> slug of a theme with isDark=true; defaults to the light
48
+ theme's "counterpart" from the dataset (0.2.0+) when it
49
+ has one, and is required when it doesn't
50
50
  -o, --output write the derived palette here instead of stdout`;
51
51
 
52
52
  function die(msg) {
@@ -67,7 +67,7 @@ for (let i = 0; i < argv.length; i++) {
67
67
  else positional.push(a);
68
68
  }
69
69
  const lightSlug = positional[0];
70
- if (!lightSlug || !darkSlug) die(USAGE);
70
+ if (!lightSlug) die(USAGE);
71
71
 
72
72
  /* ── Resolve @williamzujkowski/oklch-terminal-themes ─────────────────
73
73
  * Tried from the consumer's cwd first (a project that installs the
@@ -123,6 +123,18 @@ function requireSlug(slug, label) {
123
123
  }
124
124
 
125
125
  const lightMeta = requireSlug(lightSlug, 'light');
126
+ /* --dark defaults to the dataset's counterpart field (0.2.0+). The value
127
+ * still goes through requireSlug like a user-supplied one — a dataset
128
+ * entry is not trusted further than the CLI arg it replaces. */
129
+ if (!darkSlug) {
130
+ darkSlug = lightMeta.counterpart;
131
+ if (!darkSlug) {
132
+ die(
133
+ `"${lightSlug}" has no counterpart in the installed ${PKG_SPEC} dataset — ` +
134
+ `pass --dark <slug> explicitly (or upgrade the dataset; pairing metadata landed in 0.2.0)`
135
+ );
136
+ }
137
+ }
126
138
  const darkMeta = requireSlug(darkSlug, 'dark');
127
139
  if (lightMeta.isDark !== false) die(`light slug "${lightSlug}" has isDark=${lightMeta.isDark}, expected false`);
128
140
  if (darkMeta.isDark !== true) die(`dark slug "${darkSlug}" has isDark=${darkMeta.isDark}, expected true`);
package/tokens.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "$description": "Remarque design tokens — GENERATED from tokens-core.css + tokens-palette.css by scripts/tokens-json.mjs. Do not edit; the CSS is the source of truth.",
3
3
  "$extensions": {
4
4
  "remarque": {
5
- "version": "0.9.0",
5
+ "version": "0.10.0",
6
6
  "tiers": {
7
7
  "core": "immutable identity — overriding forks the system",
8
8
  "palette": "sanctioned personalization surface — override freely, then run remarque-audit"