@teacss/config 0.4.3 → 0.4.5
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/dist/index.d.ts +72 -14
- package/dist/index.js +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -13,10 +13,37 @@ interface EntryCustomDecl {
|
|
|
13
13
|
value: string;
|
|
14
14
|
}
|
|
15
15
|
interface EntryCustomBlock {
|
|
16
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* Mode name from the prelude (`@custom dark`); undefined for the base
|
|
18
|
+
* `@custom {}`. On a theme variant block, the `dark` sub-block mode.
|
|
19
|
+
*/
|
|
17
20
|
mode?: string;
|
|
21
|
+
/** Theme variant name from a `@custom theme <name> [dark]` prelude. */
|
|
22
|
+
theme?: string;
|
|
18
23
|
declarations: EntryCustomDecl[];
|
|
19
24
|
}
|
|
25
|
+
/** A `@custom` prelude, interpreted: base block, mode block, theme variant block, or invalid. */
|
|
26
|
+
type CustomPrelude = {
|
|
27
|
+
kind: "base";
|
|
28
|
+
} | {
|
|
29
|
+
kind: "mode";
|
|
30
|
+
mode: string;
|
|
31
|
+
} | {
|
|
32
|
+
kind: "theme";
|
|
33
|
+
theme: string;
|
|
34
|
+
mode?: "dark";
|
|
35
|
+
} | {
|
|
36
|
+
kind: "invalid";
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Interpret a `@custom` prelude. The `theme` leading word claims the theme
|
|
40
|
+
* variant grammar (`theme <name>` / `theme <name> dark`, kebab names, `dark` /
|
|
41
|
+
* `light` reserved); anything else `theme`-led is invalid and its block must
|
|
42
|
+
* register nothing. Non-`theme` preludes keep their historic meaning: the
|
|
43
|
+
* whole prelude is the mode name. Shared by `parseEntry` and `diagnoseCustom`
|
|
44
|
+
* so the build and the editor agree on which blocks are alive.
|
|
45
|
+
*/
|
|
46
|
+
declare function parseCustomPrelude(prelude: string | undefined): CustomPrelude;
|
|
20
47
|
interface EntryShortcut {
|
|
21
48
|
/** Shortcut class name, e.g. `popup-surface`. */
|
|
22
49
|
name: string;
|
|
@@ -51,12 +78,21 @@ interface CustomToThemeResult {
|
|
|
51
78
|
/**
|
|
52
79
|
* Theme patch to deep-merge over the preset theme (pass as `createGenerator`'s
|
|
53
80
|
* `theme`). Base blocks land at `theme.<ns>...`; mode blocks at
|
|
54
|
-
* `theme.modes.<mode>.<ns
|
|
55
|
-
*
|
|
81
|
+
* `theme.modes.<mode>.<ns>...`; theme variant blocks at
|
|
82
|
+
* `theme.themes.<name>.<ns>...` (dark sub-blocks under
|
|
83
|
+
* `theme.themes.<name>.modes.dark.<ns>...`). The theme preflight emits the
|
|
84
|
+
* `:root` / `.<mode>` / `.theme-<name>` CSS from this, so no separate
|
|
85
|
+
* emission is needed.
|
|
56
86
|
*/
|
|
57
87
|
theme: Record<string, any>;
|
|
58
88
|
/** Var names whose prefix matched no namespace or used an illegal color step. */
|
|
59
89
|
unknown: string[];
|
|
90
|
+
/**
|
|
91
|
+
* Theme-variant var names that override no declared base value (neither the
|
|
92
|
+
* resolved preset theme nor a base `@custom` block defines them) — not
|
|
93
|
+
* registered. Always empty when no base theme is passed.
|
|
94
|
+
*/
|
|
95
|
+
undeclared: string[];
|
|
60
96
|
}
|
|
61
97
|
interface Namespace {
|
|
62
98
|
/** Var-name prefix, e.g. `color`, `font-family`, `spacing`. */
|
|
@@ -100,34 +136,52 @@ type CustomClassification = {
|
|
|
100
136
|
*/
|
|
101
137
|
declare function classifyCustomVar(name: string, namespaces: Namespace[]): CustomClassification;
|
|
102
138
|
/**
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
139
|
+
* Whether a classified theme var already has a base value in one of `sources`
|
|
140
|
+
* (the resolved preset theme, or the base-`@custom` patch built beside it).
|
|
141
|
+
* Shared by `customToTheme` and `diagnoseCustom` so the build and the editor
|
|
142
|
+
* agree on what a theme variant may override.
|
|
107
143
|
*/
|
|
108
|
-
declare function
|
|
144
|
+
declare function hasBaseThemeValue(c: Extract<CustomClassification, {
|
|
145
|
+
ok: true;
|
|
146
|
+
}>, sources: readonly Record<string, unknown>[]): boolean;
|
|
147
|
+
/**
|
|
148
|
+
* Turn parsed `@custom {}` / `@custom <mode> {}` / `@custom theme <name> {}`
|
|
149
|
+
* blocks into a theme patch. `themeKeys` are the scale-namespace keys of the
|
|
150
|
+
* resolved preset theme (e.g. `colors`, `spacing`, `radius`, `fontFamily`,
|
|
151
|
+
* ...) — they drive the closed var-prefix → namespace mapping. Passing the
|
|
152
|
+
* resolved `baseTheme` turns on the theme-variant contract: a variant
|
|
153
|
+
* declaration must override a value the base theme (or a base block in
|
|
154
|
+
* `blocks`, regardless of entry order) already declares, else it lands on
|
|
155
|
+
* `undeclared` and registers nothing. Pure: no generator, no I/O.
|
|
156
|
+
*/
|
|
157
|
+
declare function customToTheme(blocks: EntryCustomBlock[], themeKeys: string[], baseTheme?: Record<string, unknown>): CustomToThemeResult;
|
|
109
158
|
//#endregion
|
|
110
159
|
//#region src/diagnoseCustom.d.ts
|
|
111
160
|
interface CustomDiagnostic {
|
|
112
|
-
/** The custom-property name
|
|
161
|
+
/** The custom-property name (`--colour-brand-500`), or the raw prelude for a block-level diagnostic. */
|
|
113
162
|
property: string;
|
|
114
|
-
/** Offset range of the property name in the source (for mapping to an editor range). */
|
|
163
|
+
/** Offset range of the property name (or the at-rule header) in the source (for mapping to an editor range). */
|
|
115
164
|
start: number;
|
|
116
165
|
end: number;
|
|
117
|
-
reason: "unknown-prefix" | "illegal-color-step";
|
|
166
|
+
reason: "unknown-prefix" | "illegal-color-step" | "undeclared-theme-variable" | "invalid-theme-prelude";
|
|
118
167
|
message: string;
|
|
119
168
|
}
|
|
120
169
|
/**
|
|
121
170
|
* Position-aware `@custom` diagnostics: for every `--x` declaration inside a
|
|
122
171
|
* `@custom {}` block that won't register (unknown namespace prefix, or an
|
|
123
|
-
* illegal color step), return its source range + a message.
|
|
172
|
+
* illegal color step), return its source range + a message. An invalid
|
|
173
|
+
* `theme …` prelude reports one block-level diagnostic instead of scanning
|
|
174
|
+
* its dead declarations. Passing the generator's resolved `baseTheme` also
|
|
175
|
+
* turns on the theme-variant contract: a variant declaration overriding no
|
|
176
|
+
* declared base value (resolved theme, or a base block in the same css — so
|
|
177
|
+
* unsaved edits count) reports `undeclared-theme-variable`.
|
|
124
178
|
* `themeKeys` are the scale-namespace keys of the resolved preset theme.
|
|
125
179
|
*
|
|
126
180
|
* Shares the classification with `customToTheme`, so the editor and the build
|
|
127
181
|
* agree on what registers. Pure: offsets in, no I/O — the caller maps offsets
|
|
128
182
|
* to an editor `Range`.
|
|
129
183
|
*/
|
|
130
|
-
declare function diagnoseCustom(css: string, themeKeys: string[]): CustomDiagnostic[];
|
|
184
|
+
declare function diagnoseCustom(css: string, themeKeys: string[], baseTheme?: Record<string, unknown>): CustomDiagnostic[];
|
|
131
185
|
//#endregion
|
|
132
186
|
//#region src/resolveEntryConfig.d.ts
|
|
133
187
|
interface ResolveEntryResult {
|
|
@@ -135,6 +189,8 @@ interface ResolveEntryResult {
|
|
|
135
189
|
config: UserConfig;
|
|
136
190
|
/** `@custom` var names that didn't register (decision 11 — for diagnostics/warnings). */
|
|
137
191
|
unknown: string[];
|
|
192
|
+
/** `@custom theme` var names overriding no declared base value (not registered — for diagnostics/warnings). */
|
|
193
|
+
undeclared: string[];
|
|
138
194
|
/** Whether the entry has a `@teacss;` placeholder. */
|
|
139
195
|
hasTeacss: boolean;
|
|
140
196
|
/** Absolute files that drive this config: followed `@import`s, `@source`-matched `.css`, and local preset modules. */
|
|
@@ -190,6 +246,8 @@ interface ScannedCustomDeclaration {
|
|
|
190
246
|
interface ScannedCustomBlock {
|
|
191
247
|
mode?: string;
|
|
192
248
|
declarations: ScannedCustomDeclaration[];
|
|
249
|
+
/** Offset of the at-rule's `@` (for block-level diagnostics). */
|
|
250
|
+
start: number;
|
|
193
251
|
/** Offsets of the block's opening and closing braces. */
|
|
194
252
|
open: number;
|
|
195
253
|
close: number;
|
|
@@ -238,4 +296,4 @@ declare function loadConfig<U extends UserConfig>(cwd?: string, configOrPath?: s
|
|
|
238
296
|
*/
|
|
239
297
|
declare function createRecoveryConfigLoader<U extends UserConfig>(): (cwd?: string, configOrPath?: string | U, defaults?: UserConfigDefaults) => Promise<LoadConfigResult<U>>;
|
|
240
298
|
//#endregion
|
|
241
|
-
export { CustomClassification, CustomDiagnostic, CustomToThemeResult, EntryConfig, EntryCustomBlock, EntryCustomDecl, EntryShortcut, EntrySource, LoadConfigResult, Namespace, ResolveEntryResult, ScannedCustomBlock, ScannedCustomDeclaration, ScannedTopLevelAtRule, buildNamespaces, classifyCustomVar, createRecoveryConfigLoader, customToTheme, diagnoseCustom, entryDiscoveryFiles, findEntry, getPresetSourcesFromError as getConfigSourcesFromError, hasTopLevelDirective, loadConfig, parseEntry, resolveEntryConfig, resolvePresets, scaleThemeKeys, scanCustomBlocks, scanQuotedDirectives, scanTopLevelAtRules };
|
|
299
|
+
export { CustomClassification, CustomDiagnostic, CustomPrelude, CustomToThemeResult, EntryConfig, EntryCustomBlock, EntryCustomDecl, EntryShortcut, EntrySource, LoadConfigResult, Namespace, ResolveEntryResult, ScannedCustomBlock, ScannedCustomDeclaration, ScannedTopLevelAtRule, buildNamespaces, classifyCustomVar, createRecoveryConfigLoader, customToTheme, diagnoseCustom, entryDiscoveryFiles, findEntry, getPresetSourcesFromError as getConfigSourcesFromError, hasBaseThemeValue, hasTopLevelDirective, loadConfig, parseCustomPrelude, parseEntry, resolveEntryConfig, resolvePresets, scaleThemeKeys, scanCustomBlocks, scanQuotedDirectives, scanTopLevelAtRules };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createRequire as e}from"node:module";import*as t from"node:fs";import n,{existsSync as r,readFileSync as i,realpathSync as a}from"node:fs";import{dirname as o,extname as s,isAbsolute as c,join as l,relative as u,resolve as d,sep as f}from"node:path";import p from"node:process";import{consola as m}from"consola";import{expandClassGroups as h,resolveConfig as g,splitClassTokens as _}from"@teacss/core";import{glob as v}from"tinyglobby";import{Buffer as y}from"node:buffer";import{readFile as ee,stat as te}from"node:fs/promises";import{fileURLToPath as b,pathToFileURL as x}from"node:url";const S=[`100`,`150`,`200`,`300`,`400`,`500`,`600`,`700`,`800`,`850`,`900`,`950`],ne=new Set(S);function re(e){return e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}function C(e){return Object.keys(e).filter(t=>{if(t===`modes`||t===`defaultMode`)return!1;let n=e[t];return typeof n!=`object`||!n?!1:t===`colors`||Object.values(n).every(e=>e==null||typeof e==`string`||typeof e==`number`||Array.isArray(e))})}function w(e){return e.map(e=>({key:e,prefix:e===`colors`||e===`semanticColors`?`color`:re(e),twoLevel:e===`colors`,semanticColor:e===`semanticColors`})).sort((e,t)=>t.prefix.length-e.prefix.length)}function T(e,t,n){Object.defineProperty(e,t,{value:n,configurable:!0,enumerable:!0,writable:!0})}function E(e,t){let n=Object.hasOwn(e,t)?e[t]:void 0;if(typeof n==`object`&&n&&!Array.isArray(n))return n;let r={};return T(e,t,r),r}function D(e,t){let n=t.filter(t=>e===t.prefix||e.startsWith(`${t.prefix}-`)),r=n.find(e=>e.key===`colors`),i=n.find(e=>e.semanticColor);if(r&&i){let t=e===`color`?``:e.slice(6),n=t.lastIndexOf(`-`),a=n>0?t.slice(0,n):``,o=n>0?t.slice(n+1):``;return a&&ne.has(o)?{ok:!0,nsKey:r.key,twoLevel:!0,rest:t,colorName:a,step:o}:a&&/^\d+$/.test(o)?{ok:!1,reason:`illegal-color-step`}:t?{ok:!0,nsKey:i.key,twoLevel:!1,rest:t}:{ok:!1,reason:`unknown-prefix`}}let a=n[0];if(!a)return{ok:!1,reason:`unknown-prefix`};let o=e===a.prefix?``:e.slice(a.prefix.length+1);if(a.twoLevel){let e=o.lastIndexOf(`-`),t=e>0?o.slice(0,e):``,n=e>0?o.slice(e+1):``;return!t||!ne.has(n)?{ok:!1,reason:`illegal-color-step`}:{ok:!0,nsKey:a.key,twoLevel:!0,rest:o,colorName:t,step:n}}return{ok:!0,nsKey:a.key,twoLevel:!1,rest:o}}function O(e,t){let n=w(t),r={},i=[];for(let t of e){let e=t.mode?E(E(r,`modes`),t.mode):r;for(let{property:r,value:a}of t.declarations){let t=D(r.startsWith(`--`)?r.slice(2):r,n);if(!t.ok){i.push(r);continue}let o=E(e,t.nsKey);t.twoLevel?T(E(o,t.colorName),t.step,a):T(o,t.rest||`DEFAULT`,a)}}return{theme:r,unknown:i}}const ie=/[A-Za-z0-9-]/,ae=/[\w-]/;function k(e,t,n){let r=e.indexOf(`*/`,t+2);return r<0||r>=n?n:r+2}function A(e,t,n){let r=e[t];for(let i=t+1;i<n;i++)if(e[i]===`\\`)i++;else if(e[i]===r)return i+1;return n}function j(e,t,n){let r=``;for(let i=t;i<n;i++)if(e[i]===`/`&&e[i+1]===`*`)i=k(e,i,n)-1,r+=` `;else if(e[i]===`"`||e[i]===`'`){let t=A(e,i,n);r+=e.slice(i,t),i=t-1}else r+=e[i];return r.trim()}function oe(e,t){let n=[],r=t.startsWith(`@`)?t.slice(1):t;for(let t of M(e)){if(t.name!==r||t.terminator!==`;`)continue;let e=t.prelude[0];if(e!==`"`&&e!==`'`)continue;let i=A(t.prelude,0,t.prelude.length);i!==t.prelude.length||i<=1||t.prelude[i-1]!==e||n.push(t.prelude.slice(1,i-1))}return n}function se(e,t){let n=t.startsWith(`@`)?t.slice(1):t;return M(e).some(e=>e.name===n)}function ce(e,t){for(let n=t;n<e.length;n++)if(e[n]===`/`&&e[n+1]===`*`)n=k(e,n,e.length)-1;else if(e[n]===`"`||e[n]===`'`)n=A(e,n,e.length)-1;else if(e[n]===`{`)return n;else if(e[n]===`;`||e[n]===`}`)return-1;return-1}function le(e,t){let n=1;for(let r=t+1;r<e.length;r++)if(e[r]===`/`&&e[r+1]===`*`)r=k(e,r,e.length)-1;else if(e[r]===`"`||e[r]===`'`)r=A(e,r,e.length)-1;else if(e[r]===`{`)n++;else if(e[r]===`}`&&--n===0)return r;return-1}function M(e){let t=[],n=0;for(let r=0;r<e.length;r++){if(e[r]===`/`&&e[r+1]===`*`){r=k(e,r,e.length)-1;continue}if(e[r]===`"`||e[r]===`'`){r=A(e,r,e.length)-1;continue}if(e[r]===`{`){n++;continue}if(e[r]===`}`){n=Math.max(0,n-1);continue}if(n!==0||e[r]!==`@`)continue;let i=r,a=i+1;for(;ae.test(e[a]??``);)a++;if(a===i+1)continue;let o=e.slice(i+1,a),s=[],c=!1;for(let n=a;n<e.length;n++){let l=e[n];if(l===`/`&&e[n+1]===`*`)n=k(e,n,e.length)-1;else if(l===`"`||l===`'`)n=A(e,n,e.length)-1;else if(l===`(`)s.push(`)`);else if(l===`[`)s.push(`]`);else if(l===s.at(-1))s.pop();else if(s.length===0&&l===`;`){t.push({name:o,prelude:j(e,a,n),start:i,end:n+1,terminator:`;`}),r=n,c=!0;break}else if(s.length===0&&l===`{`){let s=le(e,n);s>=0&&(t.push({name:o,prelude:j(e,a,n),start:i,end:s+1,terminator:`block`}),r=s,c=!0);break}}if(!c&&j(e,a,e.length)===``){t.push({name:o,prelude:``,start:i,end:e.length,terminator:`eof`});break}}return t}function ue(e,t,n){let r=[];for(let i=t;i<n;i++){let t=e[i];if(t===`/`&&e[i+1]===`*`)i=k(e,i,n)-1;else if(t===`"`||t===`'`)i=A(e,i,n)-1;else if(t===`(`)r.push(`)`);else if(t===`[`)r.push(`]`);else if(t===`{`)r.push(`}`);else if(t===r.at(-1))r.pop();else if(t===`;`&&r.length===0)return i}return n}function de(e,t,n){let r=[];for(let i=t;i<n;){for(;i<n;)if(/\s/.test(e[i]))i++;else if(e[i]===`/`&&e[i+1]===`*`)i=k(e,i,n);else break;let t=ue(e,i,n);if(e[i]!==`-`||e[i+1]!==`-`){i=t+1;continue}let a=i+2;for(;a<n&&ie.test(e[a]);)a++;if(a===i+2){i=t+1;continue}let o=a;for(;o<n;)if(/\s/.test(e[o]))o++;else if(e[o]===`/`&&e[o+1]===`*`)o=k(e,o,n);else break;if(e[o]!==`:`){i=t+1;continue}let s=o+1,c=e.slice(s,t),l=c.trim(),u=s+c.length-c.trimStart().length,d=u+l.length;r.push({property:e.slice(i,a),value:l,start:i,end:a,colon:o,valueStart:u,valueEnd:d}),i=t+1}return r}function N(e){let t=[];for(let n of M(e)){if(n.name!==`custom`||n.terminator!==`block`)continue;let r=ce(e,n.start+7);if(r<0)continue;let i=n.end-1;t.push({mode:n.prelude||void 0,declarations:de(e,r+1,i),open:r,close:i})}return t}function fe(e){let t=e,n=/^url\(\s*([^)]*?)\s*\)$/i.exec(t);if(n)t=n[1];else if(/^url\(/i.test(t))return;let r=t[0];if(r===`"`||r===`'`){if(t.length<2||t[t.length-1]!==r)return;let e=t.slice(1,-1);return e.includes(r)?void 0:e}return n?t:void 0}function P(e){return!(!e||e.startsWith(`//`)||/^[a-z][\w+.-]*:/i.test(e))}function pe(e){return e.split(`\\`).join(`/`)}function me(e,t,n,r){if(!P(e)||c(e)||!r&&!e.startsWith(`./`)&&!e.startsWith(`../`))return e;let i=pe(u(n,d(t,e)));return i.startsWith(`.`)?i:`./${i}`}function F(e,t){if(t.length===0)return e;t.sort((e,t)=>e.start-t.start);let n=``,r=0;for(let i of t)n+=e.slice(r,i.start)+i.replacement,r=i.end;return n+e.slice(r)}function he(e,t,n){if(t===n)return e;let r=[];for(let i of M(e)){if(i.terminator!==`;`||i.name!==`preset`&&i.name!==`source`)continue;let a=i.prelude[0];if(a!==`"`&&a!==`'`||i.prelude[i.prelude.length-1]!==a)continue;let o=i.prelude.slice(1,-1).trim(),s=i.name===`source`&&o.startsWith(`!`),c=s?o.slice(1):o,l=me(c,t,n,i.name===`source`);if(l===c)continue;let u=e.slice(i.start,i.end).replace(i.prelude,`${a}${s?`!`:``}${l}${a}`);r.push({start:i.start,end:i.end,replacement:u})}return F(e,r)}function I(e,n,r,i,a){if(a>32)return e;let s=[];for(let c of M(e)){if(c.name!==`import`||c.terminator!==`;`)continue;let e=fe(c.prelude);if(e===void 0||!P(e))continue;let l=d(n,e),u;try{u=t.statSync(l)}catch{continue}if(!u.isFile())continue;if(r.has(l)){s.push({start:c.start,end:c.end,replacement:``});continue}r.add(l),i.push(l);let f=o(l),p=I(t.readFileSync(l,`utf8`),f,r,i,a+1);p=he(p,f,n),s.push({start:c.start,end:c.end,replacement:p})}return F(e,s)}function ge(e,t,n){if(!e.includes(`@import`))return{css:e,files:[]};let r=[];return{css:I(e,t,new Set(n?[d(t,n)]:[]),r,0),files:r}}function _e(e){let t,n=0,r=null;for(let i=0;i<e.length;i++){let a=e[i];if(r)a===`\\`?i++:a===r&&(r=null);else if(a===`"`||a===`'`)r=a;else if(a===`/`&&e[i+1]===`*`){let r=e.indexOf(`*/`,i+2),a=r<0?e.length:r+2;(t??=[]).push(e.slice(n,i),` `),n=a,i=a-1}}return t?`${t.join(``)}${e.slice(n)}`:e}function L(e){let t=e[0];if(t===`"`||t===`'`)for(let n=1;n<e.length;n++){let r=e[n];if(r===`\\`)n++;else if(r===t)return n===e.length-1?e.slice(1,n):void 0}}function R(e){let t=M(e),n=[],r=[],i=[],a=[],o=!1,s=!1;for(let e of t){if(e.name===`custom`&&e.terminator===`block`?o=!0:e.name===`teacss`&&e.prelude===``&&e.terminator!==`block`&&(s=!0),e.terminator!==`;`)continue;if(e.name===`shortcut`){let t=e.prelude.search(/\s/);if(t<=0)continue;let n=e.prelude.slice(0,t);if(!/^[A-Za-z_][\w-]*$/.test(n))continue;let r=L(e.prelude.slice(t).trimStart())?.trim();r&&i.push({name:n,expansion:r});continue}if(e.name!==`preset`&&e.name!==`source`&&e.name!==`safelist`)continue;let t=L(e.prelude)?.trim();if(!t)continue;if(e.name===`preset`){n.push(t);continue}if(e.name===`safelist`){a.push(t);continue}let c=t.startsWith(`!`),l=c?t.slice(1):t;l&&r.push({glob:l,exclude:c})}return{presets:n,sources:r,custom:o?N(e).map(({mode:e,declarations:t})=>({mode:e,declarations:t.map(({property:e,value:t})=>({property:e,value:_e(t).trim()}))})):[],shortcuts:i,safelist:a,hasTeacss:s}}let ve;function ye(){return ve??=import(`jiti`).then(({createJiti:e})=>({createJiti:e,transformer:e(import.meta.url,{fsCache:!1,interopDefault:!0,moduleCache:!1})}))}const z=new Map,B=new WeakMap,V=16*1024*1024,H=new Map;let U=0;const W={articles:`@teacss/preset-articles`,icons:`@teacss/preset-icons`,standard:`@teacss/preset-standard`};function be(t,n){try{return n.resolve(t)}catch(r){let i;try{i=n.resolve(`teacss/package.json`)}catch{throw r}return e(i).resolve(t)}}function xe(t,n){if(t.startsWith(`.`)||c(t))return d(n,t);let r=e(d(n,`_`)),i=Object.hasOwn(W,t)?W[t]:void 0;return i?be(i,r):r.resolve(t)}function G(e){return e.startsWith(`.`)||c(e)}function K(e){try{return a(e)}catch{return d(e)}}function Se(e,t){let n=o(e),i=[];for(;;){if(t.has(n)){let e=t.get(n);for(let n of i)t.set(n,e);return e}if(i.push(n),r(d(n,`package.json`))){for(let e of i)t.set(e,n);return n}let e=o(n);if(e===n){for(let e of i)t.set(e,void 0);return}n=e}}function Ce(e,t){let n=u(t,e);return n===``||!c(n)&&n!==`..`&&!n.startsWith(`..${f}`)}function q(e,t,n){let r=Se(e,n);return t.packageRoot===void 0?r===void 0&&Ce(e,t.fallbackRoot):r===t.packageRoot}function J(e,t,n,r,i){if(!e||n.has(e)||(n.add(e),!c(e.filename)))return;let a=K(e.filename);if(q(a,r,i)){t.add(a);for(let a of e.children)J(a,t,n,r,i)}}function we(e){if(!e||typeof e!=`object`)return;let t,n,r;try{t=Reflect.get(e,`path`),n=Reflect.get(e,`url`),r=Reflect.get(e,`message`)}catch{return}if(typeof t==`string`&&c(t))return K(t);if(typeof n==`string`&&n.startsWith(`file:`))return K(b(n));if(typeof r!=`string`)return;let i=/Cannot find module ['"]([^'"]+)['"] from ['"]([^'"]+)['"]/.exec(r),a=/Cannot find module ['"]([^'"]+)['"][\s\S]*?Require stack:\s*\n- ([^\n]+)/.exec(r),s=i??a;if(!s)return;let l=s[1],u=s[2];if(!(!l||!u||!l.startsWith(`.`)&&!c(l)))return K(c(l)?l:d(o(u),l))}async function Te(e,t){let n=z.get(e)??Promise.resolve(),r,i=new Promise(e=>{r=e}),a=n.then(()=>i);z.set(e,a),await n;try{return{evaluation:t()}}finally{r(),z.get(e)===a&&z.delete(e)}}function Ee(e){return()=>({visitor:{AwaitExpression(t){t.getFunctionParent()||(e.hasTopLevelAwait=!0)},CallExpression(t){t.node.callee?.type===`Identifier`&&t.node.callee.name===`jitiImport`&&(e.hasDynamicImport=!0);let n=t.node.arguments?.[0];if(t.node.callee?.type!==`Identifier`||t.node.callee.name!==`require`)return;let r=n?.type===`StringLiteral`&&typeof n.value==`string`;r&&e.dependencies.add(n.value),typeof t.node.start==`number`&&(r?t.getFunctionParent()?e.hasNestedRequire=!0:e.hasTopLevelRequire=!0:e.hasNonLiteralRequire=!0)},ForOfStatement(t){t.node.await&&!t.getFunctionParent()&&(e.hasTopLevelAwait=!0)}}})}function Y(e,t,n){if(e.hasDynamicImport)throw Error(`Dynamic imports are not supported in local preset modules: "${t}". Use static imports so TeaCSS can track and reload the complete graph.`);if(e.hasNonLiteralRequire)throw Error(`CommonJS require() specifiers must be string literals in local preset modules: "${t}".`);if(e.hasNestedRequire)throw Error(`CommonJS require() is only supported at module top level in local preset modules: "${t}".`);if(e.hasTopLevelRequire&&e.hasTopLevelAwait)throw Error(`CommonJS require() cannot be combined with top-level await in a local preset module: "${t}". Use a static import instead.`);if(t!==n&&e.hasTopLevelAwait)throw Error(`Top-level await is only supported in the local preset entry module: "${t}".`)}const X=Symbol(`uncacheable transform option`);function Z(e,t=new Set){if(e===null)return`n`;if(typeof e==`string`)return`s${JSON.stringify(e)}`;if(typeof e==`boolean`)return e?`b1`:`b0`;if(typeof e==`number`)return Number.isNaN(e)?`dNaN`:e===1/0?`dInfinity`:e===-1/0?`d-Infinity`:Object.is(e,-0)?`d-0`:`d${JSON.stringify(e)}`;if(e===void 0)return`u`;if(typeof e!=`object`||t.has(e))throw X;t.add(e);try{if(Array.isArray(e)){for(let t of Reflect.ownKeys(e)){if(t===`length`)continue;if(typeof t!=`string`)throw X;let n=Number(t),r=Object.getOwnPropertyDescriptor(e,t);if(!Number.isSafeInteger(n)||n<0||String(n)!==t||n>=e.length||!r?.enumerable||!(`value`in r))throw X}let n=Array.from({length:e.length},(n,r)=>{let i=Object.getOwnPropertyDescriptor(e,String(r));return i&&`value`in i?Z(i.value,t):`h`});return`a${e.length}[${n.join(`,`)}]`}if(Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)throw X;return`o{${Reflect.ownKeys(e).map(t=>{if(typeof t!=`string`)throw X;let n=Object.getOwnPropertyDescriptor(e,t);if(!n?.enumerable||!(`value`in n))throw X;return[t,n.value]}).sort(([e],[t])=>e.localeCompare(t)).map(([e,n])=>`${JSON.stringify(e)}:${Z(n,t)}`).join(`,`)}}`}finally{t.delete(e)}}function De(e,t){return{...t,async:!1,interopDefault:t.interopDefault??!0,jsx:t.jsx??e.options.jsx,retainLines:t.retainLines??e.options.transformOptions?.retainLines}}function Oe(e){if(!(e&&Object.getPrototypeOf(e)===Object.prototype&&Reflect.ownKeys(e).length===0))return e}function ke(e){try{return Z({babel:Oe(e.babel),interopDefault:e.interopDefault,jsx:e.jsx,retainLines:e.retainLines,ts:e.ts})}catch{return}}function Ae(e,t,n,r){let i=y.byteLength(e)+y.byteLength(t)+y.byteLength(n);for(let e of r.dependencies)i+=y.byteLength(e);return i}function je(e,t){let n=H.get(e);n&&(U-=n.bytes,H.delete(e));let r=Ae(e,t.source,t.code,t.facts);if(!(r>V))for(H.set(e,{...t,bytes:r}),U+=r;H.size>256||U>V;){let e=H.keys().next();if(e.done)break;let t=H.get(e.value);H.delete(e.value),t&&(U-=t.bytes)}}function Me(e){return{...e,dependencies:Array.from(e.dependencies)}}function Ne(e,t,n,r,i,a){let o=t.filename?K(t.filename):n,s=De(e,t),c=ke(s),l=c===void 0?void 0:`${o}\0${c}`,u=l===void 0?void 0:H.get(l);if(l!==void 0&&u?.source===s.source)return H.delete(l),H.set(l,u),q(o,r,i)&&Y(u.facts,o,n),{code:u.code,dependencies:u.facts.dependencies};let d=c===void 0?void 0:{filename:o,mode:c,source:s.source},f=d===void 0?void 0:a?.read(d);if(l!==void 0&&f){let e={...f.facts,dependencies:new Set(f.facts.dependencies)};return je(l,{code:f.code,facts:e,source:s.source}),q(o,r,i)&&Y(e,o,n),{code:f.code,dependencies:e.dependencies}}let p={dependencies:new Set,hasDynamicImport:!1,hasNestedRequire:!1,hasNonLiteralRequire:!1,hasTopLevelAwait:!1,hasTopLevelRequire:!1},m=Ee(p),h=Error.prepareStackTrace,g=Error.stackTraceLimit;try{let t=e.transform({...s,babel:{...s.babel,plugins:[...Array.isArray(s.babel?.plugins)?s.babel.plugins:[],m]}});return l!==void 0&&je(l,{code:t,facts:p,source:s.source}),q(o,r,i)&&Y(p,o,n),d!==void 0&&a?.write(d,{code:t,facts:Me(p)}),{code:t,dependencies:p.dependencies}}finally{Error.prepareStackTrace=h,Error.stackTraceLimit=g}}const Pe=/\.[cm]?[jt]sx?$/;function Fe(e,t,n){let r=K(c(n)?n:d(o(t),n));if(s(r))return[r];let i=Array.from(new Set([``,...e.options.extensions??[],`.json`])),a=[r,d(r,`index`)].flatMap(e=>i.map(t=>`${e}${t}`));return a.push(d(r,`package.json`)),a}function Ie(t,n,r){if(r.startsWith(`node:`))return[];try{let i=G(r)?t.esmResolve(r,{parentURL:x(n).href,try:!0}):e(n).resolve(r);if(!i)return G(r)?Fe(t,n,r):[];let a=i.startsWith(`file:`)?b(i):i;return c(a)?[K(a)]:[]}catch{return G(r)?Fe(t,n,r):[]}}async function Le(e,t,n,r,i,a,o){let c=[e],l;for(let u=0;u<c.length;u++){let d=c[u];if(!d||!Pe.test(s(d)))continue;let f;try{f=await ee(d,`utf8`)}catch(e){if(e.code===`ENOENT`)continue;throw e}d===e&&(l=f);let{dependencies:p}=Ne(n,{source:f,filename:d,async:d===e,ts:/\.[cm]?tsx?$/.test(d)},e,r,i,o);for(let e of p)for(let n of Ie(t,d,e))a.has(n)||!q(n,r,i)||(a.add(n),c.push(n))}return l}async function Re(e,t){try{let{createPresetTransformDiskCache:n}=await import(`./presetTransformDiskCache-Cp5NmI8Q.js`);return n(e,import.meta.url,t)}catch{return}}function Q(e,t){if(!e||typeof e!=`object`)return;let n=B.get(e)??[];B.set(e,Array.from(new Set([...n,...t])))}function $(e){return e&&typeof e==`object`?[...B.get(e)??[]]:[]}async function ze(t,n,r){let i=K(t),a=e(i),s=Object.create(null),c=new Set([i]),l=new Map,u={packageRoot:Se(i,l),fallbackRoot:o(i)},[{createJiti:d,transformer:f},p]=await Promise.all([ye(),Re(i,r)]),m=d(i,{fsCache:!1,interopDefault:!0,moduleCache:!1,tryNative:!1,transform:e=>{let{code:t}=Ne(f,e,i,u,l,p);return{code:t}}}),h=()=>{let e=new Set;for(let t of Object.values(s))J(t,c,e,u,l);for(let t of c)J(a.cache[t],c,e,u,l)};try{let e=await Le(i,m,f,u,l,c,p)??await ee(i,`utf8`),{evaluation:t}=await Te(u.packageRoot??u.fallbackRoot,()=>{for(let e of c)delete a.cache[e];return m.evalModule(e,{async:!0,cache:s,filename:i,forceTranspile:!0})}),r=await t,o=r?.__esModule?r.default:r;if(o==null)throw Error(`@preset "${n}" has no default export (expected a Preset or preset factory)`);let d=typeof o==`function`?await o():o;return h(),{preset:d,sources:Array.from(c)}}catch(e){h();let t=we(e);throw Q(e,t&&q(t,u,l)?[...c,t]:Array.from(c)),e}}async function Be(e){let t=await te(e),n=x(e);return n.searchParams.set(`version`,`${t.mtimeMs}:${t.ctimeMs}:${t.size}:${t.ino}`),(await import(n.href)).default}async function Ve(e,t){let n=[],r=new Set,i={protectedSlotsByDirectory:new Map};for(let a of e){let e=xe(a,t);try{let t;if(G(a)){let t=await ze(e,a,i);for(let e of t.sources)r.add(e);n.push(t.preset);continue}else t=await Be(e);if(t==null)throw Error(`@preset "${a}" has no default export (expected a Preset or preset factory)`);n.push(typeof t==`function`?await t():t)}catch(t){throw Q(t,G(a)?[...r,K(e)]:r),t}}return{presets:n,sources:Array.from(r)}}async function He(e,t){return(await Ve(e,t)).presets}async function Ue(e,t,n){let r=e.filter(e=>!e.exclude).map(e=>e.glob);if(r.length===0)return{shortcuts:[],safelist:[],files:[]};let a=await v(r,{cwd:t,absolute:!0,ignore:e.filter(e=>e.exclude).map(e=>e.glob),expandDirectories:!1}),o=new Set(n),s=a.filter(e=>e.endsWith(`.css`)&&!o.has(e)).sort(),c=[],l=[];for(let e of s){let t;try{t=i(e,`utf8`)}catch(e){if(e.code===`ENOENT`)continue;throw e}if(!t.includes(`@shortcut`)&&!t.includes(`@safelist`))continue;let n=R(t);c.push(...n.shortcuts),l.push(...n.safelist)}return{shortcuts:c,safelist:l,files:s}}async function We(e,t,n){let r=ge(e,t,n),i=R(r.css),[a,o]=await Promise.all([i.presets.length?Ve(i.presets,t):{presets:[],sources:[]},Ue(i.sources,t,r.files)]),s=a.presets,c=C((await g({presets:s})).theme),{theme:l,unknown:u}=O(i.custom,c),d=[...i.sources.filter(e=>!e.exclude).map(e=>e.glob),...i.sources.filter(e=>e.exclude).map(e=>`!${e.glob}`)],f=[...o.shortcuts,...i.shortcuts],p=Object.fromEntries(f.map(({name:e,expansion:t})=>[e,t])),m=[...new Set([...o.safelist,...i.safelist].flatMap(e=>_(h(e))))];return{config:{presets:s,theme:l,...i.sources.length?{content:{filesystem:d}}:{},...f.length?{shortcuts:p}:{},...m.length?{safelist:m}:{}},unknown:u,hasTeacss:r.files.length===0?i.hasTeacss:R(e).hasTeacss,sources:[...r.files,...o.files,...a.sources]}}const Ge=S.join(` `);function Ke(e,t){return t===`unknown-prefix`?`@custom var "${e}" matches no theme namespace — not registered (emitted as a plain :root var).`:`@custom var "${e}" has an illegal color step — palette steps are ${Ge}.`}function qe(e,t){let n=w(t),r=[];for(let t of N(e))for(let e of t.declarations){let{property:t,start:i,end:a}=e,o=D(t.slice(2),n);o.ok||r.push({property:t,start:i,end:a,reason:o.reason,message:Ke(t,o.reason)})}return r}const Je=Object.freeze([`package.json`,`index.css`,`src/index.css`]),[Ye,...Xe]=Je;function Ze(e){let t=e instanceof Error?`${e.name}:${e.message}`:`${typeof e}:${String(e)}`,r=Array.from(new Set($(e))).sort().map(e=>{try{let t=n.statSync(e);return`${e}:${t.mtimeMs}:${t.ctimeMs}:${t.size}:${t.ino}`}catch(t){let n=t.code;return`${e}:${n===`ENOENT`?`missing`:`unreadable:${n??String(t)}`}`}});return JSON.stringify([t,r])}function Qe(e,t){let n={...e};for(let e of Reflect.ownKeys(t)){if(!Object.getOwnPropertyDescriptor(t,e)?.enumerable)continue;let r=Reflect.get(t,e);r!==void 0&&Object.defineProperty(n,e,{value:r,configurable:!0,enumerable:!0,writable:!0})}return n}function $e(e){try{let t=n.readFileSync(e,`utf8`);return t.includes(`@teacss`)?M(t).some(e=>e.name===`teacss`&&e.prelude===``&&e.terminator!==`block`):!1}catch(e){if(e.code===`ENOENT`)return!1;throw e}}function et(e){try{let t=JSON.parse(n.readFileSync(l(e,Ye),`utf8`))?.teacss?.entry;return typeof t==`string`?t:void 0}catch(e){if(e.code===`ENOENT`)return;throw e}}function tt(e){let t=et(e);if(t){let r=d(e,t);if(n.existsSync(r)&&n.statSync(r).isFile())return r}for(let t of Xe){let r=l(e,t);if(n.existsSync(r)&&n.statSync(r).isFile()&&$e(r))return r}}async function nt(e=p.cwd(),t=e,r={}){if(typeof t!=`string`)return{config:Qe(r,t),sources:[]};let i=d(e,t),a=n.existsSync(i)&&n.statSync(i).isFile()?i:tt(i);if(!a)return{config:{...r},sources:[]};let s;try{s=await We(n.readFileSync(a,`utf8`),o(a),a)}catch(e){throw Q(e,[a]),e}let{config:c}=s,l=Qe(r,c);return c.presets?.length||(r.presets?.length?l.presets=r.presets:m.warn(`[@teacss/config] "${a}" declares no @preset — no utilities will be generated. Add one, e.g. \`@preset "standard";\``)),{config:l,sources:Array.from(new Set([a,...s.sources]))}}function rt(){let e=new Map,t=new Map,n=new Map,r=new Map,i=new WeakMap,a=new WeakMap,o=new WeakMap,s=new WeakMap,c=(e,n)=>e?t.get(e):n?a.get(n):void 0,l=(e,t)=>e?n.get(e):t?o.get(t):void 0,u=async(e,t)=>{for(;;){let n=c(e,t),r=l(e,t);if(!r)return;let i=await r;if(c(e,t)===n)return i}};return(c=p.cwd(),l=c,f={})=>{let h=typeof l==`string`?d(c,l):void 0,g=typeof l==`object`&&l?l:void 0,_=h?(t.get(h)??0)+1:g?(a.get(g)??0)+1:0;h?t.set(h,_):g&&a.set(g,_);let v=nt(c,l,f).then(n=>(h&&t.get(h)===_?(e.set(h,n),r.delete(h)):g&&a.get(g)===_&&(i.set(g,n),s.delete(g)),n),async n=>{let o=h?t.get(h)===_:!g||a.get(g)===_;if(!o){let e=await u(h,g);if(e)return e}let c=h?e.get(h):g?i.get(g):void 0;if(!c)throw n;if(o){let e=Ze(n);e!==(h?r.get(h):g?s.get(g):void 0)&&(m.error(`[@teacss/config] Error resolving config from the CSS entry:`,n),h?r.set(h,e):g&&s.set(g,e));let t=Array.from(new Set([...c.sources,...$(n)]));return t.length===c.sources.length?c:{...c,sources:t}}return c});return h?n.set(h,v):g&&o.set(g,v),v}}export{w as buildNamespaces,D as classifyCustomVar,rt as createRecoveryConfigLoader,O as customToTheme,qe as diagnoseCustom,Je as entryDiscoveryFiles,tt as findEntry,$ as getConfigSourcesFromError,se as hasTopLevelDirective,nt as loadConfig,R as parseEntry,We as resolveEntryConfig,He as resolvePresets,C as scaleThemeKeys,N as scanCustomBlocks,oe as scanQuotedDirectives,M as scanTopLevelAtRules};
|
|
1
|
+
import{createRequire as e}from"node:module";import*as t from"node:fs";import n,{existsSync as r,readFileSync as i,realpathSync as a}from"node:fs";import{dirname as o,extname as s,isAbsolute as c,join as l,relative as u,resolve as d,sep as f}from"node:path";import p from"node:process";import{consola as m}from"consola";import{expandClassGroups as h,resolveConfig as g,splitClassTokens as _}from"@teacss/core";import{glob as v}from"tinyglobby";import{Buffer as y}from"node:buffer";import{readFile as b,stat as ee}from"node:fs/promises";import{fileURLToPath as te,pathToFileURL as x}from"node:url";const ne=[`100`,`150`,`200`,`300`,`400`,`500`,`600`,`700`,`800`,`850`,`900`,`950`],re=new Set(ne);function ie(e){return e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}function S(e){return Object.keys(e).filter(t=>{if(t===`modes`||t===`defaultMode`||t===`themes`)return!1;let n=e[t];return typeof n!=`object`||!n?!1:t===`colors`||Object.values(n).every(e=>e==null||typeof e==`string`||typeof e==`number`||Array.isArray(e))})}function C(e){return e.map(e=>({key:e,prefix:e===`colors`||e===`semanticColors`?`color`:ie(e),twoLevel:e===`colors`,semanticColor:e===`semanticColors`})).sort((e,t)=>t.prefix.length-e.prefix.length)}function w(e,t,n){Object.defineProperty(e,t,{value:n,configurable:!0,enumerable:!0,writable:!0})}function T(e,t){let n=Object.hasOwn(e,t)?e[t]:void 0;if(typeof n==`object`&&n&&!Array.isArray(n))return n;let r={};return w(e,t,r),r}function E(e,t){let n=t.filter(t=>e===t.prefix||e.startsWith(`${t.prefix}-`)),r=n.find(e=>e.key===`colors`),i=n.find(e=>e.semanticColor);if(r&&i){let t=e===`color`?``:e.slice(6),n=t.lastIndexOf(`-`),a=n>0?t.slice(0,n):``,o=n>0?t.slice(n+1):``;return a&&re.has(o)?{ok:!0,nsKey:r.key,twoLevel:!0,rest:t,colorName:a,step:o}:a&&/^\d+$/.test(o)?{ok:!1,reason:`illegal-color-step`}:t?{ok:!0,nsKey:i.key,twoLevel:!1,rest:t}:{ok:!1,reason:`unknown-prefix`}}let a=n[0];if(!a)return{ok:!1,reason:`unknown-prefix`};let o=e===a.prefix?``:e.slice(a.prefix.length+1);if(a.twoLevel){let e=o.lastIndexOf(`-`),t=e>0?o.slice(0,e):``,n=e>0?o.slice(e+1):``;return!t||!re.has(n)?{ok:!1,reason:`illegal-color-step`}:{ok:!0,nsKey:a.key,twoLevel:!0,rest:o,colorName:t,step:n}}return{ok:!0,nsKey:a.key,twoLevel:!1,rest:o}}function D(e,t){if(!(typeof e!=`object`||!e||!Object.hasOwn(e,t)))return e[t]}function O(e,t){for(let n of t){let t=D(n,e.nsKey);if((e.twoLevel?D(D(t,e.colorName),e.step):D(t,e.rest||`DEFAULT`))!=null)return!0}return!1}function k(e,t,n){let r=C(t),i={},a=[],o=[],s=e=>{let t=E(e.startsWith(`--`)?e.slice(2):e,r);return t.ok||a.push(e),t},c=(e,t,n)=>{let r=T(e,t.nsKey);t.twoLevel?w(T(r,t.colorName),t.step,n):w(r,t.rest||`DEFAULT`,n)};for(let t of e){if(t.theme)continue;let e=t.mode?T(T(i,`modes`),t.mode):i;for(let{property:n,value:r}of t.declarations){let t=s(n);t.ok&&c(e,t,r)}}let l=n?[n,i]:void 0;for(let t of e){if(!t.theme)continue;let e=T(T(i,`themes`),t.theme),n=t.mode?T(T(e,`modes`),t.mode):e;for(let{property:e,value:r}of t.declarations){let t=s(e);if(t.ok){if(l&&!O(t,l)){o.push(e);continue}c(n,t,r)}}}return{theme:i,unknown:a,undeclared:o}}const ae=/[A-Za-z0-9-]/,oe=/[\w-]/;function A(e,t,n){let r=e.indexOf(`*/`,t+2);return r<0||r>=n?n:r+2}function j(e,t,n){let r=e[t];for(let i=t+1;i<n;i++)if(e[i]===`\\`)i++;else if(e[i]===r)return i+1;return n}function M(e,t,n){let r=``;for(let i=t;i<n;i++)if(e[i]===`/`&&e[i+1]===`*`)i=A(e,i,n)-1,r+=` `;else if(e[i]===`"`||e[i]===`'`){let t=j(e,i,n);r+=e.slice(i,t),i=t-1}else r+=e[i];return r.trim()}function se(e,t){let n=[],r=t.startsWith(`@`)?t.slice(1):t;for(let t of N(e)){if(t.name!==r||t.terminator!==`;`)continue;let e=t.prelude[0];if(e!==`"`&&e!==`'`)continue;let i=j(t.prelude,0,t.prelude.length);i!==t.prelude.length||i<=1||t.prelude[i-1]!==e||n.push(t.prelude.slice(1,i-1))}return n}function ce(e,t){let n=t.startsWith(`@`)?t.slice(1):t;return N(e).some(e=>e.name===n)}function le(e,t){for(let n=t;n<e.length;n++)if(e[n]===`/`&&e[n+1]===`*`)n=A(e,n,e.length)-1;else if(e[n]===`"`||e[n]===`'`)n=j(e,n,e.length)-1;else if(e[n]===`{`)return n;else if(e[n]===`;`||e[n]===`}`)return-1;return-1}function ue(e,t){let n=1;for(let r=t+1;r<e.length;r++)if(e[r]===`/`&&e[r+1]===`*`)r=A(e,r,e.length)-1;else if(e[r]===`"`||e[r]===`'`)r=j(e,r,e.length)-1;else if(e[r]===`{`)n++;else if(e[r]===`}`&&--n===0)return r;return-1}function N(e){let t=[],n=0;for(let r=0;r<e.length;r++){if(e[r]===`/`&&e[r+1]===`*`){r=A(e,r,e.length)-1;continue}if(e[r]===`"`||e[r]===`'`){r=j(e,r,e.length)-1;continue}if(e[r]===`{`){n++;continue}if(e[r]===`}`){n=Math.max(0,n-1);continue}if(n!==0||e[r]!==`@`)continue;let i=r,a=i+1;for(;oe.test(e[a]??``);)a++;if(a===i+1)continue;let o=e.slice(i+1,a),s=[],c=!1;for(let n=a;n<e.length;n++){let l=e[n];if(l===`/`&&e[n+1]===`*`)n=A(e,n,e.length)-1;else if(l===`"`||l===`'`)n=j(e,n,e.length)-1;else if(l===`(`)s.push(`)`);else if(l===`[`)s.push(`]`);else if(l===s.at(-1))s.pop();else if(s.length===0&&l===`;`){t.push({name:o,prelude:M(e,a,n),start:i,end:n+1,terminator:`;`}),r=n,c=!0;break}else if(s.length===0&&l===`{`){let s=ue(e,n);s>=0&&(t.push({name:o,prelude:M(e,a,n),start:i,end:s+1,terminator:`block`}),r=s,c=!0);break}}if(!c&&M(e,a,e.length)===``){t.push({name:o,prelude:``,start:i,end:e.length,terminator:`eof`});break}}return t}function de(e,t,n){let r=[];for(let i=t;i<n;i++){let t=e[i];if(t===`/`&&e[i+1]===`*`)i=A(e,i,n)-1;else if(t===`"`||t===`'`)i=j(e,i,n)-1;else if(t===`(`)r.push(`)`);else if(t===`[`)r.push(`]`);else if(t===`{`)r.push(`}`);else if(t===r.at(-1))r.pop();else if(t===`;`&&r.length===0)return i}return n}function fe(e,t,n){let r=[];for(let i=t;i<n;){for(;i<n;)if(/\s/.test(e[i]))i++;else if(e[i]===`/`&&e[i+1]===`*`)i=A(e,i,n);else break;let t=de(e,i,n);if(e[i]!==`-`||e[i+1]!==`-`){i=t+1;continue}let a=i+2;for(;a<n&&ae.test(e[a]);)a++;if(a===i+2){i=t+1;continue}let o=a;for(;o<n;)if(/\s/.test(e[o]))o++;else if(e[o]===`/`&&e[o+1]===`*`)o=A(e,o,n);else break;if(e[o]!==`:`){i=t+1;continue}let s=o+1,c=e.slice(s,t),l=c.trim(),u=s+c.length-c.trimStart().length,d=u+l.length;r.push({property:e.slice(i,a),value:l,start:i,end:a,colon:o,valueStart:u,valueEnd:d}),i=t+1}return r}function P(e){let t=[];for(let n of N(e)){if(n.name!==`custom`||n.terminator!==`block`)continue;let r=le(e,n.start+7);if(r<0)continue;let i=n.end-1;t.push({mode:n.prelude||void 0,declarations:fe(e,r+1,i),start:n.start,open:r,close:i})}return t}function pe(e){let t=e,n=/^url\(\s*([^)]*?)\s*\)$/i.exec(t);if(n)t=n[1];else if(/^url\(/i.test(t))return;let r=t[0];if(r===`"`||r===`'`){if(t.length<2||t[t.length-1]!==r)return;let e=t.slice(1,-1);return e.includes(r)?void 0:e}return n?t:void 0}function me(e){return!(!e||e.startsWith(`//`)||/^[a-z][\w+.-]*:/i.test(e))}function he(e){return e.split(`\\`).join(`/`)}function ge(e,t,n,r){if(!me(e)||c(e)||!r&&!e.startsWith(`./`)&&!e.startsWith(`../`))return e;let i=he(u(n,d(t,e)));return i.startsWith(`.`)?i:`./${i}`}function _e(e,t){if(t.length===0)return e;t.sort((e,t)=>e.start-t.start);let n=``,r=0;for(let i of t)n+=e.slice(r,i.start)+i.replacement,r=i.end;return n+e.slice(r)}function ve(e,t,n){if(t===n)return e;let r=[];for(let i of N(e)){if(i.terminator!==`;`||i.name!==`preset`&&i.name!==`source`)continue;let a=i.prelude[0];if(a!==`"`&&a!==`'`||i.prelude[i.prelude.length-1]!==a)continue;let o=i.prelude.slice(1,-1).trim(),s=i.name===`source`&&o.startsWith(`!`),c=s?o.slice(1):o,l=ge(c,t,n,i.name===`source`);if(l===c)continue;let u=e.slice(i.start,i.end).replace(i.prelude,`${a}${s?`!`:``}${l}${a}`);r.push({start:i.start,end:i.end,replacement:u})}return _e(e,r)}function F(e,n,r,i,a){if(a>32)return e;let s=[];for(let c of N(e)){if(c.name!==`import`||c.terminator!==`;`)continue;let e=pe(c.prelude);if(e===void 0||!me(e))continue;let l=d(n,e),u;try{u=t.statSync(l)}catch{continue}if(!u.isFile())continue;if(r.has(l)){s.push({start:c.start,end:c.end,replacement:``});continue}r.add(l),i.push(l);let f=o(l),p=F(t.readFileSync(l,`utf8`),f,r,i,a+1);p=ve(p,f,n),s.push({start:c.start,end:c.end,replacement:p})}return _e(e,s)}function ye(e,t,n){if(!e.includes(`@import`))return{css:e,files:[]};let r=[];return{css:F(e,t,new Set(n?[d(t,n)]:[]),r,0),files:r}}const be=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;function I(e){if(!e)return{kind:`base`};let t=e.split(/\s+/);if(t[0]!==`theme`)return{kind:`mode`,mode:e};let n=t[1];return!n||!be.test(n)||n===`dark`||n===`light`?{kind:`invalid`}:t.length===2?{kind:`theme`,theme:n}:t.length===3&&t[2]===`dark`?{kind:`theme`,theme:n,mode:`dark`}:{kind:`invalid`}}function xe(e){let t,n=0,r=null;for(let i=0;i<e.length;i++){let a=e[i];if(r)a===`\\`?i++:a===r&&(r=null);else if(a===`"`||a===`'`)r=a;else if(a===`/`&&e[i+1]===`*`){let r=e.indexOf(`*/`,i+2),a=r<0?e.length:r+2;(t??=[]).push(e.slice(n,i),` `),n=a,i=a-1}}return t?`${t.join(``)}${e.slice(n)}`:e}function Se(e){let t=e[0];if(t===`"`||t===`'`)for(let n=1;n<e.length;n++){let r=e[n];if(r===`\\`)n++;else if(r===t)return n===e.length-1?e.slice(1,n):void 0}}function L(e){let t=N(e),n=[],r=[],i=[],a=[],o=!1,s=!1;for(let e of t){if(e.name===`custom`&&e.terminator===`block`?o=!0:e.name===`teacss`&&e.prelude===``&&e.terminator!==`block`&&(s=!0),e.terminator!==`;`)continue;if(e.name===`shortcut`){let t=e.prelude.search(/\s/);if(t<=0)continue;let n=e.prelude.slice(0,t);if(!/^[A-Za-z_][\w-]*$/.test(n))continue;let r=Se(e.prelude.slice(t).trimStart())?.trim();r&&i.push({name:n,expansion:r});continue}if(e.name!==`preset`&&e.name!==`source`&&e.name!==`safelist`)continue;let t=Se(e.prelude)?.trim();if(!t)continue;if(e.name===`preset`){n.push(t);continue}if(e.name===`safelist`){a.push(t);continue}let c=t.startsWith(`!`),l=c?t.slice(1):t;l&&r.push({glob:l,exclude:c})}return{presets:n,sources:r,custom:o?P(e).flatMap(({mode:e,declarations:t})=>{let n=I(e);return n.kind===`invalid`?[]:[{mode:n.kind===`base`?void 0:n.mode,...n.kind===`theme`?{theme:n.theme}:{},declarations:t.map(({property:e,value:t})=>({property:e,value:xe(t).trim()}))}]}):[],shortcuts:i,safelist:a,hasTeacss:s}}let Ce;function we(){return Ce??=import(`jiti`).then(({createJiti:e})=>({createJiti:e,transformer:e(import.meta.url,{fsCache:!1,interopDefault:!0,moduleCache:!1})}))}const R=new Map,z=new WeakMap,Te=16*1024*1024,B=new Map;let V=0;const Ee={articles:`@teacss/preset-articles`,icons:`@teacss/preset-icons`,standard:`@teacss/preset-standard`};function De(t,n){try{return n.resolve(t)}catch(r){let i;try{i=n.resolve(`teacss/package.json`)}catch{throw r}return e(i).resolve(t)}}function Oe(t,n){if(t.startsWith(`.`)||c(t))return d(n,t);let r=e(d(n,`_`)),i=Object.hasOwn(Ee,t)?Ee[t]:void 0;return i?De(i,r):r.resolve(t)}function H(e){return e.startsWith(`.`)||c(e)}function U(e){try{return a(e)}catch{return d(e)}}function W(e,t){let n=o(e),i=[];for(;;){if(t.has(n)){let e=t.get(n);for(let n of i)t.set(n,e);return e}if(i.push(n),r(d(n,`package.json`))){for(let e of i)t.set(e,n);return n}let e=o(n);if(e===n){for(let e of i)t.set(e,void 0);return}n=e}}function ke(e,t){let n=u(t,e);return n===``||!c(n)&&n!==`..`&&!n.startsWith(`..${f}`)}function G(e,t,n){let r=W(e,n);return t.packageRoot===void 0?r===void 0&&ke(e,t.fallbackRoot):r===t.packageRoot}function K(e,t,n,r,i){if(!e||n.has(e)||(n.add(e),!c(e.filename)))return;let a=U(e.filename);if(G(a,r,i)){t.add(a);for(let a of e.children)K(a,t,n,r,i)}}function Ae(e){if(!e||typeof e!=`object`)return;let t,n,r;try{t=Reflect.get(e,`path`),n=Reflect.get(e,`url`),r=Reflect.get(e,`message`)}catch{return}if(typeof t==`string`&&c(t))return U(t);if(typeof n==`string`&&n.startsWith(`file:`))return U(te(n));if(typeof r!=`string`)return;let i=/Cannot find module ['"]([^'"]+)['"] from ['"]([^'"]+)['"]/.exec(r),a=/Cannot find module ['"]([^'"]+)['"][\s\S]*?Require stack:\s*\n- ([^\n]+)/.exec(r),s=i??a;if(!s)return;let l=s[1],u=s[2];if(!(!l||!u||!l.startsWith(`.`)&&!c(l)))return U(c(l)?l:d(o(u),l))}async function je(e,t){let n=R.get(e)??Promise.resolve(),r,i=new Promise(e=>{r=e}),a=n.then(()=>i);R.set(e,a),await n;try{return{evaluation:t()}}finally{r(),R.get(e)===a&&R.delete(e)}}function Me(e){return()=>({visitor:{AwaitExpression(t){t.getFunctionParent()||(e.hasTopLevelAwait=!0)},CallExpression(t){t.node.callee?.type===`Identifier`&&t.node.callee.name===`jitiImport`&&(e.hasDynamicImport=!0);let n=t.node.arguments?.[0];if(t.node.callee?.type!==`Identifier`||t.node.callee.name!==`require`)return;let r=n?.type===`StringLiteral`&&typeof n.value==`string`;r&&e.dependencies.add(n.value),typeof t.node.start==`number`&&(r?t.getFunctionParent()?e.hasNestedRequire=!0:e.hasTopLevelRequire=!0:e.hasNonLiteralRequire=!0)},ForOfStatement(t){t.node.await&&!t.getFunctionParent()&&(e.hasTopLevelAwait=!0)}}})}function q(e,t,n){if(e.hasDynamicImport)throw Error(`Dynamic imports are not supported in local preset modules: "${t}". Use static imports so TeaCSS can track and reload the complete graph.`);if(e.hasNonLiteralRequire)throw Error(`CommonJS require() specifiers must be string literals in local preset modules: "${t}".`);if(e.hasNestedRequire)throw Error(`CommonJS require() is only supported at module top level in local preset modules: "${t}".`);if(e.hasTopLevelRequire&&e.hasTopLevelAwait)throw Error(`CommonJS require() cannot be combined with top-level await in a local preset module: "${t}". Use a static import instead.`);if(t!==n&&e.hasTopLevelAwait)throw Error(`Top-level await is only supported in the local preset entry module: "${t}".`)}const J=Symbol(`uncacheable transform option`);function Y(e,t=new Set){if(e===null)return`n`;if(typeof e==`string`)return`s${JSON.stringify(e)}`;if(typeof e==`boolean`)return e?`b1`:`b0`;if(typeof e==`number`)return Number.isNaN(e)?`dNaN`:e===1/0?`dInfinity`:e===-1/0?`d-Infinity`:Object.is(e,-0)?`d-0`:`d${JSON.stringify(e)}`;if(e===void 0)return`u`;if(typeof e!=`object`||t.has(e))throw J;t.add(e);try{if(Array.isArray(e)){for(let t of Reflect.ownKeys(e)){if(t===`length`)continue;if(typeof t!=`string`)throw J;let n=Number(t),r=Object.getOwnPropertyDescriptor(e,t);if(!Number.isSafeInteger(n)||n<0||String(n)!==t||n>=e.length||!r?.enumerable||!(`value`in r))throw J}let n=Array.from({length:e.length},(n,r)=>{let i=Object.getOwnPropertyDescriptor(e,String(r));return i&&`value`in i?Y(i.value,t):`h`});return`a${e.length}[${n.join(`,`)}]`}if(Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)throw J;return`o{${Reflect.ownKeys(e).map(t=>{if(typeof t!=`string`)throw J;let n=Object.getOwnPropertyDescriptor(e,t);if(!n?.enumerable||!(`value`in n))throw J;return[t,n.value]}).sort(([e],[t])=>e.localeCompare(t)).map(([e,n])=>`${JSON.stringify(e)}:${Y(n,t)}`).join(`,`)}}`}finally{t.delete(e)}}function Ne(e,t){return{...t,async:!1,interopDefault:t.interopDefault??!0,jsx:t.jsx??e.options.jsx,retainLines:t.retainLines??e.options.transformOptions?.retainLines}}function Pe(e){if(!(e&&Object.getPrototypeOf(e)===Object.prototype&&Reflect.ownKeys(e).length===0))return e}function Fe(e){try{return Y({babel:Pe(e.babel),interopDefault:e.interopDefault,jsx:e.jsx,retainLines:e.retainLines,ts:e.ts})}catch{return}}function Ie(e,t,n,r){let i=y.byteLength(e)+y.byteLength(t)+y.byteLength(n);for(let e of r.dependencies)i+=y.byteLength(e);return i}function Le(e,t){let n=B.get(e);n&&(V-=n.bytes,B.delete(e));let r=Ie(e,t.source,t.code,t.facts);if(!(r>Te))for(B.set(e,{...t,bytes:r}),V+=r;B.size>256||V>Te;){let e=B.keys().next();if(e.done)break;let t=B.get(e.value);B.delete(e.value),t&&(V-=t.bytes)}}function Re(e){return{...e,dependencies:Array.from(e.dependencies)}}function ze(e,t,n,r,i,a){let o=t.filename?U(t.filename):n,s=Ne(e,t),c=Fe(s),l=c===void 0?void 0:`${o}\0${c}`,u=l===void 0?void 0:B.get(l);if(l!==void 0&&u?.source===s.source)return B.delete(l),B.set(l,u),G(o,r,i)&&q(u.facts,o,n),{code:u.code,dependencies:u.facts.dependencies};let d=c===void 0?void 0:{filename:o,mode:c,source:s.source},f=d===void 0?void 0:a?.read(d);if(l!==void 0&&f){let e={...f.facts,dependencies:new Set(f.facts.dependencies)};return Le(l,{code:f.code,facts:e,source:s.source}),G(o,r,i)&&q(e,o,n),{code:f.code,dependencies:e.dependencies}}let p={dependencies:new Set,hasDynamicImport:!1,hasNestedRequire:!1,hasNonLiteralRequire:!1,hasTopLevelAwait:!1,hasTopLevelRequire:!1},m=Me(p),h=Error.prepareStackTrace,g=Error.stackTraceLimit;try{let t=e.transform({...s,babel:{...s.babel,plugins:[...Array.isArray(s.babel?.plugins)?s.babel.plugins:[],m]}});return l!==void 0&&Le(l,{code:t,facts:p,source:s.source}),G(o,r,i)&&q(p,o,n),d!==void 0&&a?.write(d,{code:t,facts:Re(p)}),{code:t,dependencies:p.dependencies}}finally{Error.prepareStackTrace=h,Error.stackTraceLimit=g}}const Be=/\.[cm]?[jt]sx?$/;function Ve(e,t,n){let r=U(c(n)?n:d(o(t),n));if(s(r))return[r];let i=Array.from(new Set([``,...e.options.extensions??[],`.json`])),a=[r,d(r,`index`)].flatMap(e=>i.map(t=>`${e}${t}`));return a.push(d(r,`package.json`)),a}function He(t,n,r){if(r.startsWith(`node:`))return[];try{let i=H(r)?t.esmResolve(r,{parentURL:x(n).href,try:!0}):e(n).resolve(r);if(!i)return H(r)?Ve(t,n,r):[];let a=i.startsWith(`file:`)?te(i):i;return c(a)?[U(a)]:[]}catch{return H(r)?Ve(t,n,r):[]}}async function Ue(e,t,n,r,i,a,o){let c=[e],l;for(let u=0;u<c.length;u++){let d=c[u];if(!d||!Be.test(s(d)))continue;let f;try{f=await b(d,`utf8`)}catch(e){if(e.code===`ENOENT`)continue;throw e}d===e&&(l=f);let{dependencies:p}=ze(n,{source:f,filename:d,async:d===e,ts:/\.[cm]?tsx?$/.test(d)},e,r,i,o);for(let e of p)for(let n of He(t,d,e))a.has(n)||!G(n,r,i)||(a.add(n),c.push(n))}return l}async function We(e,t){try{let{createPresetTransformDiskCache:n}=await import(`./presetTransformDiskCache-Cp5NmI8Q.js`);return n(e,import.meta.url,t)}catch{return}}function X(e,t){if(!e||typeof e!=`object`)return;let n=z.get(e)??[];z.set(e,Array.from(new Set([...n,...t])))}function Z(e){return e&&typeof e==`object`?[...z.get(e)??[]]:[]}async function Ge(t,n,r){let i=U(t),a=e(i),s=Object.create(null),c=new Set([i]),l=new Map,u={packageRoot:W(i,l),fallbackRoot:o(i)},[{createJiti:d,transformer:f},p]=await Promise.all([we(),We(i,r)]),m=d(i,{fsCache:!1,interopDefault:!0,moduleCache:!1,tryNative:!1,transform:e=>{let{code:t}=ze(f,e,i,u,l,p);return{code:t}}}),h=()=>{let e=new Set;for(let t of Object.values(s))K(t,c,e,u,l);for(let t of c)K(a.cache[t],c,e,u,l)};try{let e=await Ue(i,m,f,u,l,c,p)??await b(i,`utf8`),{evaluation:t}=await je(u.packageRoot??u.fallbackRoot,()=>{for(let e of c)delete a.cache[e];return m.evalModule(e,{async:!0,cache:s,filename:i,forceTranspile:!0})}),r=await t,o=r?.__esModule?r.default:r;if(o==null)throw Error(`@preset "${n}" has no default export (expected a Preset or preset factory)`);let d=typeof o==`function`?await o():o;return h(),{preset:d,sources:Array.from(c)}}catch(e){h();let t=Ae(e);throw X(e,t&&G(t,u,l)?[...c,t]:Array.from(c)),e}}async function Ke(e){let t=await ee(e),n=x(e);return n.searchParams.set(`version`,`${t.mtimeMs}:${t.ctimeMs}:${t.size}:${t.ino}`),(await import(n.href)).default}async function qe(e,t){let n=[],r=new Set,i={protectedSlotsByDirectory:new Map};for(let a of e){let e=Oe(a,t);try{let t;if(H(a)){let t=await Ge(e,a,i);for(let e of t.sources)r.add(e);n.push(t.preset);continue}else t=await Ke(e);if(t==null)throw Error(`@preset "${a}" has no default export (expected a Preset or preset factory)`);n.push(typeof t==`function`?await t():t)}catch(t){throw X(t,H(a)?[...r,U(e)]:r),t}}return{presets:n,sources:Array.from(r)}}async function Je(e,t){return(await qe(e,t)).presets}async function Ye(e,t,n){let r=e.filter(e=>!e.exclude).map(e=>e.glob);if(r.length===0)return{shortcuts:[],safelist:[],files:[]};let a=await v(r,{cwd:t,absolute:!0,ignore:e.filter(e=>e.exclude).map(e=>e.glob),expandDirectories:!1}),o=new Set(n),s=a.filter(e=>e.endsWith(`.css`)&&!o.has(e)).sort(),c=[],l=[];for(let e of s){let t;try{t=i(e,`utf8`)}catch(e){if(e.code===`ENOENT`)continue;throw e}if(!t.includes(`@shortcut`)&&!t.includes(`@safelist`))continue;let n=L(t);c.push(...n.shortcuts),l.push(...n.safelist)}return{shortcuts:c,safelist:l,files:s}}async function Xe(e,t,n){let r=ye(e,t,n),i=L(r.css),[a,o]=await Promise.all([i.presets.length?qe(i.presets,t):{presets:[],sources:[]},Ye(i.sources,t,r.files)]),s=a.presets,c=await g({presets:s}),l=S(c.theme),{theme:u,unknown:d,undeclared:f}=k(i.custom,l,c.theme),p=[...i.sources.filter(e=>!e.exclude).map(e=>e.glob),...i.sources.filter(e=>e.exclude).map(e=>`!${e.glob}`)],m=[...o.shortcuts,...i.shortcuts],v=Object.fromEntries(m.map(({name:e,expansion:t})=>[e,t])),y=[...new Set([...o.safelist,...i.safelist].flatMap(e=>_(h(e))))],b=[...new Set(i.custom.map(e=>e.theme).filter(e=>!!e))];return{config:{presets:s,theme:u,...i.sources.length?{content:{filesystem:p}}:{},...m.length?{shortcuts:v}:{},...y.length?{safelist:y}:{},...b.length?{autocomplete:{templates:[`theme-(${b.join(`|`)})`]}}:{}},unknown:d,undeclared:f,hasTeacss:r.files.length===0?i.hasTeacss:L(e).hasTeacss,sources:[...r.files,...o.files,...a.sources]}}const Ze=ne.join(` `);function Q(e,t){switch(t){case`unknown-prefix`:return`@custom var "${e}" matches no theme namespace — not registered (emitted as a plain :root var).`;case`illegal-color-step`:return`@custom var "${e}" has an illegal color step — palette steps are ${Ze}.`;case`undeclared-theme-variable`:return`@custom theme var "${e}" overrides no declared base value — not registered. Declare it in the preset theme or a base @custom block first.`;case`invalid-theme-prelude`:return`@custom prelude "${e}" is not a theme declaration — use \`@custom theme <name> {}\` or \`@custom theme <name> dark {}\` with a kebab-case name (\`dark\`/\`light\` reserved). The block registers nothing.`}}function Qe(e,t,n){let r=C(t),i=[],a=P(e),o=n?[n,k(a.filter(e=>I(e.mode).kind===`base`).map(e=>({declarations:e.declarations})),t).theme]:void 0;for(let e of a){let t=I(e.mode);if(t.kind===`invalid`){i.push({property:e.mode,start:e.start,end:e.open,reason:`invalid-theme-prelude`,message:Q(e.mode,`invalid-theme-prelude`)});continue}for(let n of e.declarations){let{property:e,start:a,end:s}=n,c=E(e.slice(2),r);if(!c.ok){i.push({property:e,start:a,end:s,reason:c.reason,message:Q(e,c.reason)});continue}t.kind===`theme`&&o&&!O(c,o)&&i.push({property:e,start:a,end:s,reason:`undeclared-theme-variable`,message:Q(e,`undeclared-theme-variable`)})}}return i}const $=Object.freeze([`package.json`,`index.css`,`src/index.css`]),[$e,...et]=$;function tt(e){let t=e instanceof Error?`${e.name}:${e.message}`:`${typeof e}:${String(e)}`,r=Array.from(new Set(Z(e))).sort().map(e=>{try{let t=n.statSync(e);return`${e}:${t.mtimeMs}:${t.ctimeMs}:${t.size}:${t.ino}`}catch(t){let n=t.code;return`${e}:${n===`ENOENT`?`missing`:`unreadable:${n??String(t)}`}`}});return JSON.stringify([t,r])}function nt(e,t){let n={...e};for(let e of Reflect.ownKeys(t)){if(!Object.getOwnPropertyDescriptor(t,e)?.enumerable)continue;let r=Reflect.get(t,e);r!==void 0&&Object.defineProperty(n,e,{value:r,configurable:!0,enumerable:!0,writable:!0})}return n}function rt(e){try{let t=n.readFileSync(e,`utf8`);return t.includes(`@teacss`)?N(t).some(e=>e.name===`teacss`&&e.prelude===``&&e.terminator!==`block`):!1}catch(e){if(e.code===`ENOENT`)return!1;throw e}}function it(e){try{let t=JSON.parse(n.readFileSync(l(e,$e),`utf8`))?.teacss?.entry;return typeof t==`string`?t:void 0}catch(e){if(e.code===`ENOENT`)return;throw e}}function at(e){let t=it(e);if(t){let r=d(e,t);if(n.existsSync(r)&&n.statSync(r).isFile())return r}for(let t of et){let r=l(e,t);if(n.existsSync(r)&&n.statSync(r).isFile()&&rt(r))return r}}async function ot(e=p.cwd(),t=e,r={}){if(typeof t!=`string`)return{config:nt(r,t),sources:[]};let i=d(e,t),a=n.existsSync(i)&&n.statSync(i).isFile()?i:at(i);if(!a)return{config:{...r},sources:[]};let s;try{s=await Xe(n.readFileSync(a,`utf8`),o(a),a)}catch(e){throw X(e,[a]),e}let{config:c}=s,l=nt(r,c);return c.presets?.length||(r.presets?.length?l.presets=r.presets:m.warn(`[@teacss/config] "${a}" declares no @preset — no utilities will be generated. Add one, e.g. \`@preset "standard";\``)),{config:l,sources:Array.from(new Set([a,...s.sources]))}}function st(){let e=new Map,t=new Map,n=new Map,r=new Map,i=new WeakMap,a=new WeakMap,o=new WeakMap,s=new WeakMap,c=(e,n)=>e?t.get(e):n?a.get(n):void 0,l=(e,t)=>e?n.get(e):t?o.get(t):void 0,u=async(e,t)=>{for(;;){let n=c(e,t),r=l(e,t);if(!r)return;let i=await r;if(c(e,t)===n)return i}};return(c=p.cwd(),l=c,f={})=>{let h=typeof l==`string`?d(c,l):void 0,g=typeof l==`object`&&l?l:void 0,_=h?(t.get(h)??0)+1:g?(a.get(g)??0)+1:0;h?t.set(h,_):g&&a.set(g,_);let v=ot(c,l,f).then(n=>(h&&t.get(h)===_?(e.set(h,n),r.delete(h)):g&&a.get(g)===_&&(i.set(g,n),s.delete(g)),n),async n=>{let o=h?t.get(h)===_:!g||a.get(g)===_;if(!o){let e=await u(h,g);if(e)return e}let c=h?e.get(h):g?i.get(g):void 0;if(!c)throw n;if(o){let e=tt(n);e!==(h?r.get(h):g?s.get(g):void 0)&&(m.error(`[@teacss/config] Error resolving config from the CSS entry:`,n),h?r.set(h,e):g&&s.set(g,e));let t=Array.from(new Set([...c.sources,...Z(n)]));return t.length===c.sources.length?c:{...c,sources:t}}return c});return h?n.set(h,v):g&&o.set(g,v),v}}export{C as buildNamespaces,E as classifyCustomVar,st as createRecoveryConfigLoader,k as customToTheme,Qe as diagnoseCustom,$ as entryDiscoveryFiles,at as findEntry,Z as getConfigSourcesFromError,O as hasBaseThemeValue,ce as hasTopLevelDirective,ot as loadConfig,I as parseCustomPrelude,L as parseEntry,Xe as resolveEntryConfig,Je as resolvePresets,S as scaleThemeKeys,P as scanCustomBlocks,se as scanQuotedDirectives,N as scanTopLevelAtRules};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teacss/config",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.5",
|
|
4
4
|
"description": "TeaCSS config loader — discovers the CSS entry and resolves its directives into a config (no teacss.config file).",
|
|
5
5
|
"homepage": "https://css.teasim.com",
|
|
6
6
|
"funding": "https://github.com/sponsors/billgo",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"dev": "tsdown --watch"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@teacss/core": "0.4.
|
|
25
|
+
"@teacss/core": "0.4.5",
|
|
26
26
|
"consola": "^3.4.2",
|
|
27
27
|
"jiti": "^2.7.0",
|
|
28
28
|
"tinyglobby": "^0.2.17"
|