@weasel-js/theme 1.15.2 → 1.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -4
- package/dist/{chunk-Z675UQ26.js → chunk-7OMMT3WJ.js} +2 -2
- package/dist/{chunk-Z675UQ26.js.map → chunk-7OMMT3WJ.js.map} +1 -1
- package/dist/{chunk-TG3EV42T.js → chunk-SFVRMAMW.js} +4 -20
- package/dist/chunk-SFVRMAMW.js.map +1 -0
- package/dist/{chunk-NCAQ54LO.js → chunk-X2KI4SSJ.js} +4 -3
- package/dist/chunk-X2KI4SSJ.js.map +1 -0
- package/dist/{definition-nZbgRG7A.d.ts → definition-DfbYMDu0.d.ts} +5 -1
- package/dist/engine.d.ts +2 -2
- package/dist/engine.js +1 -1
- package/dist/engine.js.map +1 -1
- package/dist/index.d.ts +15 -15
- package/dist/index.js +23 -5
- package/dist/index.js.map +1 -1
- package/dist/prefs.d.ts +8 -8
- package/dist/prefs.js +22 -19
- package/dist/prefs.js.map +1 -1
- package/dist/react.d.ts +1 -1
- package/dist/react.js +3 -3
- package/dist/react.js.map +1 -1
- package/dist/themes/platinum.d.ts +1 -1
- package/dist/themes/platinum.js +1 -1
- package/dist/themes/win9x.d.ts +1 -1
- package/dist/themes/win9x.js +1 -1
- package/package.json +5 -5
- package/dist/chunk-NCAQ54LO.js.map +0 -1
- package/dist/chunk-TG3EV42T.js.map +0 -1
package/README.md
CHANGED
|
@@ -112,15 +112,18 @@ The schema holds an `enum` per axis under `axis` (`axis.mode`,
|
|
|
112
112
|
`axis.density`) and a page per token group, each token at `<group>.<token>`
|
|
113
113
|
with no `--wzl-`: a `color`, a `number` in the token's unit, or a `string` of
|
|
114
114
|
CSS text for a value neither holds, such as a font stack or a `var()`. Override
|
|
115
|
-
hooks are leaves too.
|
|
116
|
-
|
|
117
|
-
|
|
115
|
+
hooks are leaves too. A token is scoped by the axes its value differs along,
|
|
116
|
+
each open, so editing `surface` in dark changes dark only and a font family
|
|
117
|
+
changes everywhere; a pin's `scope: ['mode']` adds an axis its value does not
|
|
118
|
+
differ along yet. Its default is what the theme resolves to, folded along those
|
|
119
|
+
axes (`defaultScope`), so a store nothing was written to reads the theme as it
|
|
120
|
+
is.
|
|
118
121
|
|
|
119
122
|
`themePrefsPins(store)` is the `pins` those values amount to. Only a leaf with
|
|
120
123
|
a value of its own is a pin, so a token left alone keeps its rule: pin
|
|
121
124
|
`accent-base` and `--wzl-accent` still follows it. A store reads such an alias
|
|
122
125
|
from the base theme, where it has not moved; `themePrefsValues(store, base)`
|
|
123
|
-
gives the values and
|
|
126
|
+
gives the values and scopes for a form with each unset leaf read from the pinned
|
|
124
127
|
theme.
|
|
125
128
|
|
|
126
129
|
## Desktop themes
|
|
@@ -8,5 +8,5 @@ function overrideKey(axes, selection) {
|
|
|
8
8
|
var ALPHA_EXT = "com.weasel.alpha";
|
|
9
9
|
|
|
10
10
|
export { ALPHA_EXT, AXES_EXT, overrideKey };
|
|
11
|
-
//# sourceMappingURL=chunk-
|
|
12
|
-
//# sourceMappingURL=chunk-
|
|
11
|
+
//# sourceMappingURL=chunk-7OMMT3WJ.js.map
|
|
12
|
+
//# sourceMappingURL=chunk-7OMMT3WJ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/dtcg/axesExtension.ts","../src/dtcg/types.ts"],"names":[],"mappings":";AAGO,IAAM,QAAA,GAAW;AAwBjB,SAAS,WAAA,CAAY,MAAgB,SAAA,EAA8B;AACxE,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CACpB,MAAA,CAAO,CAAC,CAAA,KAAM,SAAA,CAAU,CAAC,CAAA,KAAM,MAAA,IAAa,SAAA,CAAU,CAAC,CAAA,KAAM,IAAA,CAAK,CAAC,CAAA,CAAE,OAAO,CAAA,CAC5E,GAAA,CAAI,CAAC,MAAM,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,CAAC,CAAC,CAAA,CAAE,CAAA,CACjC,KAAK,GAAG,CAAA;AACb;;;AC/BO,IAAM,SAAA,GAAY","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/dtcg/axesExtension.ts","../src/dtcg/types.ts"],"names":[],"mappings":";AAGO,IAAM,QAAA,GAAW;AAwBjB,SAAS,WAAA,CAAY,MAAgB,SAAA,EAA8B;AACxE,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CACpB,MAAA,CAAO,CAAC,CAAA,KAAM,SAAA,CAAU,CAAC,CAAA,KAAM,MAAA,IAAa,SAAA,CAAU,CAAC,CAAA,KAAM,IAAA,CAAK,CAAC,CAAA,CAAE,OAAO,CAAA,CAC5E,GAAA,CAAI,CAAC,MAAM,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,CAAC,CAAC,CAAA,CAAE,CAAA,CACjC,KAAK,GAAG,CAAA;AACb;;;AC/BO,IAAM,SAAA,GAAY","file":"chunk-7OMMT3WJ.js","sourcesContent":["import type { AxisDefs, Selection } from '../axes.ts';\n\n/** The `$extensions` key on a DTCG export's root that carries every axis besides mode. */\nexport const AXES_EXT = 'com.weasel.axes';\n\n/** The token groups of one layer: plain values, and values per mode. */\nexport interface DtcgLayer {\n readonly primitives: Record<string, Record<string, unknown>>;\n readonly modes: Record<string, Record<string, Record<string, unknown>>>;\n}\n\n/**\n * What `toDTCG` writes under `$extensions[\"com.weasel.axes\"]`.\n *\n * - `axes`: every axis the theme resolves with, mode included.\n * - `varies`: token name → the non-mode axes its value depends on.\n * - `overrides`: a layer per combination of non-default values, keyed like\n * `selectionKey` but naming only the axes off their default\n * (`density=compact`, `contrast=high,density=roomy` in axis order).\n */\nexport interface DtcgAxesExtension {\n readonly axes: AxisDefs;\n readonly varies: Record<string, readonly string[]>;\n readonly overrides: Record<string, DtcgLayer>;\n}\n\n/** The override key for a selection: its non-default values, axes in declaration order. `''` is the plain groups. */\nexport function overrideKey(axes: AxisDefs, selection: Selection): string {\n return Object.keys(axes)\n .filter((a) => selection[a] !== undefined && selection[a] !== axes[a].default)\n .map((a) => `${a}=${selection[a]}`)\n .join(',');\n}\n","/** The one `$extensions` key this kit defines. */\nexport const ALPHA_EXT = 'com.weasel.alpha';\n\n/** A token's value as authored: a string (which may be a `{ref}`), a number, or a list of those, such as a font stack. */\nexport type TokenValue = string | number | readonly (string | number)[];\n\n/**\n * A single design token as authored, before aliases are resolved: a DTCG-shaped\n * `{ type, value }` pair where `value` may still be a `{ref}` to another token.\n */\nexport interface RawToken {\n readonly type: string;\n readonly value: TokenValue;\n /** Render the referenced color at this alpha, 0–1. */\n readonly alpha?: number | undefined;\n readonly description?: string | undefined;\n /** Axes the token's pref is scoped by even where its values do not differ along them. */\n readonly scope?: readonly string[] | undefined;\n}\n\n/** A token graph flattened to one level, keyed by token name (no `--wzl-`\n * prefix). Still unresolved — see `ResolvedTokenMap` for the output side. */\nexport type FlatTokens = Record<string, RawToken>;\n\n/** A resolved theme: every token name mapped to its final CSS-ready string.\n * Named ...Map, not ...Tokens, to stay distinct from hud's public `ResolvedTokens`. */\nexport type ResolvedTokenMap = Record<string, string>;\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { generate, DEFAULT_CONSTRAINTS } from './chunk-44CG54ZK.js';
|
|
2
2
|
import { readCssNumber } from './chunk-M3R5MV7Q.js';
|
|
3
3
|
import { themeAxes, resolveTheme, atAlpha, withAlpha, themeChain } from './chunk-UCQC6GZR.js';
|
|
4
|
-
import { weaselTheme } from './chunk-
|
|
4
|
+
import { weaselTheme } from './chunk-X2KI4SSJ.js';
|
|
5
5
|
import { fullSelection } from './chunk-P5F3GZV6.js';
|
|
6
6
|
import { resolvePaletteColor, colorLiteralToCss, parseColor, interpolateSrgb, rgbaToHex, cssColorLiteral } from '@weasel-js/paint';
|
|
7
7
|
|
|
@@ -317,23 +317,7 @@ function colorSourceCss(source, ctx = defaultContext()) {
|
|
|
317
317
|
const named = namedThemeRef(source, ctx);
|
|
318
318
|
return named ? themeRefCss(named, ctx) : literalCss(source, ctx);
|
|
319
319
|
}
|
|
320
|
-
function answered(css, i) {
|
|
321
|
-
if (css === null) throw new Error(`colorAt: nothing answers item ${i} of the color list`);
|
|
322
|
-
return css;
|
|
323
|
-
}
|
|
324
|
-
function colorAt(list, i, ctx = defaultContext()) {
|
|
325
|
-
if (isRamp(list)) return ctx.resolved[rampProperty(list, i, ctx.theme)];
|
|
326
|
-
const item = colorItemAt(list, i);
|
|
327
|
-
if (typeof item === "string") return item;
|
|
328
|
-
const literal = colorSourceLiteral(item, ctx);
|
|
329
|
-
return answered(literal && colorLiteralToCss(literal), i);
|
|
330
|
-
}
|
|
331
|
-
function colorCssAt(list, i, ctx = defaultContext()) {
|
|
332
|
-
if (isRamp(list)) return `var(${rampProperty(list, i, ctx.theme)})`;
|
|
333
|
-
const item = colorItemAt(list, i);
|
|
334
|
-
return typeof item === "string" ? item : answered(colorSourceCss(item, ctx), i);
|
|
335
|
-
}
|
|
336
320
|
|
|
337
|
-
export { TINT_REF, applyTheme, blendTheme,
|
|
338
|
-
//# sourceMappingURL=chunk-
|
|
339
|
-
//# sourceMappingURL=chunk-
|
|
321
|
+
export { TINT_REF, applyTheme, blendTheme, colorCount, colorItemAt, colorSourceCss, colorSourceLiteral, defaultContext, isColorModePreference, isRamp, rampProperty, rampSteps, resolveCurrentColor, themeTints };
|
|
322
|
+
//# sourceMappingURL=chunk-SFVRMAMW.js.map
|
|
323
|
+
//# sourceMappingURL=chunk-SFVRMAMW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/blendTheme.ts","../src/themeSheet.ts","../src/applyTheme.ts","../src/currentColor.ts","../src/colorMode.ts","../src/colorListItems.ts","../src/colorSource.ts"],"names":[],"mappings":"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","file":"chunk-SFVRMAMW.js","sourcesContent":["import { interpolateSrgb, parseColor, rgbaToHex } from '@weasel-js/paint';\nimport { fullSelection, type Selection } from './axes.ts';\nimport { readCssNumber } from './cssNumber.ts';\nimport { resolveTheme, themeAxes, type ResolvedTheme } from './resolveTheme.ts';\nimport type { Theme } from './theme.ts';\n\n/** A weight for each value of each axis a blend is made along. A value left out weighs nothing. */\nexport type AxisWeights = Readonly<Record<string, Readonly<Record<string, number>>>>;\n\ninterface Weighted {\n readonly css: string;\n readonly weight: number;\n}\n\nconst heaviest = (members: readonly Weighted[]): string => members.reduce((most, m) => (m.weight > most.weight ? m : most)).css;\n\nfunction blendNumbers(members: readonly Weighted[]): string | undefined {\n let sum = 0;\n let total = 0;\n let unit: string | undefined;\n for (const { css, weight } of members) {\n const read = readCssNumber(css);\n if (!read || (unit !== undefined && read.unit !== unit)) return undefined;\n unit = read.unit;\n sum += read.value * weight;\n total += weight;\n }\n return `${Number((sum / total).toFixed(4))}${unit}`;\n}\n\nfunction blendColors(members: readonly Weighted[]): string | undefined {\n let mixed: [number, number, number, number] | undefined;\n let total = 0;\n for (const { css, weight } of members) {\n let next: readonly [number, number, number, number];\n try {\n next = parseColor(css);\n } catch {\n return undefined;\n }\n total += weight;\n if (!mixed) {\n mixed = [...next];\n continue;\n }\n const t = weight / total;\n const [r, g, b] = interpolateSrgb([mixed[0], mixed[1], mixed[2]], [next[0], next[1], next[2]], t, 'oklch');\n mixed = [r, g, b, mixed[3] + (next[3] - mixed[3]) * t];\n }\n return rgbaToHex(mixed!);\n}\n\nfunction blend(members: readonly Weighted[]): string {\n if (members.every((m) => m.css === members[0]!.css)) return members[0]!.css;\n return blendNumbers(members) ?? blendColors(members) ?? heaviest(members);\n}\n\n/**\n * `theme` partway between values of its axes: resolved at every selection\n * `weights` gives a share to, and each token folded from what it resolved to\n * there. A color mixes in OKLCH and a number with one unit throughout mixes\n * linearly; any other value is the heaviest selection's, the first on a tie.\n * It is the resolved values that mix, never the rules behind them, so a token\n * that is an alias in one mode and a literal in the other blends like any\n * other. An axis `weights` leaves out stays at `selection`.\n */\nexport function blendTheme(theme: Theme, weights: AxisWeights, selection: Selection = {}): ResolvedTheme {\n const axes = themeAxes(theme);\n let at: { selection: Selection; weight: number }[] = [{ selection: fullSelection(axes, selection), weight: 1 }];\n for (const [axis, shares] of Object.entries(weights)) {\n if (!Object.hasOwn(axes, axis)) continue;\n const given = Object.entries(shares).filter(([value, share]) => share > 0 && Object.hasOwn(axes[axis]!.values, value));\n if (given.length === 0) continue;\n at = at.flatMap((one) => given.map(([value, share]) => ({ selection: { ...one.selection, [axis]: value }, weight: one.weight * share })));\n }\n const resolved = at.map((one) => ({ tokens: resolveTheme(theme, one.selection) as Record<string, string>, weight: one.weight }));\n if (resolved.length === 1) return resolved[0]!.tokens as ResolvedTheme;\n\n const out: Record<string, string> = {};\n const names = new Set(resolved.flatMap((one) => Object.keys(one.tokens)));\n for (const name of names) {\n out[name] = blend(resolved.filter((one) => one.tokens[name] !== undefined).map((one) => ({ css: one.tokens[name]!, weight: one.weight })));\n }\n return out as ResolvedTheme;\n}\n","/**\n * The stylesheet a document or a shadow root holds its themes' rules in, and\n * the count of what still uses each one.\n *\n * A rule lives where its elements do: a popout window's document and a shadow\n * root each get a sheet of their own, since a rule in the opener's document\n * styles nothing in either. A rule nobody holds any more leaves its sheet, so\n * a page that mints a theme per instance holds only the live ones.\n */\n\n/** Where an element's styles come from. */\nexport type StyleRoot = Document | ShadowRoot;\n\nconst STYLE_ID = 'wzl-themes';\n\ninterface Variant {\n /** 0 is the definition that has the bare selector; a second, different\n * definition held at once under the same name and selection gets its own. */\n id: number;\n body: string;\n holds: number;\n}\n\ninterface RootSheet {\n /** `selector` → the definitions held under it. */\n rules: Map<string, Variant[]>;\n sheet: CSSStyleSheet | null;\n styleEl: HTMLStyleElement | null;\n}\n\nlet sheets = new WeakMap<StyleRoot, RootSheet>();\n\n/** Test seam: forgets every sheet, so each case starts clean. */\nexport function __resetThemeSheet(): void {\n sheets = new WeakMap();\n}\n\n/** The root `el`'s styles come from: its shadow root, else its document. */\nexport function styleRootOf(el: Element): StyleRoot {\n const root = el.getRootNode();\n return root instanceof (el.ownerDocument.defaultView?.ShadowRoot ?? ShadowRoot) ? (root as ShadowRoot) : el.ownerDocument;\n}\n\nconst documentOf = (root: StyleRoot): Document => ('host' in root ? root.ownerDocument : root);\n\n/** The selector suffix that keeps a variant's rule off the other definitions' elements, at no cost in specificity. */\nconst only = (id: number): string => (id === 0 ? '' : `:where([data-wzl-variant='${id}'])`);\n\nfunction write(root: StyleRoot, held: RootSheet): void {\n const css = [...held.rules]\n .flatMap(([selector, variants]) =>\n // The bare rule first: it matches a variant's elements too, and the variant's has to win the tie.\n [...variants].sort((a, b) => a.id - b.id).map((v) => `${selector}${only(v.id)} { ${v.body} }`))\n .join('\\n');\n // Not `@weasel-js/react`'s `adoptCss`: this entry loads without React.\n const win = documentOf(root).defaultView;\n const Sheet = win?.CSSStyleSheet;\n if (Sheet && 'replaceSync' in Sheet.prototype && Array.isArray(root.adoptedStyleSheets)) {\n if (!held.sheet) {\n // From the root's own window: a constructed sheet cannot be adopted across documents.\n held.sheet = new Sheet();\n root.adoptedStyleSheets = [...root.adoptedStyleSheets, held.sheet];\n }\n held.sheet.replaceSync(css);\n return;\n }\n if (!held.styleEl) {\n held.styleEl = documentOf(root).createElement('style');\n held.styleEl.id = STYLE_ID;\n ('host' in root ? root : root.head).appendChild(held.styleEl);\n }\n held.styleEl.textContent = css;\n}\n\n/**\n * Hold the rule `selector { body }` in `root`'s sheet. Returns the variant id\n * the holder's element is to carry (0 for none) and the release, which takes\n * the rule out of the sheet once nothing else holds it.\n */\nexport function holdRule(root: StyleRoot, selector: string, body: string): { variant: number; release: () => void } {\n let held = sheets.get(root);\n if (!held) sheets.set(root, (held = { rules: new Map(), sheet: null, styleEl: null }));\n const variants = held.rules.get(selector) ?? [];\n let variant = variants.find((v) => v.body === body);\n if (variant) {\n variant.holds++;\n } else {\n let id = 0;\n while (variants.some((v) => v.id === id)) id++;\n variant = { id, body, holds: 1 };\n held.rules.set(selector, [...variants, variant]);\n write(root, held);\n }\n const mine = variant;\n const sheet = held;\n let released = false;\n return {\n variant: mine.id,\n release: () => {\n if (released) return;\n released = true;\n if (--mine.holds > 0) return;\n const left = (sheet.rules.get(selector) ?? []).filter((v) => v !== mine);\n if (left.length > 0) sheet.rules.set(selector, left);\n else sheet.rules.delete(selector);\n write(root, sheet);\n },\n };\n}\n","import { fullSelection, type Selection } from './axes';\nimport { blendTheme, type AxisWeights } from './blendTheme';\nimport { resolveTheme, themeAxes } from './resolveTheme';\nimport type { Theme } from './theme';\nimport { holdRule, styleRootOf } from './themeSheet';\n\nexport { __resetThemeSheet } from './themeSheet';\n\n/** What an element holds from its last `applyTheme`, so the next one, or its release, can let go of it. */\nconst holds = new WeakMap<HTMLElement, () => void>();\n\n/**\n * Apply `theme` at `selection` to `el`'s subtree, and return the release.\n *\n * Stamps `data-wzl-theme` and one `data-wzl-<axis>` per axis, and holds a\n * matching rule block in the stylesheet of the document or shadow root `el`\n * lives in. Deliberately not inline properties: the cascade then does the\n * work, per-subtree overrides are just a different theme name, and no\n * `!important` is ever needed. No-op outside a DOM.\n *\n * An element holds one application: applying again replaces what it held, so\n * a caller restyling one root never has to release. The release is for a\n * subtree that goes away. It takes the attributes back off and lets go of the\n * rule, which leaves the sheet once no element holds it; a release whose\n * element has since been given something else does nothing.\n *\n * With `weights`, the rule holds the theme blended along the axes they name\n * (see `blendTheme`), under the same attributes: applying again with the next\n * weights is one step of a transition between two selections.\n *\n * Two different themes may share a name. The second held at once has its rule\n * kept to its own elements by a `data-wzl-variant` attribute, matched inside\n * `:where()` so the rule's specificity is the first's.\n */\nexport function applyTheme(el: HTMLElement, theme: Theme, selection: Selection = {}, options: { weights?: AxisWeights } = {}): () => void {\n if (typeof document === 'undefined') return () => {};\n\n const axes = themeAxes(theme);\n const sel = fullSelection(axes, selection);\n const body = Object.entries(options.weights ? blendTheme(theme, options.weights, sel) : resolveTheme(theme, sel))\n .map(([name, value]) => `${name}: ${value};`)\n .join(' ');\n const names = Object.keys(axes);\n const selector = `[data-wzl-theme='${theme.name}']${names.map((a) => `[data-wzl-${a}='${sel[a]}']`).join('')}`;\n // Held before the last one is let go, so re-applying the same rule rewrites nothing.\n const { variant, release: releaseRule } = holdRule(styleRootOf(el), selector, body);\n holds.get(el)?.();\n\n el.setAttribute('data-wzl-theme', theme.name);\n for (const a of names) el.setAttribute(`data-wzl-${a}`, sel[a]);\n if (variant === 0) el.removeAttribute('data-wzl-variant');\n else el.setAttribute('data-wzl-variant', String(variant));\n\n // The attributes go only through `release`: a hold replaced by the next application leaves them to it.\n const letGo = (): void => {\n holds.delete(el);\n releaseRule();\n };\n holds.set(el, letGo);\n return () => {\n if (holds.get(el) !== letGo) return;\n letGo();\n for (const a of ['theme', 'variant', ...names]) el.removeAttribute(`data-wzl-${a}`);\n };\n}\n","import { atAlpha, withAlpha } from './dtcg/color.ts';\n\nconst NUMBER = String.raw`(\\d*\\.?\\d+)(%?)`;\nconst RELATIVE = new RegExp(String.raw`^rgb\\(\\s*from\\s+currentcolor\\s+r\\s+g\\s+b\\s*/\\s*${NUMBER}\\s*\\)$`, 'i');\nconst MIX = new RegExp(String.raw`^color-mix\\(\\s*in\\s+[\\w-]+\\s*,\\s*currentcolor\\s+${NUMBER}\\s*,\\s*transparent\\s*\\)$`, 'i');\n\nconst fraction = (n: string, pct: string) => Number(n) / (pct ? 100 : 1);\n\n/**\n * A resolved token value with `currentColor` taken to be `current`, for a surface drawn without the\n * cascade — a canvas reading a resolved theme — where `currentColor` has nothing to resolve against.\n * Pass the color of the text the value is drawn beside, usually `--wzl-fg`. A value that never\n * mentions `currentColor` comes back unchanged.\n *\n * Flattens the forms the kit's themes write: bare `currentColor`, `rgb(from currentColor r g b / a)`\n * and `color-mix(in <space>, currentColor p%, transparent)`. Throws on any other use of it.\n */\nexport function resolveCurrentColor(value: string, current: string): string {\n const v = value.trim();\n if (!/currentcolor/i.test(v)) return value;\n if (/^currentcolor$/i.test(v)) return current;\n const rel = RELATIVE.exec(v);\n if (rel) return atAlpha(current, fraction(rel[1], rel[2]));\n const mix = MIX.exec(v);\n if (mix && mix[2] === '%') return withAlpha(current, fraction(mix[1], mix[2]));\n throw new Error(`resolveCurrentColor: cannot flatten \"${value}\"`);\n}\n","/** A color mode the theme's `mode` axis resolves. */\nexport type ColorMode = 'light' | 'dark';\n\n/**\n * What a user chose: a mode, or `'auto'` — follow the OS, live. `'auto'` is\n * not a mode; resolve it with `useResolvedColorMode` before handing it to a\n * `ThemeProvider` selection.\n */\nexport type ColorModePreference = 'auto' | ColorMode;\n\n/** Whether a value — say, one read back from storage — is a preference. */\nexport function isColorModePreference(v: unknown): v is ColorModePreference {\n return v === 'auto' || v === 'light' || v === 'dark';\n}\n","import type { ColorLiteral, ColorRef, ColorSource, Palette } from '@weasel-js/paint';\nimport type { CategoricalRampDef } from './definition.ts';\nimport { DEFAULT_CONSTRAINTS, generate, type Constraints } from './engine/color/generate.ts';\nimport { resolveTheme, themeChain, type ResolvedTheme } from './resolveTheme.ts';\nimport { weaselTheme, type Theme } from './theme.ts';\n\n/** The categorical generator the swatch ramp uses, asked for `count` colors. */\nexport interface GeneratedColors {\n readonly generate: { readonly count: number; readonly gates?: CategoricalRampDef['gates'] };\n}\n\n/** A ramp of the active theme, by name — `{ ramp: 'swatch' }` walks its steps in order. */\nexport interface RampColors {\n readonly ramp: string;\n}\n\n/** One color of a list: a CSS color string, or a `ColorSource` resolved when it is read. */\nexport type ColorListItem = string | ColorSource;\n\n/** The forms a theme definition can hold: everything but a function. */\nexport type SerializableColorList = readonly (string | ColorLiteral | ColorRef)[] | GeneratedColors | RampColors;\n\n/**\n * Several colors, read by index with `colorAt`, wrapping. Items, each a CSS\n * string or a `ColorSource`; the swatch ramp's generator; a ramp of the active\n * theme, which follows the mode; or a function of the index.\n */\nexport type ColorList = readonly ColorListItem[] | GeneratedColors | RampColors | ((i: number) => ColorListItem);\n\n/** What a `ColorList` resolves against. `useTheme()`'s value is one. */\nexport interface ColorContext {\n readonly theme: Theme;\n readonly resolved: ResolvedTheme;\n}\n\n/** What a `ColorSource` resolves against under a theme. `useTints()`'s value is one. */\nexport interface ColorSourceContext extends ColorContext {\n /** The list `{ ref: 'tint' }` indexes. Absent: the theme's own. */\n readonly tints?: ColorList;\n /** Names answered before the theme's. */\n readonly palette?: Palette;\n}\n\nconst wrap = (i: number, n: number) => ((Math.trunc(i) % n) + n) % n;\n\nconst generated = new Map<string, readonly string[]>();\n\nfunction generatedColors({ generate: g }: GeneratedColors): readonly string[] {\n const key = JSON.stringify([g.count, g.gates ?? {}]);\n let colors = generated.get(key);\n if (!colors) {\n const palette = generate({ ...DEFAULT_CONSTRAINTS, ...(g.gates as Partial<Constraints>), count: g.count, anchors: [] });\n colors = palette.swatches.map((s) => s.hex.toLowerCase());\n generated.set(key, colors);\n }\n return colors;\n}\n\n/** `rampSteps`, answering `undefined` for a ramp the chain lacks. */\nexport function findRampSteps(theme: Theme, ramp: string): readonly string[] | undefined {\n for (const t of themeChain(theme).reverse()) {\n const steps = t.ramps?.[ramp];\n if (steps) return steps;\n }\n return undefined;\n}\n\n/** A ramp's step names, from the nearest theme in the chain that declares it. */\nexport function rampSteps(theme: Theme, ramp: string): readonly string[] {\n const steps = findRampSteps(theme, ramp);\n if (!steps) throw new Error(`Theme \"${theme.name}\" has no ramp \"${ramp}\"`);\n return steps;\n}\n\n/** The tint list a theme declares, from the nearest theme in its chain that has one. */\nexport function themeTints(theme: Theme): ColorList {\n for (const t of themeChain(theme).reverse()) if (t.tints) return t.tints;\n return { ramp: 'swatch' };\n}\n\nlet fallback: ColorContext | undefined;\nexport const defaultContext = () => (fallback ??= { theme: weaselTheme, resolved: resolveTheme(weaselTheme) });\n\nconst pickStep = (list: RampColors, i: number, theme: Theme): string => {\n const steps = rampSteps(theme, list.ramp);\n return steps[wrap(i, steps.length)];\n};\n\n/** The custom property behind the `i`th step of a ramp list, wrapping. */\nexport const rampProperty = (list: RampColors, i: number, theme: Theme): string =>\n `--wzl-${list.ramp}-${pickStep(list, i, theme)}`;\n\nexport const isRamp = (list: ColorList): list is RampColors => typeof list !== 'function' && 'ramp' in list;\n\n/** The `i`th item of a list that is not a ramp, wrapping, as it was written. */\nexport function colorItemAt(list: Exclude<ColorList, RampColors>, i: number): ColorListItem {\n if (typeof list === 'function') return list(i);\n const colors = 'generate' in list ? generatedColors(list) : list;\n if (colors.length === 0) throw new Error('colorAt: empty color list');\n return colors[wrap(i, colors.length)];\n}\n\n/** How many distinct colors `list` holds before it wraps; `undefined` for a function, which never does. */\nexport function colorCount(list: ColorList, ctx: ColorContext = defaultContext()): number | undefined {\n if (typeof list === 'function') return undefined;\n if ('ramp' in list) return rampSteps(ctx.theme, list.ramp).length;\n return 'generate' in list ? list.generate.count : list.length;\n}\n","import {\n colorLiteralToCss,\n cssColorLiteral,\n resolvePaletteColor,\n type ColorFnContext,\n type ColorLiteral,\n type ColorRef,\n type ColorSource,\n type Palette,\n} from '@weasel-js/paint';\nimport {\n colorItemAt,\n defaultContext,\n findRampSteps,\n isRamp,\n rampProperty,\n themeTints,\n type ColorList,\n type ColorSourceContext,\n} from './colorListItems.ts';\nimport { resolveCurrentColor } from './currentColor.ts';\n\n/** The name the tint list answers to: `{ ref: 'tint', index: 2 }` is the third tint, wrapping. */\nexport const TINT_REF = 'tint';\n\nexport type { ColorSourceContext };\n\nconst NO_PALETTE: Palette = { entries: [] };\n\nconst tintsOf = (ctx: ColorSourceContext): ColorList => ctx.tints ?? themeTints(ctx.theme);\n\nfunction parsed(css: string): ColorLiteral | null {\n try {\n return cssColorLiteral(css);\n } catch {\n return null;\n }\n}\n\n/** The custom property a theme ref names: itself when spelled as one, a token by name, or a ramp step by index. */\nfunction propertyOf(ref: ColorRef, ctx: ColorSourceContext): string | null {\n if (ref.ref.startsWith('--')) return ref.index === undefined ? ref.ref : null;\n if (ref.index === undefined) return `--wzl-${ref.ref}`;\n const step = findRampSteps(ctx.theme, ref.ref)?.[ref.index];\n return step === undefined ? null : `--wzl-${ref.ref}-${step}`;\n}\n\nfunction tokenLiteral(property: string, ctx: ColorSourceContext): ColorLiteral | null {\n const value = (ctx.resolved as Readonly<Record<string, string>>)[property];\n if (value === undefined) return null;\n try {\n return parsed(resolveCurrentColor(value, ctx.resolved['--wzl-fg']));\n } catch {\n return null;\n }\n}\n\nconst isRef = (source: ColorSource): source is ColorRef => typeof source !== 'function' && 'ref' in source;\n\nfunction tintSource(index: number, ctx: ColorSourceContext): ColorSource | null {\n const tints = tintsOf(ctx);\n if (isRamp(tints)) return tokenLiteral(rampProperty(tints, index, ctx.theme), ctx);\n const item = colorItemAt(tints, index);\n return typeof item === 'string' ? parsed(item) : item;\n}\n\nfunction themeSource(ref: ColorRef, ctx: ColorSourceContext): ColorSource | null {\n if (ref.ref === TINT_REF) return tintSource(ref.index ?? 0, ctx);\n const property = propertyOf(ref, ctx);\n return property === null ? null : tokenLiteral(property, ctx);\n}\n\n/**\n * Resolve `source` to a literal, for a surface drawn without the cascade. A ref\n * names an entry of the context's palette first, then the theme: `tint` with an\n * index into the tint list, a token by its name without the `--wzl-` prefix, a\n * ramp by its name with the index of a step, or a custom property spelled out.\n * `null` for a name nothing answers, a token that is not a color, and a custom\n * property the theme does not define.\n */\nexport function colorSourceLiteral(source: ColorSource, ctx: ColorSourceContext = defaultContext()): ColorLiteral | null {\n return resolvePaletteColor(ctx.palette ?? NO_PALETTE, source, (ref) => themeSource(ref, ctx));\n}\n\nfunction literalCss(source: ColorSource, ctx: ColorSourceContext): string | null {\n const literal = colorSourceLiteral(source, ctx);\n return literal && colorLiteralToCss(literal);\n}\n\nfunction tintCss(source: ColorRef, ctx: ColorSourceContext): string | null {\n const tints = tintsOf(ctx);\n const index = source.index ?? 0;\n if (isRamp(tints)) return `var(${rampProperty(tints, index, ctx.theme)})`;\n const item = colorItemAt(tints, index);\n if (typeof item === 'string') return item;\n return isRef(item) && item.ref !== TINT_REF ? colorSourceCss(item, ctx) : literalCss(source, ctx);\n}\n\nfunction themeRefCss(ref: ColorRef, ctx: ColorSourceContext): string | null {\n if (ref.ref === TINT_REF) return tintCss(ref, ctx);\n const property = propertyOf(ref, ctx);\n if (property === null) return null;\n return ref.ref.startsWith('--') || tokenLiteral(property, ctx) ? `var(${property})` : null;\n}\n\nfunction nth<T>(items: Iterable<T>, n: number): T | undefined {\n let i = 0;\n for (const item of items) if (i++ === n) return item;\n return undefined;\n}\n\n/**\n * The theme ref `source` comes down to when followed by name alone, through\n * palette entries and functions that only name another color. `null` when it\n * ends anywhere else, or when a function read a color to compute its own.\n */\nfunction namedThemeRef(source: ColorSource, ctx: ColorSourceContext): ColorRef | null {\n const entries = ctx.palette?.entries ?? [];\n const seen = new Set<string>();\n let read = false;\n const fnCtx: ColorFnContext = {\n resolve: (s) => {\n read = true;\n return colorSourceLiteral(s, ctx);\n },\n };\n let at: ColorSource | null | undefined = source;\n while (at != null && !read) {\n if (typeof at === 'function') {\n at = at(fnCtx);\n continue;\n }\n if (!isRef(at)) return null;\n const { ref, index = 0 } = at;\n const entry = entries.find((e) => e.name === ref);\n if (!entry) return at;\n const key = `${index}:${ref}`;\n if (seen.has(key)) return null;\n seen.add(key);\n if ('color' in entry) at = index === 0 ? entry.color : null;\n else at = nth(entry.colors(fnCtx), index);\n }\n return null;\n}\n\n/**\n * `source` as a CSS color, naming what `colorSourceLiteral` resolves. A source\n * that comes down to a ref the theme answers, directly or through palette\n * entries and functions that only name another color, is written as that\n * ref's custom property: it follows the cascade with no re-render, and a\n * property spelled out need not be the theme's. Everything else is written as\n * the literal it resolves to in `ctx`, which includes a function that reads a\n * color through `resolve` to compute its own.\n */\nexport function colorSourceCss(source: ColorSource, ctx: ColorSourceContext = defaultContext()): string | null {\n const named = namedThemeRef(source, ctx);\n return named ? themeRefCss(named, ctx) : literalCss(source, ctx);\n}\n"]}
|
|
@@ -3645,7 +3645,8 @@ function toRaw(v) {
|
|
|
3645
3645
|
return out;
|
|
3646
3646
|
}
|
|
3647
3647
|
const obj = isPinObject(v) ? v : { value: v };
|
|
3648
|
-
|
|
3648
|
+
const raw = { type: obj.type ?? "unknown", value: obj.value, alpha: obj.alpha, description: obj.description };
|
|
3649
|
+
return obj.scope === void 0 ? raw : { ...raw, scope: obj.scope };
|
|
3649
3650
|
}
|
|
3650
3651
|
var weaselTheme = {
|
|
3651
3652
|
name: "weasel",
|
|
@@ -3679,5 +3680,5 @@ function defineTheme(input) {
|
|
|
3679
3680
|
}
|
|
3680
3681
|
|
|
3681
3682
|
export { BAKED_THEMES, THEMES, THEME_SOURCES, defineTheme, weaselTheme };
|
|
3682
|
-
//# sourceMappingURL=chunk-
|
|
3683
|
-
//# sourceMappingURL=chunk-
|
|
3683
|
+
//# sourceMappingURL=chunk-X2KI4SSJ.js.map
|
|
3684
|
+
//# sourceMappingURL=chunk-X2KI4SSJ.js.map
|