@weasel-js/theme 1.5.2 → 1.6.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/engine/color/oklch.ts","../src/engine/color/generate.ts","../src/engine/steps.ts","../src/engine/merge.ts","../src/engine/deps.ts","../src/engine/ramps.ts","../src/engine/scales.ts","../src/engine/semantics.ts","../src/engine/derive.ts","../src/engine/bake.ts","../src/engine/emit/css.ts","../src/engine/emit/dtcg.ts","../src/hooks.ts","../src/engine/emit/manifest.ts","../src/engine/emit/themes.ts","../src/engine/emit/tokens.ts"],"names":["TOKEN_REF","SEED_REF","HEX","isRecord","tokens","REF","refTarget","axes","chainOf"],"mappings":"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","file":"engine.js","sourcesContent":["import { hexToOklchDeg, oklchDegToHex, srgbU8ToOklab, type OklchDeg } from '@weasel-js/paint';\n\n/** A color in OKLCH: lightness 0–1, chroma, hue in degrees. paint's own type,\n * under the name this engine has always called it. */\nexport type Lch = OklchDeg;\n\nexport function hexToRgb(hex: string): [number, number, number] {\n const n = Number.parseInt(hex.slice(1), 16);\n return [(n >> 16) & 255, (n >> 8) & 255, n & 255];\n}\n\nexport const toHex = oklchDegToHex;\nexport const toLch: (hex: string) => Lch = hexToOklchDeg;\n\n/** The most chroma this hue can carry at this lightness, inside sRGB. */\nexport function chromaCap(L: number, H: number): number {\n return toLch(toHex(L, 0.5, H)).C;\n}\n\n/** WCAG relative luminance. */\nexport function luminance(hex: string): number {\n const [r, g, b] = hexToRgb(hex).map((v) => v / 255);\n const f = (u: number) => (u <= 0.04045 ? u / 12.92 : ((u + 0.055) / 1.055) ** 2.4);\n return 0.2126 * f(r) + 0.7152 * f(g) + 0.0722 * f(b);\n}\n\nexport function contrast(a: string, b: string): number {\n const [hi, lo] = [luminance(a), luminance(b)].sort((p, q) => q - p);\n return (hi + 0.05) / (lo + 0.05);\n}\n\n/** Shortest angular distance between two hues, in degrees. */\nexport function hueGap(a: number, b: number): number {\n const d = Math.abs(a - b) % 360;\n return Math.min(d, 360 - d);\n}\n\n/** OKLab coordinates, for distance work. */\nexport function toLab(hex: string): [number, number, number] {\n const [r, g, b] = hexToRgb(hex);\n return srgbU8ToOklab(r, g, b);\n}\n\n/**\n * How far apart two colors look, with chroma weighted up.\n *\n * Two things this is not. It is not WCAG contrast, which reads lightness only\n * and so scores a vivid yellow on white at 1.2:1 and calls it illegible when\n * what separates them is chroma. And it is not plain euclidean OKLab distance:\n * OKLab's chroma range is small beside its lightness range, so an unweighted\n * distance is almost all lightness, and it ranks a mid-gray as further from\n * white than a pale blue is. Measured against CIELAB dE on the same colors,\n * unweighted OKLab put `#c1c1c1` at 0.160 and `#abd9ff` at 0.126 while CIELAB\n * put them at 21.9 and 28.5 — opposite orders.\n *\n * `CHROMA_WEIGHT` restores CIELAB's ordering. It is a weight, not a unit\n * conversion, so these numbers do not transfer to or from CIELAB dE.\n *\n * Rough calibration in the weighted space: 0.17 is a pale wash against paper,\n * 0.25 is a real color, 0.5 is unmistakable.\n */\nexport const CHROMA_WEIGHT = 3;\n\nexport function deltaE(a: string, b: string): number {\n const [l1, a1, b1] = toLab(a);\n const [l2, a2, b2] = toLab(b);\n return Math.hypot(l1 - l2, CHROMA_WEIGHT * (a1 - a2), CHROMA_WEIGHT * (b1 - b2));\n}\n\n/** The most chroma this hue can carry at this lightness, as a hex. */\nexport function vividAt(L: number, H: number): string {\n return toHex(L, chromaCap(L, H), H);\n}\n","import {\n chromaCap,\n contrast,\n CHROMA_WEIGHT,\n deltaE,\n hueGap,\n toHex,\n toLab,\n toLch,\n type Lch,\n} from './oklch';\n\n/**\n * A hue pinned into the palette with its own lightness.\n *\n * Anchors exist because the lightness law excludes some colors entirely. Yellow\n * is the case that forces it: its chroma peaks at L 0.95 — higher than any other\n * hue — so a law that picks lightness for legibility silently yields gold, then\n * olive, and never reports that yellow was dropped.\n */\nexport interface Anchor {\n readonly name: string;\n readonly hue: number;\n readonly lightness: number;\n /**\n * Absolute chroma. Omitted means \"as much as the gamut allows here\", which is\n * what a bright color wants. A muted color has to say so: hue and lightness\n * alone can only describe vivid colors, so a tan asked for at max chroma\n * comes back as an amber.\n */\n readonly chroma?: number;\n}\n\n/** Every constraint the generator honors. A zero disables the ones that gate. */\nexport interface Constraints {\n readonly count: number;\n /**\n * Minimum hue separation, as a share of the even `360 / count` spacing an\n * ideal set would have. 0 disables the check.\n *\n * A share rather than degrees, because absolute degrees mean different things\n * at different cardinalities: 30 degrees is generous for 8 colors and\n * impossible for 16, so a floor in degrees silently becomes unsatisfiable as\n * the set grows.\n */\n readonly hueFloor: number;\n /** Minimum WCAG contrast every swatch must clear against `surface`. 0 disables. */\n readonly minContrast: number;\n /**\n * Minimum perceptual distance from `surface`. 0 disables.\n *\n * The gate WCAG contrast cannot express. Contrast reads only lightness, so it\n * scores a vivid yellow on white at 1.2:1 and calls it illegible, when what\n * separates them is chroma. Gate on this instead of on lightness and a yellow\n * can be a yellow; gate on contrast alone and the search quietly returns gold.\n */\n readonly minSurfaceDistance: number;\n /** Minimum perceptual distance between any two swatches. 0 disables. */\n readonly minDistance: number;\n readonly surface: string;\n /** Where `lightnessPull` drags each hue, away from its own chroma peak. */\n readonly lightnessTarget: number;\n /** 0 leaves every hue at its chroma peak; 1 puts them all at the target. */\n readonly lightnessPull: number;\n /** Fraction of the in-gamut chroma ceiling to take. */\n readonly chromaFraction: number;\n /** 0 leaves chroma alone; 1 pulls every hue to the set mean. */\n readonly equalize: number;\n readonly anchors: readonly Anchor[];\n readonly order: 'hue' | 'farthest';\n}\n\nexport interface Swatch {\n readonly name: string;\n readonly hex: string;\n readonly lch: Lch;\n readonly anchored: boolean;\n readonly contrast: number;\n}\n\nexport interface Stats {\n readonly meanChroma: number;\n readonly chromaSpread: number;\n readonly lightnessSpread: number;\n readonly minHueGap: number;\n /** The realized floor as a share of even spacing, comparable across sizes. */\n readonly hueFloorShare: number;\n readonly minContrast: number;\n readonly minSurfaceDistance: number;\n readonly minDistance: number;\n}\n\nexport interface Palette {\n readonly swatches: readonly Swatch[];\n readonly stats: Stats;\n /** False when no hue arrangement satisfied the gates; `swatches` is then the\n * best unconstrained attempt, so the lab still has something to draw. */\n readonly feasible: boolean;\n}\n\n/** Lightness at which a hue reaches its highest chroma. */\nfunction peakLightness(H: number): number {\n let bestL = 0.5;\n let bestC = -1;\n for (let L = 0.32; L <= 0.96; L += 0.01) {\n const c = chromaCap(L, H);\n if (c > bestC) {\n bestC = c;\n bestL = L;\n }\n }\n return bestL;\n}\n\nconst PEAK: number[] = [];\nfor (let H = 0; H < 360; H += 1) PEAK.push(peakLightness(H));\nconst peakAt = (H: number) => PEAK[((Math.round(H) % 360) + 360) % 360];\n\n/** The default law: sit near this hue's chroma peak, pulled toward the target. */\nfunction place(H: number, c: Constraints): string {\n const L = peakAt(H) + (c.lightnessTarget - peakAt(H)) * c.lightnessPull;\n return toHex(L, chromaCap(L, H) * c.chromaFraction, H);\n}\n\nconst HUE_NAMES: readonly (readonly [number, string])[] = [\n [15, 'rose'], [45, 'red'], [62, 'orange'], [85, 'amber'], [100, 'gold'],\n [122, 'yellow'], [138, 'lime'], [165, 'green'], [195, 'teal'], [218, 'cyan'],\n [245, 'sky'], [275, 'blue'], [310, 'violet'], [345, 'fuchsia'],\n];\nexport function hueName(H: number): string {\n for (const [ceil, name] of HUE_NAMES) if (H < ceil) return name;\n return 'rose';\n}\n\n/** Disambiguate repeats: two hues can land in one name's band. */\nfunction uniqueNames(hues: number[]): string[] {\n const seen = new Map<string, number>();\n return hues.map((h) => {\n const base = hueName(h);\n const n = (seen.get(base) ?? 0) + 1;\n seen.set(base, n);\n return n === 1 ? base : `${base}-${n}`;\n });\n}\n\n/**\n * Pull each chroma toward the set mean.\n *\n * Raising a chroma is not always possible in place — the weak hues sit on the\n * gamut ceiling already — so this walks lightness to where the target chroma\n * exists, choosing the nearest such lightness. Anchors keep theirs and are\n * only ever desaturated. That asymmetry is why equalizing moves the lightness\n * spread as well.\n */\nfunction equalizeChroma(hexes: string[], k: number, anchored: boolean[]): string[] {\n if (k <= 0) return hexes;\n const lch = hexes.map(toLch);\n const target = lch.reduce((sum, x) => sum + x.C, 0) / lch.length;\n\n return lch.map((x, i) => {\n const wanted = x.C + (target - x.C) * k;\n if (anchored[i]) return toHex(x.L, Math.min(wanted, chromaCap(x.L, x.H)), x.H);\n if (chromaCap(x.L, x.H) >= wanted) return toHex(x.L, wanted, x.H);\n\n let bestL = x.L;\n let bestDistance = Infinity;\n for (let L = 0.30; L <= 0.96; L += 0.005) {\n if (chromaCap(L, x.H) >= wanted) {\n const d = Math.abs(L - x.L);\n if (d < bestDistance) {\n bestDistance = d;\n bestL = L;\n }\n }\n }\n if (bestDistance === Infinity) {\n const pk = peakAt(x.H);\n return toHex(pk, chromaCap(pk, x.H), x.H);\n }\n return toHex(bestL, wanted, x.H);\n });\n}\n\n/**\n * Reorder so every prefix stays as separated as a set that size can be.\n * A consumer taking the first three of ten should get three colors 87° apart,\n * not three neighbors.\n */\nfunction farthestFirst(hues: number[]): number[] {\n const order = [0];\n while (order.length < hues.length) {\n let best = -1;\n let bestGap = -1;\n for (let i = 0; i < hues.length; i += 1) {\n if (order.includes(i)) continue;\n const gap = Math.min(...order.map((j) => hueGap(hues[i], hues[j])));\n if (gap > bestGap) {\n bestGap = gap;\n best = i;\n }\n }\n order.push(best);\n }\n return order;\n}\n\n/**\n * Search hue positions that maximize mean chroma subject to the gates.\n *\n * Seeds matter: a uniform 360/n ring can never open a `2 * minHueGap` hole\n * around a pinned hue, so with anchors the seeds spread across the arc the\n * anchors leave free instead.\n */\n/** The share-of-even floor, in degrees, for a set of this size. */\nexport function floorDegrees(c: Pick<Constraints, 'hueFloor' | 'count'>): number {\n return c.hueFloor <= 0 ? 0 : (c.hueFloor * 360) / Math.max(1, c.count);\n}\n\nfunction searchHues(c: Constraints): number[] | null {\n const minGapDeg = floorDegrees(c);\n const anchorHues = c.anchors.map((a) => a.hue);\n const anchorHexes = c.anchors.map(toHexPreview);\n const freeCount = c.count - c.anchors.length;\n if (freeCount < 0) return null;\n if (freeCount === 0) return [];\n\n // Hue is an integer 0-359 and the constraints are fixed for one call, so the\n // placed color, its realized hue and its contrast are each computed once.\n interface Placed {\n hex: string;\n hue: number;\n contrast: number;\n chroma: number;\n surfaceDistance: number;\n /** OKLab coordinates, chroma pre-weighted, so a pairwise distance in the\n * search is three subtractions rather than two color conversions. */\n lab: readonly [number, number, number];\n }\n const weighted = (hex: string): readonly [number, number, number] => {\n const [L, a, b] = toLab(hex);\n return [L, CHROMA_WEIGHT * a, CHROMA_WEIGHT * b];\n };\n const between = (p: readonly [number, number, number], q: readonly [number, number, number]) =>\n Math.hypot(p[0] - q[0], p[1] - q[1], p[2] - q[2]);\n const placed = new Map<number, Placed>();\n const at = (H: number) => {\n const key = ((Math.round(H) % 360) + 360) % 360;\n let v = placed.get(key);\n if (!v) {\n const hex = place(key, c);\n const lch = toLch(hex);\n v = {\n hex,\n hue: lch.H,\n contrast: contrast(hex, c.surface),\n chroma: lch.C,\n surfaceDistance: deltaE(hex, c.surface),\n lab: weighted(hex),\n };\n placed.set(key, v);\n }\n return v;\n };\n const anchorMeta = anchorHexes.map((hex) => {\n const lch = toLch(hex);\n return {\n hex,\n hue: lch.H,\n contrast: contrast(hex, c.surface),\n chroma: lch.C,\n surfaceDistance: deltaE(hex, c.surface),\n lab: weighted(hex),\n };\n });\n const metaFor = (free: number[]) => [...anchorMeta, ...free.map(at)];\n\n /**\n * How far a set is from legal, in one number: degrees of hue crowding plus\n * contrast shortfall. Zero means feasible. The search descends this first and\n * only then maximizes chroma, because a seed ring is often illegal and the\n * legal region may not be reachable by chroma-improving moves alone.\n */\n const penalty = (free: number[]): number => {\n const m = metaFor(free);\n let p = 0;\n if (minGapDeg > 0) {\n for (let i = 0; i < m.length; i += 1) {\n for (let j = i + 1; j < m.length; j += 1) {\n const short = minGapDeg - hueGap(m[i].hue, m[j].hue);\n if (short > 0) p += short;\n }\n }\n }\n if (c.minContrast > 0) {\n for (const x of m) {\n const short = c.minContrast - x.contrast;\n if (short > 0) p += short * 40;\n }\n }\n // Distances are small numbers in OKLab (0.10 already reads as two colors),\n // so they are weighted up to sit on the same scale as degrees of crowding.\n if (c.minSurfaceDistance > 0) {\n for (const x of m) {\n const short = c.minSurfaceDistance - x.surfaceDistance;\n if (short > 0) p += short * 400;\n }\n }\n if (c.minDistance > 0) {\n for (let i = 0; i < m.length; i += 1) {\n for (let j = i + 1; j < m.length; j += 1) {\n const short = c.minDistance - between(m[i].lab, m[j].lab);\n if (short > 0) p += short * 400;\n }\n }\n }\n return p;\n };\n const score = (free: number[]) => {\n const m = metaFor(free);\n return m.reduce((sum, x) => sum + x.chroma, 0) / m.length;\n };\n\n const seeds: number[][] = [];\n const seedStep = Math.max(6, Math.round(freeCount * 1.6));\n for (let start = 0; start < 360; start += seedStep) {\n seeds.push(Array.from({ length: freeCount }, (_, i) => Math.round((start + (i * 360) / freeCount) % 360)));\n }\n if (anchorHues.length > 0) {\n // A uniform ring can never open a 2 * minHueGap hole around a pinned hue,\n // so also seed across the arc the anchors leave free.\n const base = anchorHues[0];\n const span = 360 - 2 * Math.max(minGapDeg, 1);\n for (let jitter = -8; jitter <= 8; jitter += 2) {\n for (const divisor of [Math.max(1, freeCount - 1), freeCount]) {\n seeds.push(\n Array.from({ length: freeCount }, (_, i) =>\n Math.round((((base + minGapDeg + jitter + (i * span) / divisor) % 360) + 360) % 360),\n ),\n );\n }\n }\n }\n\n const STEPS = [-16, -8, -4, -2, -1, 1, 2, 4, 8, 16];\n\n /**\n * Everything one position contributes to the penalty: its own shortfalls plus\n * the pairs it takes part in.\n *\n * `descend` moves exactly one hue at a time, so recomputing the whole set for\n * each candidate costs O(n^2) to learn about O(n) changed terms. Scoring the\n * moved position alone is what keeps the count slider live at 16 colors.\n */\n const penaltyAt = (m: readonly Placed[], i: number): number => {\n let p = 0;\n const x = m[i];\n if (c.minContrast > 0) {\n const short = c.minContrast - x.contrast;\n if (short > 0) p += short * 40;\n }\n if (c.minSurfaceDistance > 0) {\n const short = c.minSurfaceDistance - x.surfaceDistance;\n if (short > 0) p += short * 400;\n }\n for (let j = 0; j < m.length; j += 1) {\n if (j === i) continue;\n if (minGapDeg > 0) {\n const short = minGapDeg - hueGap(x.hue, m[j].hue);\n if (short > 0) p += short;\n }\n if (c.minDistance > 0) {\n const short = c.minDistance - between(x.lab, m[j].lab);\n if (short > 0) p += short * 400;\n }\n }\n return p;\n };\n\n const descend = (hues: number[], useChroma: boolean, keepLegal: boolean) => {\n const current = [...hues];\n let meta = metaFor(current);\n const offset = anchorMeta.length;\n for (let iteration = 0; iteration < 120; iteration += 1) {\n let improved = false;\n for (let i = 0; i < freeCount; i += 1) {\n const slot = offset + i;\n const beforeP = penaltyAt(meta, slot);\n const beforeC = meta[slot].chroma;\n for (const delta of STEPS) {\n const next = (((current[i] + delta) % 360) + 360) % 360;\n if (next === current[i]) continue;\n const candidate = at(next);\n const trialMeta = meta.slice();\n trialMeta[slot] = candidate;\n const afterP = penaltyAt(trialMeta, slot);\n const better = useChroma\n ? (keepLegal ? afterP <= beforeP : true) && candidate.chroma > beforeC\n : afterP < beforeP;\n if (!better) continue;\n if (keepLegal && afterP > beforeP) continue;\n current[i] = next;\n meta = trialMeta;\n improved = true;\n break;\n }\n }\n if (!improved) break;\n }\n return current;\n };\n\n let best: number[] | null = null;\n let bestScore = -1;\n for (const seed of seeds) {\n const repaired = penalty(seed) > 0 ? descend(seed, false, false) : seed;\n if (penalty(repaired) > 0) continue;\n const tuned = descend(repaired, true, true);\n if (penalty(tuned) > 0) continue;\n const s = score(tuned);\n if (s > bestScore) {\n bestScore = s;\n best = tuned;\n }\n }\n return best;\n}\n\n/** Closest any two colors in the set look. */\nfunction pairwiseMin(hexes: string[]): number {\n if (hexes.length < 2) return 1;\n let min = Infinity;\n for (let i = 0; i < hexes.length; i += 1) {\n for (let j = i + 1; j < hexes.length; j += 1) min = Math.min(min, deltaE(hexes[i], hexes[j]));\n }\n return min;\n}\n\nfunction summarize(swatches: Swatch[], surface: string): Stats {\n const cs = swatches.map((s) => s.lch.C);\n const ls = swatches.map((s) => s.lch.L);\n let gap = 360;\n for (let i = 0; i < swatches.length; i += 1) {\n for (let j = i + 1; j < swatches.length; j += 1) {\n gap = Math.min(gap, hueGap(swatches[i].lch.H, swatches[j].lch.H));\n }\n }\n return {\n meanChroma: cs.reduce((a, b) => a + b, 0) / (cs.length || 1),\n chromaSpread: Math.max(...cs) - Math.min(...cs),\n lightnessSpread: Math.max(...ls) - Math.min(...ls),\n minHueGap: swatches.length > 1 ? gap : 360,\n hueFloorShare: swatches.length > 1 ? (gap * swatches.length) / 360 : 1,\n minContrast: Math.min(...swatches.map((s) => contrast(s.hex, surface))),\n minSurfaceDistance: Math.min(...swatches.map((s) => deltaE(s.hex, surface))),\n minDistance: pairwiseMin(swatches.map((s) => s.hex)),\n };\n}\n\nexport function generate(c: Constraints): Palette {\n const found = searchHues(c);\n const feasible = found !== null;\n // An infeasible gate still has to draw something, so fall back to an even ring.\n const free =\n found ??\n Array.from({ length: Math.max(0, c.count - c.anchors.length) }, (_, i) =>\n Math.round((i * 360) / Math.max(1, c.count - c.anchors.length)),\n );\n\n const hues = [...c.anchors.map((a) => a.hue), ...free];\n const anchoredFlags = [...c.anchors.map(() => true), ...free.map(() => false)];\n const raw = [\n ...c.anchors.map(toHexPreview),\n ...free.map((h) => place(h, c)),\n ];\n const hexes = equalizeChroma(raw, c.equalize, anchoredFlags);\n\n const order =\n c.order === 'farthest'\n ? farthestFirst(hues)\n : [...hues.keys()].sort((a, b) => hues[a] - hues[b]);\n\n const names = uniqueNames(order.map((i) => toLch(hexes[i]).H));\n const swatches: Swatch[] = order.map((i, position) => ({\n name: c.anchors[i]?.name ?? names[position],\n hex: hexes[i],\n lch: toLch(hexes[i]),\n anchored: anchoredFlags[i],\n contrast: contrast(hexes[i], c.surface),\n }));\n\n return { swatches, stats: summarize(swatches, c.surface), feasible };\n}\n\n/** What the lab opens with: the set this palette work landed on. */\nexport const DEFAULT_CONSTRAINTS: Constraints = {\n count: 10,\n hueFloor: 0.9,\n minContrast: 4,\n surface: '#181a1e',\n lightnessTarget: 0.72,\n lightnessPull: 0.4,\n chromaFraction: 0.95,\n equalize: 0,\n minSurfaceDistance: 0.25,\n minDistance: 0.22,\n anchors: [],\n order: 'farthest',\n};\n\n/**\n * An anchor taken from an existing color — a brand hex, or a color lifted from\n * somewhere else in the theme. Lightness comes along with the hue, which is the\n * point: the reason to pin a color is usually that the lightness law would not\n * have chosen its lightness.\n */\n/** The color an anchor will actually contribute, for a swatch beside its controls. */\nexport function toHexPreview(a: Pick<Anchor, 'hue' | 'lightness' | 'chroma'>): string {\n const cap = chromaCap(a.lightness, a.hue);\n return toHex(a.lightness, a.chroma === undefined ? cap : Math.min(a.chroma, cap), a.hue);\n}\n\nexport function anchorFromHex(hex: string, name?: string): Anchor {\n const { L, C, H } = toLch(hex);\n return {\n name: name ?? hueName(H),\n hue: Math.round(H),\n lightness: Number(L.toFixed(3)),\n chroma: Number(C.toFixed(4)),\n };\n}\n\n","import { isByAxis } from '../axes';\n\nconst stepList = (x: unknown): string[] => (Array.isArray(x) ? [...new Set(x.filter((s): s is string => typeof s === 'string'))] : []);\n\n/** The names in every branch of `v`, reading each leaf with `read`, in first-branch order. */\nfunction inEveryBranch(v: unknown, read: (leaf: unknown) => string[]): string[] {\n if (!isByAxis(v)) return read(v);\n const lists = Object.entries(v).filter(([k]) => k !== 'by').map(([, x]) => inEveryBranch(x, read));\n return lists.length === 0 ? [] : lists.reduce((kept, list) => kept.filter((s) => list.includes(s)));\n}\n\n/** Step names a ramp or scale entry declares at every selection: those in every `by` branch of the entry and of its `steps`. */\nexport function alwaysDeclaredSteps(entry: unknown): string[] {\n return inEveryBranch(entry, (e) => (typeof e === 'object' && e !== null ? inEveryBranch((e as { steps?: unknown }).steps, stepList) : []));\n}\n\n/** Every step name a ramp or scale entry declares, across every `by` branch of the entry and of its `steps`, first seen first. */\nexport function declaredSteps(entry: unknown): string[] {\n const out = new Set<string>();\n const branches = (v: unknown, visit: (x: unknown) => void): void => {\n if (!isByAxis(v)) {\n visit(v);\n return;\n }\n for (const [k, x] of Object.entries(v)) if (k !== 'by') branches(x, visit);\n };\n branches(entry, (e) => {\n if (typeof e !== 'object' || e === null) return;\n branches((e as { steps?: unknown }).steps, (steps) => {\n if (Array.isArray(steps)) for (const s of steps) if (typeof s === 'string') out.add(s);\n });\n });\n return [...out];\n}\n","import { mergeAxes } from '../axes';\nimport type { ThemeDefinition } from '../definition';\nimport { alwaysDeclaredSteps } from './steps';\n\nexport type Lookup = (name: string) => ThemeDefinition | undefined;\n\nconst LAYERS = ['seeds', 'ramps', 'scales', 'semantics', 'components', 'pins'] as const;\n\n/** Steps of the ramps and scales `def` declares itself at every selection, which it generates rather than inherits pinned. */\nfunction ownSteps(def: ThemeDefinition): Set<string> {\n const names = new Set<string>();\n for (const layer of [def.ramps, def.scales]) {\n for (const [name, entry] of Object.entries(layer ?? {})) for (const step of alwaysDeclaredSteps(entry)) names.add(`${name}-${step}`);\n }\n return names;\n}\n\n/** The definition with its whole `extends` chain folded in, child entries winning. */\nexport function mergeChain(def: ThemeDefinition, lookup?: Lookup, seen: ReadonlySet<string> = new Set()): ThemeDefinition {\n if (seen.has(def.name)) throw new Error(`extends cycle at theme \"${def.name}\"`);\n if (!def.extends) return def;\n const parentDef = lookup?.(def.extends);\n if (!parentDef) throw new Error(`Theme \"${def.name}\" extends \"${def.extends}\", which is not defined`);\n const parent = mergeChain(parentDef, lookup, new Set([...seen, def.name]));\n const out: Record<string, unknown> = { ...def };\n for (const layer of LAYERS) out[layer] = { ...(parent[layer] ?? {}), ...(def[layer] ?? {}) };\n const shadowed = ownSteps(def);\n const inherited = Object.entries(parent.pins ?? {}).filter(([name]) => !shadowed.has(name));\n out.pins = { ...Object.fromEntries(inherited), ...(def.pins ?? {}) };\n out.axes = mergeAxes(parent.axes ?? {}, def.axes ?? {});\n return out as unknown as ThemeDefinition;\n}\n","import { isByAxis } from '../axes';\nimport type { SemanticRule, ThemeDefinition } from '../definition';\nimport { mergeChain, type Lookup } from './merge';\nimport { declaredSteps } from './steps';\n\nexport interface AxisDependency {\n /** Axes this token's own entry varies on. */\n readonly own: readonly string[];\n /** `own` plus everything reachable through references and rule inputs. */\n readonly all: readonly string[];\n}\n\ninterface Node {\n readonly axes: Set<string>;\n readonly seeds: Set<string>;\n readonly edges: Set<string>;\n}\n\nconst SEED_REF = /^\\{seeds\\.([\\w-]+)\\}$/;\nconst TOKEN_REF = /^\\{([^}.]+)\\}$/;\n\nconst node = (): Node => ({ axes: new Set(), seeds: new Set(), edges: new Set() });\n\n/** Collect `by` axes, seed references and `{token}` references anywhere in a value. */\nfunction scan(v: unknown, into: Node): void {\n if (typeof v === 'string') {\n const s = v.trim();\n const seed = SEED_REF.exec(s);\n if (seed) into.seeds.add(seed[1]);\n else {\n const ref = TOKEN_REF.exec(s);\n if (ref) into.edges.add(ref[1]);\n }\n return;\n }\n if (Array.isArray(v)) {\n for (const x of v) scan(x, into);\n return;\n }\n if (typeof v === 'object' && v !== null) {\n if (isByAxis(v)) into.axes.add(v.by);\n for (const [k, x] of Object.entries(v)) if (k !== 'by') scan(x, into);\n }\n}\n\n/** The axes that decide which steps a ramp entry declares: `by`s wrapping the entry, and anything in its `steps`. */\nfunction scanSteps(entry: unknown, into: Node): void {\n if (isByAxis(entry)) {\n into.axes.add(entry.by);\n for (const [k, x] of Object.entries(entry)) if (k !== 'by') scanSteps(x, into);\n } else if (typeof entry === 'object' && entry !== null) {\n scan((entry as { steps?: unknown }).steps, into);\n }\n}\n\n/** Node key for a ramp's step list. `derive` rejects a token name containing a dot, so it never collides with one. */\nconst stepsKey = (ramp: string) => `ramps.${ramp}`;\n\n/** The non-`by` values under a possibly nested `by` object. */\nfunction leaves(v: unknown): unknown[] {\n return isByAxis(v) ? Object.entries(v).filter(([k]) => k !== 'by').flatMap(([, x]) => leaves(x)) : [v];\n}\n\nexport function axisDependencies(definition: ThemeDefinition, lookup?: Lookup): Record<string, AxisDependency> {\n const def = mergeChain(definition, lookup);\n const nodes = new Map<string, Node>();\n\n /** Step token → the ramps that declare it. */\n const stepRamps = new Map<string, Set<string>>();\n for (const [name, ramp] of Object.entries(def.ramps ?? {})) {\n const shape = node();\n scanSteps(ramp, shape);\n nodes.set(stepsKey(name), shape);\n const n = node();\n scan(ramp, n);\n for (const step of declaredSteps(ramp)) {\n nodes.set(`${name}-${step}`, n);\n stepRamps.set(`${name}-${step}`, (stepRamps.get(`${name}-${step}`) ?? new Set()).add(name));\n }\n }\n for (const [name, s] of Object.entries(def.scales ?? {})) {\n const n = node();\n scan(s, n);\n for (const step of declaredSteps(s)) nodes.set(`${name}-${step}`, n);\n }\n\n /** Every ramp a token could sit on: its own, or the ones its semantic rule leaves or pins lead to. */\n const rampsOf = (name: string, seen = new Set<string>()): Set<string> => {\n const out = new Set<string>(stepRamps.get(name));\n if (seen.has(name)) return out;\n seen.add(name);\n const add = (from: string) => {\n for (const r of rampsOf(from, seen)) out.add(r);\n };\n const rule = def.semantics?.[name];\n for (const leaf of rule === undefined ? [] : leaves(rule)) {\n if (typeof leaf !== 'object' || leaf === null) continue;\n const l = leaf as SemanticRule;\n if ('ramp' in l) out.add(l.ramp);\n else if ('from' in l) add(l.from);\n else if ('ref' in l) add(l.ref);\n }\n const pin = def.pins?.[name];\n if (pin !== undefined) {\n const n = node();\n scan(pin, n);\n for (const e of n.edges) add(e);\n }\n return out;\n };\n for (const [name, rule] of Object.entries(def.semantics ?? {})) {\n const n = node();\n scan(rule, n);\n for (const leaf of leaves(rule) as SemanticRule[]) {\n if ('ref' in leaf) n.edges.add(leaf.ref);\n if ('from' in leaf) {\n n.edges.add(leaf.from);\n for (const r of rampsOf(leaf.from)) {\n n.edges.add(stepsKey(r));\n // darker and lighter read which end of the ramp is darker.\n if (leaf.dir !== 'away') for (const s of declaredSteps(def.ramps?.[r])) n.edges.add(`${r}-${s}`);\n }\n }\n if ('step' in leaf) {\n n.edges.add(stepsKey(leaf.ramp));\n for (const s of leaves(leaf.step)) n.edges.add(`${leaf.ramp}-${String(s)}`);\n }\n if ('contrast' in leaf) {\n n.edges.add(stepsKey(leaf.ramp));\n for (const a of leaf.contrast.against) n.edges.add(a);\n for (const s of declaredSteps(def.ramps?.[leaf.ramp])) n.edges.add(`${leaf.ramp}-${s}`);\n }\n }\n nodes.set(name, n);\n }\n for (const layer of [def.components, def.pins]) {\n for (const [name, v] of Object.entries(layer ?? {})) {\n const n = node();\n scan(v, n);\n nodes.set(name, n);\n }\n }\n\n const order = Object.keys(def.axes ?? {});\n const sorted = (s: Set<string>) => order.filter((a) => s.has(a));\n const ownOf = (n: Node) => {\n const out = new Set(n.axes);\n for (const seed of n.seeds) {\n const s = node();\n scan(def.seeds?.[seed], s);\n for (const a of s.axes) out.add(a);\n }\n return out;\n };\n\n const ownSets = new Map<string, Set<string>>();\n for (const [name, n] of nodes) ownSets.set(name, ownOf(n));\n\n // `all[n] = own[n] ∪ ⋃ all[edge]`, iterated to a fixpoint instead of walked recursively —\n // a per-path `visiting` guard would memoize the empty answer for whichever cycle node it\n // revisits first. This converges because every step only adds axes, which are finite.\n const all = new Map<string, Set<string>>();\n for (const [name, own] of ownSets) all.set(name, new Set(own));\n let changed = true;\n while (changed) {\n changed = false;\n for (const [name, n] of nodes) {\n const out = all.get(name)!;\n for (const e of n.edges) {\n const from = all.get(e);\n if (!from) continue;\n for (const a of from) if (!out.has(a)) { out.add(a); changed = true; }\n }\n }\n }\n\n const result: Record<string, AxisDependency> = {};\n for (const name of nodes.keys()) if (!name.includes('.')) result[name] = { own: sorted(ownSets.get(name)!), all: sorted(all.get(name)!) };\n return result;\n}\n","import { DEFAULT_CONSTRAINTS, generate, type Anchor, type Constraints } from './color/generate';\nimport { toHex, toLch } from './color/oklch';\n\nexport interface LightnessParams {\n readonly steps: readonly string[];\n readonly lightness: readonly [number, number];\n readonly curve: number;\n readonly hue: number;\n readonly peak: number;\n /** Lifts the first step's chroma off zero, as `darkBias` lifts the last. Default 0. */\n readonly lightBias?: number;\n readonly darkBias: number;\n readonly anchor?: Readonly<Record<string, string>>;\n}\n\n// Above anything sRGB holds, so the gamut clamp in toHex decides.\nconst MAX_CHROMA = 0.4;\n\nconst smoothstep = (t: number) => t * t * (3 - 2 * t);\nconst envelope = (t: number, lightBias: number, darkBias: number) => Math.sin(Math.PI * t) + lightBias * (1 - t) + darkBias * t;\n\nfunction envelopeMax(lightBias: number, darkBias: number): number {\n let max = 0;\n for (let i = 0; i <= 1000; i += 1) max = Math.max(max, envelope(i / 1000, lightBias, darkBias));\n return max;\n}\n\n/**\n * Step name → hex. Lightness walks from `lightness[0]` to `lightness[1]`, `curve` blending an even walk toward a\n * smoothstep; chroma is `peak` scaled by the envelope `sin(πt) + lightBias·(1−t) + darkBias·t` normalized to a maximum of 1.\n */\nexport function lightnessRamp(p: LightnessParams): Record<string, string> {\n const n = p.steps.length;\n const at = (i: number) => (n === 1 ? 0 : i / (n - 1));\n const lightBias = p.lightBias ?? 0;\n const max = envelopeMax(lightBias, p.darkBias);\n\n let { hue, peak } = p;\n const anchorIndex = p.steps.findIndex((s) => p.anchor?.[s] !== undefined);\n if (anchorIndex !== -1) {\n const a = toLch(p.anchor![p.steps[anchorIndex]]);\n const e = envelope(at(anchorIndex), lightBias, p.darkBias);\n hue = a.H;\n peak = e > 1e-6 ? (a.C * max) / e : a.C;\n }\n\n const out: Record<string, string> = {};\n p.steps.forEach((step, i) => {\n const fixed = p.anchor?.[step];\n if (fixed !== undefined) {\n out[step] = fixed.toLowerCase();\n return;\n }\n const t = at(i);\n const L = p.lightness[0] + (p.lightness[1] - p.lightness[0]) * (t + (smoothstep(t) - t) * p.curve);\n out[step] = toHex(L, Math.min((peak * envelope(t, lightBias, p.darkBias)) / max, MAX_CHROMA), hue);\n });\n return out;\n}\n\nexport function categoricalRamp(\n steps: readonly string[],\n gates: Partial<Constraints>,\n anchors: readonly Anchor[],\n): { colors: Record<string, string>; feasible: boolean } {\n const palette = generate({ ...DEFAULT_CONSTRAINTS, ...gates, count: steps.length, anchors });\n const colors: Record<string, string> = {};\n steps.forEach((step, i) => {\n colors[step] = palette.swatches[i].hex.toLowerCase();\n });\n return { colors, feasible: palette.feasible };\n}\n","export interface ScaleParams {\n readonly base: number;\n readonly step?: number;\n readonly ratio?: number;\n readonly factors?: readonly number[];\n}\n\nexport function scale(steps: readonly string[], p: ScaleParams): Record<string, string> {\n const rules = [p.step, p.ratio, p.factors].filter((r) => r !== undefined);\n if (rules.length !== 1) {\n throw new Error('A scale takes exactly one of `step`, `ratio` and `factors`');\n }\n if (p.factors && p.factors.length !== steps.length) {\n throw new Error(`A scale needs one factor per step; got ${p.factors.length} for ${steps.length} steps`);\n }\n const out: Record<string, string> = {};\n steps.forEach((name, i) => {\n let v: number;\n if (p.factors !== undefined) v = p.base * p.factors[i];\n else if (p.step !== undefined) v = p.base + p.step * i;\n else v = p.base * p.ratio! ** i;\n out[name] = `${Math.round(v)}px`;\n });\n return out;\n}\n","import { pick, type Selection, type Varying } from '../axes';\nimport type { PinObject, SemanticRule } from '../definition';\nimport type { RawToken, TokenValue } from '../dtcg/types';\nimport { contrast, toLch } from './color/oklch';\nimport type { Issue } from './types';\n\nconst TOKEN_REF = /^\\{([^}.]+)\\}$/;\nconst HEX = /^#[0-9a-f]{6}$/i;\nconst MAX_DEPTH = 32;\n\nexport interface SemanticContext {\n readonly sel: Selection;\n /** Ramp and scale tokens derived so far. */\n readonly tokens: Readonly<Record<string, RawToken>>;\n /** Ramp name → its steps, in order. */\n readonly ramps: Readonly<Record<string, readonly string[]>>;\n /** The pin this token gets for the selection, if one does. Rules that measure color read final colors, not generated ones. */\n readonly pinned: (name: string) => PinObject | undefined;\n /** The component this name gets for the selection, if one does. */\n readonly component: (name: string) => PinObject | undefined;\n /** Whether a name is produced, or failed to be, at this selection. An `against` name that is neither is dangling. */\n readonly known: (name: string) => boolean;\n readonly issues: Issue[];\n}\n\nexport interface DerivedSemantic {\n readonly token: RawToken;\n readonly rule: string;\n /** Set when the semantic ended on a ramp step. */\n readonly position?: { readonly ramp: string; readonly index: number };\n}\n\ntype Position = NonNullable<DerivedSemantic['position']>;\n\ninterface Env {\n readonly get: (name: string) => DerivedSemantic | undefined;\n readonly color: (value: TokenValue | undefined) => string | undefined;\n /** The ramp step a semantic ends on once its pin applies; undefined for anything else. */\n readonly positionOf: (name: string) => Position | undefined;\n /** The ramp step a reference to `name` ends on: the step itself, or wherever its pin or rule leads. */\n readonly positionAt: (name: string) => Position | undefined;\n}\n\nconst isRecord = (x: unknown): x is Record<string, unknown> => typeof x === 'object' && x !== null && !Array.isArray(x);\n\nconst refTarget = (value: TokenValue): string | undefined =>\n typeof value === 'string' ? TOKEN_REF.exec(value.trim())?.[1] : undefined;\n\nexport function deriveSemantics(\n rules: Readonly<Record<string, Varying<SemanticRule>>>,\n ctx: SemanticContext,\n): Map<string, DerivedSemantic> {\n const done = new Map<string, DerivedSemantic>();\n const failed = new Set<string>();\n const inProgress = new Set<string>();\n\n const get: Env['get'] = (name) => {\n if (done.has(name)) return done.get(name);\n if (failed.has(name) || !Object.hasOwn(rules, name)) return undefined;\n if (inProgress.has(name)) throw new Error(`Semantic cycle at \"${name}\" (${[...inProgress].join(' → ')})`);\n inProgress.add(name);\n const p = pick(rules[name], ctx.sel);\n let derived: DerivedSemantic | undefined;\n if (!p.ok) {\n ctx.issues.push({ kind: 'missing-axis-value', path: `semantics.${name}`, axis: p.axis, value: p.value });\n } else if (!isRecord(p.value)) {\n ctx.issues.push({ kind: 'invalid', path: `semantics.${name}`, message: 'expected an object' });\n } else {\n derived = deriveOne(name, p.value, ctx, env);\n }\n inProgress.delete(name);\n if (derived) done.set(name, derived);\n else failed.add(name);\n return derived;\n };\n\n /** A value's final solid color as hex, following references through pins; undefined for anything else. */\n const color = (value: TokenValue | undefined, depth = 0): string | undefined => {\n if (typeof value !== 'string' || depth > MAX_DEPTH) return undefined;\n const v = value.trim();\n const m = TOKEN_REF.exec(v);\n if (!m) return HEX.test(v) ? v.toLowerCase() : undefined;\n return solid(ctx.pinned(m[1]) ?? ctx.tokens[m[1]] ?? get(m[1])?.token ?? ctx.component(m[1]), depth + 1);\n };\n const solid = (t: { readonly value: TokenValue; readonly alpha?: number } | undefined, depth = 0) =>\n t && t.alpha === undefined ? color(t.value, depth) : undefined;\n\n const rampStep = (name: string): Position | undefined => {\n if (!Object.hasOwn(ctx.tokens, name)) return undefined;\n for (const [ramp, steps] of Object.entries(ctx.ramps)) {\n const index = name.startsWith(`${ramp}-`) ? steps.indexOf(name.slice(ramp.length + 1)) : -1;\n if (index >= 0) return { ramp, index };\n }\n return undefined;\n };\n\n const positionAt = (name: string, depth = 0): Position | undefined => {\n if (depth > MAX_DEPTH) return undefined;\n const step = rampStep(name);\n if (step) return step;\n const pin = ctx.pinned(name);\n if (pin) {\n const target = refTarget(pin.value);\n return target === undefined ? undefined : positionAt(target, depth + 1);\n }\n return Object.hasOwn(rules, name) ? get(name)?.position : undefined;\n };\n const positionOf: Env['positionOf'] = (name) => (Object.hasOwn(rules, name) ? positionAt(name) : undefined);\n\n const env: Env = { get, color, positionOf, positionAt };\n\n for (const name of Object.keys(rules)) get(name);\n\n return new Map(Object.keys(rules).filter((n) => done.has(n)).map((n) => [n, done.get(n)!]));\n}\n\nconst lightnessOf = (hex: string | undefined) => (hex ? toLch(hex).L : Number.NaN);\n\nfunction deriveOne(name: string, r: SemanticRule, ctx: SemanticContext, env: Env): DerivedSemantic | undefined {\n const description = r.description;\n const invalid = (message: string) => {\n ctx.issues.push({ kind: 'invalid', path: `semantics.${name}`, message });\n return undefined;\n };\n\n if ('value' in r) {\n return { rule: 'value', token: { type: r.type ?? 'unknown', value: r.value, alpha: undefined, description } };\n }\n\n if ('ref' in r) {\n const type = r.type ?? ctx.tokens[r.ref]?.type ?? env.get(r.ref)?.token.type ?? 'unknown';\n return { rule: 'ref', position: env.positionAt(r.ref), token: { type, value: `{${r.ref}}`, alpha: r.alpha, description } };\n }\n\n if ('step' in r) {\n const picked = pick(r.step, ctx.sel);\n if (!picked.ok) {\n ctx.issues.push({ kind: 'missing-axis-value', path: `semantics.${name}.step`, axis: picked.axis, value: picked.value });\n return undefined;\n }\n return atStep(name, r.ramp, (ctx.ramps[r.ramp] ?? []).indexOf(picked.value), 'step', description, ctx);\n }\n\n const rampColor = (ramp: string, step: string) => env.color(`{${ramp}-${step}}`);\n /** 1 when the ramp darkens toward its last step, -1 when it lightens; undefined, reported, when its ends cannot say. */\n const darkening = (ramp: string, steps: readonly string[]) => {\n const first = lightnessOf(rampColor(ramp, steps[0]));\n const last = lightnessOf(rampColor(ramp, steps[steps.length - 1]));\n if (Number.isNaN(first) || Number.isNaN(last) || first === last) return invalid(`cannot tell which end of ramp \"${ramp}\" is darker`);\n return last < first ? 1 : -1;\n };\n\n if ('from' in r) {\n const from = env.positionOf(r.from);\n if (!from) return invalid(`\"${r.from}\" does not end on a ramp step`);\n const { ramp, index } = from;\n const steps = ctx.ramps[ramp];\n const last = steps.length - 1;\n let sign: number;\n if (r.dir === 'darker' || r.dir === 'lighter') {\n const darker = darkening(ramp, steps);\n if (darker === undefined) return undefined;\n sign = r.dir === 'darker' ? darker : -darker;\n } else {\n sign = index <= last / 2 ? 1 : -1;\n }\n const target = index + sign * r.offset;\n if (target < 0 || target > last) invalid(`offset ${r.offset} runs off ramp \"${ramp}\"`);\n return atStep(name, ramp, Math.max(0, Math.min(last, target)), 'offset', description, ctx);\n }\n\n if ('contrast' in r) {\n for (const a of r.contrast.against) requireKnown(name, a, ctx.known);\n const steps = ctx.ramps[r.ramp];\n if (!steps) return invalid(`no ramp \"${r.ramp}\"`);\n if (r.contrast.against.length === 0) return invalid('contrast needs at least one surface');\n const colors = steps.map((s) => rampColor(r.ramp, s));\n const against = r.contrast.against.map((a) => env.color(`{${a}}`));\n if (colors.some((c) => !c) || against.some((hex) => !hex)) return invalid('contrast needs solid colors on both sides');\n const darker = darkening(r.ramp, steps);\n if (darker === undefined) return undefined;\n\n const L = colors.map(lightnessOf);\n const surfaces = against.map(lightnessOf);\n const meanL = surfaces.reduce((sum, l) => sum + l, 0) / surfaces.length;\n const last = steps.length - 1;\n const sign = Math.abs(L[last] - meanL) >= Math.abs(L[0] - meanL) ? 1 : -1;\n const lo = Math.min(...surfaces);\n const hi = Math.max(...surfaces);\n const worst = (i: number) => Math.min(...against.map((hex) => contrast(colors[i]!, hex!)));\n /** From the first step past every surface toward one ramp end, to that end. */\n const walk = (toLast: boolean) => {\n const order = steps.map((_, i) => (toLast ? i : last - i));\n const past = toLast === (darker > 0) ? (l: number) => l < lo : (l: number) => l > hi;\n const start = order.findIndex((i) => past(L[i]));\n return start < 0 ? [] : order.slice(start);\n };\n\n // OKLCH distance picks the first direction and WCAG luminance decides passing, so they can disagree.\n const walked = [...walk(sign > 0), ...walk(sign < 0)];\n const between = steps.map((_, i) => i).filter((i) => !walked.includes(i)).sort((a, b) => worst(b) - worst(a));\n for (const i of [...walked, ...between]) {\n if (worst(i) >= r.contrast.min) return atStep(name, r.ramp, i, 'contrast', description, ctx);\n }\n let best = { index: sign > 0 ? 0 : last, ratio: -1 };\n for (const i of steps.map((_, k) => (sign > 0 ? k : last - k))) {\n const ratio = worst(i);\n if (ratio > best.ratio) best = { index: i, ratio };\n }\n ctx.issues.push({\n kind: 'contrast-unmet',\n token: name,\n min: r.contrast.min,\n against: [...r.contrast.against],\n picked: steps[best.index],\n ratio: best.ratio,\n });\n return atStep(name, r.ramp, best.index, 'contrast', description, ctx);\n }\n\n return invalid('unrecognized rule');\n}\n\nfunction requireKnown(owner: string, name: string, known: (name: string) => boolean): void {\n if (!known(name)) throw new Error(`Semantic \"${owner}\" references \"${name}\", which is not defined`);\n}\n\n/** Audits every semantic's `check` against final tokens, so components and pins count. Run after references are checked, so every chain ends. */\nexport function checkSemantics(\n rules: Readonly<Record<string, Varying<SemanticRule>>>,\n sel: Selection,\n tokens: Readonly<Record<string, RawToken>>,\n known: (name: string) => boolean,\n issues: Issue[],\n): void {\n /** A name's final solid color as hex; null when its chain reaches a name whose production failed, which was reported then. */\n const solid = (name: string): string | null | undefined => {\n for (let n = name; ; ) {\n if (!Object.hasOwn(tokens, n)) return null;\n const t = tokens[n];\n if (t.alpha !== undefined || typeof t.value !== 'string') return undefined;\n const v = t.value.trim();\n const m = TOKEN_REF.exec(v);\n if (!m) return HEX.test(v) ? v.toLowerCase() : undefined;\n n = m[1];\n }\n };\n\n for (const name of Object.keys(rules)) {\n const p = pick(rules[name], sel);\n const check = p.ok && isRecord(p.value) ? (p.value as SemanticRule).check : undefined;\n if (!check) continue;\n for (const a of check.against) requireKnown(name, a, known);\n if (!Object.hasOwn(tokens, name)) continue;\n const path = `semantics.${name}.check`;\n if (check.against.length === 0) {\n issues.push({ kind: 'invalid', path, message: 'check needs at least one surface' });\n continue;\n }\n const hex = solid(name);\n if (hex === null) continue;\n if (!hex) {\n issues.push({ kind: 'invalid', path, message: `\"${name}\" is not a solid color` });\n continue;\n }\n for (const a of check.against) {\n const other = solid(a);\n if (other === null) continue;\n if (!other) {\n issues.push({ kind: 'invalid', path, message: `\"${a}\" is not a solid color` });\n continue;\n }\n const ratio = contrast(hex, other);\n if (ratio < check.contrast) issues.push({ kind: 'check-failed', token: name, against: a, min: check.contrast, ratio });\n }\n }\n}\n\nexport function atStep(\n name: string,\n ramp: string,\n index: number,\n rule: string,\n description: string | undefined,\n ctx: SemanticContext,\n): DerivedSemantic | undefined {\n const steps = ctx.ramps[ramp];\n if (!steps || index < 0 || index >= steps.length) {\n ctx.issues.push({ kind: 'invalid', path: `semantics.${name}`, message: `no such step on ramp \"${ramp}\"` });\n return undefined;\n }\n return {\n rule,\n position: { ramp, index },\n token: { type: 'color', value: `{${ramp}-${steps[index]}}`, alpha: undefined, description },\n };\n}\n","import { fullSelection, isByAxis, pick, type Selection, type Varying } from '../axes';\nimport type { PinObject, PinValue, ThemeDefinition } from '../definition';\nimport type { RawToken, TokenValue } from '../dtcg/types';\nimport { DEFAULT_CONSTRAINTS, type Anchor, type Constraints } from './color/generate';\nimport { mergeChain, type Lookup } from './merge';\nimport { categoricalRamp, lightnessRamp } from './ramps';\nimport { scale } from './scales';\nimport { checkSemantics, deriveSemantics } from './semantics';\nimport { declaredSteps } from './steps';\nimport type { DeriveResult, Issue, Layer, Provenance } from './types';\n\nconst SEED_REF = /^\\{seeds\\.([\\w-]+)\\}$/;\nconst REF = /^\\{([^}]+)\\}$/;\nconst HEX = /^#[0-9a-f]{6}$/i;\nconst UNTYPED = 'unknown';\n/** The ramp and scale fields that take `by` and `{seeds.name}`. Descriptions are text and are never settled. */\nconst PARAMS = ['kind', 'steps', 'lightness', 'curve', 'hue', 'chroma', 'anchor', 'gates', 'anchors', 'base', 'step', 'ratio', 'factors'];\n\nconst has = (o: object, key: string) => Object.hasOwn(o, key);\n\nfunction refName(value: TokenValue): string | undefined {\n return typeof value === 'string' ? REF.exec(value.trim())?.[1] : undefined;\n}\n\ninterface SettleContext {\n readonly sel: Selection;\n readonly seeds: Readonly<Record<string, number | string>>;\n /** Every seed the definition declares, whether or not it resolved at this selection. */\n readonly declaredSeeds: ReadonlySet<string>;\n readonly issues: Issue[];\n}\n\ninterface Settled {\n readonly value: unknown;\n readonly ok: boolean;\n}\n\n/** `v` with every `by` picked and every `{seeds.name}` replaced, at any depth. What cannot settle is left undefined and clears `ok`. */\nfunction settle(v: unknown, path: string, ctx: SettleContext): Settled {\n if (isByAxis(v)) {\n const picked = pick(v, ctx.sel);\n if (!picked.ok) {\n ctx.issues.push({ kind: 'missing-axis-value', path, axis: picked.axis, value: picked.value });\n return { value: undefined, ok: false };\n }\n return settle(picked.value, path, ctx);\n }\n if (Array.isArray(v)) {\n let ok = true;\n const value = v.map((x, i) => {\n const s = settle(x, `${path}.${i}`, ctx);\n ok = s.ok && ok;\n return s.value;\n });\n return { value, ok };\n }\n if (typeof v === 'object' && v !== null) {\n let ok = true;\n const value: Record<string, unknown> = {};\n for (const [k, x] of Object.entries(v)) {\n const s = settle(x, `${path}.${k}`, ctx);\n ok = s.ok && ok;\n value[k] = s.value;\n }\n return { value, ok };\n }\n if (typeof v === 'string') {\n const m = SEED_REF.exec(v.trim());\n if (!m) return { value: v, ok: true };\n if (has(ctx.seeds, m[1])) return { value: ctx.seeds[m[1]], ok: true };\n // A declared seed that did not resolve already reported its missing axis value.\n if (!ctx.declaredSeeds.has(m[1])) ctx.issues.push({ kind: 'invalid', path, message: `unknown seed \"${m[1]}\"` });\n return { value: undefined, ok: false };\n }\n return { value: v, ok: true };\n}\n\n/** Reads a settled entry, reporting every value of the wrong shape. */\nclass Reader {\n ok = true;\n private readonly issues: Issue[];\n\n constructor(issues: Issue[]) {\n this.issues = issues;\n }\n\n fail(path: string, message: string): void {\n this.issues.push({ kind: 'invalid', path, message });\n this.ok = false;\n }\n\n num(x: unknown, path: string): number {\n if (typeof x === 'number' && Number.isFinite(x)) return x;\n this.fail(path, 'expected a number');\n return Number.NaN;\n }\n\n optNum(x: unknown, path: string, fallback: number): number;\n optNum(x: unknown, path: string): number | undefined;\n optNum(x: unknown, path: string, fallback?: number): number | undefined {\n return x === undefined ? fallback : this.num(x, path);\n }\n\n optNums(x: unknown, path: string): number[] | undefined {\n if (x === undefined) return undefined;\n if (!Array.isArray(x)) {\n this.fail(path, 'expected an array of numbers');\n return undefined;\n }\n return x.map((v, i) => this.num(v, `${path}.${i}`));\n }\n\n record(x: unknown, path: string): Record<string, unknown> {\n if (x === undefined) return {};\n if (typeof x === 'object' && x !== null && !Array.isArray(x)) return x as Record<string, unknown>;\n this.fail(path, 'expected an object');\n return {};\n }\n}\n\nconst isRecord = (x: unknown): x is Record<string, unknown> => typeof x === 'object' && x !== null && !Array.isArray(x);\n\nconst stepNames = (x: unknown): string[] | undefined =>\n Array.isArray(x) && x.every((s) => typeof s === 'string') ? x : undefined;\n\nfunction rampColors(name: string, r: Record<string, unknown>, steps: readonly string[], ctx: SettleContext): Record<string, string> | undefined {\n const path = `ramps.${name}`;\n const read = new Reader(ctx.issues);\n\n if (r.kind === 'lightness') {\n const l = r.lightness;\n let lightness: [number, number] = [0, 0];\n if (Array.isArray(l) && l.length === 2) lightness = [read.num(l[0], `${path}.lightness.0`), read.num(l[1], `${path}.lightness.1`)];\n else read.fail(`${path}.lightness`, 'expected two numbers');\n const chroma = read.record(r.chroma, `${path}.chroma`);\n const atLeastZero = (v: number, at: string) => {\n if (v < 0) read.fail(at, 'expected a number ≥ 0');\n return v;\n };\n const peak = r.chroma === undefined ? 0 : atLeastZero(read.num(chroma.peak, `${path}.chroma.peak`), `${path}.chroma.peak`);\n const anchor: Record<string, string> = {};\n for (const [step, v] of Object.entries(read.record(r.anchor, `${path}.anchor`))) {\n if (typeof v === 'string' && HEX.test(v)) anchor[step] = v;\n else read.fail(`${path}.anchor.${step}`, 'expected a hex color');\n }\n const params = {\n steps,\n lightness,\n curve: read.optNum(r.curve, `${path}.curve`, 0),\n hue: read.optNum(r.hue, `${path}.hue`, 0),\n peak,\n lightBias: atLeastZero(read.optNum(chroma.lightBias, `${path}.chroma.lightBias`, 0), `${path}.chroma.lightBias`),\n darkBias: atLeastZero(read.optNum(chroma.darkBias, `${path}.chroma.darkBias`, 0), `${path}.chroma.darkBias`),\n anchor,\n };\n return read.ok ? lightnessRamp(params) : undefined;\n }\n\n if (r.kind === 'categorical') {\n const gates: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(read.record(r.gates, `${path}.gates`))) {\n if (!has(DEFAULT_CONSTRAINTS, k) || k === 'count' || k === 'anchors') read.fail(`${path}.gates.${k}`, 'unknown gate');\n else if (typeof v !== typeof DEFAULT_CONSTRAINTS[k as keyof typeof DEFAULT_CONSTRAINTS]) {\n read.fail(`${path}.gates.${k}`, `expected a ${typeof DEFAULT_CONSTRAINTS[k as keyof typeof DEFAULT_CONSTRAINTS]}`);\n } else gates[k] = v;\n }\n const anchors: Anchor[] = [];\n const rawAnchors = r.anchors ?? [];\n if (!Array.isArray(rawAnchors)) read.fail(`${path}.anchors`, 'expected a list');\n else {\n rawAnchors.forEach((a, i) => {\n const at = `${path}.anchors.${i}`;\n const o = read.record(a, at);\n if (typeof o.name !== 'string') read.fail(`${at}.name`, 'expected a string');\n anchors.push({\n name: String(o.name),\n hue: read.num(o.hue, `${at}.hue`),\n lightness: read.num(o.lightness, `${at}.lightness`),\n chroma: read.optNum(o.chroma, `${at}.chroma`),\n });\n });\n }\n if (!read.ok) return undefined;\n const { colors, feasible } = categoricalRamp(steps, gates as Partial<Constraints>, anchors);\n if (!feasible) ctx.issues.push({ kind: 'infeasible-ramp', ramp: name });\n return colors;\n }\n\n read.fail(`${path}.kind`, 'expected \"lightness\" or \"categorical\"');\n return undefined;\n}\n\nfunction scaleValues(name: string, s: Record<string, unknown>, steps: readonly string[], issues: Issue[]): { values: Record<string, string>; rule: string } | undefined {\n const path = `scales.${name}`;\n const read = new Reader(issues);\n const base = read.num(s.base, `${path}.base`);\n const step = read.optNum(s.step, `${path}.step`);\n const ratio = read.optNum(s.ratio, `${path}.ratio`);\n const factors = read.optNums(s.factors, `${path}.factors`);\n if (!read.ok) return undefined;\n try {\n const rule = factors !== undefined ? 'factors' : step !== undefined ? 'linear' : 'geometric';\n return { values: scale(steps, { base, step, ratio, factors }), rule };\n } catch (e) {\n issues.push({ kind: 'invalid', path, message: (e as Error).message });\n return undefined;\n }\n}\n\n/** Throws on a cycle, and on a reference to a missing name unless producing that name failed at this selection, which was reported then. */\nfunction checkReferences(tokens: Readonly<Record<string, RawToken>>, failed: ReadonlySet<string>): void {\n const done = new Set<string>();\n for (const start of Object.keys(tokens)) {\n const trail: string[] = [];\n let name: string | undefined = start;\n while (name !== undefined && !done.has(name)) {\n if (trail.includes(name)) throw new Error(`Reference cycle at token \"${name}\" (${[...trail, name].join(' → ')})`);\n trail.push(name);\n const target = refName(tokens[name].value);\n if (target !== undefined && !has(tokens, target)) {\n if (!failed.has(target)) throw new Error(`Token \"${name}\" references \"${target}\", which is not defined`);\n name = undefined;\n } else {\n name = target;\n }\n }\n for (const n of trail) done.add(n);\n }\n}\n\n/**\n * Types every untyped token from what its reference chain ends on; a pin with nothing to go on takes the type of what the\n * rule under it reaches, which is also written into `generated`. Final tokens are typed before rule values are read, and\n * again whenever a rule value typed one, so no lookup sees a half-typed chain. Runs after `checkReferences`, so chains end.\n */\nfunction inferTypes(tokens: Record<string, RawToken>, provenance: Record<string, Provenance>, failed: ReadonlySet<string>, issues: Issue[]): void {\n for (let changed = true; changed; ) {\n changed = false;\n const memo = new Map<string, string>();\n const typeOf = (start: string): string => {\n const trail: string[] = [];\n let type = UNTYPED;\n for (let name: string | undefined = start; name !== undefined && has(tokens, name); name = refName(tokens[name].value)) {\n const known = memo.get(name);\n if (known !== undefined) {\n type = known;\n break;\n }\n trail.push(name);\n if (tokens[name].type !== UNTYPED) {\n type = tokens[name].type;\n break;\n }\n }\n for (const name of trail) {\n if (type !== UNTYPED && tokens[name].type === UNTYPED) tokens[name] = { ...tokens[name], type };\n memo.set(name, type);\n }\n return type;\n };\n for (const name of Object.keys(tokens)) typeOf(name);\n for (const name of Object.keys(tokens)) {\n const p = provenance[name];\n const generated = p.generated;\n const target = generated?.type === UNTYPED ? refName(generated.value) : undefined;\n const type = target === undefined ? UNTYPED : typeOf(target);\n if (!generated || type === UNTYPED) continue;\n provenance[name] = { ...p, generated: { ...generated, type } };\n if (tokens[name].type === UNTYPED) {\n tokens[name] = { ...tokens[name], type };\n changed = true;\n }\n }\n }\n for (const [name, token] of Object.entries(tokens)) {\n // A reference is typed by what it reaches, reported there; a name whose production failed was reported then.\n if (token.type !== UNTYPED || refName(token.value) !== undefined || failed.has(name)) continue;\n issues.push({ kind: 'untyped-pin', token: name });\n }\n}\n\nconst isPinObject = (v: PinValue): v is PinObject =>\n typeof v === 'object' && v !== null && !Array.isArray(v) && 'value' in v;\n\nconst NAMED_LAYERS = ['ramps', 'scales', 'semantics', 'components', 'pins'] as const;\n/** A reference reads a dot as a group, and a name reaches CSS custom properties and the generated module unescaped. */\nconst SAFE_NAME = /^[A-Za-z0-9_-]+$/;\nconst isSafeName = (name: string) => SAFE_NAME.test(name);\nconst UNSAFE = (name: string) => `\"${name}\" cannot name a token: use letters, digits, \"-\" and \"_\"`;\n\nfunction withoutUnsafeNames(def: ThemeDefinition, issues: Issue[]): ThemeDefinition {\n let out = def;\n for (const layer of NAMED_LAYERS) {\n const entries = def[layer];\n if (!entries || Object.keys(entries).every(isSafeName)) continue;\n for (const n of Object.keys(entries)) {\n if (!isSafeName(n)) issues.push({ kind: 'invalid', path: `${layer}.${n}`, message: UNSAFE(n) });\n }\n out = { ...out, [layer]: Object.fromEntries(Object.entries(entries).filter(([n]) => isSafeName(n))) };\n }\n return out;\n}\n\n/** Derive every token of `definition` for one selection. Unmet rules are reported in `issues`; cycles and dangling references throw. */\nexport function derive(definition: ThemeDefinition, selection: Selection = {}, lookup?: Lookup): DeriveResult {\n const issues: Issue[] = [];\n const def = withoutUnsafeNames(mergeChain(definition, lookup), issues);\n const sel = fullSelection(def.axes ?? {}, selection);\n const seeds: Record<string, number | string> = {};\n for (const [k, v] of Object.entries(def.seeds ?? {})) {\n const picked = pick(v, sel);\n if (picked.ok) seeds[k] = picked.value;\n else issues.push({ kind: 'missing-axis-value', path: `seeds.${k}`, axis: picked.axis, value: picked.value });\n }\n const ctx: SettleContext = { sel, seeds, declaredSeeds: new Set(Object.keys(def.seeds ?? {})), issues };\n\n const tokens: Record<string, RawToken> = {};\n const provenance: Record<string, Provenance> = {};\n /** Names whose production was attempted and failed at this selection. */\n const failed = new Set<string>();\n const producer = new Map<string, string>();\n const put = (name: string, token: RawToken, layer: Layer, rule: string, path: string) => {\n const earlier = producer.get(name);\n if (earlier !== undefined) {\n issues.push({ kind: 'invalid', path, message: `\"${name}\" is already produced by ${earlier}` });\n return;\n }\n producer.set(name, path);\n tokens[name] = token;\n provenance[name] = { layer, rule, pinned: false };\n };\n /** `steps`, when they settled, are this selection's; otherwise every step the entry could declare is exempt. */\n const failEntry = (name: string, entry: unknown, steps: readonly string[] | undefined) => {\n for (const step of steps ?? declaredSteps(entry)) failed.add(`${name}-${step}`);\n };\n\n type SettledEntry =\n | { readonly ok: true; readonly r: Record<string, unknown>; readonly steps: string[] }\n | { readonly ok: false; readonly steps?: string[] };\n const settleEntry = (entry: unknown, path: string): SettledEntry => {\n let raw = entry;\n if (isByAxis(raw)) {\n const picked = pick(raw, sel);\n if (!picked.ok) {\n issues.push({ kind: 'missing-axis-value', path, axis: picked.axis, value: picked.value });\n return { ok: false };\n }\n raw = picked.value;\n }\n if (!isRecord(raw)) {\n issues.push({ kind: 'invalid', path, message: 'expected an object' });\n return { ok: false };\n }\n const r: Record<string, unknown> = { ...raw };\n let settled = true;\n for (const key of PARAMS) {\n if (!has(raw, key)) continue;\n const s = settle(raw[key], `${path}.${key}`, ctx);\n r[key] = s.value;\n settled = s.ok && settled;\n }\n const steps = stepNames(r.steps);\n if (!steps && settled) issues.push({ kind: 'invalid', path: `${path}.steps`, message: 'expected a list of step names' });\n if (steps?.includes('by')) {\n issues.push({ kind: 'invalid', path: `${path}.steps`, message: '\"by\" is reserved and cannot name a step' });\n return { ok: false, steps };\n }\n const unsafe = steps?.find((s) => !isSafeName(s));\n if (unsafe !== undefined) {\n issues.push({ kind: 'invalid', path: `${path}.steps`, message: UNSAFE(unsafe) });\n return { ok: false, steps };\n }\n return settled && steps ? { ok: true, r, steps } : { ok: false, steps };\n };\n const describe = (r: Record<string, unknown>, step: string) => {\n const d = isRecord(r.describe) ? r.describe[step] : undefined;\n return typeof d === 'string' ? d : undefined;\n };\n\n const rampSteps: Record<string, readonly string[]> = {};\n for (const [name, entry] of Object.entries(def.ramps ?? {})) {\n const path = `ramps.${name}`;\n const e = settleEntry(entry, path);\n if (e.steps) rampSteps[name] = e.steps;\n const colors = e.ok ? rampColors(name, e.r, e.steps, ctx) : undefined;\n if (!e.ok || !colors) {\n failEntry(name, entry, e.steps);\n continue;\n }\n for (const step of e.steps) {\n put(`${name}-${step}`, { type: 'color', value: colors[step], alpha: undefined, description: describe(e.r, step) }, 'ramps', String(e.r.kind), path);\n }\n }\n\n for (const [name, entry] of Object.entries(def.scales ?? {})) {\n const path = `scales.${name}`;\n const e = settleEntry(entry, path);\n const out = e.ok ? scaleValues(name, e.r, e.steps, issues) : undefined;\n if (!e.ok || !out) {\n failEntry(name, entry, e.steps);\n continue;\n }\n for (const st of e.steps) {\n put(`${name}-${st}`, { type: 'dimension', value: out.values[st], alpha: undefined, description: describe(e.r, st) }, 'scales', out.rule, path);\n }\n }\n\n /** `obj` with a whole-value `{seeds.name}` replaced by the seed; undefined when the seed has no value here. Reports an undeclared seed when given a path. */\n const seeded = (obj: PinObject, path?: string): PinObject | undefined => {\n const m = typeof obj.value === 'string' ? SEED_REF.exec(obj.value.trim()) : null;\n if (!m) return obj;\n if (has(seeds, m[1])) return { ...obj, value: seeds[m[1]] };\n if (path !== undefined && !ctx.declaredSeeds.has(m[1])) issues.push({ kind: 'invalid', path, message: `unknown seed \"${m[1]}\"` });\n return undefined;\n };\n const pinned = (name: string): PinObject | undefined => {\n const v = def.pins?.[name];\n const picked = v === undefined ? undefined : pick(v, sel);\n if (!picked?.ok) return undefined;\n return seeded(isPinObject(picked.value) ? picked.value : { value: picked.value });\n };\n const semantics = def.semantics ?? {};\n const components = def.components ?? {};\n const component = (name: string): PinObject | undefined => {\n const picked = has(components, name) ? pick(components[name], sel) : undefined;\n if (!picked?.ok) return undefined;\n return seeded(isPinObject(picked.value) ? picked.value : { value: picked.value });\n };\n const known = (name: string) =>\n has(tokens, name) || failed.has(name) || has(semantics, name) || has(components, name) || has(def.pins ?? {}, name);\n const derived = deriveSemantics(semantics, { sel, tokens, ramps: rampSteps, pinned, component, known, issues });\n for (const name of Object.keys(semantics)) {\n const d = derived.get(name);\n if (d) put(name, d.token, 'semantics', d.rule, `semantics.${name}`);\n else failed.add(name);\n }\n\n const toToken = (v: Varying<PinValue>, path: string, prior: RawToken | undefined): RawToken | undefined => {\n const picked = pick(v, sel);\n if (!picked.ok) {\n issues.push({ kind: 'missing-axis-value', path, axis: picked.axis, value: picked.value });\n return undefined;\n }\n const obj = seeded(isPinObject(picked.value) ? picked.value : { value: picked.value }, path);\n if (!obj) return undefined;\n return { type: obj.type ?? prior?.type ?? UNTYPED, value: obj.value, alpha: obj.alpha, description: obj.description ?? prior?.description };\n };\n\n for (const [name, v] of Object.entries(components)) {\n const path = `components.${name}`;\n const token = toToken(v, path, undefined);\n if (token) put(name, token, 'components', 'value', path);\n else failed.add(name);\n }\n\n for (const [name, v] of Object.entries(def.pins ?? {})) {\n const prior = has(tokens, name) ? tokens[name] : undefined;\n const token = toToken(v, `pins.${name}`, prior);\n if (!token) {\n if (!prior) failed.add(name);\n continue;\n }\n tokens[name] = token;\n provenance[name] = prior\n ? { ...provenance[name], pinned: true, generated: prior }\n : { layer: 'pins', rule: 'value', pinned: false };\n }\n\n checkReferences(tokens, failed);\n checkSemantics(semantics, sel, tokens, known, issues);\n inferTypes(tokens, provenance, failed, issues);\n return { tokens, provenance, issues };\n}\n","import { enumerateSelections, fullSelection, pick, selectionKey, type AxisDefs, type Selection, type Varying } from '../axes';\nimport type { ThemeDefinition } from '../definition';\nimport type { RawToken } from '../dtcg/types';\nimport { derive } from './derive';\nimport { mergeChain, type Lookup } from './merge';\nimport { declaredSteps } from './steps';\n\n/**\n * A definition with every rule run: plain or `by`-varying tokens, references intact.\n * A branch `derive` could not produce is left out, so at runtime it falls through to the parent; definitions with\n * issues still bake, because the editor bakes mid-edit and the build refuses them before baking. Cycles and dangling\n * references still throw, as they do in `derive`.\n */\nexport interface BakedTheme {\n readonly name: string;\n readonly extends: string | null;\n readonly axes: AxisDefs;\n /** In layer order, then definition order. */\n readonly tokens: Readonly<Record<string, Varying<RawToken>>>;\n}\n\n/** Drop undefined fields so tokens compare and serialize the same way. */\nfunction normalize(t: RawToken): RawToken {\n return {\n type: t.type,\n value: t.value,\n ...(t.alpha !== undefined ? { alpha: t.alpha } : {}),\n ...(t.description !== undefined ? { description: t.description } : {}),\n };\n}\n\nconst same = (a: RawToken | undefined, b: RawToken | undefined) => JSON.stringify(a) === JSON.stringify(b);\n\n/** Selection key → that selection's derived tokens. */\ntype Table = Map<string, Record<string, RawToken>>;\n\nfunction table(def: ThemeDefinition, axes: AxisDefs, lookup: Lookup | undefined): Table {\n const out: Table = new Map();\n for (const sel of enumerateSelections(axes)) {\n const { tokens } = derive(def, sel, lookup);\n const normalized: Record<string, RawToken> = {};\n for (const [name, t] of Object.entries(tokens)) normalized[name] = normalize(t);\n out.set(selectionKey(axes, sel), normalized);\n }\n return out;\n}\n\n/** Token names in definition order: ramps, scales, semantics, components, then pins no earlier layer produces. */\nfunction definitionOrder(def: ThemeDefinition): string[] {\n const names = new Set<string>();\n for (const layer of [def.ramps, def.scales]) {\n for (const [name, entry] of Object.entries(layer ?? {})) for (const step of declaredSteps(entry)) names.add(`${name}-${step}`);\n }\n for (const layer of [def.semantics, def.components, def.pins]) for (const name of Object.keys(layer ?? {})) names.add(name);\n return [...names];\n}\n\n/** Derive `definition` at every selection and fold the results into one record of tokens with no rules left. */\nexport function bake(definition: ThemeDefinition, lookup?: Lookup): BakedTheme {\n return bakeChain(definition, lookup).at(-1)!;\n}\n\n/** `definition` and every theme it extends, baked, root first. */\nexport function bakeChain(definition: ThemeDefinition, lookup?: Lookup): BakedTheme[] {\n const merged = mergeChain(definition, lookup);\n const parentDef = definition.extends ? lookup?.(definition.extends) : undefined;\n const above = parentDef ? bakeChain(parentDef, lookup) : [];\n return [...above, bakeOver(definition, merged, above, lookup)];\n}\n\nfunction bakeOver(definition: ThemeDefinition, merged: ThemeDefinition, above: readonly BakedTheme[], lookup: Lookup | undefined): BakedTheme {\n const axes = merged.axes ?? {};\n const own = table(definition, axes, lookup);\n\n const at = (sel: Selection, name: string) => own.get(selectionKey(axes, sel))?.[name];\n /** What the runtime shows for `name` from the themes above: the nearest one whose pick succeeds. */\n const inherited = (sel: Selection, name: string): RawToken | undefined => {\n const full = fullSelection(axes, sel);\n for (let i = above.length - 1; i >= 0; i--) {\n const tokens = above[i].tokens;\n if (!Object.hasOwn(tokens, name)) continue;\n const picked = pick(tokens[name], full);\n if (picked.ok) return picked.value;\n }\n return undefined;\n };\n\n const produced = new Set([...own.values()].flatMap((t) => Object.keys(t)));\n const ordered = definitionOrder(merged).filter((n) => produced.has(n));\n const names = [...ordered, ...[...produced].filter((n) => !ordered.includes(n))];\n\n const selections = enumerateSelections(axes);\n const tokens: Record<string, Varying<RawToken>> = {};\n for (const name of names) {\n if (selections.every((sel) => same(at(sel, name), inherited(sel, name)))) continue;\n\n const varying = Object.keys(axes).filter((axis) =>\n selections.some((sel) => Object.keys(axes[axis].values).some((v) => !same(at(sel, name), at({ ...sel, [axis]: v }, name)))),\n );\n\n const build = (i: number, sel: Record<string, string>): Varying<RawToken> | undefined => {\n if (i === varying.length) return at(fullSelection(axes, sel), name);\n const axis = varying[i];\n const branch: Record<string, unknown> = { by: axis };\n let any = false;\n for (const v of Object.keys(axes[axis].values)) {\n const x = build(i + 1, { ...sel, [axis]: v });\n if (x !== undefined) {\n branch[v] = x;\n any = true;\n }\n }\n return any ? (branch as Varying<RawToken>) : undefined;\n };\n const value = build(0, {});\n if (value !== undefined) tokens[name] = value;\n }\n\n return { name: definition.name, extends: definition.extends ?? null, axes, tokens };\n}\n","import { enumerateSelections, fullSelection, pick, pickAll, type AxisDefs, type Selection } from '../../axes';\nimport { resolveTokens } from '../../dtcg/resolve';\nimport type { RawToken } from '../../dtcg/types';\nimport type { BakedTheme } from '../bake';\nimport type { AxisDependency } from '../deps';\n\nexport interface EmitInput {\n readonly baked: BakedTheme;\n readonly deps: Readonly<Record<string, AxisDependency>>;\n /** The default theme alone gets `:root` and the unscoped selectors. */\n readonly isDefault: boolean;\n}\n\nconst REF = /^\\{([^}]+)\\}$/;\n\n/** `{gray-100}` → `gray-100`. A group prefix (`{color.gray-100}`) is dropped, as `resolveTokens` does. */\nfunction refTarget(token: RawToken): string | null {\n const m = typeof token.value === 'string' ? REF.exec(token.value.trim()) : null;\n if (!m) return null;\n const path = m[1];\n const dot = path.indexOf('.');\n return dot === -1 ? path : path.slice(dot + 1);\n}\n\n/** A reference becomes `var()` (or `color-mix()` with an alpha); a literal is resolved. */\nexport function cssValue(name: string, token: RawToken): string {\n const target = refTarget(token);\n if (target === null) return resolveTokens({ [name]: token })[name];\n if (token.alpha === undefined) return `var(--wzl-${target})`;\n return `color-mix(in srgb, var(--wzl-${target}) ${Math.round(token.alpha * 100)}%, transparent)`;\n}\n\n/** Non-empty subsets of the axes, in declaration order, smallest first. */\nfunction axisSets(axes: AxisDefs): string[][] {\n const names = Object.keys(axes);\n const sets: string[][] = [];\n for (let mask = 1; mask < 1 << names.length; mask += 1) sets.push(names.filter((_, i) => mask & (1 << i)));\n return sets.sort((a, b) => a.length - b.length);\n}\n\nfunction combinations(axes: AxisDefs, set: readonly string[]): Selection[] {\n let out: Record<string, string>[] = [{}];\n for (const axis of set) out = out.flatMap((s) => Object.keys(axes[axis].values).map((v) => ({ ...s, [axis]: v })));\n return out;\n}\n\n/** The value's scheme, or `normal` when a sibling value has one, so a nested scheme-less value resets it.\n * A value the theme doesn't declare at all falls back to its tokens from the theme's own default value,\n * so it takes that value's scheme too, rather than a blanket reset. */\nfunction schemeOf(axes: AxisDefs, axis: string, value: string): string | undefined {\n const def = axes[axis];\n if (!def) return undefined;\n if (!(value in def.values)) return schemeOf(axes, axis, def.default);\n return def.values[value].scheme ?? (Object.values(def.values).some((v) => v.scheme) ? 'normal' : undefined);\n}\n\nfunction checkSchemes({ name, axes }: BakedTheme): void {\n const carrying = Object.keys(axes).filter((a) => Object.values(axes[a].values).some((v) => v.scheme));\n if (carrying.length > 1) throw new Error(`Theme \"${name}\": only one axis may carry a color scheme, but ${carrying.join(' and ')} do`);\n}\n\n/** The theme's axes followed by any the default has and it lacks; a shared axis gets both themes' values. */\nfunction combineAxes(own: AxisDefs, other: AxisDefs): AxisDefs {\n const out: Record<string, AxisDefs[string]> = {};\n for (const [name, def] of Object.entries(own)) out[name] = { ...def, values: { ...other[name]?.values, ...def.values } };\n for (const [name, def] of Object.entries(other)) if (!out[name]) out[name] = def;\n return out;\n}\n\n/** A theme as the runtime sees it: each token from the nearest theme in its `extends` chain that has it at a selection. */\nclass Resolved {\n readonly axes: AxisDefs;\n readonly names: readonly string[];\n private readonly chain: readonly BakedTheme[];\n private readonly memo = new Map<string, Map<string, string>>();\n\n constructor(axes: AxisDefs, chain: readonly BakedTheme[]) {\n this.axes = axes;\n this.chain = chain;\n this.names = [...new Set([...chain].reverse().flatMap((t) => Object.keys(t.tokens)))];\n }\n\n token(name: string, sel: Selection): RawToken | undefined {\n const full = fullSelection(this.axes, sel);\n for (const t of this.chain) {\n if (!Object.hasOwn(t.tokens, name)) continue;\n const picked = pick(t.tokens[name], full);\n if (picked.ok) return picked.value;\n }\n return undefined;\n }\n\n /** What a browser computes: every `var()` substituted, down to literals. */\n expanded(name: string, sel: Selection, stack: readonly string[] = []): string {\n const key = JSON.stringify(fullSelection(this.axes, sel));\n const memo = this.memo.get(key) ?? this.memo.set(key, new Map()).get(key)!;\n const hit = memo.get(name);\n if (hit !== undefined) return hit;\n const token = this.token(name, sel);\n if (!token) return `<unset ${name}>`;\n if (stack.includes(name)) return '<cycle>';\n const value = cssValue(name, token).replace(/var\\(--wzl-([^)]+)\\)/g, (_, n: string) => this.expanded(n, sel, [...stack, name]));\n memo.set(name, value);\n return value;\n }\n}\n\nfunction chainOf(baked: BakedTheme, byName: ReadonlyMap<string, BakedTheme>): BakedTheme[] {\n if (!baked.extends) return [baked];\n const parent = byName.get(baked.extends);\n if (!parent) throw new Error(`Theme \"${baked.name}\" extends \"${baked.extends}\", which is not being emitted`);\n return [baked, ...chainOf(parent, byName)];\n}\n\nconst union = (axes: AxisDefs, ...sets: (readonly string[] | undefined)[]) => {\n const all = new Set(sets.flatMap((s) => s ?? []));\n return Object.keys(axes).filter((a) => all.has(a));\n};\n\ninterface Plan {\n readonly theme: string;\n readonly axes: AxisDefs;\n /** Axes that emit `color-scheme` for this theme. */\n readonly schemes: AxisDefs;\n readonly names: readonly string[];\n readonly all: (name: string) => readonly string[];\n readonly own: (name: string) => readonly string[];\n readonly value: (name: string, sel: Selection) => RawToken | undefined;\n}\n\nfunction blocks(lines: string[], plan: Plan, selector: (attrs: string) => string[]): void {\n const { axes, names } = plan;\n for (const set of axisSets(axes)) {\n const members = names.filter((n) => plan.all(n).join(',') === set.join(','));\n const hasOwn = (n: string) => plan.own(n).length > 0;\n const ownFirst = [...members.filter(hasOwn), ...members.filter((n) => !hasOwn(n))];\n const schemeAxis = set.length === 1 ? set[0] : undefined;\n\n for (const combo of combinations(axes, set)) {\n const scheme = schemeAxis ? schemeOf(plan.schemes, schemeAxis, combo[schemeAxis]) : undefined;\n if (ownFirst.length === 0 && !scheme) continue;\n const attrs = set.map((a) => `[data-wzl-${a}='${combo[a]}']`).join('');\n const decls = ownFirst.flatMap((name) => {\n const token = plan.value(name, combo);\n return token ? [` --wzl-${name}: ${cssValue(name, token)};`] : [];\n });\n lines.push(...selector(attrs), ...(scheme ? [` color-scheme: ${scheme};`] : []), ...decls, '}', '');\n }\n }\n}\n\nexport function emitCss(themes: readonly EmitInput[]): string {\n const defaults = themes.filter((t) => t.isDefault);\n if (defaults.length !== 1) throw new Error(`emitCss needs exactly one default theme, got ${defaults.length}`);\n for (const t of themes) checkSchemes(t.baked);\n\n const byName = new Map(themes.map((t) => [t.baked.name, t.baked]));\n const def = defaults[0];\n const defResolved = new Resolved(def.baked.axes, [def.baked]);\n\n // A non-default theme is written as its difference from the default, not from its parent: the default's\n // declarations are the only ones every element can see, and a parent's blocks are scoped to the parent's name.\n const diffed = themes.filter((t) => !t.isDefault).map((t) => {\n const axes = combineAxes(t.baked.axes, def.baked.axes);\n const resolved = new Resolved(t.baked.axes, chainOf(t.baked, byName));\n const selections = enumerateSelections(axes);\n const differs = resolved.names.filter((n) =>\n selections.some((sel) => {\n const mine = resolved.token(n, sel);\n if (!mine) return false;\n const theirs = defResolved.token(n, sel);\n return !theirs || cssValue(n, mine) !== cssValue(n, theirs) || resolved.expanded(n, sel) !== defResolved.expanded(n, sel);\n }),\n );\n return { t, axes, resolved, differs };\n });\n\n // Every theme declares, under its own name, whatever any non-default theme changes, so a subtree of one\n // theme nested inside another resets instead of inheriting the outer theme's values.\n const redeclared = new Set(diffed.flatMap((d) => d.differs));\n const others = diffed.map(({ t, axes, resolved }): Plan => ({\n theme: t.baked.name,\n axes,\n schemes: t.baked.axes,\n names: resolved.names.filter((n) => redeclared.has(n)),\n all: (n) => union(axes, t.deps[n]?.all, def.deps[n]?.all),\n own: (n) => union(axes, t.deps[n]?.own, def.deps[n]?.own),\n value: (n, sel) => resolved.token(n, sel),\n }));\n\n const lines = [\n '/* GENERATED by packages/theme/scripts/build-tokens.ts — do not edit.',\n ' * Source: packages/theme/themes/<theme>.json',\n ' */',\n '',\n ];\n\n const { axes, name: theme } = def.baked;\n const rootValues = pickAll(def.baked.tokens, fullSelection(axes, {}));\n // The default selection's scheme, not just its values: a surface that never calls\n // applyTheme would otherwise get dark colors with light native widgets.\n lines.push(':root {');\n for (const axis of Object.values(axes)) {\n const scheme = axis.values[axis.default]?.scheme;\n if (scheme) lines.push(` color-scheme: ${scheme};`);\n }\n for (const [name, token] of Object.entries(rootValues)) {\n if (token.description) lines.push(` /* ${token.description} */`);\n lines.push(` --wzl-${name}: ${cssValue(name, token)};`);\n }\n lines.push('}', '');\n\n const reset = Object.keys(rootValues).filter((n) => redeclared.has(n) && (def.deps[n]?.all.length ?? 0) === 0);\n if (reset.length > 0) {\n lines.push(`[data-wzl-theme='${theme}'] {`, ...reset.map((n) => ` --wzl-${n}: ${cssValue(n, rootValues[n])};`), '}', '');\n }\n\n blocks(\n lines,\n {\n theme,\n axes,\n schemes: axes,\n names: Object.keys(def.baked.tokens),\n all: (n) => def.deps[n]?.all ?? [],\n own: (n) => def.deps[n]?.own ?? [],\n value: (n, sel) => pickAll(def.baked.tokens, fullSelection(axes, sel))[n],\n },\n (attrs) => [`[data-wzl-theme='${theme}']${attrs},`, `${attrs} {`],\n );\n\n for (const plan of others) {\n const invariant = plan.names.filter((n) => plan.all(n).length === 0);\n if (invariant.length > 0) {\n // `[data-wzl-theme='x']` alone already ties the default's `:root` on specificity and wins on source\n // order, since the default emits first; `:root[...]` guards only against that emission order changing.\n lines.push(`:root[data-wzl-theme='${plan.theme}'],`, `[data-wzl-theme='${plan.theme}'] {`);\n for (const n of invariant) {\n const token = plan.value(n, {});\n if (token) lines.push(` --wzl-${n}: ${cssValue(n, token)};`);\n }\n lines.push('}', '');\n }\n blocks(lines, plan, (attrs) => [`[data-wzl-theme='${plan.theme}']${attrs} {`]);\n }\n\n return lines.join('\\n');\n}\n","import { isByAxis, type Varying } from '../../axes';\nimport { ALPHA_EXT, type RawToken, type TokenValue } from '../../dtcg/types';\nimport { themeAxes } from '../../resolveTheme';\nimport type { Theme } from '../../theme';\n\ntype Group = Record<string, unknown> & { $type: string };\n\nconst REF = /^\\{([^}.]+)\\}$/;\n\nexport interface DtcgExport {\n readonly name: string;\n readonly defaultMode?: string;\n readonly primitives: Record<string, Group>;\n readonly modes: Record<string, Record<string, Group>>;\n}\n\n/**\n * A theme's own tokens as a DTCG document `loadDTCG` reads back. `extends` is\n * not carried; pass it to `loadDTCG`. Every mode the chain declares is written,\n * so a token that leaves one out still falls through to the parent on the way back.\n *\n * DTCG has one variant dimension and no standard way to name a second, so mode\n * is the only axis exported: a token varying by any other axis is written at\n * that axis's default value and its other branches are dropped. Round-tripping\n * a theme through DTCG therefore flattens it to the default selection of every\n * non-mode axis.\n */\nexport function toDTCG(theme: Theme): DtcgExport {\n const axes = themeAxes(theme);\n\n /** The type of the nearest token named `name` in the chain; undefined when no theme has one. */\n const typeOf = (name: string): string | undefined => {\n for (let t: Theme | null = theme; t; t = t.extends) {\n if (!Object.hasOwn(t.tokens, name)) continue;\n let v: unknown = t.tokens[name];\n while (isByAxis(v)) v = Object.entries(v).find(([k]) => k !== 'by')?.[1];\n if (v !== undefined) return (v as RawToken).type;\n }\n return undefined;\n };\n /** `{name}` → `{type.name}`, the path a DTCG tool resolves. */\n const alias = (value: TokenValue): TokenValue => {\n const target = typeof value === 'string' ? REF.exec(value.trim())?.[1] : undefined;\n const type = target === undefined ? undefined : typeOf(target);\n return type === undefined ? value : `{${type}.${target}}`;\n };\n\n const put = (into: Record<string, Group>, name: string, t: RawToken) => {\n into[t.type] ??= { $type: t.type };\n into[t.type][name] = {\n $value: alias(t.value),\n ...(t.description ? { $description: t.description } : {}),\n ...(t.alpha !== undefined ? { $extensions: { [ALPHA_EXT]: t.alpha } } : {}),\n };\n };\n\n /** Every non-mode axis collapsed to its default branch, so only mode is left varying. */\n const flatten = (v: Varying<RawToken>): Varying<RawToken> | undefined => {\n if (!isByAxis(v)) return v;\n if (v.by === 'mode') {\n const out: Record<string, unknown> = { by: 'mode' };\n for (const [mode, x] of Object.entries(v)) {\n if (mode === 'by') continue;\n const inner = flatten(x as Varying<RawToken>);\n if (inner !== undefined) out[mode] = inner;\n }\n return out as Varying<RawToken>;\n }\n const fallback = axes[v.by]?.default;\n const chosen = fallback !== undefined ? v[fallback] : undefined;\n return chosen === undefined ? undefined : flatten(chosen as Varying<RawToken>);\n };\n\n const branches = (v: Varying<RawToken>): [string, RawToken][] => {\n if (!isByAxis(v)) return [];\n return Object.entries(v).flatMap(([mode, x]) => (mode === 'by' ? [] : [[mode, x as RawToken] as [string, RawToken]]));\n };\n\n const modes: Record<string, Record<string, Group>> = {};\n for (const mode of Object.keys(axes.mode?.values ?? {})) modes[mode] = {};\n const primitives: Record<string, Group> = {};\n for (const [name, raw] of Object.entries(theme.tokens)) {\n const v = flatten(raw);\n if (v === undefined) continue;\n if (!isByAxis(v)) put(primitives, name, v);\n else for (const [mode, t] of branches(v)) put((modes[mode] ??= {}), name, t);\n }\n\n return { name: theme.name, ...(axes.mode ? { defaultMode: axes.mode.default } : {}), primitives, modes };\n}\n","/**\n * Consumer override hooks: custom properties kit CSS reads with a fallback and\n * **no theme declares**. Setting one on any container resizes the components\n * below it; leaving it unset takes the fallback.\n *\n * They stay out of `tokens.css` on purpose. A `:root` declaration would win\n * over the in-CSS fallback, so the two would have to agree forever, and\n * `scripts/check-token-reads.ts` would stop enforcing that every read carries\n * one. This file is their declaration instead: `emitManifest` writes each as a\n * `TOKEN_MANIFEST` row with `hook: true`, which is what makes them findable\n * without reading kit stylesheets.\n *\n * Adding a hook means adding it here, and the checker reads this list.\n */\n\n/** One override hook, as the manifest describes it. */\nexport interface TokenHook {\n /** Without the `--wzl-` prefix, matching a token's name in a definition. */\n readonly name: string;\n /** DTCG type. */\n readonly type: string;\n /** The fallback every read of it carries — the value in force when nothing\n * sets it. */\n readonly value: string;\n readonly description: string;\n}\n\nexport const TOKEN_HOOKS: readonly TokenHook[] = [\n {\n name: 'disclosure-gap',\n type: 'dimension',\n value: '4px',\n description: 'Gap between a Disclosure’s twisty and its label.',\n },\n {\n name: 'disclosure-target',\n type: 'dimension',\n value: '20px',\n description: 'Hit-target square of a Disclosure twisty, and of a labkit LayerList row’s.',\n },\n {\n name: 'number-field-width',\n type: 'dimension',\n value: '9ch',\n description: 'Width of a NumberField’s input.',\n },\n {\n name: 'prefs-column-width',\n type: 'dimension',\n value: '300px',\n description: 'Width of the Prefs category column.',\n },\n {\n name: 'prop-number-width',\n type: 'dimension',\n value: '9ch',\n description: 'Width of a numeric field in the Properties panel.',\n },\n {\n name: 'prop-row-h',\n type: 'dimension',\n value: '20px',\n description:\n 'Floor under every Properties row, whatever control it holds. Unset, it is the panel’s own field height, so it follows density — 20px at the default one.',\n },\n {\n name: 'prop-text-width',\n type: 'dimension',\n value: '16ch',\n description: 'Width of a text field in the Properties panel.',\n },\n {\n name: 'property-readout-w',\n type: 'dimension',\n value: '2.8em',\n description: 'Minimum width of a Properties row’s value readout.',\n },\n {\n name: 'swatch-size',\n type: 'dimension',\n value: '28px',\n description: 'Minimum cell of a swatch grid — PatternPicker, and any panel laying swatches out the same way.',\n },\n {\n name: 'timeline-label-w',\n type: 'dimension',\n value: '120px',\n description: 'Width of the Timeline’s track-label gutter.',\n },\n {\n name: 'timeline-value-axis-w',\n type: 'dimension',\n value: '32px',\n description: 'Width reserved for the Timeline’s value axis.',\n },\n];\n","import { fullSelection, pickAll } from '../../axes';\nimport { resolveTokens } from '../../dtcg/resolve';\nimport { TOKEN_HOOKS } from '../../hooks';\nimport type { EmitInput } from './css';\n\n/** Prefixes that share a group with their siblings rather than standing alone. */\nconst MERGED_GROUPS: Readonly<Record<string, string>> = { danger: 'status', warning: 'status', success: 'status' };\n\nconst groupOf = (name: string) => {\n const prefix = name.includes('-') ? name.slice(0, name.indexOf('-')) : name;\n return MERGED_GROUPS[prefix] ?? prefix;\n};\n\nconst row = (\n name: string,\n type: string,\n value: string,\n description: string,\n hook: boolean,\n): string =>\n ` { name: '--wzl-${name}', type: ${JSON.stringify(type)}, group: ${JSON.stringify(groupOf(name))}, defaultValue: ${JSON.stringify(value)}, description: ${JSON.stringify(description)}, hook: ${hook} },`;\n\nexport function emitManifest({ baked }: EmitInput): string {\n const all = pickAll(baked.tokens, fullSelection(baked.axes, {}));\n const resolved = resolveTokens(all);\n const rows = Object.entries(all).map(([name, token]) =>\n row(name, token.type, resolved[name], token.description ?? '', false),\n );\n // Hooks last, and sorted, so a name moving between the two lists is one\n // block of diff rather than a reshuffle.\n for (const h of [...TOKEN_HOOKS].sort((a, b) => a.name.localeCompare(b.name))) {\n rows.push(row(h.name, h.type, h.value, h.description, true));\n }\n return [\n '// GENERATED by packages/theme/scripts/build-tokens.ts — do not edit.',\n '',\n '/** One row of `TOKEN_MANIFEST`: a token, its DTCG type, the name-prefix',\n ' * group it belongs to, its value in the default theme and selection, and',\n ' * the description it was authored with (empty string if none). */',\n 'export interface TokenManifestEntry {',\n ' readonly name: string;',\n ' readonly type: string;',\n ' readonly group: string;',\n ' readonly defaultValue: string;',\n ' readonly description: string;',\n ' /** A consumer override hook rather than a theme token: no theme declares',\n ' * it, kit CSS reads it with `defaultValue` as the fallback, and setting',\n ' * it on any container is what changes it. */',\n ' readonly hook: boolean;',\n '}',\n '',\n '/** Every token of the default theme at its default selection, plus every',\n ' * consumer override hook, described. Meant for tooling that presents the',\n ' * token set — docs pages, token browsers, forge\\'s CSS-vars panel — not',\n ' * for resolving values at runtime. */',\n 'export const TOKEN_MANIFEST: readonly TokenManifestEntry[] = [',\n rows.join('\\n'),\n '];',\n '',\n ].join('\\n');\n}\n","import { enumerateSelections, pickAll, selectionKey, type Selection } from '../../axes';\nimport type { ThemeDefinition } from '../../definition';\nimport { resolveTokens } from '../../dtcg/resolve';\nimport type { FlatTokens } from '../../dtcg/types';\nimport type { BakedTheme } from '../bake';\n\nexport interface ThemesInput {\n readonly definition: ThemeDefinition;\n readonly baked: BakedTheme;\n}\n\n/** `baked` and every theme above it, root first. */\nfunction chainOf(baked: BakedTheme, byName: ReadonlyMap<string, BakedTheme>): BakedTheme[] {\n const parent = baked.extends ? byName.get(baked.extends) : undefined;\n if (baked.extends && !parent) throw new Error(`Theme \"${baked.name}\" extends \"${baked.extends}\", which is not in themes/`);\n return [...(parent ? chainOf(parent, byName) : []), baked];\n}\n\n/** Each token from the nearest theme in the chain that has it at `sel`, as `resolveTheme` merges them. */\nfunction tokensAt(chain: readonly BakedTheme[], sel: Selection): FlatTokens {\n return Object.assign({}, ...chain.map((t) => pickAll(t.tokens, sel)));\n}\n\nexport function emitThemes(themes: readonly ThemesInput[]): string {\n const byName = new Map(themes.map((t) => [t.baked.name, t.baked]));\n const names = new Set<string>();\n\n const entries = themes.map(({ baked }) => {\n const chain = chainOf(baked, byName);\n const selections = enumerateSelections(baked.axes).map((sel) => {\n const resolved = resolveTokens(tokensAt(chain, sel));\n for (const n of Object.keys(resolved)) names.add(`--wzl-${n}`);\n const body = Object.entries(resolved).map(([n, v]) => ` '--wzl-${n}': ${JSON.stringify(v)},`).join('\\n');\n return ` '${selectionKey(baked.axes, sel)}': {\\n${body}\\n },`;\n });\n return [\n ` ${JSON.stringify(baked.name)}: {`,\n ` name: ${JSON.stringify(baked.name)},`,\n ` axes: ${JSON.stringify(baked.axes)},`,\n ' selections: {',\n selections.join('\\n'),\n ' },',\n ' },',\n ].join('\\n');\n });\n\n const sources = Object.fromEntries(themes.map((t) => [t.definition.name, t.definition]));\n const bakedAll = Object.fromEntries(themes.map((t) => [t.baked.name, t.baked]));\n\n return [\n '// GENERATED by packages/theme/scripts/build-tokens.ts — do not edit.',\n '',\n \"import type { AxisDefs } from '../axes';\",\n \"import type { ThemeDefinition } from '../definition';\",\n \"import type { BakedTheme } from '../engine/bake';\",\n '',\n '/** Every design token the built-in themes declare, spelled as the CSS',\n ' * custom property it becomes. */',\n 'export type TokenName =',\n `${[...names].sort().map((n) => ` | '${n}'`).join('\\n')};`,\n '',\n '/** A built-in theme with its aliases already collapsed: every selection',\n ' * (keyed `mode=dark`, axes in declaration order) maps every token name to',\n ' * a final CSS value. */',\n 'export interface GeneratedTheme {',\n ' readonly name: string;',\n ' readonly axes: AxisDefs;',\n ' readonly selections: Readonly<Record<string, Readonly<Record<TokenName, string>>>>;',\n '}',\n '',\n '/** The built-in themes, resolved, keyed by theme name. Read this to list',\n ' * or preview themes without resolving a token graph yourself. */',\n 'export const THEMES = {',\n entries.join('\\n'),\n '} as const satisfies Record<string, GeneratedTheme>;',\n '',\n '/** The built-in themes as authored: their unbaked definitions. */',\n `export const THEME_SOURCES: Readonly<Record<string, ThemeDefinition>> = ${JSON.stringify(sources, null, 2)};`,\n '',\n '/** The built-in themes with every rule run and references intact. This is',\n ' * what `weaselTheme` is built from, so the runtime entry bundles no generator. */',\n `export const BAKED_THEMES: Readonly<Record<string, BakedTheme>> = ${JSON.stringify(bakedAll, null, 2)};`,\n '',\n ].join('\\n');\n}\n","import { enumerateSelections } from '../../axes';\nimport type { ThemeDefinition } from '../../definition';\nimport { bake } from '../bake';\nimport { axisDependencies } from '../deps';\nimport { derive } from '../derive';\nimport { mergeChain } from '../merge';\nimport { emitCss } from './css';\nimport { emitManifest } from './manifest';\nimport { emitThemes } from './themes';\n\nexport type GeneratedTokens =\n | { readonly ok: true; readonly files: { readonly 'tokens.css': string; readonly 'themes.ts': string; readonly 'manifest.ts': string } }\n | { readonly ok: false; readonly problems: readonly string[] };\n\n/** Every generated token file for a set of definitions, the one that extends nothing being the default. Any derive issue refuses the whole set. */\nexport function generateTokens(definitions: readonly ThemeDefinition[]): GeneratedTokens {\n const byName = new Map(definitions.map((d) => [d.name, d]));\n const lookup = (name: string) => byName.get(name);\n\n const roots = definitions.filter((d) => !d.extends);\n if (roots.length !== 1) throw new Error(`themes/ needs exactly one theme that extends nothing; found ${roots.length}`);\n const ordered = [roots[0], ...definitions.filter((d) => d.extends)];\n\n const problems = ordered.flatMap((def) =>\n enumerateSelections(mergeChain(def, lookup).axes ?? {}).flatMap((sel) =>\n derive(def, sel, lookup).issues.map((issue) => `${def.name} ${JSON.stringify(sel)}: ${JSON.stringify(issue)}`),\n ),\n );\n if (problems.length > 0) return { ok: false, problems };\n\n const themes = ordered.map((definition) => ({\n definition,\n baked: bake(definition, lookup),\n deps: axisDependencies(definition, lookup),\n isDefault: definition === roots[0],\n }));\n return {\n ok: true,\n files: { 'tokens.css': emitCss(themes), 'themes.ts': emitThemes(themes), 'manifest.ts': emitManifest(themes[0]) },\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/engine/steps.ts","../src/engine/merge.ts","../src/engine/deps.ts","../src/engine/ramps.ts","../src/engine/scales.ts","../src/engine/semantics.ts","../src/engine/derive.ts","../src/engine/bake.ts","../src/engine/emit/css.ts","../src/engine/emit/dtcg.ts","../src/hooks.ts","../src/engine/emit/manifest.ts","../src/engine/emit/themes.ts","../src/engine/emit/tokens.ts","../src/store.ts"],"names":["a","TOKEN_REF","SEED_REF","HEX","isRecord","tokens","REF","refTarget","axes","scan","chainOf"],"mappings":"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","file":"engine.js","sourcesContent":["import { isByAxis } from '../axes';\n\nconst stepList = (x: unknown): string[] => (Array.isArray(x) ? [...new Set(x.filter((s): s is string => typeof s === 'string'))] : []);\n\n/** The names in every branch of `v`, reading each leaf with `read`, in first-branch order. */\nfunction inEveryBranch(v: unknown, read: (leaf: unknown) => string[]): string[] {\n if (!isByAxis(v)) return read(v);\n const lists = Object.entries(v).filter(([k]) => k !== 'by').map(([, x]) => inEveryBranch(x, read));\n return lists.length === 0 ? [] : lists.reduce((kept, list) => kept.filter((s) => list.includes(s)));\n}\n\n/** Step names a ramp or scale entry declares at every selection: those in every `by` branch of the entry and of its `steps`. */\nexport function alwaysDeclaredSteps(entry: unknown): string[] {\n return inEveryBranch(entry, (e) => (typeof e === 'object' && e !== null ? inEveryBranch((e as { steps?: unknown }).steps, stepList) : []));\n}\n\n/** Every step name a ramp or scale entry declares, across every `by` branch of the entry and of its `steps`, first seen first. */\nexport function declaredSteps(entry: unknown): string[] {\n const out = new Set<string>();\n const branches = (v: unknown, visit: (x: unknown) => void): void => {\n if (!isByAxis(v)) {\n visit(v);\n return;\n }\n for (const [k, x] of Object.entries(v)) if (k !== 'by') branches(x, visit);\n };\n branches(entry, (e) => {\n if (typeof e !== 'object' || e === null) return;\n branches((e as { steps?: unknown }).steps, (steps) => {\n if (Array.isArray(steps)) for (const s of steps) if (typeof s === 'string') out.add(s);\n });\n });\n return [...out];\n}\n","import { type AxisDefs, isByAxis, mergeAxes } from '../axes';\nimport type { ThemeDefinition } from '../definition';\nimport { alwaysDeclaredSteps } from './steps';\n\nexport type Lookup = (name: string) => ThemeDefinition | undefined;\n\nconst LAYERS = ['seeds', 'ramps', 'scales', 'semantics', 'components', 'pins'] as const;\n\n/** Steps of the ramps and scales `def` declares itself at every selection, which it generates rather than inherits pinned. */\nfunction ownSteps(def: ThemeDefinition): Set<string> {\n const names = new Set<string>();\n for (const layer of [def.ramps, def.scales]) {\n for (const [name, entry] of Object.entries(layer ?? {})) for (const step of alwaysDeclaredSteps(entry)) names.add(`${name}-${step}`);\n }\n return names;\n}\n\n/** A child's by-axis pin with the axis values it leaves out taken from the parent's pin of the same name. */\nfunction fillFromParent(child: unknown, parent: unknown, axes: AxisDefs): unknown {\n if (!isByAxis(child) || parent === undefined) return child;\n const values = Object.keys(axes[child.by]?.values ?? {});\n const out: Record<string, unknown> = { ...child };\n for (const v of values) {\n if (v in out) continue;\n out[v] = isByAxis(parent) && parent.by === child.by ? parent[v] : parent;\n if (out[v] === undefined) delete out[v];\n }\n return out;\n}\n\n/** The definition with its whole `extends` chain folded in, child entries winning. */\nexport function mergeChain(def: ThemeDefinition, lookup?: Lookup, seen: ReadonlySet<string> = new Set()): ThemeDefinition {\n if (seen.has(def.name)) throw new Error(`extends cycle at theme \"${def.name}\"`);\n if (!def.extends) return def;\n const parentDef = lookup?.(def.extends);\n if (!parentDef) throw new Error(`Theme \"${def.name}\" extends \"${def.extends}\", which is not defined`);\n const parent = mergeChain(parentDef, lookup, new Set([...seen, def.name]));\n const out: Record<string, unknown> = { ...def };\n for (const layer of LAYERS) out[layer] = { ...(parent[layer] ?? {}), ...(def[layer] ?? {}) };\n const shadowed = ownSteps(def);\n const inherited = Object.entries(parent.pins ?? {}).filter(([name]) => !shadowed.has(name));\n const axes = mergeAxes(parent.axes ?? {}, def.axes ?? {});\n const parentPins: Record<string, unknown> = parent.pins ?? {};\n const own = Object.entries(def.pins ?? {}).map(([name, v]) => [name, fillFromParent(v, parentPins[name], axes)]);\n out.pins = { ...Object.fromEntries(inherited), ...Object.fromEntries(own) };\n out.axes = axes;\n out.tones = def.tones ?? parent.tones;\n if (out.tones === undefined) delete out.tones;\n return out as unknown as ThemeDefinition;\n}\n","import { isByAxis } from '../axes';\nimport type { SemanticRule, ThemeDefinition } from '../definition';\nimport { mergeChain, type Lookup } from './merge';\nimport { declaredSteps } from './steps';\n\nexport interface AxisDependency {\n /** Axes this token's own entry varies on. */\n readonly own: readonly string[];\n /** `own` plus everything reachable through references and rule inputs. */\n readonly all: readonly string[];\n}\n\ninterface Node {\n readonly axes: Set<string>;\n readonly seeds: Set<string>;\n readonly edges: Set<string>;\n}\n\nconst SEED_REF = /^\\{seeds\\.([\\w-]+)\\}$/;\nconst TOKEN_REF = /^\\{([^}.]+)\\}$/;\n\nconst node = (): Node => ({ axes: new Set(), seeds: new Set(), edges: new Set() });\n\n/** Collect `by` axes, seed references and `{token}` references anywhere in a value. */\nfunction scan(v: unknown, into: Node): void {\n if (typeof v === 'string') {\n const s = v.trim();\n const seed = SEED_REF.exec(s);\n if (seed) into.seeds.add(seed[1]);\n else {\n const ref = TOKEN_REF.exec(s);\n if (ref) into.edges.add(ref[1]);\n }\n return;\n }\n if (Array.isArray(v)) {\n for (const x of v) scan(x, into);\n return;\n }\n if (typeof v === 'object' && v !== null) {\n if (isByAxis(v)) into.axes.add(v.by);\n for (const [k, x] of Object.entries(v)) if (k !== 'by') scan(x, into);\n }\n}\n\n/** The axes that decide which steps a ramp entry declares: `by`s wrapping the entry, and anything in its `steps`. */\nfunction scanSteps(entry: unknown, into: Node): void {\n if (isByAxis(entry)) {\n into.axes.add(entry.by);\n for (const [k, x] of Object.entries(entry)) if (k !== 'by') scanSteps(x, into);\n } else if (typeof entry === 'object' && entry !== null) {\n scan((entry as { steps?: unknown }).steps, into);\n }\n}\n\n/** Node key for a ramp's step list. `derive` rejects a token name containing a dot, so it never collides with one. */\nconst stepsKey = (ramp: string) => `ramps.${ramp}`;\n\n/** The non-`by` values under a possibly nested `by` object. */\nfunction leaves(v: unknown): unknown[] {\n return isByAxis(v) ? Object.entries(v).filter(([k]) => k !== 'by').flatMap(([, x]) => leaves(x)) : [v];\n}\n\nexport function axisDependencies(definition: ThemeDefinition, lookup?: Lookup): Record<string, AxisDependency> {\n const def = mergeChain(definition, lookup);\n const nodes = new Map<string, Node>();\n\n /** Step token → the ramps that declare it. */\n const stepRamps = new Map<string, Set<string>>();\n for (const [name, ramp] of Object.entries(def.ramps ?? {})) {\n const shape = node();\n scanSteps(ramp, shape);\n nodes.set(stepsKey(name), shape);\n const n = node();\n scan(ramp, n);\n for (const step of declaredSteps(ramp)) {\n nodes.set(`${name}-${step}`, n);\n stepRamps.set(`${name}-${step}`, (stepRamps.get(`${name}-${step}`) ?? new Set()).add(name));\n }\n }\n for (const [name, s] of Object.entries(def.scales ?? {})) {\n const n = node();\n scan(s, n);\n for (const step of declaredSteps(s)) nodes.set(`${name}-${step}`, n);\n }\n\n /** Every ramp a token could sit on: its own, or the ones its semantic rule leaves or pins lead to. */\n const rampsOf = (name: string, seen = new Set<string>()): Set<string> => {\n const out = new Set<string>(stepRamps.get(name));\n if (seen.has(name)) return out;\n seen.add(name);\n const add = (from: string) => {\n for (const r of rampsOf(from, seen)) out.add(r);\n };\n const rule = def.semantics?.[name];\n for (const leaf of rule === undefined ? [] : leaves(rule)) {\n if (typeof leaf !== 'object' || leaf === null) continue;\n const l = leaf as SemanticRule;\n if ('ramp' in l) out.add(l.ramp);\n else if ('from' in l) add(l.from);\n else if ('ref' in l) add(l.ref);\n }\n const pin = def.pins?.[name];\n if (pin !== undefined) {\n const n = node();\n scan(pin, n);\n for (const e of n.edges) add(e);\n }\n return out;\n };\n for (const [name, rule] of Object.entries(def.semantics ?? {})) {\n const n = node();\n scan(rule, n);\n for (const leaf of leaves(rule) as SemanticRule[]) {\n if ('ref' in leaf) n.edges.add(leaf.ref);\n if ('from' in leaf) {\n n.edges.add(leaf.from);\n for (const r of rampsOf(leaf.from)) {\n n.edges.add(stepsKey(r));\n // darker and lighter read which end of the ramp is darker.\n if (leaf.dir !== 'away') for (const s of declaredSteps(def.ramps?.[r])) n.edges.add(`${r}-${s}`);\n }\n }\n if ('step' in leaf) {\n n.edges.add(stepsKey(leaf.ramp));\n for (const s of leaves(leaf.step)) n.edges.add(`${leaf.ramp}-${String(s)}`);\n }\n if ('contrast' in leaf) {\n n.edges.add(stepsKey(leaf.ramp));\n for (const a of leaf.contrast.against) n.edges.add(a);\n for (const s of declaredSteps(def.ramps?.[leaf.ramp])) n.edges.add(`${leaf.ramp}-${s}`);\n }\n }\n nodes.set(name, n);\n }\n for (const layer of [def.components, def.pins]) {\n for (const [name, v] of Object.entries(layer ?? {})) {\n const n = node();\n scan(v, n);\n nodes.set(name, n);\n }\n }\n\n const order = Object.keys(def.axes ?? {});\n const sorted = (s: Set<string>) => order.filter((a) => s.has(a));\n const ownOf = (n: Node) => {\n const out = new Set(n.axes);\n for (const seed of n.seeds) {\n const s = node();\n scan(def.seeds?.[seed], s);\n for (const a of s.axes) out.add(a);\n }\n return out;\n };\n\n const ownSets = new Map<string, Set<string>>();\n for (const [name, n] of nodes) ownSets.set(name, ownOf(n));\n\n // `all[n] = own[n] ∪ ⋃ all[edge]`, iterated to a fixpoint instead of walked recursively —\n // a per-path `visiting` guard would memoize the empty answer for whichever cycle node it\n // revisits first. This converges because every step only adds axes, which are finite.\n const all = new Map<string, Set<string>>();\n for (const [name, own] of ownSets) all.set(name, new Set(own));\n let changed = true;\n while (changed) {\n changed = false;\n for (const [name, n] of nodes) {\n const out = all.get(name)!;\n for (const e of n.edges) {\n const from = all.get(e);\n if (!from) continue;\n for (const a of from) if (!out.has(a)) { out.add(a); changed = true; }\n }\n }\n }\n\n const result: Record<string, AxisDependency> = {};\n for (const name of nodes.keys()) if (!name.includes('.')) result[name] = { own: sorted(ownSets.get(name)!), all: sorted(all.get(name)!) };\n return result;\n}\n","import { DEFAULT_CONSTRAINTS, generate, type Anchor, type Constraints } from './color/generate';\nimport { toHex, toLch } from './color/oklch';\n\nexport interface LightnessParams {\n readonly steps: readonly string[];\n readonly lightness: readonly [number, number];\n readonly curve: number;\n readonly hue: number;\n readonly peak: number;\n /** Lifts the first step's chroma off zero, as `darkBias` lifts the last. Default 0. */\n readonly lightBias?: number;\n readonly darkBias: number;\n readonly anchor?: Readonly<Record<string, string>>;\n}\n\n// Above anything sRGB holds, so the gamut clamp in toHex decides.\nconst MAX_CHROMA = 0.4;\n\nconst smoothstep = (t: number) => t * t * (3 - 2 * t);\nconst envelope = (t: number, lightBias: number, darkBias: number) => Math.sin(Math.PI * t) + lightBias * (1 - t) + darkBias * t;\n\nfunction envelopeMax(lightBias: number, darkBias: number): number {\n let max = 0;\n for (let i = 0; i <= 1000; i += 1) max = Math.max(max, envelope(i / 1000, lightBias, darkBias));\n return max;\n}\n\n/**\n * Step name → hex. Lightness walks from `lightness[0]` to `lightness[1]`, `curve` blending an even walk toward a\n * smoothstep; chroma is `peak` scaled by the envelope `sin(πt) + lightBias·(1−t) + darkBias·t` normalized to a maximum of 1.\n *\n * An anchored step emits its anchor exactly, and the anchor replaces `hue` and `peak`: its OKLCH hue becomes the hue and\n * its chroma becomes the peak, unscaled by the envelope. With several anchors, both blend linearly by step between\n * consecutive anchors, hue along the shorter arc; steps before the first anchor or after the last take that anchor's.\n */\nexport function lightnessRamp(p: LightnessParams): Record<string, string> {\n const n = p.steps.length;\n const at = (i: number) => (n === 1 ? 0 : i / (n - 1));\n const lightBias = p.lightBias ?? 0;\n const max = envelopeMax(lightBias, p.darkBias);\n\n const anchors = p.steps.flatMap((s, i) => {\n const hex = p.anchor?.[s];\n if (hex === undefined) return [];\n const { C, H } = toLch(hex);\n return [{ i, hue: H, peak: C }];\n });\n const hueAndPeak = (i: number): { hue: number; peak: number } => {\n if (anchors.length === 0) return p;\n const next = anchors.findIndex((a) => a.i >= i);\n if (next === 0) return anchors[0];\n if (next === -1) return anchors[anchors.length - 1];\n const a = anchors[next - 1];\n const b = anchors[next];\n const f = (i - a.i) / (b.i - a.i);\n const arc = ((((b.hue - a.hue) % 360) + 540) % 360) - 180;\n return { hue: (((a.hue + arc * f) % 360) + 360) % 360, peak: a.peak + (b.peak - a.peak) * f };\n };\n\n const out: Record<string, string> = {};\n p.steps.forEach((step, i) => {\n const fixed = p.anchor?.[step];\n if (fixed !== undefined) {\n out[step] = fixed.toLowerCase();\n return;\n }\n const t = at(i);\n const L = p.lightness[0] + (p.lightness[1] - p.lightness[0]) * (t + (smoothstep(t) - t) * p.curve);\n const { hue, peak } = hueAndPeak(i);\n out[step] = toHex(L, Math.min((peak * envelope(t, lightBias, p.darkBias)) / max, MAX_CHROMA), hue);\n });\n return out;\n}\n\nexport function categoricalRamp(\n steps: readonly string[],\n gates: Partial<Constraints>,\n anchors: readonly Anchor[],\n): { colors: Record<string, string>; feasible: boolean } {\n const palette = generate({ ...DEFAULT_CONSTRAINTS, ...gates, count: steps.length, anchors });\n const colors: Record<string, string> = {};\n steps.forEach((step, i) => {\n colors[step] = palette.swatches[i].hex.toLowerCase();\n });\n return { colors, feasible: palette.feasible };\n}\n","export interface ScaleParams {\n readonly base: number;\n readonly step?: number;\n readonly ratio?: number;\n readonly factors?: readonly number[];\n}\n\nexport function scale(steps: readonly string[], p: ScaleParams): Record<string, string> {\n const rules = [p.step, p.ratio, p.factors].filter((r) => r !== undefined);\n if (rules.length !== 1) {\n throw new Error('A scale takes exactly one of `step`, `ratio` and `factors`');\n }\n if (p.factors && p.factors.length !== steps.length) {\n throw new Error(`A scale needs one factor per step; got ${p.factors.length} for ${steps.length} steps`);\n }\n const out: Record<string, string> = {};\n steps.forEach((name, i) => {\n let v: number;\n if (p.factors !== undefined) v = p.base * p.factors[i];\n else if (p.step !== undefined) v = p.base + p.step * i;\n else v = p.base * p.ratio! ** i;\n out[name] = `${Math.round(v)}px`;\n });\n return out;\n}\n","import { pick, type Selection, type Varying } from '../axes';\nimport type { PinObject, SemanticRule } from '../definition';\nimport type { RawToken, TokenValue } from '../dtcg/types';\nimport { contrast, toLch } from './color/oklch';\nimport type { Issue } from './types';\n\nconst TOKEN_REF = /^\\{([^}.]+)\\}$/;\nconst HEX = /^#[0-9a-f]{6}$/i;\nconst MAX_DEPTH = 32;\n\nexport interface SemanticContext {\n readonly sel: Selection;\n /** Ramp and scale tokens derived so far. */\n readonly tokens: Readonly<Record<string, RawToken>>;\n /** Ramp name → its steps, in order. */\n readonly ramps: Readonly<Record<string, readonly string[]>>;\n /** The pin this token gets for the selection, if one does. Rules that measure color read final colors, not generated ones. */\n readonly pinned: (name: string) => PinObject | undefined;\n /** The component this name gets for the selection, if one does. */\n readonly component: (name: string) => PinObject | undefined;\n /** Whether a name is produced, or failed to be, at this selection. An `against` name that is neither is dangling. */\n readonly known: (name: string) => boolean;\n readonly issues: Issue[];\n}\n\nexport interface DerivedSemantic {\n readonly token: RawToken;\n readonly rule: string;\n /** Set when the semantic ended on a ramp step. */\n readonly position?: { readonly ramp: string; readonly index: number };\n}\n\ntype Position = NonNullable<DerivedSemantic['position']>;\n\ninterface Env {\n readonly get: (name: string) => DerivedSemantic | undefined;\n readonly color: (value: TokenValue | undefined) => string | undefined;\n /** The ramp step a semantic ends on once its pin applies; undefined for anything else. */\n readonly positionOf: (name: string) => Position | undefined;\n /** The ramp step a reference to `name` ends on: the step itself, or wherever its pin or rule leads. */\n readonly positionAt: (name: string) => Position | undefined;\n}\n\nconst isRecord = (x: unknown): x is Record<string, unknown> => typeof x === 'object' && x !== null && !Array.isArray(x);\n\nconst refTarget = (value: TokenValue): string | undefined =>\n typeof value === 'string' ? TOKEN_REF.exec(value.trim())?.[1] : undefined;\n\nexport function deriveSemantics(\n rules: Readonly<Record<string, Varying<SemanticRule>>>,\n ctx: SemanticContext,\n): Map<string, DerivedSemantic> {\n const done = new Map<string, DerivedSemantic>();\n const failed = new Set<string>();\n const inProgress = new Set<string>();\n\n const get: Env['get'] = (name) => {\n if (done.has(name)) return done.get(name);\n if (failed.has(name) || !Object.hasOwn(rules, name)) return undefined;\n if (inProgress.has(name)) throw new Error(`Semantic cycle at \"${name}\" (${[...inProgress].join(' → ')})`);\n inProgress.add(name);\n const p = pick(rules[name], ctx.sel);\n let derived: DerivedSemantic | undefined;\n if (!p.ok) {\n ctx.issues.push({ kind: 'missing-axis-value', path: `semantics.${name}`, axis: p.axis, value: p.value });\n } else if (!isRecord(p.value)) {\n ctx.issues.push({ kind: 'invalid', path: `semantics.${name}`, message: 'expected an object' });\n } else {\n derived = deriveOne(name, p.value, ctx, env);\n }\n inProgress.delete(name);\n if (derived) done.set(name, derived);\n else failed.add(name);\n return derived;\n };\n\n /** A value's final solid color as hex, following references through pins; undefined for anything else. */\n const color = (value: TokenValue | undefined, depth = 0): string | undefined => {\n if (typeof value !== 'string' || depth > MAX_DEPTH) return undefined;\n const v = value.trim();\n const m = TOKEN_REF.exec(v);\n if (!m) return HEX.test(v) ? v.toLowerCase() : undefined;\n return solid(ctx.pinned(m[1]) ?? ctx.tokens[m[1]] ?? get(m[1])?.token ?? ctx.component(m[1]), depth + 1);\n };\n const solid = (t: { readonly value: TokenValue; readonly alpha?: number } | undefined, depth = 0) =>\n t && t.alpha === undefined ? color(t.value, depth) : undefined;\n\n const rampStep = (name: string): Position | undefined => {\n if (!Object.hasOwn(ctx.tokens, name)) return undefined;\n for (const [ramp, steps] of Object.entries(ctx.ramps)) {\n const index = name.startsWith(`${ramp}-`) ? steps.indexOf(name.slice(ramp.length + 1)) : -1;\n if (index >= 0) return { ramp, index };\n }\n return undefined;\n };\n\n const positionAt = (name: string, depth = 0): Position | undefined => {\n if (depth > MAX_DEPTH) return undefined;\n const step = rampStep(name);\n if (step) return step;\n const pin = ctx.pinned(name);\n if (pin) {\n const target = refTarget(pin.value);\n return target === undefined ? undefined : positionAt(target, depth + 1);\n }\n return Object.hasOwn(rules, name) ? get(name)?.position : undefined;\n };\n const positionOf: Env['positionOf'] = (name) => (Object.hasOwn(rules, name) ? positionAt(name) : undefined);\n\n const env: Env = { get, color, positionOf, positionAt };\n\n for (const name of Object.keys(rules)) get(name);\n\n return new Map(Object.keys(rules).filter((n) => done.has(n)).map((n) => [n, done.get(n)!]));\n}\n\nconst lightnessOf = (hex: string | undefined) => (hex ? toLch(hex).L : Number.NaN);\n\nfunction deriveOne(name: string, r: SemanticRule, ctx: SemanticContext, env: Env): DerivedSemantic | undefined {\n const description = r.description;\n const invalid = (message: string) => {\n ctx.issues.push({ kind: 'invalid', path: `semantics.${name}`, message });\n return undefined;\n };\n\n if ('value' in r) {\n return { rule: 'value', token: { type: r.type ?? 'unknown', value: r.value, alpha: undefined, description } };\n }\n\n if ('ref' in r) {\n const type = r.type ?? ctx.tokens[r.ref]?.type ?? env.get(r.ref)?.token.type ?? 'unknown';\n return { rule: 'ref', position: env.positionAt(r.ref), token: { type, value: `{${r.ref}}`, alpha: r.alpha, description } };\n }\n\n if ('step' in r) {\n const picked = pick(r.step, ctx.sel);\n if (!picked.ok) {\n ctx.issues.push({ kind: 'missing-axis-value', path: `semantics.${name}.step`, axis: picked.axis, value: picked.value });\n return undefined;\n }\n return atStep(name, r.ramp, (ctx.ramps[r.ramp] ?? []).indexOf(picked.value), 'step', description, ctx);\n }\n\n const rampColor = (ramp: string, step: string) => env.color(`{${ramp}-${step}}`);\n /** 1 when the ramp darkens toward its last step, -1 when it lightens; undefined, reported, when its ends cannot say. */\n const darkening = (ramp: string, steps: readonly string[]) => {\n const first = lightnessOf(rampColor(ramp, steps[0]));\n const last = lightnessOf(rampColor(ramp, steps[steps.length - 1]));\n if (Number.isNaN(first) || Number.isNaN(last) || first === last) return invalid(`cannot tell which end of ramp \"${ramp}\" is darker`);\n return last < first ? 1 : -1;\n };\n\n if ('from' in r) {\n const from = env.positionOf(r.from);\n if (!from) return invalid(`\"${r.from}\" does not end on a ramp step`);\n const { ramp, index } = from;\n const steps = ctx.ramps[ramp];\n const last = steps.length - 1;\n let sign: number;\n if (r.dir === 'darker' || r.dir === 'lighter') {\n const darker = darkening(ramp, steps);\n if (darker === undefined) return undefined;\n sign = r.dir === 'darker' ? darker : -darker;\n } else {\n sign = index <= last / 2 ? 1 : -1;\n }\n const target = index + sign * r.offset;\n if (target < 0 || target > last) invalid(`offset ${r.offset} runs off ramp \"${ramp}\"`);\n return atStep(name, ramp, Math.max(0, Math.min(last, target)), 'offset', description, ctx);\n }\n\n if ('contrast' in r) {\n for (const a of r.contrast.against) requireKnown(name, a, ctx.known);\n const steps = ctx.ramps[r.ramp];\n if (!steps) return invalid(`no ramp \"${r.ramp}\"`);\n if (r.contrast.against.length === 0) return invalid('contrast needs at least one surface');\n const colors = steps.map((s) => rampColor(r.ramp, s));\n const against = r.contrast.against.map((a) => env.color(`{${a}}`));\n if (colors.some((c) => !c) || against.some((hex) => !hex)) return invalid('contrast needs solid colors on both sides');\n const darker = darkening(r.ramp, steps);\n if (darker === undefined) return undefined;\n\n const L = colors.map(lightnessOf);\n const surfaces = against.map(lightnessOf);\n const meanL = surfaces.reduce((sum, l) => sum + l, 0) / surfaces.length;\n const last = steps.length - 1;\n const sign = Math.abs(L[last] - meanL) >= Math.abs(L[0] - meanL) ? 1 : -1;\n const lo = Math.min(...surfaces);\n const hi = Math.max(...surfaces);\n const worst = (i: number) => Math.min(...against.map((hex) => contrast(colors[i]!, hex!)));\n /** From the first step past every surface toward one ramp end, to that end. */\n const walk = (toLast: boolean) => {\n const order = steps.map((_, i) => (toLast ? i : last - i));\n const past = toLast === (darker > 0) ? (l: number) => l < lo : (l: number) => l > hi;\n const start = order.findIndex((i) => past(L[i]));\n return start < 0 ? [] : order.slice(start);\n };\n\n // OKLCH distance picks the first direction and WCAG luminance decides passing, so they can disagree.\n const walked = [...walk(sign > 0), ...walk(sign < 0)];\n const between = steps.map((_, i) => i).filter((i) => !walked.includes(i)).sort((a, b) => worst(b) - worst(a));\n for (const i of [...walked, ...between]) {\n if (worst(i) >= r.contrast.min) return atStep(name, r.ramp, i, 'contrast', description, ctx);\n }\n let best = { index: sign > 0 ? 0 : last, ratio: -1 };\n for (const i of steps.map((_, k) => (sign > 0 ? k : last - k))) {\n const ratio = worst(i);\n if (ratio > best.ratio) best = { index: i, ratio };\n }\n ctx.issues.push({\n kind: 'contrast-unmet',\n token: name,\n min: r.contrast.min,\n against: [...r.contrast.against],\n picked: steps[best.index],\n ratio: best.ratio,\n });\n return atStep(name, r.ramp, best.index, 'contrast', description, ctx);\n }\n\n return invalid('unrecognized rule');\n}\n\nfunction requireKnown(owner: string, name: string, known: (name: string) => boolean): void {\n if (!known(name)) throw new Error(`Semantic \"${owner}\" references \"${name}\", which is not defined`);\n}\n\n/** Audits every semantic's `check` against final tokens, so components and pins count. Run after references are checked, so every chain ends. */\nexport function checkSemantics(\n rules: Readonly<Record<string, Varying<SemanticRule>>>,\n sel: Selection,\n tokens: Readonly<Record<string, RawToken>>,\n known: (name: string) => boolean,\n issues: Issue[],\n): void {\n /** A name's final solid color as hex; null when its chain reaches a name whose production failed, which was reported then. */\n const solid = (name: string): string | null | undefined => {\n for (let n = name; ; ) {\n if (!Object.hasOwn(tokens, n)) return null;\n const t = tokens[n];\n if (t.alpha !== undefined || typeof t.value !== 'string') return undefined;\n const v = t.value.trim();\n const m = TOKEN_REF.exec(v);\n if (!m) return HEX.test(v) ? v.toLowerCase() : undefined;\n n = m[1];\n }\n };\n\n for (const name of Object.keys(rules)) {\n const p = pick(rules[name], sel);\n const check = p.ok && isRecord(p.value) ? (p.value as SemanticRule).check : undefined;\n if (!check) continue;\n for (const a of check.against) requireKnown(name, a, known);\n if (!Object.hasOwn(tokens, name)) continue;\n const path = `semantics.${name}.check`;\n if (check.against.length === 0) {\n issues.push({ kind: 'invalid', path, message: 'check needs at least one surface' });\n continue;\n }\n const hex = solid(name);\n if (hex === null) continue;\n if (!hex) {\n issues.push({ kind: 'invalid', path, message: `\"${name}\" is not a solid color` });\n continue;\n }\n for (const a of check.against) {\n const other = solid(a);\n if (other === null) continue;\n if (!other) {\n issues.push({ kind: 'invalid', path, message: `\"${a}\" is not a solid color` });\n continue;\n }\n const ratio = contrast(hex, other);\n if (ratio < check.contrast) issues.push({ kind: 'check-failed', token: name, against: a, min: check.contrast, ratio });\n }\n }\n}\n\nexport function atStep(\n name: string,\n ramp: string,\n index: number,\n rule: string,\n description: string | undefined,\n ctx: SemanticContext,\n): DerivedSemantic | undefined {\n const steps = ctx.ramps[ramp];\n if (!steps || index < 0 || index >= steps.length) {\n ctx.issues.push({ kind: 'invalid', path: `semantics.${name}`, message: `no such step on ramp \"${ramp}\"` });\n return undefined;\n }\n return {\n rule,\n position: { ramp, index },\n token: { type: 'color', value: `{${ramp}-${steps[index]}}`, alpha: undefined, description },\n };\n}\n","import { fullSelection, isByAxis, pick, type Selection, type Varying } from '../axes';\nimport type { PinObject, PinValue, ThemeDefinition } from '../definition';\nimport type { RawToken, TokenValue } from '../dtcg/types';\nimport { DEFAULT_CONSTRAINTS, type Anchor, type Constraints } from './color/generate';\nimport { mergeChain, type Lookup } from './merge';\nimport { categoricalRamp, lightnessRamp } from './ramps';\nimport { scale } from './scales';\nimport { checkSemantics, deriveSemantics } from './semantics';\nimport { declaredSteps } from './steps';\nimport type { DeriveResult, Issue, Layer, Provenance } from './types';\n\nconst SEED_REF = /^\\{seeds\\.([\\w-]+)\\}$/;\nconst REF = /^\\{([^}]+)\\}$/;\nconst HEX = /^#[0-9a-f]{6}$/i;\nconst UNTYPED = 'unknown';\n/** The ramp and scale fields that take `by` and `{seeds.name}`. Descriptions are text and are never settled. */\nconst PARAMS = ['kind', 'steps', 'lightness', 'curve', 'hue', 'chroma', 'anchor', 'gates', 'anchors', 'base', 'step', 'ratio', 'factors'];\n\nconst has = (o: object, key: string) => Object.hasOwn(o, key);\n\nfunction refName(value: TokenValue): string | undefined {\n return typeof value === 'string' ? REF.exec(value.trim())?.[1] : undefined;\n}\n\ninterface SettleContext {\n readonly sel: Selection;\n readonly seeds: Readonly<Record<string, number | string>>;\n /** Every seed the definition declares, whether or not it resolved at this selection. */\n readonly declaredSeeds: ReadonlySet<string>;\n readonly issues: Issue[];\n}\n\ninterface Settled {\n readonly value: unknown;\n readonly ok: boolean;\n}\n\n/** `v` with every `by` picked and every `{seeds.name}` replaced, at any depth. What cannot settle is left undefined and clears `ok`. */\nfunction settle(v: unknown, path: string, ctx: SettleContext): Settled {\n if (isByAxis(v)) {\n const picked = pick(v, ctx.sel);\n if (!picked.ok) {\n ctx.issues.push({ kind: 'missing-axis-value', path, axis: picked.axis, value: picked.value });\n return { value: undefined, ok: false };\n }\n return settle(picked.value, path, ctx);\n }\n if (Array.isArray(v)) {\n let ok = true;\n const value = v.map((x, i) => {\n const s = settle(x, `${path}.${i}`, ctx);\n ok = s.ok && ok;\n return s.value;\n });\n return { value, ok };\n }\n if (typeof v === 'object' && v !== null) {\n let ok = true;\n const value: Record<string, unknown> = {};\n for (const [k, x] of Object.entries(v)) {\n const s = settle(x, `${path}.${k}`, ctx);\n ok = s.ok && ok;\n value[k] = s.value;\n }\n return { value, ok };\n }\n if (typeof v === 'string') {\n const m = SEED_REF.exec(v.trim());\n if (!m) return { value: v, ok: true };\n if (has(ctx.seeds, m[1])) return { value: ctx.seeds[m[1]], ok: true };\n // A declared seed that did not resolve already reported its missing axis value.\n if (!ctx.declaredSeeds.has(m[1])) ctx.issues.push({ kind: 'invalid', path, message: `unknown seed \"${m[1]}\"` });\n return { value: undefined, ok: false };\n }\n return { value: v, ok: true };\n}\n\n/** Reads a settled entry, reporting every value of the wrong shape. */\nclass Reader {\n ok = true;\n private readonly issues: Issue[];\n\n constructor(issues: Issue[]) {\n this.issues = issues;\n }\n\n fail(path: string, message: string): void {\n this.issues.push({ kind: 'invalid', path, message });\n this.ok = false;\n }\n\n num(x: unknown, path: string): number {\n if (typeof x === 'number' && Number.isFinite(x)) return x;\n this.fail(path, 'expected a number');\n return Number.NaN;\n }\n\n optNum(x: unknown, path: string, fallback: number): number;\n optNum(x: unknown, path: string): number | undefined;\n optNum(x: unknown, path: string, fallback?: number): number | undefined {\n return x === undefined ? fallback : this.num(x, path);\n }\n\n optNums(x: unknown, path: string): number[] | undefined {\n if (x === undefined) return undefined;\n if (!Array.isArray(x)) {\n this.fail(path, 'expected an array of numbers');\n return undefined;\n }\n return x.map((v, i) => this.num(v, `${path}.${i}`));\n }\n\n record(x: unknown, path: string): Record<string, unknown> {\n if (x === undefined) return {};\n if (typeof x === 'object' && x !== null && !Array.isArray(x)) return x as Record<string, unknown>;\n this.fail(path, 'expected an object');\n return {};\n }\n}\n\nconst isRecord = (x: unknown): x is Record<string, unknown> => typeof x === 'object' && x !== null && !Array.isArray(x);\n\nconst stepNames = (x: unknown): string[] | undefined =>\n Array.isArray(x) && x.every((s) => typeof s === 'string') ? x : undefined;\n\nfunction rampColors(name: string, r: Record<string, unknown>, steps: readonly string[], ctx: SettleContext): Record<string, string> | undefined {\n const path = `ramps.${name}`;\n const read = new Reader(ctx.issues);\n\n if (r.kind === 'lightness') {\n const l = r.lightness;\n let lightness: [number, number] = [0, 0];\n if (Array.isArray(l) && l.length === 2) lightness = [read.num(l[0], `${path}.lightness.0`), read.num(l[1], `${path}.lightness.1`)];\n else read.fail(`${path}.lightness`, 'expected two numbers');\n const chroma = read.record(r.chroma, `${path}.chroma`);\n const atLeastZero = (v: number, at: string) => {\n if (v < 0) read.fail(at, 'expected a number ≥ 0');\n return v;\n };\n const peak = r.chroma === undefined ? 0 : atLeastZero(read.num(chroma.peak, `${path}.chroma.peak`), `${path}.chroma.peak`);\n const anchor: Record<string, string> = {};\n for (const [step, v] of Object.entries(read.record(r.anchor, `${path}.anchor`))) {\n if (typeof v === 'string' && HEX.test(v)) anchor[step] = v;\n else read.fail(`${path}.anchor.${step}`, 'expected a hex color');\n }\n const params = {\n steps,\n lightness,\n curve: read.optNum(r.curve, `${path}.curve`, 0),\n hue: read.optNum(r.hue, `${path}.hue`, 0),\n peak,\n lightBias: atLeastZero(read.optNum(chroma.lightBias, `${path}.chroma.lightBias`, 0), `${path}.chroma.lightBias`),\n darkBias: atLeastZero(read.optNum(chroma.darkBias, `${path}.chroma.darkBias`, 0), `${path}.chroma.darkBias`),\n anchor,\n };\n return read.ok ? lightnessRamp(params) : undefined;\n }\n\n if (r.kind === 'categorical') {\n const gates: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(read.record(r.gates, `${path}.gates`))) {\n if (!has(DEFAULT_CONSTRAINTS, k) || k === 'count' || k === 'anchors') read.fail(`${path}.gates.${k}`, 'unknown gate');\n else if (typeof v !== typeof DEFAULT_CONSTRAINTS[k as keyof typeof DEFAULT_CONSTRAINTS]) {\n read.fail(`${path}.gates.${k}`, `expected a ${typeof DEFAULT_CONSTRAINTS[k as keyof typeof DEFAULT_CONSTRAINTS]}`);\n } else gates[k] = v;\n }\n const anchors: Anchor[] = [];\n const rawAnchors = r.anchors ?? [];\n if (!Array.isArray(rawAnchors)) read.fail(`${path}.anchors`, 'expected a list');\n else {\n rawAnchors.forEach((a, i) => {\n const at = `${path}.anchors.${i}`;\n const o = read.record(a, at);\n if (typeof o.name !== 'string') read.fail(`${at}.name`, 'expected a string');\n anchors.push({\n name: String(o.name),\n hue: read.num(o.hue, `${at}.hue`),\n lightness: read.num(o.lightness, `${at}.lightness`),\n chroma: read.optNum(o.chroma, `${at}.chroma`),\n });\n });\n }\n if (!read.ok) return undefined;\n const { colors, feasible } = categoricalRamp(steps, gates as Partial<Constraints>, anchors);\n if (!feasible) ctx.issues.push({ kind: 'infeasible-ramp', ramp: name });\n return colors;\n }\n\n read.fail(`${path}.kind`, 'expected \"lightness\" or \"categorical\"');\n return undefined;\n}\n\nfunction scaleValues(name: string, s: Record<string, unknown>, steps: readonly string[], issues: Issue[]): { values: Record<string, string>; rule: string } | undefined {\n const path = `scales.${name}`;\n const read = new Reader(issues);\n const base = read.num(s.base, `${path}.base`);\n const step = read.optNum(s.step, `${path}.step`);\n const ratio = read.optNum(s.ratio, `${path}.ratio`);\n const factors = read.optNums(s.factors, `${path}.factors`);\n if (!read.ok) return undefined;\n try {\n const rule = factors !== undefined ? 'factors' : step !== undefined ? 'linear' : 'geometric';\n return { values: scale(steps, { base, step, ratio, factors }), rule };\n } catch (e) {\n issues.push({ kind: 'invalid', path, message: (e as Error).message });\n return undefined;\n }\n}\n\n/** Throws on a cycle, and on a reference to a missing name unless producing that name failed at this selection, which was reported then. */\nfunction checkReferences(tokens: Readonly<Record<string, RawToken>>, failed: ReadonlySet<string>): void {\n const done = new Set<string>();\n for (const start of Object.keys(tokens)) {\n const trail: string[] = [];\n let name: string | undefined = start;\n while (name !== undefined && !done.has(name)) {\n if (trail.includes(name)) throw new Error(`Reference cycle at token \"${name}\" (${[...trail, name].join(' → ')})`);\n trail.push(name);\n const target = refName(tokens[name].value);\n if (target !== undefined && !has(tokens, target)) {\n if (!failed.has(target)) throw new Error(`Token \"${name}\" references \"${target}\", which is not defined`);\n name = undefined;\n } else {\n name = target;\n }\n }\n for (const n of trail) done.add(n);\n }\n}\n\n/**\n * Types every untyped token from what its reference chain ends on; a pin with nothing to go on takes the type of what the\n * rule under it reaches, which is also written into `generated`. Final tokens are typed before rule values are read, and\n * again whenever a rule value typed one, so no lookup sees a half-typed chain. Runs after `checkReferences`, so chains end.\n */\nfunction inferTypes(tokens: Record<string, RawToken>, provenance: Record<string, Provenance>, failed: ReadonlySet<string>, issues: Issue[]): void {\n for (let changed = true; changed; ) {\n changed = false;\n const memo = new Map<string, string>();\n const typeOf = (start: string): string => {\n const trail: string[] = [];\n let type = UNTYPED;\n for (let name: string | undefined = start; name !== undefined && has(tokens, name); name = refName(tokens[name].value)) {\n const known = memo.get(name);\n if (known !== undefined) {\n type = known;\n break;\n }\n trail.push(name);\n if (tokens[name].type !== UNTYPED) {\n type = tokens[name].type;\n break;\n }\n }\n for (const name of trail) {\n if (type !== UNTYPED && tokens[name].type === UNTYPED) tokens[name] = { ...tokens[name], type };\n memo.set(name, type);\n }\n return type;\n };\n for (const name of Object.keys(tokens)) typeOf(name);\n for (const name of Object.keys(tokens)) {\n const p = provenance[name];\n const generated = p.generated;\n const target = generated?.type === UNTYPED ? refName(generated.value) : undefined;\n const type = target === undefined ? UNTYPED : typeOf(target);\n if (!generated || type === UNTYPED) continue;\n provenance[name] = { ...p, generated: { ...generated, type } };\n if (tokens[name].type === UNTYPED) {\n tokens[name] = { ...tokens[name], type };\n changed = true;\n }\n }\n }\n for (const [name, token] of Object.entries(tokens)) {\n // A reference is typed by what it reaches, reported there; a name whose production failed was reported then.\n if (token.type !== UNTYPED || refName(token.value) !== undefined || failed.has(name)) continue;\n issues.push({ kind: 'untyped-pin', token: name });\n }\n}\n\nconst isPinObject = (v: PinValue): v is PinObject =>\n typeof v === 'object' && v !== null && !Array.isArray(v) && 'value' in v;\n\nconst NAMED_LAYERS = ['ramps', 'scales', 'semantics', 'components', 'pins'] as const;\n/** A reference reads a dot as a group, and a name reaches CSS custom properties and the generated module unescaped. */\nconst SAFE_NAME = /^[A-Za-z0-9_-]+$/;\nconst isSafeName = (name: string) => SAFE_NAME.test(name);\nconst UNSAFE = (name: string) => `\"${name}\" cannot name a token: use letters, digits, \"-\" and \"_\"`;\n\nfunction withoutUnsafeNames(def: ThemeDefinition, issues: Issue[]): ThemeDefinition {\n let out = def;\n for (const layer of NAMED_LAYERS) {\n const entries = def[layer];\n if (!entries || Object.keys(entries).every(isSafeName)) continue;\n for (const n of Object.keys(entries)) {\n if (!isSafeName(n)) issues.push({ kind: 'invalid', path: `${layer}.${n}`, message: UNSAFE(n) });\n }\n out = { ...out, [layer]: Object.fromEntries(Object.entries(entries).filter(([n]) => isSafeName(n))) };\n }\n return out;\n}\n\n/** Derive every token of `definition` for one selection. Unmet rules are reported in `issues`; cycles and dangling references throw. */\nexport function derive(definition: ThemeDefinition, selection: Selection = {}, lookup?: Lookup): DeriveResult {\n const issues: Issue[] = [];\n const def = withoutUnsafeNames(mergeChain(definition, lookup), issues);\n const sel = fullSelection(def.axes ?? {}, selection);\n const seeds: Record<string, number | string> = {};\n for (const [k, v] of Object.entries(def.seeds ?? {})) {\n const picked = pick(v, sel);\n if (picked.ok) seeds[k] = picked.value;\n else issues.push({ kind: 'missing-axis-value', path: `seeds.${k}`, axis: picked.axis, value: picked.value });\n }\n const ctx: SettleContext = { sel, seeds, declaredSeeds: new Set(Object.keys(def.seeds ?? {})), issues };\n\n const tokens: Record<string, RawToken> = {};\n const provenance: Record<string, Provenance> = {};\n /** Names whose production was attempted and failed at this selection. */\n const failed = new Set<string>();\n const producer = new Map<string, string>();\n const put = (name: string, token: RawToken, layer: Layer, rule: string, path: string) => {\n const earlier = producer.get(name);\n if (earlier !== undefined) {\n issues.push({ kind: 'invalid', path, message: `\"${name}\" is already produced by ${earlier}` });\n return;\n }\n producer.set(name, path);\n tokens[name] = token;\n provenance[name] = { layer, rule, pinned: false };\n };\n /** `steps`, when they settled, are this selection's; otherwise every step the entry could declare is exempt. */\n const failEntry = (name: string, entry: unknown, steps: readonly string[] | undefined) => {\n for (const step of steps ?? declaredSteps(entry)) failed.add(`${name}-${step}`);\n };\n\n type SettledEntry =\n | { readonly ok: true; readonly r: Record<string, unknown>; readonly steps: string[] }\n | { readonly ok: false; readonly steps?: string[] };\n const settleEntry = (entry: unknown, path: string): SettledEntry => {\n let raw = entry;\n if (isByAxis(raw)) {\n const picked = pick(raw, sel);\n if (!picked.ok) {\n issues.push({ kind: 'missing-axis-value', path, axis: picked.axis, value: picked.value });\n return { ok: false };\n }\n raw = picked.value;\n }\n if (!isRecord(raw)) {\n issues.push({ kind: 'invalid', path, message: 'expected an object' });\n return { ok: false };\n }\n const r: Record<string, unknown> = { ...raw };\n let settled = true;\n for (const key of PARAMS) {\n if (!has(raw, key)) continue;\n const s = settle(raw[key], `${path}.${key}`, ctx);\n r[key] = s.value;\n settled = s.ok && settled;\n }\n const steps = stepNames(r.steps);\n if (!steps && settled) issues.push({ kind: 'invalid', path: `${path}.steps`, message: 'expected a list of step names' });\n if (steps?.includes('by')) {\n issues.push({ kind: 'invalid', path: `${path}.steps`, message: '\"by\" is reserved and cannot name a step' });\n return { ok: false, steps };\n }\n const unsafe = steps?.find((s) => !isSafeName(s));\n if (unsafe !== undefined) {\n issues.push({ kind: 'invalid', path: `${path}.steps`, message: UNSAFE(unsafe) });\n return { ok: false, steps };\n }\n return settled && steps ? { ok: true, r, steps } : { ok: false, steps };\n };\n const describe = (r: Record<string, unknown>, step: string) => {\n const d = isRecord(r.describe) ? r.describe[step] : undefined;\n return typeof d === 'string' ? d : undefined;\n };\n\n const rampSteps: Record<string, readonly string[]> = {};\n for (const [name, entry] of Object.entries(def.ramps ?? {})) {\n const path = `ramps.${name}`;\n const e = settleEntry(entry, path);\n if (e.steps) rampSteps[name] = e.steps;\n const colors = e.ok ? rampColors(name, e.r, e.steps, ctx) : undefined;\n if (!e.ok || !colors) {\n failEntry(name, entry, e.steps);\n continue;\n }\n for (const step of e.steps) {\n put(`${name}-${step}`, { type: 'color', value: colors[step], alpha: undefined, description: describe(e.r, step) }, 'ramps', String(e.r.kind), path);\n }\n }\n\n for (const [name, entry] of Object.entries(def.scales ?? {})) {\n const path = `scales.${name}`;\n const e = settleEntry(entry, path);\n const out = e.ok ? scaleValues(name, e.r, e.steps, issues) : undefined;\n if (!e.ok || !out) {\n failEntry(name, entry, e.steps);\n continue;\n }\n for (const st of e.steps) {\n put(`${name}-${st}`, { type: 'dimension', value: out.values[st], alpha: undefined, description: describe(e.r, st) }, 'scales', out.rule, path);\n }\n }\n\n /** `obj` with a whole-value `{seeds.name}` replaced by the seed; undefined when the seed has no value here. Reports an undeclared seed when given a path. */\n const seeded = (obj: PinObject, path?: string): PinObject | undefined => {\n const m = typeof obj.value === 'string' ? SEED_REF.exec(obj.value.trim()) : null;\n if (!m) return obj;\n if (has(seeds, m[1])) return { ...obj, value: seeds[m[1]] };\n if (path !== undefined && !ctx.declaredSeeds.has(m[1])) issues.push({ kind: 'invalid', path, message: `unknown seed \"${m[1]}\"` });\n return undefined;\n };\n const pinned = (name: string): PinObject | undefined => {\n const v = def.pins?.[name];\n const picked = v === undefined ? undefined : pick(v, sel);\n if (!picked?.ok) return undefined;\n return seeded(isPinObject(picked.value) ? picked.value : { value: picked.value });\n };\n const semantics = def.semantics ?? {};\n const components = def.components ?? {};\n const component = (name: string): PinObject | undefined => {\n const picked = has(components, name) ? pick(components[name], sel) : undefined;\n if (!picked?.ok) return undefined;\n return seeded(isPinObject(picked.value) ? picked.value : { value: picked.value });\n };\n const known = (name: string) =>\n has(tokens, name) || failed.has(name) || has(semantics, name) || has(components, name) || has(def.pins ?? {}, name);\n const derived = deriveSemantics(semantics, { sel, tokens, ramps: rampSteps, pinned, component, known, issues });\n for (const name of Object.keys(semantics)) {\n const d = derived.get(name);\n if (d) put(name, d.token, 'semantics', d.rule, `semantics.${name}`);\n else failed.add(name);\n }\n\n const toToken = (v: Varying<PinValue>, path: string, prior: RawToken | undefined): RawToken | undefined => {\n const picked = pick(v, sel);\n if (!picked.ok) {\n issues.push({ kind: 'missing-axis-value', path, axis: picked.axis, value: picked.value });\n return undefined;\n }\n const obj = seeded(isPinObject(picked.value) ? picked.value : { value: picked.value }, path);\n if (!obj) return undefined;\n return { type: obj.type ?? prior?.type ?? UNTYPED, value: obj.value, alpha: obj.alpha, description: obj.description ?? prior?.description };\n };\n\n for (const [name, v] of Object.entries(components)) {\n const path = `components.${name}`;\n const token = toToken(v, path, undefined);\n if (token) put(name, token, 'components', 'value', path);\n else failed.add(name);\n }\n\n for (const [name, v] of Object.entries(def.pins ?? {})) {\n const prior = has(tokens, name) ? tokens[name] : undefined;\n // A by-axis pin that leaves this selection out overrides nothing here.\n if (prior && !pick(v, sel).ok) continue;\n const token = toToken(v, `pins.${name}`, prior);\n if (!token) {\n if (!prior) failed.add(name);\n continue;\n }\n tokens[name] = token;\n provenance[name] = prior\n ? { ...provenance[name], pinned: true, generated: prior }\n : { layer: 'pins', rule: 'value', pinned: false };\n }\n\n checkReferences(tokens, failed);\n checkSemantics(semantics, sel, tokens, known, issues);\n inferTypes(tokens, provenance, failed, issues);\n return { tokens, provenance, issues };\n}\n","import { enumerateSelections, fullSelection, pick, selectionKey, type AxisDefs, type Selection, type Varying } from '../axes';\nimport type { SerializableColorList } from '../colorList';\nimport type { ThemeDefinition } from '../definition';\nimport type { RawToken } from '../dtcg/types';\nimport { derive } from './derive';\nimport { mergeChain, type Lookup } from './merge';\nimport { declaredSteps } from './steps';\n\n/**\n * A definition with every rule run: plain or `by`-varying tokens, references intact.\n * A branch `derive` could not produce is left out, so at runtime it falls through to the parent; definitions with\n * issues still bake, because the editor bakes mid-edit and the build refuses them before baking. Cycles and dangling\n * references still throw, as they do in `derive`.\n */\nexport interface BakedTheme {\n readonly name: string;\n readonly extends: string | null;\n readonly axes: AxisDefs;\n /** In layer order, then definition order. */\n readonly tokens: Readonly<Record<string, Varying<RawToken>>>;\n /** Each ramp this definition declares → its step names in order, which the tokens alone do not keep. */\n readonly ramps?: Readonly<Record<string, readonly string[]>>;\n readonly tones?: SerializableColorList;\n}\n\n/** Drop undefined fields so tokens compare and serialize the same way. */\nfunction normalize(t: RawToken): RawToken {\n return {\n type: t.type,\n value: t.value,\n ...(t.alpha !== undefined ? { alpha: t.alpha } : {}),\n ...(t.description !== undefined ? { description: t.description } : {}),\n };\n}\n\nconst same = (a: RawToken | undefined, b: RawToken | undefined) => JSON.stringify(a) === JSON.stringify(b);\n\n/** Selection key → that selection's derived tokens. */\ntype Table = Map<string, Record<string, RawToken>>;\n\nfunction table(def: ThemeDefinition, axes: AxisDefs, lookup: Lookup | undefined): Table {\n const out: Table = new Map();\n for (const sel of enumerateSelections(axes)) {\n const { tokens } = derive(def, sel, lookup);\n const normalized: Record<string, RawToken> = {};\n for (const [name, t] of Object.entries(tokens)) normalized[name] = normalize(t);\n out.set(selectionKey(axes, sel), normalized);\n }\n return out;\n}\n\n/** Token names in definition order: ramps, scales, semantics, components, then pins no earlier layer produces. */\nfunction definitionOrder(def: ThemeDefinition): string[] {\n const names = new Set<string>();\n for (const layer of [def.ramps, def.scales]) {\n for (const [name, entry] of Object.entries(layer ?? {})) for (const step of declaredSteps(entry)) names.add(`${name}-${step}`);\n }\n for (const layer of [def.semantics, def.components, def.pins]) for (const name of Object.keys(layer ?? {})) names.add(name);\n return [...names];\n}\n\n/** Derive `definition` at every selection and fold the results into one record of tokens with no rules left. */\nexport function bake(definition: ThemeDefinition, lookup?: Lookup): BakedTheme {\n return bakeChain(definition, lookup).at(-1)!;\n}\n\n/** `definition` and every theme it extends, baked, root first. */\nexport function bakeChain(definition: ThemeDefinition, lookup?: Lookup): BakedTheme[] {\n const merged = mergeChain(definition, lookup);\n const parentDef = definition.extends ? lookup?.(definition.extends) : undefined;\n const above = parentDef ? bakeChain(parentDef, lookup) : [];\n return [...above, bakeOver(definition, merged, above, lookup)];\n}\n\nfunction bakeOver(definition: ThemeDefinition, merged: ThemeDefinition, above: readonly BakedTheme[], lookup: Lookup | undefined): BakedTheme {\n const axes = merged.axes ?? {};\n const own = table(definition, axes, lookup);\n\n const at = (sel: Selection, name: string) => own.get(selectionKey(axes, sel))?.[name];\n /** What the runtime shows for `name` from the themes above: the nearest one whose pick succeeds. */\n const inherited = (sel: Selection, name: string): RawToken | undefined => {\n const full = fullSelection(axes, sel);\n for (let i = above.length - 1; i >= 0; i--) {\n const tokens = above[i].tokens;\n if (!Object.hasOwn(tokens, name)) continue;\n const picked = pick(tokens[name], full);\n if (picked.ok) return picked.value;\n }\n return undefined;\n };\n\n const produced = new Set([...own.values()].flatMap((t) => Object.keys(t)));\n const ordered = definitionOrder(merged).filter((n) => produced.has(n));\n const names = [...ordered, ...[...produced].filter((n) => !ordered.includes(n))];\n\n const selections = enumerateSelections(axes);\n const tokens: Record<string, Varying<RawToken>> = {};\n for (const name of names) {\n if (selections.every((sel) => same(at(sel, name), inherited(sel, name)))) continue;\n\n const varying = Object.keys(axes).filter((axis) =>\n selections.some((sel) => Object.keys(axes[axis].values).some((v) => !same(at(sel, name), at({ ...sel, [axis]: v }, name)))),\n );\n\n const build = (i: number, sel: Record<string, string>): Varying<RawToken> | undefined => {\n if (i === varying.length) return at(fullSelection(axes, sel), name);\n const axis = varying[i];\n const branch: Record<string, unknown> = { by: axis };\n let any = false;\n for (const v of Object.keys(axes[axis].values)) {\n const x = build(i + 1, { ...sel, [axis]: v });\n if (x !== undefined) {\n branch[v] = x;\n any = true;\n }\n }\n return any ? (branch as Varying<RawToken>) : undefined;\n };\n const value = build(0, {});\n if (value !== undefined) tokens[name] = value;\n }\n\n const ramps = Object.fromEntries(Object.entries(definition.ramps ?? {}).map(([name, entry]) => [name, declaredSteps(entry)]));\n return {\n name: definition.name,\n extends: definition.extends ?? null,\n axes,\n tokens,\n ...(Object.keys(ramps).length > 0 ? { ramps } : {}),\n ...(definition.tones !== undefined ? { tones: definition.tones } : {}),\n };\n}\n","import { enumerateSelections, fullSelection, pick, pickAll, type AxisDefs, type Selection } from '../../axes';\nimport { resolveTokens } from '../../dtcg/resolve';\nimport type { RawToken } from '../../dtcg/types';\nimport type { BakedTheme } from '../bake';\nimport type { AxisDependency } from '../deps';\n\nexport interface EmitInput {\n readonly baked: BakedTheme;\n readonly deps: Readonly<Record<string, AxisDependency>>;\n /** The default theme alone gets `:root` and the unscoped selectors. */\n readonly isDefault: boolean;\n}\n\nconst REF = /^\\{([^}]+)\\}$/;\n\n/** `{gray-100}` → `gray-100`. A group prefix (`{color.gray-100}`) is dropped, as `resolveTokens` does. */\nfunction refTarget(token: RawToken): string | null {\n const m = typeof token.value === 'string' ? REF.exec(token.value.trim()) : null;\n if (!m) return null;\n const path = m[1];\n const dot = path.indexOf('.');\n return dot === -1 ? path : path.slice(dot + 1);\n}\n\n/** A reference becomes `var()` (or `color-mix()` with an alpha); a literal is resolved. */\nexport function cssValue(name: string, token: RawToken): string {\n const target = refTarget(token);\n if (target === null) return resolveTokens({ [name]: token })[name];\n if (token.alpha === undefined) return `var(--wzl-${target})`;\n return `color-mix(in srgb, var(--wzl-${target}) ${Math.round(token.alpha * 100)}%, transparent)`;\n}\n\n/** Non-empty subsets of the axes, in declaration order, smallest first. */\nfunction axisSets(axes: AxisDefs): string[][] {\n const names = Object.keys(axes);\n const sets: string[][] = [];\n for (let mask = 1; mask < 1 << names.length; mask += 1) sets.push(names.filter((_, i) => mask & (1 << i)));\n return sets.sort((a, b) => a.length - b.length);\n}\n\nfunction combinations(axes: AxisDefs, set: readonly string[]): Selection[] {\n let out: Record<string, string>[] = [{}];\n for (const axis of set) out = out.flatMap((s) => Object.keys(axes[axis].values).map((v) => ({ ...s, [axis]: v })));\n return out;\n}\n\n/** The value's scheme, or `normal` when a sibling value has one, so a nested scheme-less value resets it.\n * A value the theme doesn't declare at all falls back to its tokens from the theme's own default value,\n * so it takes that value's scheme too, rather than a blanket reset. */\nfunction schemeOf(axes: AxisDefs, axis: string, value: string): string | undefined {\n const def = axes[axis];\n if (!def) return undefined;\n if (!(value in def.values)) return schemeOf(axes, axis, def.default);\n return def.values[value].scheme ?? (Object.values(def.values).some((v) => v.scheme) ? 'normal' : undefined);\n}\n\nfunction checkSchemes({ name, axes }: BakedTheme): void {\n const carrying = Object.keys(axes).filter((a) => Object.values(axes[a].values).some((v) => v.scheme));\n if (carrying.length > 1) throw new Error(`Theme \"${name}\": only one axis may carry a color scheme, but ${carrying.join(' and ')} do`);\n}\n\n/** The theme's axes followed by any the default has and it lacks; a shared axis gets both themes' values. */\nfunction combineAxes(own: AxisDefs, other: AxisDefs): AxisDefs {\n const out: Record<string, AxisDefs[string]> = {};\n for (const [name, def] of Object.entries(own)) out[name] = { ...def, values: { ...other[name]?.values, ...def.values } };\n for (const [name, def] of Object.entries(other)) if (!out[name]) out[name] = def;\n return out;\n}\n\n/** A theme as the runtime sees it: each token from the nearest theme in its `extends` chain that has it at a selection. */\nclass Resolved {\n readonly axes: AxisDefs;\n readonly names: readonly string[];\n private readonly chain: readonly BakedTheme[];\n private readonly memo = new Map<string, Map<string, string>>();\n\n constructor(axes: AxisDefs, chain: readonly BakedTheme[]) {\n this.axes = axes;\n this.chain = chain;\n this.names = [...new Set([...chain].reverse().flatMap((t) => Object.keys(t.tokens)))];\n }\n\n token(name: string, sel: Selection): RawToken | undefined {\n const full = fullSelection(this.axes, sel);\n for (const t of this.chain) {\n if (!Object.hasOwn(t.tokens, name)) continue;\n const picked = pick(t.tokens[name], full);\n if (picked.ok) return picked.value;\n }\n return undefined;\n }\n\n /** What a browser computes: every `var()` substituted, down to literals. */\n expanded(name: string, sel: Selection, stack: readonly string[] = []): string {\n const key = JSON.stringify(fullSelection(this.axes, sel));\n const memo = this.memo.get(key) ?? this.memo.set(key, new Map()).get(key)!;\n const hit = memo.get(name);\n if (hit !== undefined) return hit;\n const token = this.token(name, sel);\n if (!token) return `<unset ${name}>`;\n if (stack.includes(name)) return '<cycle>';\n const value = cssValue(name, token).replace(/var\\(--wzl-([^)]+)\\)/g, (_, n: string) => this.expanded(n, sel, [...stack, name]));\n memo.set(name, value);\n return value;\n }\n}\n\nfunction chainOf(baked: BakedTheme, byName: ReadonlyMap<string, BakedTheme>): BakedTheme[] {\n if (!baked.extends) return [baked];\n const parent = byName.get(baked.extends);\n if (!parent) throw new Error(`Theme \"${baked.name}\" extends \"${baked.extends}\", which is not being emitted`);\n return [baked, ...chainOf(parent, byName)];\n}\n\nconst union = (axes: AxisDefs, ...sets: (readonly string[] | undefined)[]) => {\n const all = new Set(sets.flatMap((s) => s ?? []));\n return Object.keys(axes).filter((a) => all.has(a));\n};\n\ninterface Plan {\n readonly theme: string;\n readonly axes: AxisDefs;\n /** Axes that emit `color-scheme` for this theme. */\n readonly schemes: AxisDefs;\n readonly names: readonly string[];\n readonly all: (name: string) => readonly string[];\n readonly own: (name: string) => readonly string[];\n readonly value: (name: string, sel: Selection) => RawToken | undefined;\n}\n\nfunction blocks(lines: string[], plan: Plan, selector: (attrs: string) => string[]): void {\n const { axes, names } = plan;\n for (const set of axisSets(axes)) {\n const members = names.filter((n) => plan.all(n).join(',') === set.join(','));\n const hasOwn = (n: string) => plan.own(n).length > 0;\n const ownFirst = [...members.filter(hasOwn), ...members.filter((n) => !hasOwn(n))];\n const schemeAxis = set.length === 1 ? set[0] : undefined;\n\n for (const combo of combinations(axes, set)) {\n const scheme = schemeAxis ? schemeOf(plan.schemes, schemeAxis, combo[schemeAxis]) : undefined;\n if (ownFirst.length === 0 && !scheme) continue;\n const attrs = set.map((a) => `[data-wzl-${a}='${combo[a]}']`).join('');\n const decls = ownFirst.flatMap((name) => {\n const token = plan.value(name, combo);\n return token ? [` --wzl-${name}: ${cssValue(name, token)};`] : [];\n });\n lines.push(...selector(attrs), ...(scheme ? [` color-scheme: ${scheme};`] : []), ...decls, '}', '');\n }\n }\n}\n\nexport function emitCss(themes: readonly EmitInput[]): string {\n const defaults = themes.filter((t) => t.isDefault);\n if (defaults.length !== 1) throw new Error(`emitCss needs exactly one default theme, got ${defaults.length}`);\n for (const t of themes) checkSchemes(t.baked);\n\n const byName = new Map(themes.map((t) => [t.baked.name, t.baked]));\n const def = defaults[0];\n const defResolved = new Resolved(def.baked.axes, [def.baked]);\n\n // A non-default theme is written as its difference from the default, not from its parent: the default's\n // declarations are the only ones every element can see, and a parent's blocks are scoped to the parent's name.\n const diffed = themes.filter((t) => !t.isDefault).map((t) => {\n const axes = combineAxes(t.baked.axes, def.baked.axes);\n const resolved = new Resolved(t.baked.axes, chainOf(t.baked, byName));\n const selections = enumerateSelections(axes);\n const differs = resolved.names.filter((n) =>\n selections.some((sel) => {\n const mine = resolved.token(n, sel);\n if (!mine) return false;\n const theirs = defResolved.token(n, sel);\n return !theirs || cssValue(n, mine) !== cssValue(n, theirs) || resolved.expanded(n, sel) !== defResolved.expanded(n, sel);\n }),\n );\n return { t, axes, resolved, differs };\n });\n\n // Every theme declares, under its own name, whatever any non-default theme changes, so a subtree of one\n // theme nested inside another resets instead of inheriting the outer theme's values.\n const redeclared = new Set(diffed.flatMap((d) => d.differs));\n const others = diffed.map(({ t, axes, resolved }): Plan => ({\n theme: t.baked.name,\n axes,\n schemes: t.baked.axes,\n names: resolved.names.filter((n) => redeclared.has(n)),\n all: (n) => union(axes, t.deps[n]?.all, def.deps[n]?.all),\n own: (n) => union(axes, t.deps[n]?.own, def.deps[n]?.own),\n value: (n, sel) => resolved.token(n, sel),\n }));\n\n const lines = [\n '/* GENERATED by packages/theme/scripts/build-tokens.ts — do not edit.',\n ' * Source: packages/theme/themes/<theme>.json',\n ' */',\n '',\n ];\n\n const { axes, name: theme } = def.baked;\n const rootValues = pickAll(def.baked.tokens, fullSelection(axes, {}));\n // The default selection's scheme, not just its values: a surface that never calls\n // applyTheme would otherwise get dark colors with light native widgets.\n lines.push(':root {');\n for (const axis of Object.values(axes)) {\n const scheme = axis.values[axis.default]?.scheme;\n if (scheme) lines.push(` color-scheme: ${scheme};`);\n }\n for (const [name, token] of Object.entries(rootValues)) {\n if (token.description) lines.push(` /* ${token.description} */`);\n lines.push(` --wzl-${name}: ${cssValue(name, token)};`);\n }\n lines.push('}', '');\n\n const reset = Object.keys(rootValues).filter((n) => redeclared.has(n) && (def.deps[n]?.all.length ?? 0) === 0);\n if (reset.length > 0) {\n lines.push(`[data-wzl-theme='${theme}'] {`, ...reset.map((n) => ` --wzl-${n}: ${cssValue(n, rootValues[n])};`), '}', '');\n }\n\n blocks(\n lines,\n {\n theme,\n axes,\n schemes: axes,\n names: Object.keys(def.baked.tokens),\n all: (n) => def.deps[n]?.all ?? [],\n own: (n) => def.deps[n]?.own ?? [],\n value: (n, sel) => pickAll(def.baked.tokens, fullSelection(axes, sel))[n],\n },\n (attrs) => [`[data-wzl-theme='${theme}']${attrs},`, `${attrs} {`],\n );\n\n for (const plan of others) {\n const invariant = plan.names.filter((n) => plan.all(n).length === 0);\n if (invariant.length > 0) {\n // `[data-wzl-theme='x']` alone already ties the default's `:root` on specificity and wins on source\n // order, since the default emits first; `:root[...]` guards only against that emission order changing.\n lines.push(`:root[data-wzl-theme='${plan.theme}'],`, `[data-wzl-theme='${plan.theme}'] {`);\n for (const n of invariant) {\n const token = plan.value(n, {});\n if (token) lines.push(` --wzl-${n}: ${cssValue(n, token)};`);\n }\n lines.push('}', '');\n }\n blocks(lines, plan, (attrs) => [`[data-wzl-theme='${plan.theme}']${attrs} {`]);\n }\n\n return lines.join('\\n');\n}\n","import { enumerateSelections, fullSelection, isByAxis, pick } from '../../axes';\nimport { AXES_EXT, overrideKey, type DtcgAxesExtension } from '../../dtcg/axesExtension';\nimport { ALPHA_EXT, type RawToken, type TokenValue } from '../../dtcg/types';\nimport { themeAxes } from '../../resolveTheme';\nimport type { Theme } from '../../theme';\n\ntype Group = Record<string, unknown> & { $type: string };\n\ninterface Layer {\n primitives: Record<string, Group>;\n modes: Record<string, Record<string, Group>>;\n}\n\nconst REF = /^\\{([^}.]+)\\}$/;\n\nexport interface DtcgExport {\n readonly name: string;\n readonly defaultMode?: string;\n readonly primitives: Record<string, Group>;\n readonly modes: Record<string, Record<string, Group>>;\n readonly $extensions?: { readonly [AXES_EXT]?: DtcgAxesExtension };\n}\n\n/**\n * A theme's own tokens as a DTCG document `loadDTCG` reads back. `extends` is\n * not carried; pass it to `loadDTCG`. Every mode the chain declares is written,\n * so a token that leaves one out still falls through to the parent on the way back.\n *\n * DTCG has one variant dimension, so the plain groups hold mode, with every\n * other axis at its default value: what a tool that ignores extensions reads.\n * The other values travel under `$extensions[\"com.weasel.axes\"]` (see\n * `DtcgAxesExtension`), one override layer per combination of non-default values\n * some token actually varies by — axes that vary independently cost one layer\n * per value, not their cross-product.\n */\nexport function toDTCG(theme: Theme): DtcgExport {\n const axes = themeAxes(theme);\n const defaults = fullSelection(axes);\n const nonMode = Object.keys(axes).filter((a) => a !== 'mode');\n const declaredModes = Object.keys(axes.mode?.values ?? {});\n\n /** The type of the nearest token named `name` in the chain; undefined when no theme has one. */\n const typeOf = (name: string): string | undefined => {\n for (let t: Theme | null = theme; t; t = t.extends) {\n if (!Object.hasOwn(t.tokens, name)) continue;\n let v: unknown = t.tokens[name];\n while (isByAxis(v)) v = Object.entries(v).find(([k]) => k !== 'by')?.[1];\n if (v !== undefined) return (v as RawToken).type;\n }\n return undefined;\n };\n /** `{name}` → `{type.name}`, the path a DTCG tool resolves. */\n const alias = (value: TokenValue): TokenValue => {\n const target = typeof value === 'string' ? REF.exec(value.trim())?.[1] : undefined;\n const type = target === undefined ? undefined : typeOf(target);\n return type === undefined ? value : `{${type}.${target}}`;\n };\n\n const put = (into: Record<string, Group>, name: string, t: RawToken) => {\n into[t.type] ??= { $type: t.type };\n into[t.type][name] = {\n $value: alias(t.value),\n ...(t.description ? { $description: t.description } : {}),\n ...(t.alpha !== undefined ? { $extensions: { [ALPHA_EXT]: t.alpha } } : {}),\n };\n };\n\n /** Every axis a token branches on, and the keys of its mode branches. */\n const scan = (v: unknown, used: Set<string>, modeKeys: Set<string>): void => {\n if (!isByAxis(v)) return;\n used.add(v.by);\n for (const [k, x] of Object.entries(v)) {\n if (k === 'by') continue;\n if (v.by === 'mode') modeKeys.add(k);\n scan(x, used, modeKeys);\n }\n };\n\n const base: Layer = { primitives: {}, modes: {} };\n for (const mode of declaredModes) base.modes[mode] = {};\n const overrides: Record<string, Layer> = {};\n const varies: Record<string, string[]> = {};\n\n for (const [name, raw] of Object.entries(theme.tokens)) {\n const used = new Set<string>();\n const modeKeys = new Set<string>();\n scan(raw, used, modeKeys);\n const varying = nonMode.filter((a) => used.has(a));\n if (varying.length > 0) varies[name] = varying;\n const modes = used.has('mode') ? [...new Set([...declaredModes, ...modeKeys])] : [];\n\n for (const combo of enumerateSelections(Object.fromEntries(varying.map((a) => [a, axes[a]])))) {\n const key = overrideKey(axes, combo);\n const layer = key === '' ? base : (overrides[key] ??= { primitives: {}, modes: {} });\n const sel = { ...defaults, ...combo };\n if (modes.length === 0) {\n const p = pick(raw, sel);\n if (p.ok) put(layer.primitives, name, p.value);\n continue;\n }\n const picked = modes.map((mode) => [mode, pick(raw, { ...sel, mode })] as const);\n const first = picked[0][1];\n // The same leaf in every mode: this combination doesn't depend on mode.\n if (first.ok && picked.every(([, p]) => p.ok && p.value === first.value)) {\n put(layer.primitives, name, first.value);\n continue;\n }\n for (const [mode, p] of picked) if (p.ok) put((layer.modes[mode] ??= {}), name, p.value);\n }\n }\n\n const ext: DtcgAxesExtension = { axes, varies, overrides };\n return {\n name: theme.name,\n ...(axes.mode ? { defaultMode: axes.mode.default } : {}),\n primitives: base.primitives,\n modes: base.modes,\n ...(Object.keys(axes).length > 0 ? { $extensions: { [AXES_EXT]: ext } } : {}),\n };\n}\n","/**\n * Consumer override hooks: custom properties kit CSS reads with a fallback and\n * **no theme declares**. Setting one on any container resizes the components\n * below it; leaving it unset takes the fallback.\n *\n * They stay out of `tokens.css` on purpose. A `:root` declaration would win\n * over the in-CSS fallback, so the two would have to agree forever, and\n * `scripts/check-token-reads.ts` would stop enforcing that every read carries\n * one. This file is their declaration instead: `emitManifest` writes each as a\n * `TOKEN_MANIFEST` row with `hook: true`, which is what makes them findable\n * without reading kit stylesheets.\n *\n * Adding a hook means adding it here, and the checker reads this list.\n */\n\n/** One override hook, as the manifest describes it. */\nexport interface TokenHook {\n /** Without the `--wzl-` prefix, matching a token's name in a definition. */\n readonly name: string;\n /** DTCG type. */\n readonly type: string;\n /** The fallback every read of it carries — the value in force when nothing\n * sets it. */\n readonly value: string;\n readonly description: string;\n}\n\nexport const TOKEN_HOOKS: readonly TokenHook[] = [\n {\n name: 'disclosure-gap',\n type: 'dimension',\n value: '4px',\n description: 'Gap between a Disclosure’s twisty and its label.',\n },\n {\n name: 'disclosure-fill',\n type: 'color',\n value: 'var(--wzl-accent-fg)',\n description: 'Fill of a Disclosure’s fold mark.',\n },\n {\n name: 'disclosure-target',\n type: 'dimension',\n value: '20px',\n description: 'Hit-target square of a Disclosure twisty, and the twisty column of a LayerList row.',\n },\n {\n name: 'input-surface',\n type: 'color',\n value: 'var(--wzl-surface-sunken)',\n description:\n 'Surface a text Input’s frame sits on. Set it on any container whose own background is the default — a sunken rail or panel — where an unset field is the same color as what is behind it.',\n },\n {\n name: 'number-field-width',\n type: 'dimension',\n value: '9ch',\n description: 'Width of a NumberField’s input.',\n },\n {\n name: 'params-label-align',\n type: 'string',\n value: 'start',\n description: 'Text alignment of row labels in PropertyPanel, Prefs and labkit’s ControlPanel.',\n },\n {\n name: 'params-label-case',\n type: 'string',\n value: 'uppercase',\n description: 'text-transform of every label and title in PropertyPanel, Prefs and labkit’s ControlPanel.',\n },\n {\n name: 'params-label-tracking',\n type: 'dimension',\n value: 'var(--wzl-tracking-wide)',\n description:\n 'Letter spacing of every label and title in PropertyPanel, Prefs and labkit’s ControlPanel. Unset, rows take --wzl-tracking-wide and titles --wzl-tracking-wider.',\n },\n {\n name: 'params-label-width',\n type: 'dimension',\n value: 'auto',\n description: 'Inline size of row labels in PropertyPanel, Prefs and labkit’s ControlPanel.',\n },\n {\n name: 'prefs-rail-width',\n type: 'dimension',\n value: '216px',\n description: 'Width of the Prefs navigation rail.',\n },\n {\n name: 'prefs-column-width',\n type: 'dimension',\n value: '300px',\n description: 'Width of the Prefs category column.',\n },\n {\n name: 'prop-number-width',\n type: 'dimension',\n value: '9ch',\n description: 'Width of a numeric field in the Properties panel.',\n },\n {\n name: 'prop-row-h',\n type: 'dimension',\n value: '20px',\n description:\n 'Floor under every Properties row, whatever control it holds. Unset, it is the panel’s own field height, so it follows density — 20px at the default one.',\n },\n {\n name: 'prop-text-width',\n type: 'dimension',\n value: '16ch',\n description: 'Width of a text field in the Properties panel.',\n },\n {\n name: 'property-readout-w',\n type: 'dimension',\n value: 'calc(4.5ch + 2px)',\n description: 'Width of a Properties row’s value readout — four digits, so the controls beside a column of readouts end on one line. A range whose widest value needs more widens its own readout.',\n },\n {\n name: 'select-border',\n type: 'border',\n value: '1px solid var(--wzl-border)',\n description:\n 'Border of a Select’s trigger. Unset, a boxed trigger draws --wzl-border and a bare one a transparent border of the same width.',\n },\n {\n name: 'select-fg',\n type: 'color',\n value: 'var(--wzl-fg)',\n description: 'Text color of a Select’s trigger.',\n },\n {\n name: 'swatch-size',\n type: 'dimension',\n value: '28px',\n description: 'Minimum cell of a swatch grid — PatternPicker, and any panel laying swatches out the same way.',\n },\n {\n name: 'timeline-label-w',\n type: 'dimension',\n value: '120px',\n description: 'Width of the Timeline’s track-label gutter.',\n },\n {\n name: 'timeline-value-axis-w',\n type: 'dimension',\n value: '32px',\n description: 'Width reserved for the Timeline’s value axis.',\n },\n {\n name: 'tree-indent',\n type: 'dimension',\n value: 'calc(var(--wzl-control-h-xs) + var(--wzl-space-2))',\n description: 'Indent of each Tree level. Unset, it is one twisty and one gap, so a child’s twisty sits under its parent’s label.',\n },\n];\n","import { fullSelection, pickAll } from '../../axes';\nimport { resolveTokens } from '../../dtcg/resolve';\nimport { TOKEN_HOOKS } from '../../hooks';\nimport type { EmitInput } from './css';\n\n/** Prefixes that share a group with their siblings rather than standing alone. */\nconst MERGED_GROUPS: Readonly<Record<string, string>> = { danger: 'status', warning: 'status', success: 'status' };\n\nconst groupOf = (name: string) => {\n const prefix = name.includes('-') ? name.slice(0, name.indexOf('-')) : name;\n return MERGED_GROUPS[prefix] ?? prefix;\n};\n\nconst row = (\n name: string,\n type: string,\n value: string,\n description: string,\n hook: boolean,\n): string =>\n ` { name: '--wzl-${name}', type: ${JSON.stringify(type)}, group: ${JSON.stringify(groupOf(name))}, defaultValue: ${JSON.stringify(value)}, description: ${JSON.stringify(description)}, hook: ${hook} },`;\n\nexport function emitManifest({ baked }: EmitInput): string {\n const all = pickAll(baked.tokens, fullSelection(baked.axes, {}));\n const resolved = resolveTokens(all);\n const rows = Object.entries(all).map(([name, token]) =>\n row(name, token.type, resolved[name], token.description ?? '', false),\n );\n // Hooks last, and sorted, so a name moving between the two lists is one\n // block of diff rather than a reshuffle.\n for (const h of [...TOKEN_HOOKS].sort((a, b) => a.name.localeCompare(b.name))) {\n rows.push(row(h.name, h.type, h.value, h.description, true));\n }\n return [\n '// GENERATED by packages/theme/scripts/build-tokens.ts — do not edit.',\n '',\n '/** One row of `TOKEN_MANIFEST`: a token, its DTCG type, the name-prefix',\n ' * group it belongs to, its value in the default theme and selection, and',\n ' * the description it was authored with (empty string if none). */',\n 'export interface TokenManifestEntry {',\n ' readonly name: string;',\n ' readonly type: string;',\n ' readonly group: string;',\n ' readonly defaultValue: string;',\n ' readonly description: string;',\n ' /** A consumer override hook rather than a theme token: no theme declares',\n ' * it, kit CSS reads it with `defaultValue` as the fallback, and setting',\n ' * it on any container is what changes it. */',\n ' readonly hook: boolean;',\n '}',\n '',\n '/** Every token of the default theme at its default selection, plus every',\n ' * consumer override hook, described. Meant for tooling that presents the',\n ' * token set — docs pages, token browsers, forge\\'s CSS-vars panel — not',\n ' * for resolving values at runtime. */',\n 'export const TOKEN_MANIFEST: readonly TokenManifestEntry[] = [',\n rows.join('\\n'),\n '];',\n '',\n ].join('\\n');\n}\n","import { enumerateSelections, pickAll, selectionKey, type Selection } from '../../axes';\nimport type { ThemeDefinition } from '../../definition';\nimport { resolveTokens } from '../../dtcg/resolve';\nimport type { FlatTokens } from '../../dtcg/types';\nimport type { BakedTheme } from '../bake';\n\nexport interface ThemesInput {\n readonly definition: ThemeDefinition;\n readonly baked: BakedTheme;\n}\n\n/** `baked` and every theme above it, root first. */\nfunction chainOf(baked: BakedTheme, byName: ReadonlyMap<string, BakedTheme>): BakedTheme[] {\n const parent = baked.extends ? byName.get(baked.extends) : undefined;\n if (baked.extends && !parent) throw new Error(`Theme \"${baked.name}\" extends \"${baked.extends}\", which is not in themes/`);\n return [...(parent ? chainOf(parent, byName) : []), baked];\n}\n\n/** Each token from the nearest theme in the chain that has it at `sel`, as `resolveTheme` merges them. */\nfunction tokensAt(chain: readonly BakedTheme[], sel: Selection): FlatTokens {\n return Object.assign({}, ...chain.map((t) => pickAll(t.tokens, sel)));\n}\n\nexport function emitThemes(themes: readonly ThemesInput[]): string {\n const byName = new Map(themes.map((t) => [t.baked.name, t.baked]));\n const names = new Set<string>();\n\n const entries = themes.map(({ baked }) => {\n const chain = chainOf(baked, byName);\n const selections = enumerateSelections(baked.axes).map((sel) => {\n const resolved = resolveTokens(tokensAt(chain, sel));\n for (const n of Object.keys(resolved)) names.add(`--wzl-${n}`);\n const body = Object.entries(resolved).map(([n, v]) => ` '--wzl-${n}': ${JSON.stringify(v)},`).join('\\n');\n return ` '${selectionKey(baked.axes, sel)}': {\\n${body}\\n },`;\n });\n return [\n ` ${JSON.stringify(baked.name)}: {`,\n ` name: ${JSON.stringify(baked.name)},`,\n ` axes: ${JSON.stringify(baked.axes)},`,\n ' selections: {',\n selections.join('\\n'),\n ' },',\n ' },',\n ].join('\\n');\n });\n\n const sources = Object.fromEntries(themes.map((t) => [t.definition.name, t.definition]));\n const bakedAll = Object.fromEntries(themes.map((t) => [t.baked.name, t.baked]));\n\n return [\n '// GENERATED by packages/theme/scripts/build-tokens.ts — do not edit.',\n '',\n \"import type { AxisDefs } from '../axes';\",\n \"import type { ThemeDefinition } from '../definition';\",\n \"import type { BakedTheme } from '../engine/bake';\",\n '',\n '/** Every design token the built-in themes declare, spelled as the CSS',\n ' * custom property it becomes. */',\n 'export type TokenName =',\n `${[...names].sort().map((n) => ` | '${n}'`).join('\\n')};`,\n '',\n '/** A built-in theme with its aliases already collapsed: every selection',\n ' * (keyed `mode=dark`, axes in declaration order) maps every token name to',\n ' * a final CSS value. */',\n 'export interface GeneratedTheme {',\n ' readonly name: string;',\n ' readonly axes: AxisDefs;',\n ' readonly selections: Readonly<Record<string, Readonly<Record<TokenName, string>>>>;',\n '}',\n '',\n '/** The built-in themes, resolved, keyed by theme name. Read this to list',\n ' * or preview themes without resolving a token graph yourself. */',\n 'export const THEMES = {',\n entries.join('\\n'),\n '} as const satisfies Record<string, GeneratedTheme>;',\n '',\n '/** The built-in themes as authored: their unbaked definitions. */',\n `export const THEME_SOURCES: Readonly<Record<string, ThemeDefinition>> = ${JSON.stringify(sources, null, 2)};`,\n '',\n '/** The built-in themes with every rule run and references intact. This is',\n ' * what `weaselTheme` is built from, so the runtime entry bundles no generator. */',\n `export const BAKED_THEMES: Readonly<Record<string, BakedTheme>> = ${JSON.stringify(bakedAll, null, 2)};`,\n '',\n ].join('\\n');\n}\n","import { enumerateSelections } from '../../axes';\nimport type { ThemeDefinition } from '../../definition';\nimport { bake } from '../bake';\nimport { axisDependencies } from '../deps';\nimport { derive } from '../derive';\nimport { mergeChain } from '../merge';\nimport { emitCss } from './css';\nimport { emitManifest } from './manifest';\nimport { emitThemes } from './themes';\n\nexport type GeneratedTokens =\n | { readonly ok: true; readonly files: { readonly 'tokens.css': string; readonly 'themes.ts': string; readonly 'manifest.ts': string } }\n | { readonly ok: false; readonly problems: readonly string[] };\n\n/** Every generated token file for a set of definitions, the one that extends nothing being the default. Any derive issue refuses the whole set. */\nexport function generateTokens(definitions: readonly ThemeDefinition[]): GeneratedTokens {\n const byName = new Map(definitions.map((d) => [d.name, d]));\n const lookup = (name: string) => byName.get(name);\n\n const roots = definitions.filter((d) => !d.extends);\n if (roots.length !== 1) throw new Error(`themes/ needs exactly one theme that extends nothing; found ${roots.length}`);\n const ordered = [roots[0], ...definitions.filter((d) => d.extends)];\n\n const problems = ordered.flatMap((def) =>\n enumerateSelections(mergeChain(def, lookup).axes ?? {}).flatMap((sel) =>\n derive(def, sel, lookup).issues.map((issue) => `${def.name} ${JSON.stringify(sel)}: ${JSON.stringify(issue)}`),\n ),\n );\n if (problems.length > 0) return { ok: false, problems };\n\n const themes = ordered.map((definition) => ({\n definition,\n baked: bake(definition, lookup),\n deps: axisDependencies(definition, lookup),\n isDefault: definition === roots[0],\n }));\n return {\n ok: true,\n files: { 'tokens.css': emitCss(themes), 'themes.ts': emitThemes(themes), 'manifest.ts': emitManifest(themes[0]) },\n };\n}\n","import type { Selection } from './axes';\nimport type { ThemeDefinition } from './definition';\nimport type { Issue } from './engine/types';\n\n/** A theme definition file as a theme store serves it: the dev-server endpoint at `__theme/<name>`. */\nexport interface StoredTheme {\n readonly name: string;\n /** sha-256 of the file's bytes: what a save sends back to prove it saw the file as it is. */\n readonly hash: string;\n /** Saving it regenerates `packages/theme/src/generated/`. */\n readonly emits: boolean;\n readonly definition: ThemeDefinition;\n}\n\nexport interface IssueReport {\n readonly selection: Selection;\n readonly issue: Issue;\n}\n\nexport type PutResult =\n | {\n readonly status: 'saved';\n readonly hash: string;\n readonly issues: readonly IssueReport[];\n readonly regenerated: boolean;\n /** Why the generated files were left alone, when the definition emits and they were. */\n readonly problems: readonly string[];\n }\n | { readonly status: 'conflict'; readonly hash: string | null }\n | { readonly status: 'invalid'; readonly message: string };\n\n/** Record order is emission order, so keys are never sorted. */\nexport const serializeDefinition = (definition: ThemeDefinition): string => `${JSON.stringify(definition, null, 2)}\\n`;\n\nexport interface ThemeApi {\n list(): Promise<StoredTheme[]>;\n get(name: string): Promise<StoredTheme>;\n put(name: string, definition: ThemeDefinition, baseHash: string | null): Promise<PutResult>;\n}\n\ntype Fetch = (input: string, init?: RequestInit) => Promise<Response>;\n\n/** The dev server's theme store, addressed relative to the page so the app's base path carries over. */\nexport function httpThemeApi(base: string = document.baseURI, fetchImpl: Fetch = (input, init) => fetch(input, init)): ThemeApi {\n const url = (path: string) => new URL(`__theme/${path}`, base).toString();\n const read = async <T>(response: Response): Promise<T> => {\n if (!response.ok && response.status !== 409 && response.status !== 400) throw new Error(`${response.status} ${response.statusText}`);\n return (await response.json()) as T;\n };\n return {\n list: async () => (await read<{ themes: StoredTheme[] }>(await fetchImpl(url('list'), undefined))).themes,\n get: async (name) => read<StoredTheme>(await fetchImpl(url(name), undefined)),\n put: async (name, definition, baseHash) =>\n read<PutResult>(\n await fetchImpl(url(name), {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ definition, hash: baseHash }),\n }),\n ),\n };\n}\n"]}