weapp-tailwindcss 5.0.0-next.22 → 5.0.0-next.23

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.
Files changed (42) hide show
  1. package/dist/{bundle-state-BnV8o2Yn.js → bundle-state-BxWD-X7F.js} +1 -1
  2. package/dist/{bundle-state-CLnuf2CW.mjs → bundle-state-CCjtHdeS.mjs} +1 -1
  3. package/dist/core.js +1 -1
  4. package/dist/core.mjs +1 -1
  5. package/dist/{defaults-B1igPF_e.mjs → defaults-C6sIKXgC.mjs} +1 -1
  6. package/dist/{defaults-IHhYxNeU.js → defaults-D3cFX6Cq.js} +1 -1
  7. package/dist/defaults.js +1 -1
  8. package/dist/defaults.mjs +1 -1
  9. package/dist/{generator-DPX8vA2P.mjs → generator-BP_VdS_x.mjs} +1 -1
  10. package/dist/{generator-CV_APjnB.js → generator-D6gEmxIp.js} +1 -1
  11. package/dist/generator.js +2 -2
  12. package/dist/generator.mjs +2 -2
  13. package/dist/gulp.js +5 -5
  14. package/dist/gulp.mjs +5 -5
  15. package/dist/{incremental-runtime-class-set-C6akmwlk.js → incremental-runtime-class-set-CdcqejGM.js} +20 -11
  16. package/dist/{incremental-runtime-class-set-Cwpw6aZK.mjs → incremental-runtime-class-set-DEf-VOwB.mjs} +20 -11
  17. package/dist/index.js +4 -4
  18. package/dist/index.mjs +4 -4
  19. package/dist/{postcss-Csaggbm7.js → postcss-D8kdiqHg.js} +2 -2
  20. package/dist/{postcss-ioX7S9x5.mjs → postcss-KBUSjpTr.mjs} +2 -2
  21. package/dist/postcss.js +1 -1
  22. package/dist/postcss.mjs +1 -1
  23. package/dist/{precheck-D1O5AWzy.mjs → precheck-DT3ydSET.mjs} +3 -3
  24. package/dist/{precheck-8pQbjqpq.js → precheck-DrBpp5HA.js} +3 -3
  25. package/dist/presets.js +2 -2
  26. package/dist/presets.mjs +2 -2
  27. package/dist/{source-candidates-CUTNdsiz.js → source-candidates-CHJBRaDA.js} +81 -10
  28. package/dist/{source-candidates-CnD4vyic.mjs → source-candidates-CvmmNj4x.mjs} +81 -10
  29. package/dist/{tailwindcss-whZE3HpL.js → tailwindcss-CxAd28dW.js} +1 -1
  30. package/dist/{tailwindcss-B_JAdOQf.mjs → tailwindcss-eov9DmH3.mjs} +1 -1
  31. package/dist/{v3-engine-CCwvhRrQ.js → v3-engine-CxCp7Ydh.js} +97 -13
  32. package/dist/{v3-engine-DyIcbpZm.mjs → v3-engine-CzD7OvXg.mjs} +97 -13
  33. package/dist/{vite-BcXuBYy3.mjs → vite-DyQrAtpx.mjs} +34 -14
  34. package/dist/{vite-k4Nlk42j.js → vite-xq8oINaq.js} +34 -14
  35. package/dist/vite.js +1 -1
  36. package/dist/vite.mjs +1 -1
  37. package/dist/weapp-tw-css-import-rewrite-loader.js +112 -19
  38. package/dist/{webpack-C4pViZ7V.mjs → webpack-CZIJ7caJ.mjs} +5 -5
  39. package/dist/{webpack-DC7v6ylA.js → webpack-bTvAcuj4.js} +5 -5
  40. package/dist/webpack.js +1 -1
  41. package/dist/webpack.mjs +1 -1
  42. package/package.json +4 -4
@@ -1,12 +1,12 @@
1
1
  const require_chunk = require("./chunk-8l464Juk.js");
2
- const require_v3_engine = require("./v3-engine-CCwvhRrQ.js");
3
- const require_generator = require("./generator-CV_APjnB.js");
4
- const require_incremental_runtime_class_set = require("./incremental-runtime-class-set-C6akmwlk.js");
5
- const require_precheck = require("./precheck-8pQbjqpq.js");
2
+ const require_v3_engine = require("./v3-engine-CxCp7Ydh.js");
3
+ const require_generator = require("./generator-D6gEmxIp.js");
4
+ const require_incremental_runtime_class_set = require("./incremental-runtime-class-set-CdcqejGM.js");
5
+ const require_precheck = require("./precheck-DrBpp5HA.js");
6
6
  const require_utils = require("./utils-4ODFyoqD.js");
