tailwindcss-patch 9.4.0 → 9.4.1

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.
@@ -14,7 +14,9 @@ let node_url = require("node:url");
14
14
  let node_fs = require("node:fs");
15
15
  let postcss = require("postcss");
16
16
  postcss = require_chunk.__toESM(postcss);
17
- require("micromatch");
17
+ let node_fs_promises = require("node:fs/promises");
18
+ let micromatch = require("micromatch");
19
+ micromatch = require_chunk.__toESM(micromatch);
18
20
  let _babel_types = require("@babel/types");
19
21
  _babel_types = require_chunk.__toESM(_babel_types);
20
22
  let _babel_generator = require("@babel/generator");
@@ -24,7 +26,7 @@ _babel_traverse = require_chunk.__toESM(_babel_traverse);
24
26
  let _babel_parser = require("@babel/parser");
25
27
  let tailwindcss_config = require("tailwindcss-config");
26
28
  //#region package.json
27
- var version = "9.4.0";
29
+ var version = "9.4.1";
28
30
  //#endregion
29
31
  //#region src/constants.ts
30
32
  const pkgName = "tailwindcss-patch";
@@ -2044,7 +2046,110 @@ async function compileTailwindV4Source(source) {
2044
2046
  }
2045
2047
  //#endregion
2046
2048
  //#region src/v4/source-scan.ts
2049
+ const TAILWIND_V4_IGNORED_CONTENT_DIRS = [
2050
+ ".git",
2051
+ ".hg",
2052
+ ".jj",
2053
+ ".next",
2054
+ ".parcel-cache",
2055
+ ".pnpm-store",
2056
+ ".svelte-kit",
2057
+ ".svn",
2058
+ ".turbo",
2059
+ ".venv",
2060
+ ".vercel",
2061
+ ".yarn",
2062
+ "__pycache__",
2063
+ "node_modules",
2064
+ "venv"
2065
+ ];
2066
+ const TAILWIND_V4_IGNORED_EXTENSIONS = [
2067
+ "less",
2068
+ "lock",
2069
+ "sass",
2070
+ "scss",
2071
+ "styl",
2072
+ "log"
2073
+ ];
2074
+ const TAILWIND_V4_IGNORED_FILES = [
2075
+ "package-lock.json",
2076
+ "pnpm-lock.yaml",
2077
+ "bun.lockb",
2078
+ ".gitignore",
2079
+ ".env",
2080
+ ".env.*"
2081
+ ];
2047
2082
  const TAILWIND_V4_AUTO_SOURCE_SCAN_PATTERN = "**/*";
