@dsgraph/adapters 0.0.0-stage → 0.3.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/LICENSE +21 -0
- package/README.md +29 -2
- package/dist/css-tokens.d.ts +13 -0
- package/dist/css-tokens.d.ts.map +1 -0
- package/dist/css-tokens.js +231 -0
- package/dist/css-tokens.js.map +1 -0
- package/dist/css-values.d.ts +19 -0
- package/dist/css-values.d.ts.map +1 -0
- package/dist/css-values.js +205 -0
- package/dist/css-values.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/json-values.d.ts +30 -0
- package/dist/json-values.d.ts.map +1 -0
- package/dist/json-values.js +332 -0
- package/dist/json-values.js.map +1 -0
- package/dist/styles.d.ts +20 -0
- package/dist/styles.d.ts.map +1 -0
- package/dist/styles.js +182 -0
- package/dist/styles.js.map +1 -0
- package/dist/tokens-json.d.ts +10 -0
- package/dist/tokens-json.d.ts.map +1 -0
- package/dist/tokens-json.js +499 -0
- package/dist/tokens-json.js.map +1 -0
- package/package.json +32 -4
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Adam Reznik
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,30 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @dsgraph/adapters
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Token adapters for `@dsgraph/core`.
|
|
4
|
+
|
|
5
|
+
`jsonTokens` reads token JSON beyond plain DTCG:
|
|
6
|
+
|
|
7
|
+
- token sets: a file each, or top-level keys of one exported file; set order from `$metadata.json`, themes from `$themes.json`; each theme group becomes a modifier, a group with one theme joins the base
|
|
8
|
+
- value/type JSON (the older notation): every file merges into one set; untyped tokens take their type from the category (`color`, `size` as rem, `time` as ms) or from the value
|
|
9
|
+
- values per mode under `sets`, types from a token's `$schema` link, path-like names (`Dark/color.bg`)
|
|
10
|
+
- values become DTCG 2025.10: `"16"` is 16px, `"Semi Bold"` is 600, `"150%"` line height is 1.5, `"-2%"` letter spacing is -0.02em, `boxShadow` becomes `shadow`
|
|
11
|
+
- math (`{space.base} * 2`), `rgba({color.ink}, 0.5)` and color modifiers (`lighten`, `darken`, `mix`, `alpha` in lch, hsl, srgb, p3) are evaluated with their references kept as edges
|
|
12
|
+
- references with a `.value` suffix work; CSS that no DTCG value can hold (`clamp()`, gradients) is kept as text
|
|
13
|
+
- when a package ships the same tokens in several formats, the best-typed file is read
|
|
14
|
+
|
|
15
|
+
It runs before plain DTCG files. Modes written per token in `$extensions.mode`, and mode files side by side (`Theme/Light.tokens.json`, `Theme/Dark.tokens.json`), as Figma variable exports write them, become modifiers in the core for every JSON source.
|
|
16
|
+
|
|
17
|
+
`cssTokens` reads CSS custom properties as tokens:
|
|
18
|
+
|
|
19
|
+
- `:root`, `html`, `:host` → the base set
|
|
20
|
+
- `[data-theme=dark]`, `.dark`, `@media (prefers-color-scheme: dark)` → a `theme` modifier
|
|
21
|
+
- other media queries → independent on/off modifiers
|
|
22
|
+
- types inferred from values and names (colors, lengths, durations, easings, font stacks, shadows); whole `var()` becomes an alias; `calc()` and friends stay as expressions with their references
|
|
23
|
+
- scoped variables (`.button { --x }`) are not tokens
|
|
24
|
+
- explicit mapping via `css.contexts` in the config
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
import { scan } from '@dsgraph/core'
|
|
28
|
+
import { cssTokens, jsonTokens } from '@dsgraph/adapters'
|
|
29
|
+
const snapshot = await scan(source, {}, { adapters: [jsonTokens, cssTokens] })
|
|
30
|
+
```
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type TokenAdapter } from '@dsgraph/core';
|
|
2
|
+
/**
|
|
3
|
+
* A short modifier name for an at-rule: `@media (min-width: 768px)` → `min-width: 768px`,
|
|
4
|
+
* `@supports (color: color(display-p3 1 1 1))` → `display-p3`.
|
|
5
|
+
*/
|
|
6
|
+
export declare function conditionName(atRule: string): string;
|
|
7
|
+
/**
|
|
8
|
+
* CSS custom properties → token system (spec section 4.3). Root-like rules form the base set;
|
|
9
|
+
* theme selectors and `prefers-color-scheme` become a `theme`-style modifier; other media queries
|
|
10
|
+
* become independent on/off modifiers. Scoped variables (e.g. `.button { --x }`) are not tokens.
|
|
11
|
+
*/
|
|
12
|
+
export declare const cssTokens: TokenAdapter;
|
|
13
|
+
//# sourceMappingURL=css-tokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css-tokens.d.ts","sourceRoot":"","sources":["../src/css-tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,YAAY,EAGlB,MAAM,eAAe,CAAA;AA2CtB;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAUpD;AAmDD;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAAE,YAkIvB,CAAA"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { excludeFor, matchGlob, prefetch, } from '@dsgraph/core';
|
|
2
|
+
import postcss, {} from 'postcss';
|
|
3
|
+
import { cssValueToToken, idFromCustomProperty } from './css-values.js';
|
|
4
|
+
const ROOT_LIKE = /^(:root|html|:host|body|\*)(:not\([^)]*\))*$/;
|
|
5
|
+
const ATTR_THEME = /^(?::root|html|body|:host)?\[(data-[\w-]+)(?:=["']?([\w-]+)["']?)?\](:not\([^)]*\))*$/;
|
|
6
|
+
const CLASS_THEME = /^(?::root|html|body|:host)?\.(dark|light|theme-([\w-]+)|([\w-]+)-theme)(:not\([^)]*\))*$/;
|
|
7
|
+
const COLOR_SCHEME = /prefers-color-scheme\s*:\s*(dark|light)/i;
|
|
8
|
+
/** Several attributes at once: `[data-color-mode="dark"][data-dark-theme="dark_dimmed"]`. */
|
|
9
|
+
const COMPOUND_ATTR = /^(?::root|html|body|:host)?((?:\[data-[\w-]+(?:=["']?[\w-]+["']?)?\]){2,})(:not\([^)]*\))*$/;
|
|
10
|
+
const norm = (s) => s.replace(/\s+/g, ' ').replace(/["']/g, '').trim().toLowerCase();
|
|
11
|
+
/** Conditional at-rules around a declaration, outermost first (`@layer` is ignored). */
|
|
12
|
+
function atRulesOf(decl) {
|
|
13
|
+
const out = [];
|
|
14
|
+
let node = decl.parent?.parent;
|
|
15
|
+
while (node && node.type !== 'root') {
|
|
16
|
+
if (node.type === 'atrule') {
|
|
17
|
+
const at = node;
|
|
18
|
+
if (at.name !== 'layer')
|
|
19
|
+
out.unshift(`@${at.name} ${norm(at.params)}`);
|
|
20
|
+
}
|
|
21
|
+
node = node.parent;
|
|
22
|
+
}
|
|
23
|
+
return out;
|
|
24
|
+
}
|
|
25
|
+
/** Well-known conditions under the names people use for them. */
|
|
26
|
+
const KNOWN_CONDITIONS = [
|
|
27
|
+
[/display-p3|color-gamut\s*:\s*p3/, 'display-p3'],
|
|
28
|
+
[/color-gamut\s*:\s*rec2020/, 'rec2020'],
|
|
29
|
+
[/prefers-reduced-motion\s*:\s*reduce/, 'reduced-motion'],
|
|
30
|
+
[/prefers-contrast\s*:\s*more/, 'high-contrast'],
|
|
31
|
+
[/prefers-contrast\s*:\s*less/, 'low-contrast'],
|
|
32
|
+
[/forced-colors\s*:\s*active/, 'forced-colors'],
|
|
33
|
+
];
|
|
34
|
+
/**
|
|
35
|
+
* A short modifier name for an at-rule: `@media (min-width: 768px)` → `min-width: 768px`,
|
|
36
|
+
* `@supports (color: color(display-p3 1 1 1))` → `display-p3`.
|
|
37
|
+
*/
|
|
38
|
+
export function conditionName(atRule) {
|
|
39
|
+
for (const [re, name] of KNOWN_CONDITIONS)
|
|
40
|
+
if (re.test(atRule))
|
|
41
|
+
return name;
|
|
42
|
+
const m = /^@(\w+)\s*(.*)$/.exec(atRule.trim());
|
|
43
|
+
if (!m)
|
|
44
|
+
return atRule;
|
|
45
|
+
const params = m[2]
|
|
46
|
+
.replace(/^\((.*)\)$/, '$1')
|
|
47
|
+
.replace(/\(([^()]*)\)/g, '')
|
|
48
|
+
.replace(/\s+/g, ' ')
|
|
49
|
+
.trim();
|
|
50
|
+
return m[1] === 'media' ? params : `${m[1]} ${params}`;
|
|
51
|
+
}
|
|
52
|
+
function autoPlacement(selectors, atRules) {
|
|
53
|
+
const media = atRules.find((a) => !COLOR_SCHEME.test(a));
|
|
54
|
+
const scheme = atRules.map((a) => COLOR_SCHEME.exec(a)?.[1]?.toLowerCase()).find(Boolean);
|
|
55
|
+
for (const raw of selectors) {
|
|
56
|
+
const sel = raw.replace(/\s+/g, '');
|
|
57
|
+
if (ROOT_LIKE.test(sel)) {
|
|
58
|
+
if (media)
|
|
59
|
+
return { kind: 'context', modifier: conditionName(media), context: 'on', boolean: true };
|
|
60
|
+
if (scheme)
|
|
61
|
+
return { kind: 'context', modifier: 'theme', context: scheme };
|
|
62
|
+
return { kind: 'base' };
|
|
63
|
+
}
|
|
64
|
+
const attr = ATTR_THEME.exec(sel);
|
|
65
|
+
if (attr && !media)
|
|
66
|
+
return { kind: 'context', modifier: attr[1].replace(/^data-/, ''), context: attr[2] ?? 'on' };
|
|
67
|
+
const cls = CLASS_THEME.exec(sel);
|
|
68
|
+
if (cls && !media)
|
|
69
|
+
return { kind: 'context', modifier: 'theme', context: cls[2] ?? cls[3] ?? cls[1] };
|
|
70
|
+
// The most specific attribute names the theme: `…[data-dark-theme="dark_dimmed"]` → dark_dimmed.
|
|
71
|
+
const compound = COMPOUND_ATTR.exec(sel);
|
|
72
|
+
if (compound && !media) {
|
|
73
|
+
const values = [...compound[1].matchAll(/=["']?([\w-]+)["']?\]/g)].map((m) => m[1]);
|
|
74
|
+
if (values.length)
|
|
75
|
+
return { kind: 'context', modifier: 'theme', context: values[values.length - 1] };
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return { kind: 'skip' };
|
|
79
|
+
}
|
|
80
|
+
/** Configured placement: `css.contexts` patterns such as `[data-theme=dark]` or `@media (prefers-color-scheme: dark) :root`. */
|
|
81
|
+
function configuredPlacement(selectors, atRules, contexts) {
|
|
82
|
+
const sels = selectors.map(norm);
|
|
83
|
+
for (const [modifier, ctxs] of Object.entries(contexts)) {
|
|
84
|
+
for (const [context, patterns] of Object.entries(ctxs)) {
|
|
85
|
+
for (const pattern of patterns) {
|
|
86
|
+
const m = /^(@\w+\s*\([^)]*\))?\s*(.*)$/.exec(pattern.trim());
|
|
87
|
+
const atPart = m[1] ? norm(m[1].replace(/^@(\w+)\s*/, '@$1 ')) : undefined;
|
|
88
|
+
const selPart = m[2] ? norm(m[2]) : undefined;
|
|
89
|
+
const atOk = atPart ? atRules.includes(atPart) : atRules.length === 0;
|
|
90
|
+
const selOk = selPart
|
|
91
|
+
? sels.includes(selPart)
|
|
92
|
+
: sels.some((s) => ROOT_LIKE.test(s.replace(/\s+/g, '')));
|
|
93
|
+
if (atOk && selOk)
|
|
94
|
+
return { kind: 'context', modifier, context };
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* CSS custom properties → token system (spec section 4.3). Root-like rules form the base set;
|
|
102
|
+
* theme selectors and `prefers-color-scheme` become a `theme`-style modifier; other media queries
|
|
103
|
+
* become independent on/off modifiers. Scoped variables (e.g. `.button { --x }`) are not tokens.
|
|
104
|
+
*/
|
|
105
|
+
export const cssTokens = {
|
|
106
|
+
name: 'tokens-css',
|
|
107
|
+
async detect(source, config) {
|
|
108
|
+
const exclude = excludeFor(config, 'css');
|
|
109
|
+
const files = (await source.list(config.css?.include ?? ['**/*.css'])).filter((p) => !matchGlob(p, exclude));
|
|
110
|
+
if (config.css?.include)
|
|
111
|
+
return files;
|
|
112
|
+
await prefetch(source, files);
|
|
113
|
+
const out = [];
|
|
114
|
+
for (const f of files) {
|
|
115
|
+
const text = await source.readText(f);
|
|
116
|
+
// Theme files may hold only a class rule (`.dark, .dark-theme { … }`).
|
|
117
|
+
if (/--[\w-]+\s*:/.test(text) &&
|
|
118
|
+
/(:root|html|:host|\[data-|prefers-color-scheme|\.(dark|light)\b|\.theme-|-theme\b)/.test(text))
|
|
119
|
+
out.push(f);
|
|
120
|
+
}
|
|
121
|
+
return out;
|
|
122
|
+
},
|
|
123
|
+
async load(source, files, config, diag) {
|
|
124
|
+
const configured = config.css?.contexts;
|
|
125
|
+
const base = [];
|
|
126
|
+
const modifiers = new Map();
|
|
127
|
+
const orderOfModifiers = [];
|
|
128
|
+
await prefetch(source, files);
|
|
129
|
+
for (const file of [...files].sort()) {
|
|
130
|
+
let root;
|
|
131
|
+
try {
|
|
132
|
+
root = postcss.parse(await source.readText(file), { from: file });
|
|
133
|
+
}
|
|
134
|
+
catch (e) {
|
|
135
|
+
diag.error('css/parse-error', e.message, { file });
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
const baseTree = {};
|
|
139
|
+
const contextTrees = new Map();
|
|
140
|
+
let skipped = 0;
|
|
141
|
+
root.walkDecls((decl) => {
|
|
142
|
+
if (!decl.prop.startsWith('--'))
|
|
143
|
+
return;
|
|
144
|
+
const rule = decl.parent;
|
|
145
|
+
if (rule?.type !== 'rule') {
|
|
146
|
+
skipped++;
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const selectors = rule.selectors;
|
|
150
|
+
const atRules = atRulesOf(decl);
|
|
151
|
+
const placement = (configured && configuredPlacement(selectors, atRules, configured)) ??
|
|
152
|
+
(configured
|
|
153
|
+
? selectors.some((s) => ROOT_LIKE.test(s.replace(/\s+/g, ''))) && atRules.length === 0
|
|
154
|
+
? { kind: 'base' }
|
|
155
|
+
: { kind: 'skip' }
|
|
156
|
+
: autoPlacement(selectors, atRules));
|
|
157
|
+
if (placement.kind === 'skip') {
|
|
158
|
+
skipped++;
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
const id = idFromCustomProperty(decl.prop);
|
|
162
|
+
const entry = cssValueToToken(decl.prop, decl.value);
|
|
163
|
+
const token = {
|
|
164
|
+
$value: entry.$value,
|
|
165
|
+
$extensions: { 'dev.dsgraph': { css: decl.prop } },
|
|
166
|
+
};
|
|
167
|
+
if (entry.$type) {
|
|
168
|
+
token.$type = entry.$type;
|
|
169
|
+
token.$extensions['dev.dsgraph'].typeInferred = true;
|
|
170
|
+
}
|
|
171
|
+
if (placement.kind === 'base')
|
|
172
|
+
baseTree[id] = token;
|
|
173
|
+
else {
|
|
174
|
+
if (!modifiers.has(placement.modifier)) {
|
|
175
|
+
modifiers.set(placement.modifier, { contexts: new Map(), boolean: placement.boolean ?? false });
|
|
176
|
+
orderOfModifiers.push(placement.modifier);
|
|
177
|
+
}
|
|
178
|
+
const key = `${placement.modifier}\u0000${placement.context}`;
|
|
179
|
+
const tree = contextTrees.get(key) ?? {};
|
|
180
|
+
tree[id] = token;
|
|
181
|
+
contextTrees.set(key, tree);
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
if (skipped > 0)
|
|
185
|
+
diag.info('css/scoped-variable', `${skipped} custom properties outside root or theme selectors are not tokens`, { file });
|
|
186
|
+
if (Object.keys(baseTree).length > 0)
|
|
187
|
+
base.push({ file, tree: baseTree });
|
|
188
|
+
for (const [key, tree] of contextTrees) {
|
|
189
|
+
const [modifier, context] = key.split('\u0000');
|
|
190
|
+
const m = modifiers.get(modifier);
|
|
191
|
+
m.contexts.set(context, [...(m.contexts.get(context) ?? []), { file, tree }]);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
const system = {
|
|
195
|
+
sets: new Map([['base', base]]),
|
|
196
|
+
modifiers: new Map(),
|
|
197
|
+
order: [{ kind: 'set', name: 'base' }],
|
|
198
|
+
synthetic: true,
|
|
199
|
+
kind: 'css',
|
|
200
|
+
};
|
|
201
|
+
for (const name of orderOfModifiers) {
|
|
202
|
+
const m = modifiers.get(name);
|
|
203
|
+
const contexts = new Map();
|
|
204
|
+
let defaultContext;
|
|
205
|
+
if (m.boolean) {
|
|
206
|
+
contexts.set('off', []);
|
|
207
|
+
contexts.set('on', m.contexts.get('on') ?? []);
|
|
208
|
+
defaultContext = 'off';
|
|
209
|
+
}
|
|
210
|
+
else if (configured?.[name]) {
|
|
211
|
+
for (const ctx of Object.keys(configured[name]))
|
|
212
|
+
contexts.set(ctx, m.contexts.get(ctx) ?? []);
|
|
213
|
+
defaultContext = Object.keys(configured[name])[0];
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
// The base set plays the role of the context that has no overrides.
|
|
217
|
+
defaultContext = m.contexts.has('light') ? 'light' : 'default';
|
|
218
|
+
if (!m.contexts.has(defaultContext))
|
|
219
|
+
contexts.set(defaultContext, []);
|
|
220
|
+
for (const [ctx, docs] of m.contexts)
|
|
221
|
+
contexts.set(ctx, docs);
|
|
222
|
+
}
|
|
223
|
+
system.modifiers.set(name, { contexts, default: defaultContext });
|
|
224
|
+
system.order.push({ kind: 'modifier', name });
|
|
225
|
+
}
|
|
226
|
+
if (base.length === 0 && modifiers.size === 0)
|
|
227
|
+
diag.warn('tokens/no-files', 'No CSS custom properties found in root or theme selectors');
|
|
228
|
+
return system;
|
|
229
|
+
},
|
|
230
|
+
};
|
|
231
|
+
//# sourceMappingURL=css-tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css-tokens.js","sourceRoot":"","sources":["../src/css-tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EACV,SAAS,EACT,QAAQ,GAMT,MAAM,eAAe,CAAA;AACtB,OAAO,OAAO,EAAE,EAAiC,MAAM,SAAS,CAAA;AAChE,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAOvE,MAAM,SAAS,GAAG,8CAA8C,CAAA;AAChE,MAAM,UAAU,GAAG,uFAAuF,CAAA;AAC1G,MAAM,WAAW,GAAG,0FAA0F,CAAA;AAC9G,MAAM,YAAY,GAAG,0CAA0C,CAAA;AAC/D,6FAA6F;AAC7F,MAAM,aAAa,GACjB,6FAA6F,CAAA;AAE/F,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;AAE5F,wFAAwF;AACxF,SAAS,SAAS,CAAC,IAAiB;IAClC,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,CAAA;IAC9B,OAAO,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,MAAM,EAAE,GAAG,IAAc,CAAA;YACzB,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO;gBAAE,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACxE,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,iEAAiE;AACjE,MAAM,gBAAgB,GAA4B;IAChD,CAAC,iCAAiC,EAAE,YAAY,CAAC;IACjD,CAAC,2BAA2B,EAAE,SAAS,CAAC;IACxC,CAAC,qCAAqC,EAAE,gBAAgB,CAAC;IACzD,CAAC,6BAA6B,EAAE,eAAe,CAAC;IAChD,CAAC,6BAA6B,EAAE,cAAc,CAAC;IAC/C,CAAC,4BAA4B,EAAE,eAAe,CAAC;CAChD,CAAA;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,gBAAgB;QAAE,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAA;IAC3E,MAAM,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;IAC/C,IAAI,CAAC,CAAC;QAAE,OAAO,MAAM,CAAA;IACrB,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAE;SACjB,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;SAC3B,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;SAC5B,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAA;IACT,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAA;AACxD,CAAC;AAED,SAAS,aAAa,CAAC,SAAmB,EAAE,OAAiB;IAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACzF,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QACnC,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,KAAK;gBAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;YACnG,IAAI,MAAM;gBAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA;YAC1E,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;QACzB,CAAC;QACD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACjC,IAAI,IAAI,IAAI,CAAC,KAAK;YAChB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAA;QAChG,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACjC,IAAI,GAAG,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAE,EAAE,CAAA;QACtG,iGAAiG;QACjG,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACxC,IAAI,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAA;YACrF,IAAI,MAAM,CAAC,MAAM;gBAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAE,EAAE,CAAA;QACvG,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;AACzB,CAAC;AAED,gIAAgI;AAChI,SAAS,mBAAmB,CAC1B,SAAmB,EACnB,OAAiB,EACjB,QAAkD;IAElD,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAChC,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxD,KAAK,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACvD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,CAAC,GAAG,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAE,CAAA;gBAC9D,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;gBAC1E,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;gBAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAA;gBACrE,MAAM,KAAK,GAAG,OAAO;oBACnB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;oBACxB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;gBAC3D,IAAI,IAAI,IAAI,KAAK;oBAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;YAClE,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAiB;IACrC,IAAI,EAAE,YAAY;IAElB,KAAK,CAAC,MAAM,CAAC,MAAc,EAAE,MAAkB;QAC7C,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QACzC,MAAM,KAAK,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAC3E,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAC9B,CAAA;QACD,IAAI,MAAM,CAAC,GAAG,EAAE,OAAO;YAAE,OAAO,KAAK,CAAA;QACrC,MAAM,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QAC7B,MAAM,GAAG,GAAa,EAAE,CAAA;QACxB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;YACrC,uEAAuE;YACvE,IACE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;gBACzB,oFAAoF,CAAC,IAAI,CAAC,IAAI,CAAC;gBAE/F,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACf,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,KAAe,EAAE,MAAkB,EAAE,IAAmB;QACjF,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAA;QACvC,MAAM,IAAI,GAAoB,EAAE,CAAA;QAChC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAwE,CAAA;QACjG,MAAM,gBAAgB,GAAa,EAAE,CAAA;QACrC,MAAM,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QAE7B,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACrC,IAAI,IAAkB,CAAA;YACtB,IAAI,CAAC;gBACH,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;YACnE,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAG,CAAW,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;gBAC7D,SAAQ;YACV,CAAC;YACD,MAAM,QAAQ,GAA4B,EAAE,CAAA;YAC5C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAmC,CAAA;YAC/D,IAAI,OAAO,GAAG,CAAC,CAAA;YAEf,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE;gBACtB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;oBAAE,OAAM;gBACvC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAA;gBACxB,IAAI,IAAI,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;oBAC1B,OAAO,EAAE,CAAA;oBACT,OAAM;gBACR,CAAC;gBACD,MAAM,SAAS,GAAI,IAAqB,CAAC,SAAS,CAAA;gBAClD,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;gBAC/B,MAAM,SAAS,GACb,CAAC,UAAU,IAAI,mBAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;oBACnE,CAAC,UAAU;wBACT,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;4BACpF,CAAC,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE;4BAC3B,CAAC,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE;wBAC7B,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAA;gBACxC,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAC9B,OAAO,EAAE,CAAA;oBACT,OAAM;gBACR,CAAC;gBACD,MAAM,EAAE,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC1C,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;gBACpD,MAAM,KAAK,GAA4B;oBACrC,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,WAAW,EAAE,EAAE,aAAa,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE;iBACnD,CAAA;gBACD,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBAChB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CACxB;oBAAC,KAAK,CAAC,WAAuD,CAAC,aAAa,CAAE,CAAC,YAAY,GAAG,IAAI,CAAA;gBACrG,CAAC;gBACD,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM;oBAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,KAAK,CAAA;qBAC9C,CAAC;oBACJ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACvC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,IAAI,KAAK,EAAE,CAAC,CAAA;wBAC/F,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;oBAC3C,CAAC;oBACD,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC,QAAQ,SAAS,SAAS,CAAC,OAAO,EAAE,CAAA;oBAC7D,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;oBACxC,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAA;oBAChB,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;gBAC7B,CAAC;YACH,CAAC,CAAC,CAAA;YAEF,IAAI,OAAO,GAAG,CAAC;gBACb,IAAI,CAAC,IAAI,CACP,qBAAqB,EACrB,GAAG,OAAO,mEAAmE,EAC7E,EAAE,IAAI,EAAE,CACT,CAAA;YACH,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;YACzE,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,YAAY,EAAE,CAAC;gBACvC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAqB,CAAA;gBACnE,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAA;gBAClC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;YAC/E,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAgB;YAC1B,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;YAC/B,SAAS,EAAE,IAAI,GAAG,EAAE;YACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YACtC,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,KAAK;SACZ,CAAA;QACD,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;YACpC,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAE,CAAA;YAC9B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAA;YACnD,IAAI,cAAsB,CAAA;YAC1B,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;gBACd,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;gBACvB,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;gBAC9C,cAAc,GAAG,KAAK,CAAA;YACxB,CAAC;iBAAM,IAAI,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC;oBAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;gBAC9F,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC,CAAC,CAAC,CAAE,CAAA;YACrD,CAAC;iBAAM,CAAC;gBACN,oEAAoE;gBACpE,cAAc,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAA;gBAC9D,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC;oBAAE,QAAQ,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;gBACrE,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ;oBAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YAC/D,CAAC;YACD,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAA;YACjE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;QAC/C,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,2DAA2D,CAAC,CAAA;QAC3F,OAAO,MAAM,CAAA;IACf,CAAC;CACF,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Splits at top-level separators, ignoring those inside parentheses and quotes. */
|
|
2
|
+
export declare function splitTopLevel(input: string, sep: ',' | ' '): string[];
|
|
3
|
+
/** `var(--name)` or `var(--name, fallback)` spanning the whole value. */
|
|
4
|
+
export declare function parseVar(value: string): {
|
|
5
|
+
name: string;
|
|
6
|
+
fallback?: string;
|
|
7
|
+
} | undefined;
|
|
8
|
+
/** Token id for a custom property name: drops the leading `--`; dots (only possible escaped) become `_`. */
|
|
9
|
+
export declare const idFromCustomProperty: (prop: string) => string;
|
|
10
|
+
export interface TokenEntry {
|
|
11
|
+
$type?: string;
|
|
12
|
+
$value: unknown;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Infers a DTCG type for a custom property value. Whole `var()` becomes an alias (type comes from
|
|
16
|
+
* the target); anything that cannot be represented becomes a `css-expression` that keeps its text.
|
|
17
|
+
*/
|
|
18
|
+
export declare function cssValueToToken(prop: string, raw: string): TokenEntry;
|
|
19
|
+
//# sourceMappingURL=css-values.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css-values.d.ts","sourceRoot":"","sources":["../src/css-values.ts"],"names":[],"mappings":"AAEA,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,MAAM,EAAE,CAsBrE;AAED,yEAAyE;AACzE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAiBvF;AAED,4GAA4G;AAC5G,eAAO,MAAM,oBAAoB,SAAU,MAAM,KAAG,MAAwD,CAAA;AA+C5G,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,OAAO,CAAA;CAChB;AA8CD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAgDrE"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { cssColorToDtcg } from '@dsgraph/core';
|
|
2
|
+
/** Splits at top-level separators, ignoring those inside parentheses and quotes. */
|
|
3
|
+
export function splitTopLevel(input, sep) {
|
|
4
|
+
const out = [];
|
|
5
|
+
let depth = 0;
|
|
6
|
+
let quote = '';
|
|
7
|
+
let cur = '';
|
|
8
|
+
for (const ch of input) {
|
|
9
|
+
if (quote) {
|
|
10
|
+
cur += ch;
|
|
11
|
+
if (ch === quote)
|
|
12
|
+
quote = '';
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
if (ch === '"' || ch === "'")
|
|
16
|
+
quote = ch;
|
|
17
|
+
else if (ch === '(')
|
|
18
|
+
depth++;
|
|
19
|
+
else if (ch === ')')
|
|
20
|
+
depth--;
|
|
21
|
+
const isSep = sep === ' ' ? /\s/.test(ch) : ch === sep;
|
|
22
|
+
if (isSep && depth === 0) {
|
|
23
|
+
if (cur.trim() !== '')
|
|
24
|
+
out.push(cur.trim());
|
|
25
|
+
cur = '';
|
|
26
|
+
}
|
|
27
|
+
else
|
|
28
|
+
cur += ch;
|
|
29
|
+
}
|
|
30
|
+
if (cur.trim() !== '')
|
|
31
|
+
out.push(cur.trim());
|
|
32
|
+
return out;
|
|
33
|
+
}
|
|
34
|
+
/** `var(--name)` or `var(--name, fallback)` spanning the whole value. */
|
|
35
|
+
export function parseVar(value) {
|
|
36
|
+
const v = value.trim();
|
|
37
|
+
if (!v.startsWith('var(') || !v.endsWith(')'))
|
|
38
|
+
return undefined;
|
|
39
|
+
let depth = 0;
|
|
40
|
+
for (let i = 3; i < v.length; i++) {
|
|
41
|
+
if (v[i] === '(')
|
|
42
|
+
depth++;
|
|
43
|
+
else if (v[i] === ')') {
|
|
44
|
+
depth--;
|
|
45
|
+
if (depth === 0 && i !== v.length - 1)
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const inner = v.slice(4, -1);
|
|
50
|
+
const [name, ...rest] = splitTopLevel(inner, ',');
|
|
51
|
+
if (!name || !/^--[\w\\.-]+$/.test(name.trim()))
|
|
52
|
+
return undefined;
|
|
53
|
+
const result = { name: name.trim() };
|
|
54
|
+
if (rest.length > 0)
|
|
55
|
+
result.fallback = rest.join(', ');
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
/** Token id for a custom property name: drops the leading `--`; dots (only possible escaped) become `_`. */
|
|
59
|
+
export const idFromCustomProperty = (prop) => prop.replace(/^--/, '').replace(/\\?\./g, '_');
|
|
60
|
+
const LENGTH = /^(-?(?:\d+\.?\d*|\.\d+))(px|rem|em|%|vw|vh|vmin|vmax|ch|ex|pt|cqw|cqh|cqi|dvh|svh|lvh|lh|rlh)$/i;
|
|
61
|
+
const NUMBER = /^-?(?:\d+\.?\d*|\.\d+)$/;
|
|
62
|
+
const DURATION = /^(-?(?:\d+\.?\d*|\.\d+))(ms|s)$/;
|
|
63
|
+
const EASINGS = {
|
|
64
|
+
ease: [0.25, 0.1, 0.25, 1],
|
|
65
|
+
'ease-in': [0.42, 0, 1, 1],
|
|
66
|
+
'ease-out': [0, 0, 0.58, 1],
|
|
67
|
+
'ease-in-out': [0.42, 0, 0.58, 1],
|
|
68
|
+
linear: [0, 0, 1, 1],
|
|
69
|
+
};
|
|
70
|
+
const FONT_WEIGHT_WORDS = new Set([
|
|
71
|
+
'normal',
|
|
72
|
+
'bold',
|
|
73
|
+
'light',
|
|
74
|
+
'medium',
|
|
75
|
+
'thin',
|
|
76
|
+
'black',
|
|
77
|
+
'regular',
|
|
78
|
+
'semi-bold',
|
|
79
|
+
'extra-bold',
|
|
80
|
+
]);
|
|
81
|
+
const GENERIC_FAMILIES = new Set([
|
|
82
|
+
'serif',
|
|
83
|
+
'sans-serif',
|
|
84
|
+
'monospace',
|
|
85
|
+
'cursive',
|
|
86
|
+
'fantasy',
|
|
87
|
+
'system-ui',
|
|
88
|
+
'ui-sans-serif',
|
|
89
|
+
'ui-serif',
|
|
90
|
+
'ui-monospace',
|
|
91
|
+
'ui-rounded',
|
|
92
|
+
'emoji',
|
|
93
|
+
'math',
|
|
94
|
+
]);
|
|
95
|
+
const NON_COLORS = new Set(['inherit', 'initial', 'unset', 'revert', 'currentcolor', 'none']);
|
|
96
|
+
const hint = (name, words) => words.test(name.toLowerCase());
|
|
97
|
+
const isDimensionName = (n) => hint(n, /(space|spacing|size|radius|width|height|gap|inset|offset|gutter|padding|margin|indent|blur|spread|border-w)/);
|
|
98
|
+
/** A sub-value inside a composite: a reference, a color or a length. */
|
|
99
|
+
function subValue(part, expect) {
|
|
100
|
+
const v = parseVar(part);
|
|
101
|
+
if (v)
|
|
102
|
+
return `{${idFromCustomProperty(v.name)}}`;
|
|
103
|
+
if (expect === 'color')
|
|
104
|
+
return cssColorToDtcg(part);
|
|
105
|
+
const m = LENGTH.exec(part);
|
|
106
|
+
if (m)
|
|
107
|
+
return { value: Number(m[1]), unit: m[2].toLowerCase() };
|
|
108
|
+
if (part === '0')
|
|
109
|
+
return { value: 0, unit: 'px' };
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
function parseShadow(value) {
|
|
113
|
+
const layers = [];
|
|
114
|
+
for (const layer of splitTopLevel(value, ',')) {
|
|
115
|
+
const parts = splitTopLevel(layer, ' ');
|
|
116
|
+
let inset = false;
|
|
117
|
+
let color;
|
|
118
|
+
const lengths = [];
|
|
119
|
+
for (const p of parts) {
|
|
120
|
+
if (p.toLowerCase() === 'inset')
|
|
121
|
+
inset = true;
|
|
122
|
+
else {
|
|
123
|
+
const len = subValue(p, 'dimension');
|
|
124
|
+
if (len !== undefined && (typeof len !== 'string' || lengths.length < 2))
|
|
125
|
+
lengths.push(len);
|
|
126
|
+
else {
|
|
127
|
+
const c = subValue(p, 'color');
|
|
128
|
+
if (c === undefined || color !== undefined)
|
|
129
|
+
return undefined;
|
|
130
|
+
color = c;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (lengths.length < 2 || lengths.length > 4 || color === undefined)
|
|
135
|
+
return undefined;
|
|
136
|
+
const zero = { value: 0, unit: 'px' };
|
|
137
|
+
layers.push({
|
|
138
|
+
color,
|
|
139
|
+
offsetX: lengths[0],
|
|
140
|
+
offsetY: lengths[1],
|
|
141
|
+
blur: lengths[2] ?? zero,
|
|
142
|
+
spread: lengths[3] ?? zero,
|
|
143
|
+
inset,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
return layers.length > 0 ? layers : undefined;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Infers a DTCG type for a custom property value. Whole `var()` becomes an alias (type comes from
|
|
150
|
+
* the target); anything that cannot be represented becomes a `css-expression` that keeps its text.
|
|
151
|
+
*/
|
|
152
|
+
export function cssValueToToken(prop, raw) {
|
|
153
|
+
const value = raw.trim();
|
|
154
|
+
const name = prop.replace(/^--/, '');
|
|
155
|
+
const ref = parseVar(value);
|
|
156
|
+
if (ref)
|
|
157
|
+
return { $value: `{${idFromCustomProperty(ref.name)}}` };
|
|
158
|
+
const lower = value.toLowerCase();
|
|
159
|
+
if (!NON_COLORS.has(lower)) {
|
|
160
|
+
const color = cssColorToDtcg(value);
|
|
161
|
+
if (color && !NUMBER.test(value))
|
|
162
|
+
return { $type: 'color', $value: color };
|
|
163
|
+
}
|
|
164
|
+
let m = LENGTH.exec(value);
|
|
165
|
+
if (m)
|
|
166
|
+
return { $type: 'dimension', $value: { value: Number(m[1]), unit: m[2].toLowerCase() } };
|
|
167
|
+
m = DURATION.exec(value);
|
|
168
|
+
if (m)
|
|
169
|
+
return { $type: 'duration', $value: { value: Number(m[1]), unit: m[2] } };
|
|
170
|
+
if (NUMBER.test(value)) {
|
|
171
|
+
const n = Number(value);
|
|
172
|
+
if (hint(name, /weight/) && n >= 1 && n <= 1000)
|
|
173
|
+
return { $type: 'fontWeight', $value: n };
|
|
174
|
+
if (n === 0 && isDimensionName(name))
|
|
175
|
+
return { $type: 'dimension', $value: { value: 0, unit: 'px' } };
|
|
176
|
+
return { $type: 'number', $value: n };
|
|
177
|
+
}
|
|
178
|
+
if (hint(name, /weight/) && FONT_WEIGHT_WORDS.has(lower))
|
|
179
|
+
return { $type: 'fontWeight', $value: lower };
|
|
180
|
+
const bezier = /^cubic-bezier\(([^)]*)\)$/i.exec(value);
|
|
181
|
+
if (bezier) {
|
|
182
|
+
const nums = bezier[1].split(',').map((s) => Number(s.trim()));
|
|
183
|
+
if (nums.length === 4 && nums.every(Number.isFinite))
|
|
184
|
+
return { $type: 'cubicBezier', $value: nums };
|
|
185
|
+
}
|
|
186
|
+
if (EASINGS[lower] && hint(name, /(ease|easing|timing|curve|motion)/))
|
|
187
|
+
return { $type: 'cubicBezier', $value: EASINGS[lower] };
|
|
188
|
+
const families = splitTopLevel(value, ',');
|
|
189
|
+
const looksLikeStack = families.length > 1 &&
|
|
190
|
+
families.every((f) => /^(["'][^"']+["']|[\w -]+)$/.test(f)) &&
|
|
191
|
+
families.some((f) => GENERIC_FAMILIES.has(f.toLowerCase()) || /^["']/.test(f));
|
|
192
|
+
if (looksLikeStack ||
|
|
193
|
+
(hint(name, /(font-family|family|typeface|font-sans|font-serif|font-mono)/) &&
|
|
194
|
+
families.length >= 1 &&
|
|
195
|
+
!value.includes('('))) {
|
|
196
|
+
return { $type: 'fontFamily', $value: families.map((f) => f.replace(/^["']|["']$/g, '')) };
|
|
197
|
+
}
|
|
198
|
+
if (hint(name, /shadow|elevation/) || /\d(px|rem)?\s+-?\d/.test(value)) {
|
|
199
|
+
const shadow = parseShadow(value);
|
|
200
|
+
if (shadow)
|
|
201
|
+
return { $type: 'shadow', $value: shadow };
|
|
202
|
+
}
|
|
203
|
+
return { $type: 'css-expression', $value: value };
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=css-values.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css-values.js","sourceRoot":"","sources":["../src/css-values.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { conditionName, cssTokens } from './css-tokens.js';
|
|
2
|
+
export { cssValueToToken, idFromCustomProperty, parseVar, splitTopLevel } from './css-values.js';
|
|
3
|
+
export { convertValue, type Dialect, fontWeight, normalizeRefs } from './json-values.js';
|
|
4
|
+
export { literalsIn, type StylesOptions, scanStyles, varsIn } from './styles.js';
|
|
5
|
+
export { jsonTokens } from './tokens-json.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAChG,OAAO,EAAE,YAAY,EAAE,KAAK,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACxF,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { conditionName, cssTokens } from './css-tokens.js';
|
|
2
|
+
export { cssValueToToken, idFromCustomProperty, parseVar, splitTopLevel } from './css-values.js';
|
|
3
|
+
export { convertValue, fontWeight, normalizeRefs } from './json-values.js';
|
|
4
|
+
export { literalsIn, scanStyles, varsIn } from './styles.js';
|
|
5
|
+
export { jsonTokens } from './tokens-json.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAChG,OAAO,EAAE,YAAY,EAAgB,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACxF,OAAO,EAAE,UAAU,EAAsB,UAAU,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/** Which tool wrote the JSON: decides unit defaults and the type vocabulary. */
|
|
2
|
+
export type Dialect = 'token-sets' | 'legacy-json';
|
|
3
|
+
/** Types only the token-set format uses; their presence tells it from plain value/type JSON. */
|
|
4
|
+
export declare const SET_FORMAT_TYPES: Set<string>;
|
|
5
|
+
/**
|
|
6
|
+
* References as these tools write them, in DTCG syntax: `{a.b.value}` and `{a.b.$value}` drop the
|
|
7
|
+
* suffix, a whole-value `$a.b` (an early notation) becomes `{a.b}`.
|
|
8
|
+
*/
|
|
9
|
+
export declare function normalizeRefs(v: unknown): unknown;
|
|
10
|
+
/** Conversion state for one token: whether it needs the core to evaluate expressions. */
|
|
11
|
+
export interface Conversion {
|
|
12
|
+
dialect: Dialect;
|
|
13
|
+
/** Unit for unitless dimensions: px in token sets; `size` category values in value/type JSON are rem. */
|
|
14
|
+
unit: string;
|
|
15
|
+
expression: boolean;
|
|
16
|
+
}
|
|
17
|
+
/** `Bold`, `Semi Bold Italic`, `700` → a number; unknown names stay as written. */
|
|
18
|
+
export declare function fontWeight(v: unknown): unknown;
|
|
19
|
+
/**
|
|
20
|
+
* One token's value in DTCG form, by its (source) type. References and expressions with
|
|
21
|
+
* references stay as text for the core; everything literal becomes a DTCG value.
|
|
22
|
+
*/
|
|
23
|
+
export declare function convertValue(sourceType: string | undefined, raw: unknown, path: string[], c: Conversion): {
|
|
24
|
+
type?: string;
|
|
25
|
+
value: unknown;
|
|
26
|
+
inferred?: boolean;
|
|
27
|
+
};
|
|
28
|
+
/** A group's `$type` in DTCG terms; undefined when it depends on each value (line heights). */
|
|
29
|
+
export declare const groupType: (sourceType: string) => string | undefined;
|
|
30
|
+
//# sourceMappingURL=json-values.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-values.d.ts","sourceRoot":"","sources":["../src/json-values.ts"],"names":[],"mappings":"AAGA,gFAAgF;AAChF,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,aAAa,CAAA;AAyClD,gGAAgG;AAChG,eAAO,MAAM,gBAAgB,aAiB3B,CAAA;AA4BF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAQjD;AAED,yFAAyF;AACzF,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,yGAAyG;IACzG,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,OAAO,CAAA;CACpB;AAqDD,mFAAmF;AACnF,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAW9C;AAoFD;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,CAAC,EAAE,UAAU,GACZ;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAkDvD;AAED,+FAA+F;AAC/F,eAAO,MAAM,SAAS,eAAgB,MAAM,KAAG,MAAM,GAAG,SAGvD,CAAA"}
|