7
- const require_tailwindcss = require("./tailwindcss-whZE3HpL.js");
8
- const require_source_candidates = require("./source-candidates-CUTNdsiz.js");
9
- const require_bundle_state = require("./bundle-state-BnV8o2Yn.js");
7
+ const require_tailwindcss = require("./tailwindcss-CxAd28dW.js");
8
+ const require_source_candidates = require("./source-candidates-CHJBRaDA.js");
9
+ const require_bundle_state = require("./bundle-state-BxWD-X7F.js");
10
10
  require("./logger-EVNB9z7i.js");
11
11
  let node_fs = require("node:fs");
12
12
  node_fs = require_chunk.__toESM(node_fs);
@@ -568,7 +568,7 @@ function createCssHandlerOptions(opts, majorVersion, file) {
568
568
  }
569
569
  function shouldGenerateCssByGenerator(opts, file, rawSource, processed) {
570
570
  const generatorOptions = require_generator.normalizeWeappTailwindcssGeneratorOptions(opts.generator);
571
- if (generatorOptions.target === "web") return false;
571
+ if (generatorOptions.target === "web" && opts.twPatcher.majorVersion !== 3) return false;
572
572
  if (require_incremental_runtime_class_set.hasTailwindGeneratedCssMarkers(rawSource) || require_incremental_runtime_class_set.hasTailwindSourceDirectives(rawSource, { importFallback: generatorOptions.importFallback })) return true;
573
573
  if (opts.twPatcher.majorVersion === 3) return false;
574
574
  return processed && shouldFinalizeProcessedCssAsset(opts, file);
@@ -644,7 +644,7 @@ function createViteCssFinalizerOutputPlugin(context) {
644
644
  styleHandler: opts.styleHandler,
645
645
  debug
646
646
  }) : void 0;