2083
+ function uniqueResolvedPaths(values) {
2084
+ const result = [];
2085
+ for (const value of values) {
2086
+ if (!value) continue;
2087
+ const resolved = pathe.default.resolve(value);
2088
+ if (!result.includes(resolved)) result.push(resolved);
2089
+ }
2090
+ return result;
2091
+ }
2092
+ function toPosixPath(value) {
2093
+ return value.replaceAll(pathe.default.sep, "/");
2094
+ }
2095
+ function resolveSourceScanPath(value) {
2096
+ const resolved = pathe.default.resolve(value);
2097
+ try {
2098
+ return node_fs.realpathSync.native(resolved);
2099
+ } catch {
2100
+ return resolved;
2101
+ }
2102
+ }
2103
+ function normalizeGlobPattern(pattern) {
2104
+ return pattern.startsWith("./") ? pattern.slice(2) : pattern;
2105
+ }
2106
+ function hasGlobMagic(value) {
2107
+ return /[*?[\]{}()!+@]/.test(value);
2108
+ }
2109
+ function splitStaticGlobPrefix(pattern) {
2110
+ const segments = normalizeGlobPattern(pattern).split(/[\\/]+/);
2111
+ const prefix = [];
2112
+ const rest = [];
2113
+ let reachedGlob = false;
2114
+ for (const segment of segments) {
2115
+ if (!reachedGlob && segment && !hasGlobMagic(segment)) {
2116
+ prefix.push(segment);
2117
+ continue;
2118
+ }
2119
+ reachedGlob = true;
2120
+ rest.push(segment);
2121
+ }
2122
+ return {
2123
+ prefix,
2124
+ rest
2125
+ };
2126
+ }
2127
+ async function pathExistsAsDirectory(file) {
2128
+ try {
2129
+ return (await (0, node_fs_promises.stat)(file)).isDirectory();
2130
+ } catch {
2131
+ return false;
2132
+ }
2133
+ }
2134
+ function createTailwindV4DefaultIgnoreSources(base) {
2135
+ return [
2136
+ ...TAILWIND_V4_IGNORED_CONTENT_DIRS.map((pattern) => ({
2137
+ base,
2138
+ pattern: `**/${pattern}/**`,
2139
+ negated: true
2140
+ })),
2141
+ ...TAILWIND_V4_IGNORED_EXTENSIONS.map((extension) => ({
2142
+ base,
2143
+ pattern: `**/*.${extension}`,
2144
+ negated: true
2145
+ })),
2146
+ ...TAILWIND_V4_IGNORED_FILES.map((pattern) => ({
2147
+ base,
2148
+ pattern: `**/${pattern}`,
2149
+ negated: true
2150
+ }))
2151
+ ];
2152
+ }
2048
2153
  function createTailwindV4RootSources(root, fallbackBase) {
2049
2154
  if (root === "none") return [];
2050
2155
  if (root === null) return [{
@@ -2060,6 +2165,34 @@ function createTailwindV4RootSources(root, fallbackBase) {
2060
2165
  function createTailwindV4CompiledSourceEntries(root, sources, fallbackBase) {
2061
2166
  return [...createTailwindV4RootSources(root, fallbackBase), ...sources];
2062
2167
  }
2168
+ async function resolveTailwindV4SourceEntry(sourcePath, base, negated, defaultPattern = TAILWIND_V4_AUTO_SOURCE_SCAN_PATTERN) {
2169
+ const absoluteSource = pathe.default.isAbsolute(sourcePath) ? pathe.default.resolve(sourcePath) : pathe.default.resolve(base, sourcePath);
2170
+ if (await pathExistsAsDirectory(absoluteSource)) return {
2171
+ base: absoluteSource,
2172
+ negated,
2173
+ pattern: normalizeGlobPattern(defaultPattern)
2174
+ };
2175
+ if (pathe.default.isAbsolute(sourcePath)) return {
2176
+ base: pathe.default.dirname(absoluteSource),
2177
+ negated,
2178
+ pattern: normalizeGlobPattern(pathe.default.basename(absoluteSource))
2179
+ };
2180
+ const { prefix, rest } = splitStaticGlobPrefix(sourcePath);
2181
+ if (prefix.length > 0 && rest.length > 0) return {
2182
+ base: pathe.default.resolve(base, ...prefix),
2183
+ negated,
2184
+ pattern: normalizeGlobPattern(rest.join("/"))
2185
+ };
2186
+ return {
2187
+ base,
2188
+ negated,
2189
+ pattern: normalizeGlobPattern(sourcePath)
2190
+ };
2191
+ }
2192
+ async function normalizeTailwindV4SourceEntries(sources, options = {}) {
2193
+ const cwd = options.cwd ? pathe.default.resolve(options.cwd) : node_process.default.cwd();
2194
+ return Promise.all(sources.map((source) => resolveTailwindV4SourceEntry(source.pattern, source.base ? pathe.default.resolve(source.base) : cwd, source.negated, options.defaultPattern)));
2195
+ }
2063
2196
  function expandBracePattern(pattern) {
2064
2197
  const index = pattern.indexOf("{");
2065
2198
  if (index === -1) return [pattern];
@@ -2130,6 +2263,84 @@ function normalizeTailwindV4ScannerSources(sources, cwd, ignoredSources = []) {
2130
2263
  negated: false
2131
2264
  }], ...ignoredSources]);
2132
2265
  }
2266
+ function normalizeEntryPattern(entry) {
2267
+ return pathe.default.isAbsolute(entry.pattern) ? toPosixPath(pathe.default.relative(resolveSourceScanPath(entry.base), entry.pattern)) : normalizeGlobPattern(entry.pattern);
2268
+ }
2269
+ function isFileMatchedByTailwindV4SourceEntry(file, entry) {
2270
+ const relative = toPosixPath(pathe.default.relative(resolveSourceScanPath(entry.base), file));
2271
+ return Boolean(relative) && !relative.startsWith("../") && !pathe.default.isAbsolute(relative) && micromatch.default.isMatch(relative, normalizeEntryPattern(entry));
2272
+ }
2273
+ function isFileExcludedByTailwindV4SourceEntries(file, entries) {
2274
+ if (!entries?.length) return false;
2275
+ const resolvedFile = resolveSourceScanPath(file);
2276
+ return entries.some((entry) => entry.negated && isFileMatchedByTailwindV4SourceEntry(resolvedFile, entry));
2277
+ }
2278
+ function isFileMatchedByTailwindV4SourceEntries(file, entries) {
2279
+ if (!entries?.length) return true;
2280
+ const positiveEntries = entries.filter((entry) => !entry.negated);
2281
+ const negativeEntries = entries.filter((entry) => entry.negated);
2282
+ if (positiveEntries.length === 0) return false;
2283
+ const resolvedFile = resolveSourceScanPath(file);
2284
+ if (!positiveEntries.some((entry) => isFileMatchedByTailwindV4SourceEntry(resolvedFile, entry))) return false;
2285
+ return !negativeEntries.some((entry) => isFileMatchedByTailwindV4SourceEntry(resolvedFile, entry));
2286
+ }
2287
+ function createTailwindV4SourceEntryMatcher(entries) {
2288
+ if (!entries?.length) return;
2289
+ return (file) => isFileMatchedByTailwindV4SourceEntries(file, entries);
2290
+ }
2291
+ function createTailwindV4SourceExclusionMatcher(entries) {
2292
+ if (!entries?.length) return;
2293
+ return (file) => isFileExcludedByTailwindV4SourceEntries(file, entries);
2294
+ }
2295
+ function groupTailwindV4SourceEntriesByBase(entries) {
2296
+ const entriesByBase = /* @__PURE__ */ new Map();
2297
+ for (const entry of entries) {
2298
+ const base = pathe.default.resolve(entry.base);
2299
+ const group = entriesByBase.get(base) ?? [];
2300
+ group.push({
2301
+ ...entry,
2302
+ base,
2303
+ pattern: normalizeGlobPattern(entry.pattern)
2304
+ });
2305
+ entriesByBase.set(base, group);
2306
+ }
2307
+ return entriesByBase;
2308
+ }
2309
+ async function expandTailwindV4SourceEntries(entries, resolveFiles) {
2310
+ if (entries.length === 0) return [];
2311
+ const files = /* @__PURE__ */ new Set();
2312
+ await Promise.all([...groupTailwindV4SourceEntriesByBase(entries).entries()].map(async ([base, group]) => {
2313
+ const matched = await resolveFiles({
2314
+ cwd: base,
2315
+ sources: group
2316
+ });
2317
+ for (const file of matched) files.add(pathe.default.resolve(file));
2318
+ }));
2319
+ return [...files].filter((file) => !isFileExcludedByTailwindV4SourceEntries(file, entries));
2320
+ }
2321
+ function mergeTailwindV4SourceEntries(...entries) {
2322
+ const result = [];
2323
+ const seen = /* @__PURE__ */ new Set();
2324
+ for (const group of entries) for (const entry of group ?? []) {
2325
+ const normalized = {
2326
+ base: pathe.default.resolve(entry.base),
2327
+ pattern: normalizeGlobPattern(entry.pattern),
2328
+ negated: entry.negated
2329
+ };
2330
+ const key = JSON.stringify(normalized);
2331
+ if (seen.has(key)) continue;
2332
+ seen.add(key);
2333
+ result.push(normalized);
2334
+ }
2335
+ return result;
2336
+ }
2337
+ function resolveTailwindV4SourceBaseCandidates(projectRoot, base, baseFallbacks) {
2338
+ return uniqueResolvedPaths([
2339
+ base,
2340
+ projectRoot,
2341
+ ...baseFallbacks
2342
+ ]);
2343
+ }
2133
2344
  //#endregion
2134
2345
  //#region src/extraction/candidate-extractor.ts
2135
2346
  let oxideImportPromise;
@@ -3602,6 +3813,78 @@ var TailwindcssPatcher = class {
3602
3813
  }
3603
3814
  };
