@weapp-tailwindcss/engine 0.1.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 ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 ice breaker
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 ADDED
@@ -0,0 +1,25 @@
1
+ # @weapp-tailwindcss/engine
2
+
3
+ > English | [简体中文](./README.zh-CN.md)
4
+
5
+ Candidate extraction, source scanning, and style generation for Tailwind CSS 4. Use this package independently or through `weapp-tailwindcss`, its PostCSS package, and CLI.
6
+
7
+ ```ts
8
+ import { createTailwindV4Engine, resolveTailwindV4Source } from '@weapp-tailwindcss/engine'
9
+
10
+ const source = await resolveTailwindV4Source({
11
+ projectRoot: process.cwd(),
12
+ css: '@import "tailwindcss";',
13
+ })
14
+ const engine = createTailwindV4Engine(source)
15
+ const result = await engine.generate({ candidates: ['flex', 'text-red-500'] })
16
+ console.log(result.css)
17
+ ```
18
+
19
+ The root entry exports candidate extraction, position reports, source scanning, and the v4 API. `@weapp-tailwindcss/engine/v4` exports the v4 API. Both entries support ESM, CJS, and TypeScript. Extract candidates from templates, JavaScript strings, SFCs, and CSS `@apply`, with source positions and valid candidate sets.
20
+
21
+ Supports `@source`, multiple CSS sources, the design system, bare arbitrary values, incremental generation sessions, and cache disposal. Only Tailwind CSS 4 is supported. There are no v3, multi-version dispatcher, custom generator, or HTML parser compatibility entry points. Platform compatibility transforms belong to `@weapp-tailwindcss/postcss`.
22
+
23
+ ## Source
24
+
25
+ The source and corresponding v4 and extraction tests were migrated from the MIT-licensed [tailwindcss-mangle](https://github.com/sonofmagic/tailwindcss-mangle/tree/6bf58cebe073a06dfeac7ed44f55ecff50deb763/packages/engine) commit identified by the npm provenance for `@tailwindcss-mangle/engine@0.2.0`. The original [MIT license](./LICENSE) is retained. This package is maintained independently and does not depend on the old engine or a local submodule at runtime.
@@ -0,0 +1,25 @@
1
+ # @weapp-tailwindcss/engine
2
+
3
+ > [English](./README.md) | 简体中文
4
+
5
+ Tailwind CSS 4 的候选提取、文件扫描和样式生成引擎,可独立使用,也供 `weapp-tailwindcss`、PostCSS 包与 CLI 复用。
6
+
7
+ ```ts
8
+ import { createTailwindV4Engine, resolveTailwindV4Source } from '@weapp-tailwindcss/engine'
9
+
10
+ const source = await resolveTailwindV4Source({
11
+ projectRoot: process.cwd(),
12
+ css: '@import "tailwindcss";',
13
+ })
14
+ const engine = createTailwindV4Engine(source)
15
+ const result = await engine.generate({ candidates: ['flex', 'text-red-500'] })
16
+ console.log(result.css)
17
+ ```
18
+
19
+ 包根导出候选提取、位置报告、扫描工具和 v4 API;`@weapp-tailwindcss/engine/v4` 导出 v4 API。两者均支持 ESM、CJS 和 TypeScript。候选提取包括模板、JS 字符串、SFC 和 CSS `@apply`,保留源码位置及有效候选集合。
20
+
21
+ 支持 `@source`、多 CSS 来源、design system、裸任意值、增量生成会话与缓存释放。只支持 Tailwind CSS 4;不提供 v3、多版本分发、自定义生成器或 HTML parser 兼容入口。小程序平台兼容转换由 `@weapp-tailwindcss/postcss` 完成。
22
+
23
+ ## 来源
24
+
25
+ 源码及对应 v4、提取测试迁自 MIT 项目 [tailwindcss-mangle](https://github.com/sonofmagic/tailwindcss-mangle/tree/6bf58cebe073a06dfeac7ed44f55ecff50deb763/packages/engine),对应 npm `@tailwindcss-mangle/engine@0.2.0` 的发布证明。保留原始 [MIT 许可证](./LICENSE)。本包独立维护,不在运行时依赖旧 engine 或本地 submodule。
@@ -0,0 +1,267 @@
1
+ import { SourceEntry } from "@tailwindcss/oxide";
2
+ import { Root } from "postcss";
3
+ //#region src/v4/bare-arbitrary-values/escape.d.ts
4
+ declare function escapeCssClassName(value: string): string;
5
+ //#endregion
6
+ //#region src/v4/bare-arbitrary-values/types.d.ts
7
+ interface BareArbitraryValueOptions {
8
+ /**
9
+ * 允许作为无方括号任意值的单位列表。
10
+ */
11
+ units?: string[];
12
+ }
13
+ interface BareArbitraryValueResolveResult {
14
+ candidate: string;
15
+ canonicalCandidate: string;
16
+ }
17
+ interface BareArbitraryValueSourceCandidate {
18
+ rawCandidate: string;
19
+ start: number;
20
+ end: number;
21
+ }
22
+ //#endregion
23
+ //#region src/v4/bare-arbitrary-values/extract.d.ts
24
+ declare function extractBareArbitraryValueSourceCandidatesWithPositions(content: string, options?: boolean | BareArbitraryValueOptions): BareArbitraryValueSourceCandidate[];
25
+ declare function extractBareArbitraryValueSourceCandidates(content: string, options?: boolean | BareArbitraryValueOptions): string[];
26
+ //#endregion
27
+ //#region src/v4/bare-arbitrary-values/resolve.d.ts
28
+ declare function isBareArbitraryValuesEnabled(options: boolean | BareArbitraryValueOptions | undefined): boolean;
29
+ declare function resolveBareArbitraryValueCandidate(candidate: string, options?: boolean | BareArbitraryValueOptions): BareArbitraryValueResolveResult | undefined;
30
+ //#endregion
31
+ //#region src/style-candidates.d.ts
32
+ interface TailwindStyleSource {
33
+ content: string;
34
+ extension?: string;
35
+ file?: string;
36
+ }
37
+ interface TailwindStyleCandidateOptions {
38
+ candidates?: Iterable<string>;
39
+ sources?: TailwindStyleSource[];
40
+ /**
41
+ * 启用 UnoCSS 风格的裸任意值,例如 `p-10%`、`p-2.5px`。
42
+ */
43
+ bareArbitraryValues?: boolean | BareArbitraryValueOptions;
44
+ }
45
+ declare function collectTailwindStyleCandidates(options?: TailwindStyleCandidateOptions): Promise<Set<string>>;
46
+ //#endregion
47
+ //#region src/v4/types.d.ts
48
+ interface TailwindV4SourceOptions {
49
+ projectRoot?: string;
50
+ cwd?: string;
51
+ base?: string;
52
+ baseFallbacks?: string[];
53
+ css?: string;
54
+ cssSources?: TailwindV4CssSource[];
55
+ cssEntries?: string[];
56
+ packageName?: string;
57
+ }
58
+ interface TailwindV4CssSource {
59
+ css: string;
60
+ base?: string;
61
+ file?: string;
62
+ dependencies?: string[];
63
+ }
64
+ interface TailwindV4ResolvedSource {
65
+ projectRoot: string;
66
+ base: string;
67
+ baseFallbacks: string[];
68
+ css: string;
69
+ dependencies: string[];
70
+ }
71
+ interface TailwindV4CandidateSource {
72
+ content: string;
73
+ extension?: string;
74
+ }
75
+ interface SourceEntry$1 extends TailwindV4CandidateSource {
76
+ id: string;
77
+ }
78
+ interface GenerationRequest {
79
+ candidates?: Iterable<string>;
80
+ sourceEntries?: SourceEntry$1[];
81
+ /**
82
+ * 启用 UnoCSS 风格的裸任意值,例如 `p-10%`、`p-2.5px`。
83
+ */
84
+ bareArbitraryValues?: TailwindV4GenerateOptions['bareArbitraryValues'];
85
+ }
86
+ type GenerationChange = {
87
+ type: 'all';
88
+ } | {
89
+ type: 'candidates';
90
+ } | {
91
+ type: 'sourceEntries';
92
+ } | {
93
+ type: 'dependencies';
94
+ paths?: Iterable<string>;
95
+ } | {
96
+ type: 'source';
97
+ source: TailwindV4ResolvedSource;
98
+ };
99
+ type CssFragmentKind = 'tailwind' | 'theme' | 'preflight';
100
+ interface CssFragment {
101
+ id: string;
102
+ kind: CssFragmentKind;
103
+ root: Root;
104
+ sourceId: string;
105
+ order: number;
106
+ }
107
+ interface TailwindGenerationArtifact {
108
+ fragments: CssFragment[];
109
+ classSet: Set<string>;
110
+ rawCandidates: Set<string>;
111
+ dependencies: string[];
112
+ sourceEntries: SourceEntry$1[];
113
+ }
114
+ interface TailwindGenerationSession {
115
+ readonly source: TailwindV4ResolvedSource;
116
+ generate: (request?: GenerationRequest) => Promise<TailwindGenerationArtifact>;
117
+ invalidate: (change: GenerationChange) => void;
118
+ dispose: () => void;
119
+ }
120
+ interface TailwindV4StyleSource extends TailwindStyleSource {}
121
+ interface TailwindV4GenerateOptions {
122
+ candidates?: Iterable<string>;
123
+ sources?: TailwindV4CandidateSource[];
124
+ /**
125
+ * 启用 UnoCSS 风格的裸任意值,例如 `p-10%`、`p-2.5px`。
126
+ */
127
+ bareArbitraryValues?: boolean | {
128
+ units?: string[];
129
+ };
130
+ /**
131
+ * 扫描文件系统 source entries 中的候选类名。
132
+ *
133
+ * - `true`:使用 Tailwind v4 编译入口解析出的 `@source` 列表。
134
+ * - `TailwindV4SourcePattern[]`:使用调用方显式传入的 source 列表。
135
+ */
136
+ scanSources?: boolean | TailwindV4SourcePattern[];
137
+ }
138
+ type TailwindV4CompiledSourceRoot = null | 'none' | {
139
+ base: string;
140
+ pattern: string;
141
+ };
142
+ interface TailwindV4SourcePattern {
143
+ base: string;
144
+ pattern: string;
145
+ negated: boolean;
146
+ }
147
+ interface TailwindV4GenerateResult {
148
+ css: string;
149
+ classSet: Set<string>;
150
+ rawCandidates: Set<string>;
151
+ dependencies: string[];
152
+ sources: TailwindV4SourcePattern[];
153
+ root: TailwindV4CompiledSourceRoot;
154
+ }
155
+ interface TailwindV4StyleGenerateOptions extends TailwindV4SourceOptions {
156
+ source?: TailwindV4ResolvedSource;
157
+ candidates?: Iterable<string>;
158
+ sources?: TailwindV4StyleSource[];
159
+ /**
160
+ * 启用 UnoCSS 风格的裸任意值,例如 `p-10%`、`p-2.5px`。
161
+ */
162
+ bareArbitraryValues?: TailwindV4GenerateOptions['bareArbitraryValues'];
163
+ /**
164
+ * 除内存来源外,还扫描 Tailwind CSS v4 编译后解析的来源入口。
165
+ */
166
+ scanSources?: TailwindV4GenerateOptions['scanSources'];
167
+ }
168
+ interface TailwindV4StyleGenerateResult extends TailwindV4GenerateResult {
169
+ tokens: Set<string>;
170
+ source: TailwindV4ResolvedSource;
171
+ }
172
+ interface TailwindV4DesignSystem {
173
+ parseCandidate: (candidate: string) => unknown[];
174
+ candidatesToCss: (candidates: string[]) => Array<string | null | undefined>;
175
+ }
176
+ interface TailwindV4Engine {
177
+ source: TailwindV4ResolvedSource;
178
+ loadDesignSystem: () => Promise<TailwindV4DesignSystem>;
179
+ validateCandidates: (candidates: Iterable<string>) => Promise<Set<string>>;
180
+ generate: (options?: TailwindV4GenerateOptions) => Promise<TailwindV4GenerateResult>;
181
+ }
182
+ //#endregion
183
+ //#region src/v4/candidates/inline-source.d.ts
184
+ declare function extractTailwindV4InlineSourceCandidates(css: string): {
185
+ included: Set<string>;
186
+ excluded: Set<string>;
187
+ };
188
+ //#endregion
189
+ //#region src/v4/candidates.d.ts
190
+ declare function resolveValidTailwindV4Candidates(designSystem: TailwindV4DesignSystem, candidates: Iterable<string>, options?: {
191
+ bareArbitraryValues?: boolean | BareArbitraryValueOptions;
192
+ }): Set<string>;
193
+ declare function replaceBareArbitraryValueSelectors(css: string, candidates: Iterable<string>, options?: boolean | BareArbitraryValueOptions): string;
194
+ declare function canonicalizeBareArbitraryValueCandidates(candidates: Iterable<string>, options?: boolean | BareArbitraryValueOptions): string[];
195
+ //#endregion
196
+ //#region src/v4/engine.d.ts
197
+ declare function createTailwindV4Engine(source: TailwindV4ResolvedSource): TailwindV4Engine;
198
+ //#endregion
199
+ //#region src/v4/generation-session.d.ts
200
+ declare function createTailwindGenerationSession(source: TailwindV4ResolvedSource): TailwindGenerationSession;
201
+ //#endregion
202
+ //#region src/v4/node-adapter.d.ts
203
+ interface TailwindV4CompiledSource {
204
+ sources: TailwindV4SourcePattern[];
205
+ root: TailwindV4CompiledSourceRoot;
206
+ build: (candidates: string[]) => string;
207
+ }
208
+ interface TailwindV4NodeModule {
209
+ compile: (css: string, options: {
210
+ base: string;
211
+ onDependency: (dependency: string) => void;
212
+ customCssResolver?: (id: string, base: string) => Promise<string | false | undefined>;
213
+ }) => Promise<TailwindV4CompiledSource>;
214
+ __unstable__loadDesignSystem: (css: string, options: {
215
+ base: string;
216
+ }) => Promise<TailwindV4DesignSystem>;
217
+ }
218
+ declare function loadTailwindV4NodeModule(baseCandidates: string[]): Promise<TailwindV4NodeModule>;
219
+ declare function getTailwindV4DesignSystemCacheKey(source: Pick<TailwindV4ResolvedSource, 'css' | 'base' | 'baseFallbacks'>): string;
220
+ declare function loadTailwindV4DesignSystem(source: TailwindV4ResolvedSource, options?: {
221
+ cache?: boolean;
222
+ }): Promise<TailwindV4DesignSystem>;
223
+ declare function compileTailwindV4Source(source: TailwindV4ResolvedSource): Promise<{
224
+ compiled: TailwindV4CompiledSource;
225
+ dependencies: Set<string>;
226
+ }>;
227
+ //#endregion
228
+ //#region src/v4/source-scan/matcher.d.ts
229
+ declare function isFileExcludedByTailwindV4SourceEntries(file: string, entries: TailwindV4SourcePattern[] | undefined): boolean;
230
+ declare function isFileMatchedByTailwindV4SourceEntries(file: string, entries: TailwindV4SourcePattern[] | undefined): boolean;
231
+ declare function createTailwindV4SourceEntryMatcher(entries: TailwindV4SourcePattern[] | undefined): ((file: string) => boolean) | undefined;
232
+ declare function createTailwindV4SourceExclusionMatcher(entries: TailwindV4SourcePattern[] | undefined): ((file: string) => boolean) | undefined;
233
+ declare function groupTailwindV4SourceEntriesByBase(entries: TailwindV4SourcePattern[]): Map<string, TailwindV4SourcePattern[]>;
234
+ declare function expandTailwindV4SourceEntries(entries: TailwindV4SourcePattern[], resolveFiles: (options: {
235
+ cwd: string;
236
+ sources: TailwindV4SourcePattern[];
237
+ }) => Promise<string[]>): Promise<string[]>;
238
+ declare function mergeTailwindV4SourceEntries(...entries: Array<TailwindV4SourcePattern[] | undefined>): TailwindV4SourcePattern[];
239
+ //#endregion
240
+ //#region src/v4/source-scan/sources.d.ts
241
+ declare const TAILWIND_V4_IGNORED_CONTENT_DIRS: string[];
242
+ declare const TAILWIND_V4_IGNORED_EXTENSIONS: string[];
243
+ declare const TAILWIND_V4_IGNORED_FILES: string[];
244
+ declare const TAILWIND_V4_AUTO_SOURCE_SCAN_PATTERN = "**/*";
245
+ declare function toPosixPath(value: string): string;
246
+ declare function resolveSourceScanPath(value: string): string;
247
+ declare function normalizeGlobPattern(pattern: string): string;
248
+ declare function createTailwindV4DefaultIgnoreSources(base: string): TailwindV4SourcePattern[];
249
+ declare function createTailwindV4RootSources(root: TailwindV4CompiledSourceRoot, fallbackBase: string): TailwindV4SourcePattern[];
250
+ declare function createTailwindV4CompiledSourceEntries(root: TailwindV4CompiledSourceRoot, sources: TailwindV4SourcePattern[], fallbackBase: string): TailwindV4SourcePattern[];
251
+ declare function resolveTailwindV4SourceEntry(sourcePath: string, base: string, negated: boolean, defaultPattern?: string): Promise<TailwindV4SourcePattern>;
252
+ declare function normalizeTailwindV4SourceEntries(sources: TailwindV4SourcePattern[], options?: {
253
+ cwd?: string;
254
+ defaultPattern?: string;
255
+ }): Promise<TailwindV4SourcePattern[]>;
256
+ declare function expandTailwindV4SourceEntryBraces(sources: TailwindV4SourcePattern[]): TailwindV4SourcePattern[];
257
+ declare function normalizeTailwindV4ScannerSources(sources: TailwindV4SourcePattern[] | undefined, cwd: string, ignoredSources?: TailwindV4SourcePattern[]): SourceEntry[];
258
+ declare function resolveTailwindV4SourceBaseCandidates(projectRoot: string, base: string, baseFallbacks: string[]): string[];
259
+ //#endregion
260
+ //#region src/v4/source.d.ts
261
+ declare function resolveTailwindV4Source(options?: TailwindV4SourceOptions): Promise<TailwindV4ResolvedSource>;
262
+ //#endregion
263
+ //#region src/v4/style-generator.d.ts
264
+ declare function collectTailwindV4StyleCandidates(options: Pick<TailwindV4StyleGenerateOptions, 'bareArbitraryValues' | 'candidates' | 'sources'>): Promise<Set<string>>;
265
+ declare function generateTailwindV4Style(options?: TailwindV4StyleGenerateOptions): Promise<TailwindV4StyleGenerateResult>;
266
+ //#endregion
267
+ export { TailwindV4StyleGenerateOptions as $, createTailwindGenerationSession as A, SourceEntry$1 as B, isFileExcludedByTailwindV4SourceEntries as C, getTailwindV4DesignSystemCacheKey as D, compileTailwindV4Source as E, extractTailwindV4InlineSourceCandidates as F, TailwindV4CssSource as G, TailwindGenerationSession as H, CssFragment as I, TailwindV4GenerateOptions as J, TailwindV4DesignSystem as K, CssFragmentKind as L, canonicalizeBareArbitraryValueCandidates as M, replaceBareArbitraryValueSelectors as N, loadTailwindV4DesignSystem as O, resolveValidTailwindV4Candidates as P, TailwindV4SourcePattern as Q, GenerationChange as R, groupTailwindV4SourceEntriesByBase as S, mergeTailwindV4SourceEntries as T, TailwindV4CandidateSource as U, TailwindGenerationArtifact as V, TailwindV4CompiledSourceRoot as W, TailwindV4ResolvedSource as X, TailwindV4GenerateResult as Y, TailwindV4SourceOptions as Z, resolveTailwindV4SourceEntry as _, TAILWIND_V4_IGNORED_CONTENT_DIRS as a, isBareArbitraryValuesEnabled as at, createTailwindV4SourceExclusionMatcher as b, createTailwindV4CompiledSourceEntries as c, extractBareArbitraryValueSourceCandidatesWithPositions as ct, expandTailwindV4SourceEntryBraces as d, BareArbitraryValueSourceCandidate as dt, TailwindV4StyleGenerateResult as et, normalizeGlobPattern as f, escapeCssClassName as ft, resolveTailwindV4SourceBaseCandidates as g, resolveSourceScanPath as h, TAILWIND_V4_AUTO_SOURCE_SCAN_PATTERN as i, collectTailwindStyleCandidates as it, createTailwindV4Engine as j, loadTailwindV4NodeModule as k, createTailwindV4DefaultIgnoreSources as l, BareArbitraryValueOptions as lt, normalizeTailwindV4SourceEntries as m, generateTailwindV4Style as n, TailwindStyleCandidateOptions as nt, TAILWIND_V4_IGNORED_EXTENSIONS as o, resolveBareArbitraryValueCandidate as ot, normalizeTailwindV4ScannerSources as p, TailwindV4Engine as q, resolveTailwindV4Source as r, TailwindStyleSource as rt, TAILWIND_V4_IGNORED_FILES as s, extractBareArbitraryValueSourceCandidates as st, collectTailwindV4StyleCandidates as t, TailwindV4StyleSource as tt, createTailwindV4RootSources as u, BareArbitraryValueResolveResult as ut, toPosixPath as v, isFileMatchedByTailwindV4SourceEntries as w, expandTailwindV4SourceEntries as x, createTailwindV4SourceEntryMatcher as y, GenerationRequest as z };
@@ -0,0 +1,267 @@
1
+ import { Root } from "postcss";
2
+ import { SourceEntry } from "@tailwindcss/oxide";
3
+ //#region src/v4/bare-arbitrary-values/escape.d.ts
4
+ declare function escapeCssClassName(value: string): string;
5
+ //#endregion
6
+ //#region src/v4/bare-arbitrary-values/types.d.ts
7
+ interface BareArbitraryValueOptions {
8
+ /**
9
+ * 允许作为无方括号任意值的单位列表。
10
+ */
11
+ units?: string[];
12
+ }
13
+ interface BareArbitraryValueResolveResult {
14
+ candidate: string;
15
+ canonicalCandidate: string;
16
+ }
17
+ interface BareArbitraryValueSourceCandidate {
18
+ rawCandidate: string;
19
+ start: number;
20
+ end: number;
21
+ }
22
+ //#endregion
23
+ //#region src/v4/bare-arbitrary-values/extract.d.ts
24
+ declare function extractBareArbitraryValueSourceCandidatesWithPositions(content: string, options?: boolean | BareArbitraryValueOptions): BareArbitraryValueSourceCandidate[];
25
+ declare function extractBareArbitraryValueSourceCandidates(content: string, options?: boolean | BareArbitraryValueOptions): string[];
26
+ //#endregion
27
+ //#region src/v4/bare-arbitrary-values/resolve.d.ts
28
+ declare function isBareArbitraryValuesEnabled(options: boolean | BareArbitraryValueOptions | undefined): boolean;
29
+ declare function resolveBareArbitraryValueCandidate(candidate: string, options?: boolean | BareArbitraryValueOptions): BareArbitraryValueResolveResult | undefined;
30
+ //#endregion
31
+ //#region src/style-candidates.d.ts
32
+ interface TailwindStyleSource {
33
+ content: string;
34
+ extension?: string;
35
+ file?: string;
36
+ }
37
+ interface TailwindStyleCandidateOptions {
38
+ candidates?: Iterable<string>;
39
+ sources?: TailwindStyleSource[];
40
+ /**
41
+ * 启用 UnoCSS 风格的裸任意值,例如 `p-10%`、`p-2.5px`。
42
+ */
43
+ bareArbitraryValues?: boolean | BareArbitraryValueOptions;
44
+ }
45
+ declare function collectTailwindStyleCandidates(options?: TailwindStyleCandidateOptions): Promise<Set<string>>;
46
+ //#endregion
47
+ //#region src/v4/types.d.ts
48
+ interface TailwindV4SourceOptions {
49
+ projectRoot?: string;
50
+ cwd?: string;
51
+ base?: string;
52
+ baseFallbacks?: string[];
53
+ css?: string;
54
+ cssSources?: TailwindV4CssSource[];
55
+ cssEntries?: string[];
56
+ packageName?: string;
57
+ }
58
+ interface TailwindV4CssSource {
59
+ css: string;
60
+ base?: string;
61
+ file?: string;
62
+ dependencies?: string[];
63
+ }
64
+ interface TailwindV4ResolvedSource {
65
+ projectRoot: string;
66
+ base: string;
67
+ baseFallbacks: string[];
68
+ css: string;
69
+ dependencies: string[];
70
+ }
71
+ interface TailwindV4CandidateSource {
72
+ content: string;
73
+ extension?: string;
74
+ }
75
+ interface SourceEntry$1 extends TailwindV4CandidateSource {
76
+ id: string;
77
+ }
78
+ interface GenerationRequest {
79
+ candidates?: Iterable<string>;
80
+ sourceEntries?: SourceEntry$1[];
81
+ /**
82
+ * 启用 UnoCSS 风格的裸任意值,例如 `p-10%`、`p-2.5px`。
83
+ */
84
+ bareArbitraryValues?: TailwindV4GenerateOptions['bareArbitraryValues'];
85
+ }
86
+ type GenerationChange = {
87
+ type: 'all';
88
+ } | {
89
+ type: 'candidates';
90
+ } | {
91
+ type: 'sourceEntries';
92
+ } | {
93
+ type: 'dependencies';
94
+ paths?: Iterable<string>;
95
+ } | {
96
+ type: 'source';
97
+ source: TailwindV4ResolvedSource;
98
+ };
99
+ type CssFragmentKind = 'tailwind' | 'theme' | 'preflight';
100
+ interface CssFragment {
101
+ id: string;
102
+ kind: CssFragmentKind;
103
+ root: Root;
104
+ sourceId: string;
105
+ order: number;
106
+ }
107
+ interface TailwindGenerationArtifact {
108
+ fragments: CssFragment[];
109
+ classSet: Set<string>;
110
+ rawCandidates: Set<string>;
111
+ dependencies: string[];
112
+ sourceEntries: SourceEntry$1[];
113
+ }
114
+ interface TailwindGenerationSession {
115
+ readonly source: TailwindV4ResolvedSource;
116
+ generate: (request?: GenerationRequest) => Promise<TailwindGenerationArtifact>;
117
+ invalidate: (change: GenerationChange) => void;
118
+ dispose: () => void;
119
+ }
120
+ interface TailwindV4StyleSource extends TailwindStyleSource {}
121
+ interface TailwindV4GenerateOptions {
122
+ candidates?: Iterable<string>;
123
+ sources?: TailwindV4CandidateSource[];
124
+ /**
125
+ * 启用 UnoCSS 风格的裸任意值,例如 `p-10%`、`p-2.5px`。
126
+ */
127
+ bareArbitraryValues?: boolean | {
128
+ units?: string[];
129
+ };
130
+ /**
131
+ * 扫描文件系统 source entries 中的候选类名。
132
+ *
133
+ * - `true`:使用 Tailwind v4 编译入口解析出的 `@source` 列表。
134
+ * - `TailwindV4SourcePattern[]`:使用调用方显式传入的 source 列表。
135
+ */
136
+ scanSources?: boolean | TailwindV4SourcePattern[];
137
+ }
138
+ type TailwindV4CompiledSourceRoot = null | 'none' | {
139
+ base: string;
140
+ pattern: string;
141
+ };
142
+ interface TailwindV4SourcePattern {
143
+ base: string;
144
+ pattern: string;
145
+ negated: boolean;
146
+ }
147
+ interface TailwindV4GenerateResult {
148
+ css: string;
149
+ classSet: Set<string>;
150
+ rawCandidates: Set<string>;
151
+ dependencies: string[];
152
+ sources: TailwindV4SourcePattern[];
153
+ root: TailwindV4CompiledSourceRoot;
154
+ }
155
+ interface TailwindV4StyleGenerateOptions extends TailwindV4SourceOptions {
156
+ source?: TailwindV4ResolvedSource;
157
+ candidates?: Iterable<string>;
158
+ sources?: TailwindV4StyleSource[];
159
+ /**
160
+ * 启用 UnoCSS 风格的裸任意值,例如 `p-10%`、`p-2.5px`。
161
+ */
162
+ bareArbitraryValues?: TailwindV4GenerateOptions['bareArbitraryValues'];
163
+ /**
164
+ * 除内存来源外,还扫描 Tailwind CSS v4 编译后解析的来源入口。
165
+ */
166
+ scanSources?: TailwindV4GenerateOptions['scanSources'];
167
+ }
168
+ interface TailwindV4StyleGenerateResult extends TailwindV4GenerateResult {
169
+ tokens: Set<string>;
170
+ source: TailwindV4ResolvedSource;
171
+ }
172
+ interface TailwindV4DesignSystem {
173
+ parseCandidate: (candidate: string) => unknown[];
174
+ candidatesToCss: (candidates: string[]) => Array<string | null | undefined>;
175
+ }
176
+ interface TailwindV4Engine {
177
+ source: TailwindV4ResolvedSource;
178
+ loadDesignSystem: () => Promise<TailwindV4DesignSystem>;
179
+ validateCandidates: (candidates: Iterable<string>) => Promise<Set<string>>;
180
+ generate: (options?: TailwindV4GenerateOptions) => Promise<TailwindV4GenerateResult>;
181
+ }
182
+ //#endregion
183
+ //#region src/v4/candidates/inline-source.d.ts
184
+ declare function extractTailwindV4InlineSourceCandidates(css: string): {
185
+ included: Set<string>;
186
+ excluded: Set<string>;
187
+ };
188
+ //#endregion
189
+ //#region src/v4/candidates.d.ts
190
+ declare function resolveValidTailwindV4Candidates(designSystem: TailwindV4DesignSystem, candidates: Iterable<string>, options?: {
191
+ bareArbitraryValues?: boolean | BareArbitraryValueOptions;
192
+ }): Set<string>;
193
+ declare function replaceBareArbitraryValueSelectors(css: string, candidates: Iterable<string>, options?: boolean | BareArbitraryValueOptions): string;
194
+ declare function canonicalizeBareArbitraryValueCandidates(candidates: Iterable<string>, options?: boolean | BareArbitraryValueOptions): string[];
195
+ //#endregion
196
+ //#region src/v4/engine.d.ts
197
+ declare function createTailwindV4Engine(source: TailwindV4ResolvedSource): TailwindV4Engine;
198
+ //#endregion
199
+ //#region src/v4/generation-session.d.ts
200
+ declare function createTailwindGenerationSession(source: TailwindV4ResolvedSource): TailwindGenerationSession;
201
+ //#endregion
202
+ //#region src/v4/node-adapter.d.ts
203
+ interface TailwindV4CompiledSource {
204
+ sources: TailwindV4SourcePattern[];
205
+ root: TailwindV4CompiledSourceRoot;
206
+ build: (candidates: string[]) => string;
207
+ }
208
+ interface TailwindV4NodeModule {
209
+ compile: (css: string, options: {
210
+ base: string;
211
+ onDependency: (dependency: string) => void;
212
+ customCssResolver?: (id: string, base: string) => Promise<string | false | undefined>;
213
+ }) => Promise<TailwindV4CompiledSource>;
214
+ __unstable__loadDesignSystem: (css: string, options: {
215
+ base: string;
216
+ }) => Promise<TailwindV4DesignSystem>;
217
+ }
218
+ declare function loadTailwindV4NodeModule(baseCandidates: string[]): Promise<TailwindV4NodeModule>;
219
+ declare function getTailwindV4DesignSystemCacheKey(source: Pick<TailwindV4ResolvedSource, 'css' | 'base' | 'baseFallbacks'>): string;
220
+ declare function loadTailwindV4DesignSystem(source: TailwindV4ResolvedSource, options?: {
221
+ cache?: boolean;
222
+ }): Promise<TailwindV4DesignSystem>;
223
+ declare function compileTailwindV4Source(source: TailwindV4ResolvedSource): Promise<{
224
+ compiled: TailwindV4CompiledSource;
225
+ dependencies: Set<string>;
226
+ }>;
227
+ //#endregion
228
+ //#region src/v4/source-scan/matcher.d.ts
229
+ declare function isFileExcludedByTailwindV4SourceEntries(file: string, entries: TailwindV4SourcePattern[] | undefined): boolean;
230
+ declare function isFileMatchedByTailwindV4SourceEntries(file: string, entries: TailwindV4SourcePattern[] | undefined): boolean;
231
+ declare function createTailwindV4SourceEntryMatcher(entries: TailwindV4SourcePattern[] | undefined): ((file: string) => boolean) | undefined;
232
+ declare function createTailwindV4SourceExclusionMatcher(entries: TailwindV4SourcePattern[] | undefined): ((file: string) => boolean) | undefined;
233
+ declare function groupTailwindV4SourceEntriesByBase(entries: TailwindV4SourcePattern[]): Map<string, TailwindV4SourcePattern[]>;
234
+ declare function expandTailwindV4SourceEntries(entries: TailwindV4SourcePattern[], resolveFiles: (options: {
235
+ cwd: string;
236
+ sources: TailwindV4SourcePattern[];
237
+ }) => Promise<string[]>): Promise<string[]>;
238
+ declare function mergeTailwindV4SourceEntries(...entries: Array<TailwindV4SourcePattern[] | undefined>): TailwindV4SourcePattern[];
239
+ //#endregion
240
+ //#region src/v4/source-scan/sources.d.ts
241
+ declare const TAILWIND_V4_IGNORED_CONTENT_DIRS: string[];
242
+ declare const TAILWIND_V4_IGNORED_EXTENSIONS: string[];
243
+ declare const TAILWIND_V4_IGNORED_FILES: string[];
244
+ declare const TAILWIND_V4_AUTO_SOURCE_SCAN_PATTERN = "**/*";
245
+ declare function toPosixPath(value: string): string;
246
+ declare function resolveSourceScanPath(value: string): string;
247
+ declare function normalizeGlobPattern(pattern: string): string;
248
+ declare function createTailwindV4DefaultIgnoreSources(base: string): TailwindV4SourcePattern[];
249
+ declare function createTailwindV4RootSources(root: TailwindV4CompiledSourceRoot, fallbackBase: string): TailwindV4SourcePattern[];
250
+ declare function createTailwindV4CompiledSourceEntries(root: TailwindV4CompiledSourceRoot, sources: TailwindV4SourcePattern[], fallbackBase: string): TailwindV4SourcePattern[];
251
+ declare function resolveTailwindV4SourceEntry(sourcePath: string, base: string, negated: boolean, defaultPattern?: string): Promise<TailwindV4SourcePattern>;
252
+ declare function normalizeTailwindV4SourceEntries(sources: TailwindV4SourcePattern[], options?: {
253
+ cwd?: string;
254
+ defaultPattern?: string;
255
+ }): Promise<TailwindV4SourcePattern[]>;
256
+ declare function expandTailwindV4SourceEntryBraces(sources: TailwindV4SourcePattern[]): TailwindV4SourcePattern[];
257
+ declare function normalizeTailwindV4ScannerSources(sources: TailwindV4SourcePattern[] | undefined, cwd: string, ignoredSources?: TailwindV4SourcePattern[]): SourceEntry[];
258
+ declare function resolveTailwindV4SourceBaseCandidates(projectRoot: string, base: string, baseFallbacks: string[]): string[];
259
+ //#endregion
260
+ //#region src/v4/source.d.ts
261
+ declare function resolveTailwindV4Source(options?: TailwindV4SourceOptions): Promise<TailwindV4ResolvedSource>;
262
+ //#endregion
263
+ //#region src/v4/style-generator.d.ts
264
+ declare function collectTailwindV4StyleCandidates(options: Pick<TailwindV4StyleGenerateOptions, 'bareArbitraryValues' | 'candidates' | 'sources'>): Promise<Set<string>>;
265
+ declare function generateTailwindV4Style(options?: TailwindV4StyleGenerateOptions): Promise<TailwindV4StyleGenerateResult>;
266
+ //#endregion
267
+ export { TailwindV4StyleGenerateOptions as $, createTailwindGenerationSession as A, SourceEntry$1 as B, isFileExcludedByTailwindV4SourceEntries as C, getTailwindV4DesignSystemCacheKey as D, compileTailwindV4Source as E, extractTailwindV4InlineSourceCandidates as F, TailwindV4CssSource as G, TailwindGenerationSession as H, CssFragment as I, TailwindV4GenerateOptions as J, TailwindV4DesignSystem as K, CssFragmentKind as L, canonicalizeBareArbitraryValueCandidates as M, replaceBareArbitraryValueSelectors as N, loadTailwindV4DesignSystem as O, resolveValidTailwindV4Candidates as P, TailwindV4SourcePattern as Q, GenerationChange as R, groupTailwindV4SourceEntriesByBase as S, mergeTailwindV4SourceEntries as T, TailwindV4CandidateSource as U, TailwindGenerationArtifact as V, TailwindV4CompiledSourceRoot as W, TailwindV4ResolvedSource as X, TailwindV4GenerateResult as Y, TailwindV4SourceOptions as Z, resolveTailwindV4SourceEntry as _, TAILWIND_V4_IGNORED_CONTENT_DIRS as a, isBareArbitraryValuesEnabled as at, createTailwindV4SourceExclusionMatcher as b, createTailwindV4CompiledSourceEntries as c, extractBareArbitraryValueSourceCandidatesWithPositions as ct, expandTailwindV4SourceEntryBraces as d, BareArbitraryValueSourceCandidate as dt, TailwindV4StyleGenerateResult as et, normalizeGlobPattern as f, escapeCssClassName as ft, resolveTailwindV4SourceBaseCandidates as g, resolveSourceScanPath as h, TAILWIND_V4_AUTO_SOURCE_SCAN_PATTERN as i, collectTailwindStyleCandidates as it, createTailwindV4Engine as j, loadTailwindV4NodeModule as k, createTailwindV4DefaultIgnoreSources as l, BareArbitraryValueOptions as lt, normalizeTailwindV4SourceEntries as m, generateTailwindV4Style as n, TailwindStyleCandidateOptions as nt, TAILWIND_V4_IGNORED_EXTENSIONS as o, resolveBareArbitraryValueCandidate as ot, normalizeTailwindV4ScannerSources as p, TailwindV4Engine as q, resolveTailwindV4Source as r, TailwindStyleSource as rt, TAILWIND_V4_IGNORED_FILES as s, extractBareArbitraryValueSourceCandidates as st, collectTailwindV4StyleCandidates as t, TailwindV4StyleSource as tt, createTailwindV4RootSources as u, BareArbitraryValueResolveResult as ut, toPosixPath as v, isFileMatchedByTailwindV4SourceEntries as w, expandTailwindV4SourceEntries as x, createTailwindV4SourceEntryMatcher as y, GenerationRequest as z };