647
- const nextCss = generated?.css ?? (await opts.styleHandler(rawSource, cssHandlerOptions)).css;
647
+ const nextCss = generated?.css ?? (generatorOptions.target === "web" ? rawSource : (await opts.styleHandler(rawSource, cssHandlerOptions)).css);
648
648
  if (generated) {
649
649
  registerGeneratorDependencies$1(this, generated.dependencies);
650
650
  debug("css finalizer generated result: %s bytes=%d", file, nextCss.length);
@@ -1000,6 +1000,7 @@ function createGenerateBundleHook(context) {
1000
1000
  const { cache, onEnd, onStart, onUpdate, styleHandler, templateHandler, jsHandler, uniAppX } = opts;
1001
1001
  const generatorOptions = require_generator.normalizeWeappTailwindcssGeneratorOptions(opts.generator);
1002
1002
  const isWebGeneratorTarget = generatorOptions.target === "web";
1003
+ const shouldGenerateWebCssByGenerator = isWebGeneratorTarget && runtimeState.twPatcher.majorVersion === 3;
1003
1004
  const { getCssHandlerOptions, getCssUserHandlerOptions } = cssHandlerOptions;
1004
1005
  await runtimeState.readyPromise;
1005
1006
  debug("start");
@@ -1041,7 +1042,7 @@ function createGenerateBundleHook(context) {
1041
1042
  const snapshotStart = performance.now();
1042
1043
  const snapshot = require_bundle_state.buildBundleSnapshot(bundle, opts, outDir, state, disableDirtyOptimization || !useIncrementalMode);
1043
1044
  recordTimingDetail("snapshot", snapshotStart);
1044
- const useBundleRuntimeClassSet = useIncrementalMode || runtimeState.twPatcher.majorVersion === 4;
1045
+ const useBundleRuntimeClassSet = !isWebGeneratorTarget && (useIncrementalMode || runtimeState.twPatcher.majorVersion === 4);
1045
1046
  const forceRuntimeRefreshBySource = useIncrementalMode && hasRuntimeAffectingSourceChanges(snapshot.runtimeAffectingChangedByType);
1046
1047
  const processFiles = snapshot.processFiles;
1047
1048
  logBundleProcessPlan({
@@ -1061,7 +1062,7 @@ function createGenerateBundleHook(context) {
1061
1062
  const hasRuntimeAffectingChanges = hasRuntimeAffectingSourceChanges(snapshot.runtimeAffectingChangedByType);
1062
1063
  const useV3OxideSourceRuntime = runtimeState.twPatcher.majorVersion === 3 && sourceCandidates.size > 0 && hasCssAssetEntry && !forceRuntimeRefreshByEnv && !disableV3OxideSourceRuntime;
1063
1064
  const runtimeStart = performance.now();
1064
- const runtime = useV3OxideSourceRuntime ? await ensureBundleRuntimeClassSet(snapshot, forceRuntimeRefreshByEnv, {
1065
+ const runtime = isWebGeneratorTarget && !shouldGenerateWebCssByGenerator ? /* @__PURE__ */ new Set() : useV3OxideSourceRuntime ? await ensureBundleRuntimeClassSet(snapshot, forceRuntimeRefreshByEnv, {
1065
1066
  allowBaselineOnlyInitialSync: true,
1066
1067
  baseClassSet: sourceCandidates
1067
1068
  }) : useBundleRuntimeClassSet ? await ensureBundleRuntimeClassSet(snapshot, forceRuntimeRefreshByEnv, { allowBaselineOnlyInitialSync: buildCommand }) : await context.ensureRuntimeClassSet(forceRuntimeRefreshByEnv);
@@ -1122,6 +1123,10 @@ function createGenerateBundleHook(context) {
1122
1123
  const { file, output: originalSource, source: originalEntrySource, type } = entry;
1123
1124
  if (type === "html" && originalSource.type === "asset") {
1124
1125
  metrics.html.total++;
1126
+ if (isWebGeneratorTarget) {
1127
+ debug("html skip web target: %s", file);
1128
+ continue;
1129
+ }
1125
1130
  if (!processFiles.html.has(file)) continue;
1126
1131
  const rawSource = originalEntrySource;
1127
1132
  tasks.push(timeTask("html", () => require_incremental_runtime_class_set.processCachedTask({
@@ -1186,7 +1191,7 @@ function createGenerateBundleHook(context) {
1186
1191
  debug("css skip vite-processed asset: %s", outputFile);
1187
1192
  continue;
1188
1193
  }
1189
- if (isWebGeneratorTarget) {
1194
+ if (isWebGeneratorTarget && !shouldGenerateWebCssByGenerator) {
1190
1195
  applyCssResult(rawSource);
1191
1196
  markCssAssetProcessed?.(originalSource, outputFile);
1192
1197
  onUpdate(outputFile, rawSource, rawSource);
@@ -1263,6 +1268,12 @@ function createGenerateBundleHook(context) {
1263
1268
  debug("css handle via tailwind v%s engine(%s): %s", runtimeState.twPatcher.majorVersion, generated.target, outputFile);
1264
1269
  return generated.css;
1265
1270
  }
1271
+ if (isWebGeneratorTarget) {
1272
+ metrics.css.elapsed += measureElapsed(start);
1273
+ metrics.css.transformed++;
1274
+ debug("css preserve web target: %s", outputFile);
1275
+ return rawSource;
1276
+ }
1266
1277
  const { css } = await styleHandler(rawSource, getCssHandlerOptions(file));
1267
1278
  if (debugCssDiff) debug("css diff %s: %s", file, summarizeStringDiff(rawSource, css));
1268
1279
  metrics.css.elapsed += measureElapsed(start);
@@ -1281,6 +1292,10 @@ function createGenerateBundleHook(context) {
1281
1292
  }
1282
1293
  if (type !== "js") continue;
1283
1294
  metrics.js.total++;
1295
+ if (isWebGeneratorTarget) {
1296
+ debug("js skip web target: %s", file);
1297
+ continue;
1298
+ }
1284
1299
  const shouldTransformJs = !useIncrementalMode || processFiles.js.has(file);
1285
1300
  if (!shouldTransformJs) debug("js skip transform (clean), replay cache: %s", file);
1286
1301
  if (originalSource.type === "chunk") {
@@ -1630,13 +1645,14 @@ function stripTailwindConfigDirectives(code) {
1630
1645
  return code.replace(/^\s*@config\s+(?:"[^"]+"|'[^']+')[^;\n]*;\s*$/gm, "");
1631
1646
  }
1632
1647
  function createRewriteCssImportsPlugins(options) {
1633
- if (!options.shouldRewrite) return [];
1648
+ if (!options.shouldRewrite && !options.shouldOwnTailwindGeneration) return [];
1634
1649
  const { appType, getAppType, rootImport, shouldOwnTailwindGeneration, weappTailwindcssDirPosix } = options;
1635
1650
  const resolveAppType = () => getAppType?.() ?? appType;
1636
1651
  return [{
1637
1652
  name: `${require_precheck.vitePluginName}:rewrite-css-imports`,
1638
1653
  enforce: "pre",
1639
1654
  resolveId(id, importer) {
1655
+ if (!options.shouldRewrite) return null;
1640
1656
  const replacement = resolveTailwindcssImport(id, weappTailwindcssDirPosix, {
1641
1657
  join: joinPosixPath,
1642
1658
  appType: resolveAppType(),
@@ -1658,6 +1674,7 @@ function createRewriteCssImportsPlugins(options) {
1658
1674
  };
1659
1675
  }
1660
1676
  }
1677
+ if (!options.shouldRewrite) return null;
1661
1678
  const rewritten = rewriteTailwindcssImportsInCode(code, weappTailwindcssDirPosix, {
1662
1679
  join: joinPosixPath,
1663
1680
  appType: resolveAppType(),
@@ -1867,7 +1884,9 @@ function WeappTailwindcss(options = {}) {
1867
1884
  const tailwindcssMajorVersion = initialTwPatcher.majorVersion ?? 0;
1868
1885
  const shouldOwnTailwindGeneration = !disabledOptions.plugin;
1869
1886
  const shouldRewriteCssImports = tailwindcssMajorVersion >= 4;
1870
- const shouldInferAppType = !hasExplicitAppType && opts.generator?.target !== "web";
1887
+ const generatorOptions = require_generator.normalizeWeappTailwindcssGeneratorOptions(opts.generator);
1888
+ const isWebGeneratorTarget = generatorOptions.target === "web";
1889
+ const shouldInferAppType = !hasExplicitAppType && generatorOptions.target !== "web";
1871
1890
  const hasInitialTailwindCssRoots = require_tailwindcss.hasConfiguredTailwindV4CssRoots({
1872
1891
  ...options,
1873
1892
  cssEntries: opts.cssEntries ?? options.cssEntries
@@ -2222,6 +2241,7 @@ function WeappTailwindcss(options = {}) {
2222
2241
  });
2223
2242
  const isIosPlatform = require_utils.resolveUniUtsPlatform().isAppIos;
2224
2243
  const prepareTailwindGeneration = async () => {
2244
+ if (isWebGeneratorTarget && runtimeState.twPatcher.majorVersion !== 3) return;
2225
2245
  if (shouldDiscoverAutoCssSources()) await discoverAndRegisterAutoCssSources();
2226
2246
  await syncSourceCandidateScan();
2227
2247
  };
package/dist/vite.js CHANGED
@@ -1,4 +1,4 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_vite = require("./vite-k4Nlk42j.js");
2
+ const require_vite = require("./vite-xq8oINaq.js");
3
3
  exports.WeappTailwindcss = require_vite.WeappTailwindcss;
4
4
  exports.weappTailwindcss = require_vite.WeappTailwindcss;
package/dist/vite.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import { t as WeappTailwindcss } from "./vite-BcXuBYy3.mjs";
1
+ import { t as WeappTailwindcss } from "./vite-DyQrAtpx.mjs";
2
2
  export { WeappTailwindcss, WeappTailwindcss as weappTailwindcss };
@@ -1378,6 +1378,37 @@ function createTailwindV4DefaultColorThemeCss() {
1378
1378
  //#region src/tailwindcss/v4-engine/generator.ts
1379
1379
  const incrementalGenerateCache$1 = /* @__PURE__ */ new Map();
1380
1380
  const incrementalGenerateTaskCache = /* @__PURE__ */ new Map();
1381
+ const BARE_RPX_TEXT_CANDIDATE_RE = /(^|:)text-\[([-+]?(?:\d+|\d*\.\d+)rpx)\](.*)$/u;
1382
+ const RPX_TEXT_LENGTH_SELECTOR_RE = /text-\\\[length\\:([-+]?(?:\d+|\d*\.\d+)rpx)\\\]/g;
1383
+ const TAILWIND_V4_DEFAULT_IGNORED_SOURCE_PATTERNS = [
1384
+ "**/.git/**",
1385
+ "**/.hg/**",
1386
+ "**/.jj/**",
1387
+ "**/.next/**",
1388
+ "**/.parcel-cache/**",
1389
+ "**/.pnpm-store/**",
1390
+ "**/.svelte-kit/**",
1391
+ "**/.svn/**",
1392
+ "**/.turbo/**",
1393
+ "**/.venv/**",
1394
+ "**/.vercel/**",
1395
+ "**/.yarn/**",
1396
+ "**/__pycache__/**",
1397
+ "**/node_modules/**",
1398
+ "**/venv/**",
1399
+ "**/*.less",
1400
+ "**/*.lock",
1401
+ "**/*.sass",
1402
+ "**/*.scss",
1403
+ "**/*.styl",
1404
+ "**/*.log",
1405
+ "**/package-lock.json",
1406
+ "**/pnpm-lock.yaml",
1407
+ "**/bun.lockb",
1408
+ "**/.gitignore",
1409
+ "**/.env",
1410
+ "**/.env.*"
1411
+ ];
1381
1412
  function findLeadingImportInsertionIndex(css) {
1382
1413
  const importPattern = /(?:^|\n)\s*@import\b[^;]*;/g;
1383
1414
  let insertionIndex = 0;
@@ -1397,6 +1428,35 @@ function applyMiniProgramTailwindV4DefaultColorCss(css) {
1397
1428
  function collectCandidates$1(candidates) {
1398
1429
  return new Set(candidates ?? []);
1399
1430
  }
1431
+ function normalizeRpxTextCandidate(candidate) {
1432
+ return candidate.replace(BARE_RPX_TEXT_CANDIDATE_RE, "$1text-[length:$2]$3");
1433
+ }
1434
+ function normalizeRpxTextCandidates(candidates) {
1435
+ const normalized = /* @__PURE__ */ new Set();
1436
+ const restoreCandidates = /* @__PURE__ */ new Map();
1437
+ for (const candidate of candidates) {
1438
+ const normalizedCandidate = normalizeRpxTextCandidate(candidate);
1439
+ normalized.add(normalizedCandidate);
1440
+ if (normalizedCandidate !== candidate) restoreCandidates.set(normalizedCandidate, candidate);
1441
+ }
1442
+ return {
1443
+ candidates: normalized,
1444
+ restoreCandidates
1445
+ };
1446
+ }
1447
+ function restoreRpxTextCandidates(candidates, restoreCandidates) {
1448
+ if (restoreCandidates.size === 0) return new Set(candidates);
1449
+ return new Set([...candidates].map((candidate) => restoreCandidates.get(candidate) ?? candidate));
1450
+ }
1451
+ function restoreRpxTextCssSelectors(css, restoreCandidates) {
1452
+ if (restoreCandidates.size === 0 || !css.includes("text-\\[length\\:")) return css;
1453
+ const restoredValues = new Set([...restoreCandidates.keys()].map((candidate) => {
1454
+ return BARE_RPX_TEXT_CANDIDATE_RE.exec(candidate.replace("[length:", "["))?.[2];
1455
+ }).filter((value) => Boolean(value)));
1456
+ return css.replace(RPX_TEXT_LENGTH_SELECTOR_RE, (match, value) => {
1457
+ return restoredValues.has(value) ? `text-\\[${value}\\]` : match;
1458
+ });
1459
+ }
1400
1460
  function createStableJson$2(value) {
1401
1461
  if (value === void 0) return "undefined";
1402
1462
  if (value === null || typeof value !== "object") return JSON.stringify(value);
@@ -1553,6 +1613,20 @@ function removeUnlayeredTailwindV4PreflightImports(css) {
1553
1613
  function resolveSourceBase$1(base, sourcePath) {
1554
1614
  return node_path.default.isAbsolute(sourcePath) ? sourcePath : node_path.default.resolve(base, sourcePath);
1555
1615
  }
1616
+ function createDefaultIgnoredScanSources(base) {
1617
+ return TAILWIND_V4_DEFAULT_IGNORED_SOURCE_PATTERNS.map((pattern) => ({
1618
+ base,
1619
+ pattern,
1620
+ negated: true
1621
+ }));
1622
+ }
1623
+ function normalizeCssDefinedScanSources(base, entries) {
1624
+ return entries.length > 0 && entries.every((entry) => entry.negated) ? [{
1625
+ base,
1626
+ pattern: "**/*",
1627
+ negated: false
1628
+ }, ...entries] : entries;
1629
+ }
1556
1630
  async function resolveCssDefinedScanSources(source) {
1557
1631
  let importSourceBase;
1558
1632
  let hasSourceNone = false;
@@ -1573,11 +1647,15 @@ async function resolveCssDefinedScanSources(source) {
1573
1647
  });
1574
1648
  const sourcePatterns = await resolveCssSourceEntries(root, source.base, "**/*");
1575
1649
  if (!importSourceBase) {
1576
- if (sourcePatterns.length > 0) return sourcePatterns;
1650
+ if (sourcePatterns.length > 0) return [...normalizeCssDefinedScanSources(source.base, sourcePatterns), ...createDefaultIgnoredScanSources(source.base)];
1577
1651
  if (hasSourceNone) return false;
1578
1652
  return;
1579
1653
  }
1580
- return [await resolveTailwindSourceEntry(".", importSourceBase, false, "**/*"), ...sourcePatterns];
1654
+ return [
1655
+ await resolveTailwindSourceEntry(".", importSourceBase, false, "**/*"),
1656
+ ...sourcePatterns,
1657
+ ...createDefaultIgnoredScanSources(importSourceBase)
1658
+ ];
1581
1659
  }
1582
1660
  async function resolveScanSources(source, scanSources) {
1583
1661
  if (scanSources !== true) return scanSources;
@@ -1617,16 +1695,18 @@ function createTailwindV4Engine(source) {
1617
1695
  const engine = (0, tailwindcss_patch.createTailwindV4Engine)(createCompatibleSource(generateSource, target, tailwindcssV3Compatibility));
1618
1696
  const resolvedScanSources = await resolveScanSources(generateSource, scanSources);
1619
1697
  const filesystemCandidates = Array.isArray(resolvedScanSources) ? new Set(await (0, tailwindcss_patch.extractRawCandidates)(resolvedScanSources)) : void 0;
1620
- const resolvedCandidates = resolveTargetCandidates(new Set([...collectCandidates$1(patchOptions.candidates), ...filesystemCandidates ?? []]), target);
1698
+ const normalizedCandidates = normalizeRpxTextCandidates(resolveTargetCandidates(new Set([...collectCandidates$1(patchOptions.candidates), ...filesystemCandidates ?? []]), target));
1621
1699
  const result = await engine.generate(omitUndefined({
1622
1700
  scanSources: false,
1623
1701
  ...patchOptions,
1624
- candidates: resolvedCandidates
1702
+ candidates: normalizedCandidates.candidates
1625
1703
  }));
1626
- const rawCss = result.css;
1704
+ const rawCss = restoreRpxTextCssSelectors(result.css, normalizedCandidates.restoreCandidates);
1627
1705
  const css = await transformTailwindV4CssByTarget(rawCss, target, styleOptions);
1628
1706
  return {
1629
1707
  ...result,
1708
+ classSet: restoreRpxTextCandidates(result.classSet, normalizedCandidates.restoreCandidates),
1709
+ rawCandidates: restoreRpxTextCandidates(result.rawCandidates, normalizedCandidates.restoreCandidates),
1630
1710
  css,
1631
1711
  rawCss,
1632
1712
  target
@@ -1666,15 +1746,18 @@ function createTailwindV4Engine(source) {
1666
1746
  target: cached.target
1667
1747
  };
1668
1748
  return runIncrementalGenerateTask(cacheKey, requestedCandidates, options.scanSources, async () => {
1669
- const cssByCandidate = (await cached.designSystemPromise).candidatesToCss(missingCandidates);
1749
+ const designSystem = await cached.designSystemPromise;
1750
+ const normalizedMissing = normalizeRpxTextCandidates(missingCandidates);
1751
+ const normalizedMissingCandidates = [...normalizedMissing.candidates];
1752
+ const cssByCandidate = designSystem.candidatesToCss(normalizedMissingCandidates);
1670
1753
  const rawCssParts = [];
1671
1754
  const classSet = /* @__PURE__ */ new Set();
1672
- for (let index = 0; index < missingCandidates.length; index += 1) {
1673
- const candidate = missingCandidates[index];
1755
+ for (let index = 0; index < normalizedMissingCandidates.length; index += 1) {
1756
+ const candidate = normalizedMissingCandidates[index];
1674
1757
  const css = cssByCandidate[index];
1675
1758
  if (candidate && typeof css === "string" && css.trim().length > 0) {
1676
- rawCssParts.push(css);
1677
- classSet.add(candidate);
1759
+ rawCssParts.push(restoreRpxTextCssSelectors(css, normalizedMissing.restoreCandidates));
1760
+ classSet.add(normalizedMissing.restoreCandidates.get(candidate) ?? candidate);
1678
1761
  }
1679
1762
  }
1680
1763
  const rawCss = rawCssParts.join("\n");
@@ -2090,6 +2173,7 @@ async function resolveTailwindV4EntriesFromCss(css, base) {
2090
2173
  let hasTailwindCssImport = false;
2091
2174
  const [sourceEntries, configEntries] = await Promise.all([resolveCssSourceEntries(root, base, VITE_SOURCE_CANDIDATE_PATTERN), resolveConfigContentEntries(root, base)]);
2092
2175
  const entries = [...configEntries.entries, ...sourceEntries];
2176
+ const hasPositiveEntries = entries.some((entry) => !entry.negated);
2093
2177
  const inlineCandidates = collectCssInlineSourceCandidates(root);
2094
2178
  root.walkAtRules("import", (rule) => {
2095
2179
  if (!isTailwindCssImport(rule.params)) return;
@@ -2114,7 +2198,7 @@ async function resolveTailwindV4EntriesFromCss(css, base) {
2114
2198
  inlineCandidates,
2115
2199
  dependencies: configEntries.dependencies
2116
2200
  };
2117
- if (entries.length > 0) return {
2201
+ if (hasPositiveEntries) return {
2118
2202
  entries,
2119
2203
  explicit: true,
2120
2204
  inlineCandidates,
@@ -2127,7 +2211,7 @@ async function resolveTailwindV4EntriesFromCss(css, base) {
2127
2211
  dependencies: configEntries.dependencies
2128
2212
  };
2129
2213
  return hasTailwindCssImport ? {
2130
- entries: [],
2214
+ entries,
2131
2215
  explicit: false,
2132
2216
  inlineCandidates,
2133
2217
  dependencies: configEntries.dependencies
@@ -2908,8 +2992,8 @@ const TAILWIND_ROOT_DIRECTIVE_NAMES = new Set([
2908
2992
  "utility",
2909
2993
  "variant"
2910
2994
  ]);
2911
- const TAILWIND_ROOT_DIRECTIVE_RE = /@(?:import\s+(?:url\(\s*)?["']?tailwindcss4?(?:\/[^"')\s]*)?|tailwind|config|custom-variant|plugin|source|theme|utility|variant)\b/;
2912
- const TAILWIND_EXTRACTABLE_DIRECTIVE_RE = /^\s*@(?:import|tailwind|config|source|reference|plugin)\b[\s\S]*?(?:;|$)/;
2995
+ const TAILWIND_ROOT_DIRECTIVE_RE = /@(?:import\s+(?:url\(\s*)?["']?tailwindcss4?(?:\/[^"')\s]*)?|(?:use|forward)\s+(?:url\(\s*)?["']?tailwindcss4?(?:\/[^"')\s]*)?|tailwind|config|custom-variant|plugin|source|theme|utility|variant)\b/;
2996
+ const TAILWIND_EXTRACTABLE_DIRECTIVE_RE = /^\s*@(?:import|use|forward|tailwind|config|source|reference|plugin)\b[\s\S]*?(?:;|$)/;
2913
2997
  const TAILWIND_EXTRACTABLE_BLOCK_DIRECTIVE_RE = /^\s*@(?:theme|utility|variant|custom-variant)\b[\s\S]*$/;
2914
2998
  const TAILWIND_EXTRACTABLE_LAYER_STATEMENT_RE = /^\s*@layer\s[^;{]+;\s*$/;
2915
2999
  function parseImportRequest(params) {
@@ -2957,8 +3041,17 @@ function normalizeTailwindImportAtRules(root, options = {}) {
2957
3041
  return changed;
2958
3042
  }
2959
3043
  function normalizeTailwindDirectiveLine(line, options = {}) {
2960
- if (!options.importFallback || !line.trimStart().startsWith("@import")) return line;
2961
- const request = parseImportRequest(line.trimStart().replace(/^@import\b/, ""));
3044
+ const trimmed = line.trimStart();
3045
+ if (/^@(?:use|forward)\b/.test(trimmed)) {
3046
+ const request = parseImportRequest(trimmed.replace(/^@(?:use|forward)\b/, ""));
3047
+ if (isTailwindImportRequest(request) || options.importFallback && isWeappTailwindcssImportRequest(request)) {
3048
+ const normalizedRequest = normalizeTailwindImportRequest(request, options);
3049
+ return replaceImportRequest(line.replace(/^(\s*)@(?:use|forward)\b/, "$1@import"), request, normalizedRequest);
3050
+ }
3051
+ return line;
3052
+ }
3053
+ if (!options.importFallback || !trimmed.startsWith("@import")) return line;
3054
+ const request = parseImportRequest(trimmed.replace(/^@import\b/, ""));
2962
3055
  if (!request || !isWeappTailwindcssImportRequest(request)) return line;
2963
3056
  return replaceImportRequest(line, request, request.replace(/^weapp-tailwindcss/, "tailwindcss"));
2964
3057
  }
@@ -2973,9 +3066,9 @@ function extractTailwindDirectiveLines(rawSource, options = {}) {
2973
3066
  const normalized = normalizeTailwindDirectiveLine(directive.trimEnd(), options);
2974
3067
  const normalizedTrimmed = normalized.trim();
2975
3068
  if (options.removeConfig && normalizedTrimmed.startsWith("@config")) continue;
2976
- const request = /^@import\b/.test(normalizedTrimmed) ? parseImportRequest(normalizedTrimmed.replace(/^@import\b/, "")) : void 0;
3069
+ const request = /^@(?:import|use|forward)\b/.test(normalizedTrimmed) ? parseImportRequest(normalizedTrimmed.replace(/^@(?:import|use|forward)\b/, "")) : void 0;
2977
3070
  if (request && !isTailwindImportRequest(request) && !isPackageJsonImportRequest$1(request)) continue;
2978
- if (/^@import\b/.test(normalizedTrimmed) && !request) continue;
3071
+ if (/^@(?:import|use|forward)\b/.test(normalizedTrimmed) && !request) continue;
2979
3072
  if (request && isTailwindImportRequest(request)) {
2980
3073
  const key = normalizedTrimmed;
2981
3074
  if (seenImports.has(key)) continue;
@@ -3016,7 +3109,7 @@ function isTailwindImportRequest(request) {
3016
3109
  }
3017
3110
  function isTailwindImportAtRule(node, options = {}) {
3018
3111
  if (node.name === "tailwind") return true;
3019
- if (node.name !== "import") return false;
3112
+ if (node.name !== "import" && node.name !== "use" && node.name !== "forward") return false;
3020
3113
  return isTailwindImportRequest(normalizeTailwindImportRequest(parseImportRequest(node.params), options));
3021
3114
  }
3022
3115
  function isTailwindSourceDirective(node, options = {}) {
@@ -1,9 +1,9 @@
1
- import { B as createDebug, W as resolveTailwindcssOptions, l as getRuntimeClassSetSignature } from "./v3-engine-DyIcbpZm.mjs";
2
- import { i as generateCssByGenerator, o as processCachedTask, r as emitHmrTiming, t as createBundleRuntimeClassSetManager } from "./incremental-runtime-class-set-Cwpw6aZK.mjs";
3
- import { _ as ensureRuntimeClassSet, f as pluginName, g as createTailwindRuntimeReadyPromise, n as getCompilerContext, s as _defineProperty, t as shouldSkipJsTransform, v as refreshTailwindRuntimeState } from "./precheck-D1O5AWzy.mjs";
1
+ import { B as createDebug, W as resolveTailwindcssOptions, l as getRuntimeClassSetSignature } from "./v3-engine-CzD7OvXg.mjs";
2
+ import { i as generateCssByGenerator, o as processCachedTask, r as emitHmrTiming, t as createBundleRuntimeClassSetManager } from "./incremental-runtime-class-set-DEf-VOwB.mjs";
3
+ import { _ as ensureRuntimeClassSet, f as pluginName, g as createTailwindRuntimeReadyPromise, n as getCompilerContext, s as _defineProperty, t as shouldSkipJsTransform, v as refreshTailwindRuntimeState } from "./precheck-DT3ydSET.mjs";
4
4
  import { r as getGroupedEntries } from "./utils-CGBVVNm6.mjs";
5
- import { c as upsertTailwindV4CssSource, s as hasConfiguredTailwindV4CssRoots } from "./tailwindcss-B_JAdOQf.mjs";
6
- import { _ as stripRequestQuery, b as toAbsoluteOutputPath, d as resolvePluginDisabledState, g as isSourceStyleRequest, l as stripBundlerGeneratedCssMarkers, n as createBundleBuildState, o as pushConcurrentTaskFactories, r as updateBundleBuildState, t as buildBundleSnapshot, u as resolvePackageDir, y as resolveOutputSpecifier } from "./bundle-state-CLnuf2CW.mjs";
5
+ import { c as upsertTailwindV4CssSource, s as hasConfiguredTailwindV4CssRoots } from "./tailwindcss-eov9DmH3.mjs";
6
+ import { _ as stripRequestQuery, b as toAbsoluteOutputPath, d as resolvePluginDisabledState, g as isSourceStyleRequest, l as stripBundlerGeneratedCssMarkers, n as createBundleBuildState, o as pushConcurrentTaskFactories, r as updateBundleBuildState, t as buildBundleSnapshot, u as resolvePackageDir, y as resolveOutputSpecifier } from "./bundle-state-CCjtHdeS.mjs";
7
7
  import Module, { createRequire } from "node:module";
8
8
  import fs from "node:fs";
9
9
  import path from "node:path";
@@ -1,10 +1,10 @@
1
1
  const require_chunk = require("./chunk-8l464Juk.js");
2
- const require_v3_engine = require("./v3-engine-CCwvhRrQ.js");
3
- const require_incremental_runtime_class_set = require("./incremental-runtime-class-set-C6akmwlk.js");
4
- const require_precheck = require("./precheck-8pQbjqpq.js");
2
+ const require_v3_engine = require("./v3-engine-CxCp7Ydh.js");
3
+ const require_incremental_runtime_class_set = require("./incremental-runtime-class-set-CdcqejGM.js");
4
+ const require_precheck = require("./precheck-DrBpp5HA.js");
5
5
  const require_utils = require("./utils-4ODFyoqD.js");
6
- const require_tailwindcss = require("./tailwindcss-whZE3HpL.js");
7
- const require_bundle_state = require("./bundle-state-BnV8o2Yn.js");
6
+ const require_tailwindcss = require("./tailwindcss-CxAd28dW.js");
7
+ const require_bundle_state = require("./bundle-state-BxWD-X7F.js");
8
8
  let node_fs = require("node:fs");
9
9
  node_fs = require_chunk.__toESM(node_fs);
10
10
  let node_module = require("node:module");
package/dist/webpack.js CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_webpack = require("./webpack-DC7v6ylA.js");
2
+ const require_webpack = require("./webpack-bTvAcuj4.js");
3
3
  exports.UnifiedWebpackPluginV5 = require_webpack.UnifiedWebpackPluginV5;
4
4
  exports.WeappTailwindcss = require_webpack.UnifiedWebpackPluginV5;
5
5
  exports.weappTailwindcss = require_webpack.UnifiedWebpackPluginV5;
package/dist/webpack.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import { n as weappTailwindcssPackageDir, t as UnifiedWebpackPluginV5 } from "./webpack-C4pViZ7V.mjs";
1
+ import { n as weappTailwindcssPackageDir, t as UnifiedWebpackPluginV5 } from "./webpack-CZIJ7caJ.mjs";
2
2
  export { UnifiedWebpackPluginV5, UnifiedWebpackPluginV5 as WeappTailwindcss, UnifiedWebpackPluginV5 as weappTailwindcss, weappTailwindcssPackageDir };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "weapp-tailwindcss",
3
- "version": "5.0.0-next.22",
3
+ "version": "5.0.0-next.23",
4
4
  "description": "把 tailwindcss 原子化样式思想,带给小程序开发者们! bring tailwindcss to miniprogram developers!",
5
5
  "author": "ice breaker <1324318532@qq.com>",
6
6
  "license": "MIT",
@@ -189,11 +189,11 @@
189
189
  "semver": "~7.8.1",
190
190
  "tailwindcss-patch": "9.3.7",
191
191
  "yaml": "^2.9.0",
192
- "@weapp-tailwindcss/reset": "0.1.1-next.0",
193
192
  "@weapp-tailwindcss/logger": "1.1.0",
193
+ "@weapp-tailwindcss/postcss": "3.0.0-next.6",
194
+ "@weapp-tailwindcss/reset": "0.1.1-next.0",
194
195
  "@weapp-tailwindcss/shared": "1.1.3",
195
- "tailwindcss-config": "1.1.6-next.1",
196
- "@weapp-tailwindcss/postcss": "3.0.0-next.6"
196
+ "tailwindcss-config": "1.1.6-next.1"
197
197
  },
198
198
  "scripts": {
199
199
  "dev": "tsdown --watch --sourcemap",