3604
3815
  //#endregion
3816
+ //#region src/commands/types.ts
3817
+ const tailwindcssPatchCommands = [
3818
+ "install",
3819
+ "extract",
3820
+ "tokens",
3821
+ "init",
3822
+ "migrate",
3823
+ "restore",
3824
+ "validate",
3825
+ "status"
3826
+ ];
3827
+ //#endregion
3828
+ //#region src/commands/validate.ts
3829
+ const VALIDATE_EXIT_CODES = {
3830
+ OK: 0,
3831
+ REPORT_INCOMPATIBLE: 21,
3832
+ MISSING_BACKUPS: 22,
3833
+ IO_ERROR: 23,
3834
+ UNKNOWN_ERROR: 24
3835
+ };
3836
+ const VALIDATE_FAILURE_REASONS = [
3837
+ "report-incompatible",
3838
+ "missing-backups",
3839
+ "io-error",
3840
+ "unknown-error"
3841
+ ];
3842
+ const IO_ERROR_CODES = new Set([
3843
+ "ENOENT",
3844
+ "EACCES",
3845
+ "EPERM",
3846
+ "EISDIR",
3847
+ "ENOTDIR",
3848
+ "EMFILE",
3849
+ "ENFILE"
3850
+ ]);
3851
+ function isNodeError(error) {
3852
+ return !!error && typeof error === "object" && ("code" in error || "message" in error);
3853
+ }
3854
+ function classifyValidateError(error) {
3855
+ const message = error instanceof Error ? error.message : String(error);
3856
+ if (message.startsWith("Unsupported report kind") || message.startsWith("Unsupported report schema version")) return {
3857
+ reason: "report-incompatible",
3858
+ exitCode: VALIDATE_EXIT_CODES.REPORT_INCOMPATIBLE,
3859
+ message
3860
+ };
3861
+ if (message.startsWith("Restore failed:")) return {
3862
+ reason: "missing-backups",
3863
+ exitCode: VALIDATE_EXIT_CODES.MISSING_BACKUPS,
3864
+ message
3865
+ };
3866
+ if (isNodeError(error) && typeof error.code === "string" && IO_ERROR_CODES.has(error.code)) return {
3867
+ reason: "io-error",
3868
+ exitCode: VALIDATE_EXIT_CODES.IO_ERROR,
3869
+ message
3870
+ };
3871
+ return {
3872
+ reason: "unknown-error",
3873
+ exitCode: VALIDATE_EXIT_CODES.UNKNOWN_ERROR,
3874
+ message
3875
+ };
3876
+ }
3877
+ var ValidateCommandError = class extends Error {
3878
+ reason;
3879
+ exitCode;
3880
+ constructor(summary, options) {
3881
+ super(summary.message, options);
3882
+ this.name = "ValidateCommandError";
3883
+ this.reason = summary.reason;
3884
+ this.exitCode = summary.exitCode;
3885
+ }
3886
+ };
3887
+ //#endregion
3605
3888
  //#region src/commands/migration-report.ts
3606
3889
  const MIGRATION_REPORT_KIND = "tw-patch-migrate-report";
3607
3890
  const MIGRATION_REPORT_SCHEMA_VERSION = 1;
@@ -4148,78 +4431,6 @@ async function restoreConfigFiles(options) {
4148
4431
  };
4149
4432
  }
4150
4433
  //#endregion
4151
- //#region src/commands/types.ts
4152
- const tailwindcssPatchCommands = [
4153
- "install",
4154
- "extract",
4155
- "tokens",
4156
- "init",
4157
- "migrate",
4158
- "restore",
4159
- "validate",
4160
- "status"
4161
- ];
4162
- //#endregion
4163
- //#region src/commands/validate.ts
4164
- const VALIDATE_EXIT_CODES = {
4165
- OK: 0,
4166
- REPORT_INCOMPATIBLE: 21,
4167
- MISSING_BACKUPS: 22,
4168
- IO_ERROR: 23,
4169
- UNKNOWN_ERROR: 24
4170
- };
4171
- const VALIDATE_FAILURE_REASONS = [
4172
- "report-incompatible",
4173
- "missing-backups",
4174
- "io-error",
4175
- "unknown-error"
4176
- ];
4177
- const IO_ERROR_CODES = new Set([
4178
- "ENOENT",
4179
- "EACCES",
4180
- "EPERM",
4181
- "EISDIR",
4182
- "ENOTDIR",
4183
- "EMFILE",
4184
- "ENFILE"
4185
- ]);
4186
- function isNodeError(error) {
4187
- return !!error && typeof error === "object" && ("code" in error || "message" in error);
4188
- }
4189
- function classifyValidateError(error) {
4190
- const message = error instanceof Error ? error.message : String(error);
4191
- if (message.startsWith("Unsupported report kind") || message.startsWith("Unsupported report schema version")) return {
4192
- reason: "report-incompatible",
4193
- exitCode: VALIDATE_EXIT_CODES.REPORT_INCOMPATIBLE,
4194
- message
4195
- };
4196
- if (message.startsWith("Restore failed:")) return {
4197
- reason: "missing-backups",
4198
- exitCode: VALIDATE_EXIT_CODES.MISSING_BACKUPS,
4199
- message
4200
- };
4201
- if (isNodeError(error) && typeof error.code === "string" && IO_ERROR_CODES.has(error.code)) return {
4202
- reason: "io-error",
4203
- exitCode: VALIDATE_EXIT_CODES.IO_ERROR,
4204
- message
4205
- };
4206
- return {
4207
- reason: "unknown-error",
4208
- exitCode: VALIDATE_EXIT_CODES.UNKNOWN_ERROR,
4209
- message
4210
- };
4211
- }
4212
- var ValidateCommandError = class extends Error {
4213
- reason;
4214
- exitCode;
4215
- constructor(summary, options) {
4216
- super(summary.message, options);
4217
- this.name = "ValidateCommandError";
4218
- this.reason = summary.reason;
4219
- this.exitCode = summary.exitCode;
4220
- }
4221
- };
4222
- //#endregion
4223
4434
  Object.defineProperty(exports, "CacheStore", {
4224
4435
  enumerable: true,
4225
4436
  get: function() {
@@ -4238,6 +4449,30 @@ Object.defineProperty(exports, "MIGRATION_REPORT_SCHEMA_VERSION", {
4238
4449
  return MIGRATION_REPORT_SCHEMA_VERSION;
4239
4450
  }
4240
4451
  });
4452
+ Object.defineProperty(exports, "TAILWIND_V4_AUTO_SOURCE_SCAN_PATTERN", {
4453
+ enumerable: true,
4454
+ get: function() {
4455
+ return TAILWIND_V4_AUTO_SOURCE_SCAN_PATTERN;
4456
+ }
4457
+ });
4458
+ Object.defineProperty(exports, "TAILWIND_V4_IGNORED_CONTENT_DIRS", {
4459
+ enumerable: true,
4460
+ get: function() {
4461
+ return TAILWIND_V4_IGNORED_CONTENT_DIRS;
4462
+ }
4463
+ });
4464
+ Object.defineProperty(exports, "TAILWIND_V4_IGNORED_EXTENSIONS", {
4465
+ enumerable: true,
4466
+ get: function() {
4467
+ return TAILWIND_V4_IGNORED_EXTENSIONS;
4468
+ }
4469
+ });
4470
+ Object.defineProperty(exports, "TAILWIND_V4_IGNORED_FILES", {
4471
+ enumerable: true,
4472
+ get: function() {
4473
+ return TAILWIND_V4_IGNORED_FILES;
4474
+ }
4475
+ });
4241
4476
  Object.defineProperty(exports, "TailwindcssPatcher", {
4242
4477
  enumerable: true,
4243
4478
  get: function() {
@@ -4298,6 +4533,42 @@ Object.defineProperty(exports, "createTailwindV4CompiledSourceEntries", {
4298
4533
  return createTailwindV4CompiledSourceEntries;
4299
4534
  }
4300
4535
  });
4536
+ Object.defineProperty(exports, "createTailwindV4DefaultIgnoreSources", {
4537
+ enumerable: true,
4538
+ get: function() {
4539
+ return createTailwindV4DefaultIgnoreSources;
4540
+ }
4541
+ });
4542
+ Object.defineProperty(exports, "createTailwindV4RootSources", {
4543
+ enumerable: true,
4544
+ get: function() {
4545
+ return createTailwindV4RootSources;
4546
+ }
4547
+ });
4548
+ Object.defineProperty(exports, "createTailwindV4SourceEntryMatcher", {
4549
+ enumerable: true,
4550
+ get: function() {
4551
+ return createTailwindV4SourceEntryMatcher;
4552
+ }
4553
+ });
4554
+ Object.defineProperty(exports, "createTailwindV4SourceExclusionMatcher", {
4555
+ enumerable: true,
4556
+ get: function() {
4557
+ return createTailwindV4SourceExclusionMatcher;
4558
+ }
4559
+ });
4560
+ Object.defineProperty(exports, "expandTailwindV4SourceEntries", {
4561
+ enumerable: true,
4562
+ get: function() {
4563
+ return expandTailwindV4SourceEntries;
4564
+ }
4565
+ });
4566
+ Object.defineProperty(exports, "expandTailwindV4SourceEntryBraces", {
4567
+ enumerable: true,
4568
+ get: function() {
4569
+ return expandTailwindV4SourceEntryBraces;
4570
+ }
4571
+ });
4301
4572
  Object.defineProperty(exports, "extractProjectCandidatesWithPositions", {
4302
4573
  enumerable: true,
4303
4574
  get: function() {
@@ -4352,6 +4623,18 @@ Object.defineProperty(exports, "groupTokensByFile", {
4352
4623
  return groupTokensByFile;
4353
4624
  }
4354
4625
  });
4626
+ Object.defineProperty(exports, "isFileExcludedByTailwindV4SourceEntries", {
4627
+ enumerable: true,
4628
+ get: function() {
4629
+ return isFileExcludedByTailwindV4SourceEntries;
4630
+ }
4631
+ });
4632
+ Object.defineProperty(exports, "isFileMatchedByTailwindV4SourceEntries", {
4633
+ enumerable: true,
4634
+ get: function() {
4635
+ return isFileMatchedByTailwindV4SourceEntries;
4636
+ }
4637
+ });
4355
4638
  Object.defineProperty(exports, "loadPatchOptionsForWorkspace", {
4356
4639
  enumerable: true,
4357
4640
  get: function() {
@@ -4382,6 +4665,12 @@ Object.defineProperty(exports, "logger", {
4382
4665
  return logger;
4383
4666
  }
4384
4667
  });
4668
+ Object.defineProperty(exports, "mergeTailwindV4SourceEntries", {
4669
+ enumerable: true,
4670
+ get: function() {
4671
+ return mergeTailwindV4SourceEntries;
4672
+ }
4673
+ });
4385
4674
  Object.defineProperty(exports, "migrateConfigFiles", {
4386
4675
  enumerable: true,
4387
4676
  get: function() {
@@ -4394,6 +4683,18 @@ Object.defineProperty(exports, "normalizeOptions", {
4394
4683
  return normalizeOptions;
4395
4684
  }
4396
4685
  });
4686
+ Object.defineProperty(exports, "normalizeTailwindV4ScannerSources", {
4687
+ enumerable: true,
4688
+ get: function() {
4689
+ return normalizeTailwindV4ScannerSources;
4690
+ }
4691
+ });
4692
+ Object.defineProperty(exports, "normalizeTailwindV4SourceEntries", {
4693
+ enumerable: true,
4694
+ get: function() {
4695
+ return normalizeTailwindV4SourceEntries;
4696
+ }
4697
+ });
4397
4698
  Object.defineProperty(exports, "replaceBareArbitraryValueSelectors", {
4398
4699
  enumerable: true,
4399
4700
  get: function() {
@@ -4406,6 +4707,24 @@ Object.defineProperty(exports, "resolveProjectSourceFiles", {
4406
4707
  return resolveProjectSourceFiles;
4407
4708
  }
4408
4709
  });
4710
+ Object.defineProperty(exports, "resolveSourceScanPath", {
4711
+ enumerable: true,
4712
+ get: function() {
4713
+ return resolveSourceScanPath;
4714
+ }
4715
+ });
4716
+ Object.defineProperty(exports, "resolveTailwindV4SourceBaseCandidates", {
4717
+ enumerable: true,
4718
+ get: function() {
4719
+ return resolveTailwindV4SourceBaseCandidates;
4720
+ }
4721
+ });
4722
+ Object.defineProperty(exports, "resolveTailwindV4SourceEntry", {
4723
+ enumerable: true,
4724
+ get: function() {
4725
+ return resolveTailwindV4SourceEntry;
4726
+ }
4727
+ });
4409
4728
  Object.defineProperty(exports, "resolveValidTailwindV4Candidates", {
4410
4729
  enumerable: true,
4411
4730
  get: function() {