weapp-tailwindcss 5.1.8 → 5.1.10

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 (55) hide show
  1. package/dist/bundlers/shared/generator-css/generation-helpers.d.ts +1 -0
  2. package/dist/bundlers/shared/generator-css/output-import-shell.d.ts +4 -0
  3. package/dist/bundlers/shared/generator-css/source-resolver/metadata.d.ts +1 -0
  4. package/dist/bundlers/shared/generator-css/types.d.ts +2 -0
  5. package/dist/bundlers/vite/generate-bundle/css-assets.d.ts +1 -1
  6. package/dist/bundlers/vite/generate-bundle/remembered-css-replay.d.ts +2 -0
  7. package/dist/bundlers/vite/generate-bundle/scoped-generator.d.ts +1 -0
  8. package/dist/bundlers/vite/hot-css-modules.d.ts +1 -1
  9. package/dist/bundlers/vite/source-candidates.d.ts +7 -2
  10. package/dist/bundlers/vite/web-css-compat.d.ts +3 -0
  11. package/dist/bundlers/webpack/BaseUnifiedPlugin/v5-assets/css-source-resolvers.d.ts +9 -0
  12. package/dist/bundlers/webpack/BaseUnifiedPlugin/v5-assets/pipeline-helpers.d.ts +3 -0
  13. package/dist/cli.js +3 -2
  14. package/dist/cli.mjs +2 -1
  15. package/dist/{context-CfXr3hWz.mjs → context-DzkSFEVL.mjs} +4 -4
  16. package/dist/{context-CRhUs_5e.js → context-y2BGCok4.js} +10 -10
  17. package/dist/core.js +1 -1
  18. package/dist/core.mjs +1 -1
  19. package/dist/generator/options.d.ts +8 -1
  20. package/dist/{v4-engine-BZP2462H.js → generator-Bz94KTkH.js} +229 -17
  21. package/dist/{v4-engine-CjjWONB0.mjs → generator-ROzBodj6.mjs} +185 -9
  22. package/dist/generator.js +7 -8
  23. package/dist/generator.mjs +1 -2
  24. package/dist/{gulp-CRjkPsbX.mjs → gulp-BKqMb_Ds.mjs} +4 -4
  25. package/dist/{gulp-JUfnhOOo.js → gulp-DfOLvYLs.js} +10 -10
  26. package/dist/gulp.js +1 -1
  27. package/dist/gulp.mjs +1 -1
  28. package/dist/{hmr-timing-DcIEXnf8.js → hmr-timing-DOTdH18A.js} +556 -170
  29. package/dist/{hmr-timing-BecOXMd8.mjs → hmr-timing-DwtYJdwb.mjs} +430 -56
  30. package/dist/index.js +4 -4
  31. package/dist/index.mjs +4 -4
  32. package/dist/postcss.js +2 -3
  33. package/dist/postcss.mjs +1 -2
  34. package/dist/presets.js +7 -6
  35. package/dist/presets.mjs +5 -4
  36. package/dist/rspack.js +1 -1
  37. package/dist/rspack.mjs +1 -1
  38. package/dist/{source-candidate-scan-signature-10tvdJVC.js → source-candidate-scan-signature-BrWuBTjY.js} +34 -6
  39. package/dist/{source-candidate-scan-signature-DAg8QSgh.mjs → source-candidate-scan-signature-CQ04hiox.mjs} +29 -7
  40. package/dist/{tailwindcss-BZjZZi60.js → tailwindcss-Dn5DVlkI.js} +55 -47
  41. package/dist/{tailwindcss-PA2jHHpx.mjs → tailwindcss-hzy_WaC9.mjs} +14 -6
  42. package/dist/{transform-wNEbcZeQ.mjs → transform-BgnNYkIG.mjs} +1 -1
  43. package/dist/{transform-B0BxX3XB.js → transform-DZQETx51.js} +1 -1
  44. package/dist/{vite-vf2-cDdk.mjs → vite-BimHmlSp.mjs} +892 -233
  45. package/dist/{vite-GdzlG_lx.js → vite-bztpcI8_.js} +936 -277
  46. package/dist/vite.js +1 -1
  47. package/dist/vite.mjs +1 -1
  48. package/dist/weapp-tw-css-import-rewrite-loader.js +613 -63
  49. package/dist/{webpack-2s-TFhgm.mjs → webpack-CCapGlNg.mjs} +235 -38
  50. package/dist/{webpack-BhM4Hqla.js → webpack-XxBCIrBp.js} +276 -79
  51. package/dist/webpack.js +1 -1
  52. package/dist/webpack.mjs +1 -1
  53. package/package.json +6 -6
  54. package/dist/generator-DaaFxR5V.js +0 -174
  55. package/dist/generator-DugIHBgl.mjs +0 -127
@@ -1,12 +1,11 @@
1
1
  const require_rolldown_runtime = require("./rolldown-runtime-emK7D4bc.js");
2
2
  const require_framework = require("./framework.js");
3
- const require_v4_engine = require("./v4-engine-BZP2462H.js");
4
- const require_generator = require("./generator-DaaFxR5V.js");
3
+ const require_generator = require("./generator-Bz94KTkH.js");
5
4
  const require_utils = require("./utils-D3h8j7Mk.js");
6
- const require_context = require("./context-CRhUs_5e.js");
7
- const require_tailwindcss = require("./tailwindcss-BZjZZi60.js");
8
- const require_hmr_timing = require("./hmr-timing-DcIEXnf8.js");
9
- const require_source_candidate_scan_signature = require("./source-candidate-scan-signature-10tvdJVC.js");
5
+ const require_context = require("./context-y2BGCok4.js");
6
+ const require_tailwindcss = require("./tailwindcss-Dn5DVlkI.js");
7
+ const require_hmr_timing = require("./hmr-timing-DOTdH18A.js");
8
+ const require_source_candidate_scan_signature = require("./source-candidate-scan-signature-BrWuBTjY.js");
10
9
  require("./logger-TlKT3xmR.js");
11
10
  let node_fs = require("node:fs");
12
11
  node_fs = require_rolldown_runtime.__toESM(node_fs);
@@ -473,7 +472,7 @@ function createUniAppXBundleAssetSourceGetter(bundle) {
473
472
  //#region src/bundlers/vite/generate-bundle/configured-css-sources.ts
474
473
  function collectConfiguredTailwindV4CssSources(opts) {
475
474
  const runtimeCssSources = opts.tailwindcssRuntimeOptions?.tailwindcss?.v4?.cssSources ?? [];
476
- return require_v4_engine.filterTailwindV4CssSourceRoots([...opts.tailwindcss?.v4?.cssSources ?? [], ...runtimeCssSources]) ?? [];
475
+ return require_generator.filterTailwindV4CssSourceRoots([...opts.tailwindcss?.v4?.cssSources ?? [], ...runtimeCssSources]) ?? [];
477
476
  }
478
477
  function collectExplicitTailwindV4CssEntries(opts) {
479
478
  const entries = [
@@ -502,7 +501,7 @@ function collectConfiguredTailwindV4CssSourceEntries(opts, fallbackBase) {
502
501
  }
503
502
  for (const cssSource of collectConfiguredTailwindV4CssSources(opts)) {
504
503
  if (typeof cssSource.css !== "string" || cssSource.css.length === 0) continue;
505
- const base = require_v4_engine.resolveTailwindV4CssSourceBase(cssSource, fallbackBase);
504
+ const base = require_generator.resolveTailwindV4CssSourceBase(cssSource, fallbackBase);
506
505
  const file = typeof cssSource.file === "string" && cssSource.file.length > 0 ? cssSource.file : node_path.default.join(base, "tailwind.css");
507
506
  const resolvedFile = node_path.default.isAbsolute(file) ? node_path.default.resolve(file) : node_path.default.resolve(base, file);
508
507
  const key = `${resolvedFile}\0${cssSource.css}`;
@@ -547,8 +546,13 @@ function registerGeneratorDependencies$1(ctx, dependencies) {
547
546
  }
548
547
  //#endregion
549
548
  //#region src/bundlers/vite/generate-bundle/css-assets.ts
550
- function createCssAssetEmitter(context) {
549
+ function createCssAssetEmitter(context, bundle) {
551
550
  return (fileName, source) => {
551
+ const existing = bundle?.[fileName];
552
+ if (existing && typeof existing === "object" && "type" in existing && existing.type === "asset") {
553
+ existing.source = source;
554
+ return existing;
555
+ }
552
556
  if (context.emitFile) {
553
557
  context.emitFile({
554
558
  type: "asset",
@@ -658,9 +662,9 @@ function resolveReplayCssOutputFileFromSourceRoot(rootDir, file, sourceRoot) {
658
662
  return outputFile;
659
663
  }
660
664
  function resolveViteCssOutputFile(file, opts, isWebGeneratorTarget, preserveCssExtension = false, styleOutputExtension, styleOutputFiles) {
661
- if (isWebGeneratorTarget || preserveCssExtension || opts.cssMatcher(file) || !SOURCE_STYLE_OUTPUT_EXT_RE.test(file) || !require_source_candidate_scan_signature.isCSSRequest(file)) return file;
662
- const stem = file.replace(/[?#].*$/, "").replace(SOURCE_STYLE_OUTPUT_EXT_RE, "");
663
- return file.replace(SOURCE_STYLE_OUTPUT_EXT_RE, resolveMiniProgramStyleOutputExtension({
665
+ if (isWebGeneratorTarget || preserveCssExtension || opts.cssMatcher(file) || !CSS_SOURCE_OUTPUT_EXT_RE.test(file) || !require_source_candidate_scan_signature.isCSSRequest(file)) return file;
666
+ const stem = file.replace(/[?#].*$/, "").replace(CSS_SOURCE_OUTPUT_EXT_RE, "");
667
+ return file.replace(CSS_SOURCE_OUTPUT_EXT_RE, resolveMiniProgramStyleOutputExtension({
664
668
  cssMatcher: opts.cssMatcher,
665
669
  fallback: styleOutputExtension,
666
670
  files: styleOutputFiles,
@@ -814,7 +818,7 @@ function collectCssConfigBaseCandidates(source, file, outputRoot, opts) {
814
818
  const cssSourceCss = typeof cssSource.css === "string" ? normalizeCssSourceForCompare(cssSource.css) : void 0;
815
819
  if (cssSourceFile && !isMatchingCssSourceFile(file, cssSourceFile, outputRoot) && cssSourceCss !== normalizedSource) continue;
816
820
  addCandidate(cssSourceFile ? node_path.default.dirname(cssSourceFile) : void 0);
817
- addCandidate(require_v4_engine.resolveTailwindV4CssSourceBase(cssSource, sourceBaseFallback));
821
+ addCandidate(require_generator.resolveTailwindV4CssSourceBase(cssSource, sourceBaseFallback));
818
822
  }
819
823
  return candidates;
820
824
  }
@@ -1006,7 +1010,7 @@ function createCssTransformShareScope(file, rawSource) {
1006
1010
  function createCssTransformShareScopeKey(opts, file, rawSource) {
1007
1011
  if (opts.mainCssChunkMatcher(file, opts.appType)) return `main:${require_source_candidate_scan_signature.normalizeOutputPathKey(file)}`;
1008
1012
  const generatorOptions = require_generator.normalizeWeappTailwindcssGeneratorOptions(opts.generator);
1009
- if (require_v4_engine.hasTailwindGeneratedCssMarkers(rawSource) || require_v4_engine.hasTailwindSourceDirectives(rawSource, { importFallback: generatorOptions.importFallback })) return `source:${require_source_candidate_scan_signature.normalizeOutputPathKey(file)}`;
1013
+ if (require_generator.hasTailwindGeneratedCssMarkers(rawSource) || require_generator.hasTailwindSourceDirectives(rawSource, { importFallback: generatorOptions.importFallback })) return `source:${require_source_candidate_scan_signature.normalizeOutputPathKey(file)}`;
1010
1014
  return createCssTransformShareScope(file, rawSource);
1011
1015
  }
1012
1016
  function createCssRuntimeSignature(runtimeSignature, generatorCandidateSignature) {
@@ -1548,10 +1552,10 @@ function resolveSfcStyleRequestFromKnownSource(sourceFile, sfcSource, styleSourc
1548
1552
  }
1549
1553
  function hasTailwindGenerationSource(source, options = {}) {
1550
1554
  const allowRootDirectives = options.allowRootDirectives !== false;
1551
- return require_v4_engine.hasTailwindNonRootGenerationDirectives(source, { importFallback: true }) || allowRootDirectives && require_v4_engine.hasTailwindSourceDirectives(source, { importFallback: true }) || allowRootDirectives && require_v4_engine.hasTailwindRootDirectives(source, { importFallback: true }) || require_v4_engine.hasTailwindApplyDirective(source);
1555
+ return require_generator.hasTailwindNonRootGenerationDirectives(source, { importFallback: true }) || allowRootDirectives && require_generator.hasTailwindSourceDirectives(source, { importFallback: true }) || allowRootDirectives && require_generator.hasTailwindRootDirectives(source, { importFallback: true }) || require_generator.hasTailwindApplyDirective(source);
1552
1556
  }
1553
1557
  function hasTailwindGenerationSourceForFile(file, source) {
1554
- if (require_v4_engine.isTailwindV4CssEntry(file)) return hasTailwindGenerationSource(source);
1558
+ if (require_generator.isTailwindV4CssEntry(file)) return hasTailwindGenerationSource(source);
1555
1559
  return hasTailwindGenerationSource(source, { allowRootDirectives: false });
1556
1560
  }
1557
1561
  async function resolveSfcStyleSourceFromOutputFile(outputFile, snapshot, outputRoot, sourceRoot, cssMatcher, getSfcSource, debug) {
@@ -1657,6 +1661,10 @@ function resolveSourceStyleFileFromSiblingChunk(outputFile, snapshot, outputRoot
1657
1661
  debug("source style sibling chunk skipped: no source style modules for %s -> %s", outputFile, siblingJsFile);
1658
1662
  return;
1659
1663
  }
1664
+ if (sourceFiles.length === 1) {
1665
+ debug("source style sibling chunk inferred from single css module: %s -> %s", outputFile, sourceFiles[0]);
1666
+ return sourceFiles[0];
1667
+ }
1660
1668
  const scoredSources = sourceFiles.map((sourceFile) => ({
1661
1669
  sourceFile,
1662
1670
  score: scoreMatchingStyleFileBase(outputFile, sourceFile, outputRoot, sourceRoot)
@@ -1675,11 +1683,23 @@ function resolveSourceStyleSourceFromOutputFile(outputFile, snapshot, outputRoot
1675
1683
  let sourceFile = resolveSourceStyleFileFromSiblingChunk(outputFile, snapshot, outputRoot, sourceRoot, debug);
1676
1684
  let rawSource = sourceFile ? getSourceStyleSource?.(sourceFile) : void 0;
1677
1685
  if (!sourceFile || !rawSource || !hasTailwindGenerationSourceForFile(sourceFile, rawSource)) {
1678
- const scoredSources = [...getSourceStyleSources?.() ?? [], ...configuredSourceEntries ?? []].filter(([file, source]) => CSS_SOURCE_OUTPUT_EXT_RE.test(file) && hasTailwindGenerationSourceForFile(file, source)).map(([file, source]) => ({
1686
+ const cachedSources = [...getSourceStyleSources?.() ?? []].filter(([file, source]) => CSS_SOURCE_OUTPUT_EXT_RE.test(file) && hasTailwindGenerationSourceForFile(file, source)).map(([file, source]) => ({
1679
1687
  file,
1680
1688
  source,
1681
- score: scoreMatchingStyleFileBase(outputFile, file, outputRoot, sourceRoot)
1682
- })).filter((item) => item.score > 0).sort((a, b) => b.score - a.score);
1689
+ score: require_hmr_timing.scoreTailwindV4CssSourceFileMatch(outputFile, file, {
1690
+ outputRoot,
1691
+ projectRoot: sourceRoot
1692
+ })
1693
+ }));
1694
+ const configuredSources = [...configuredSourceEntries ?? []].filter(([file, source]) => CSS_SOURCE_OUTPUT_EXT_RE.test(file) && hasTailwindGenerationSourceForFile(file, source)).map(([file, source]) => ({
1695
+ file,
1696
+ source,
1697
+ score: require_hmr_timing.scoreTailwindV4CssSourceFileMatch(outputFile, file, {
1698
+ outputRoot,
1699
+ projectRoot: sourceRoot
1700
+ })
1701
+ }));
1702
+ const scoredSources = [...cachedSources, ...configuredSources].filter((item) => item.score > 0).sort((a, b) => b.score - a.score);
1683
1703
  const bestScore = scoredSources[0]?.score;
1684
1704
  const bestSources = bestScore ? scoredSources.filter((item) => item.score === bestScore) : [];
1685
1705
  if (bestSources.length === 1) {
@@ -1816,30 +1836,65 @@ function dedupeViteCssResults(records) {
1816
1836
  return true;
1817
1837
  });
1818
1838
  }
1819
- function removeTailwindSourceMediaWrappers(css) {
1820
- if (!css.includes("@media source(")) return css;
1839
+ function removeTailwindSourceMediaWrappersRoot(root) {
1840
+ let changed = false;
1841
+ root.walkAtRules("media", (atRule) => {
1842
+ if (!atRule.params.startsWith("source(")) return;
1843
+ if (atRule.nodes && atRule.nodes.length > 0) atRule.replaceWith(...atRule.nodes);
1844
+ else atRule.remove();
1845
+ changed = true;
1846
+ });
1847
+ if (changed) root.walkAtRules((atRule) => {
1848
+ if (atRule.nodes && atRule.nodes.length === 0) atRule.remove();
1849
+ });
1850
+ return changed;
1851
+ }
1852
+ function removeTailwindSourceMediaWrappersFallback(css) {
1853
+ return css.replace(/@media\s+source\([^)]*\)\s*\{\s*\/\*!\s*weapp-tailwindcss generator-placeholder\s*\*\/?\s*\}/gi, "").replace(/@media\s+source\([^)]*\)\s*\{\s*\}/gi, "");
1854
+ }
1855
+ function removeTailwindEntryDirectivesFromCss(css) {
1821
1856
  try {
1822
- const root = _weapp_tailwindcss_postcss.postcss.parse(css);
1823
- let changed = false;
1824
- root.walkAtRules("media", (atRule) => {
1825
- if (!atRule.params.startsWith("source(")) return;
1826
- if (atRule.nodes && atRule.nodes.length > 0) atRule.replaceWith(...atRule.nodes);
1827
- else atRule.remove();
1828
- changed = true;
1829
- });
1830
- root.walkAtRules((atRule) => {
1831
- if (atRule.nodes && atRule.nodes.length === 0) {
1832
- atRule.remove();
1833
- changed = true;
1834
- }
1835
- });
1836
- return changed ? root.toString() : css;
1857
+ const source = require_generator.stripGeneratorPlaceholderMarkers(css);
1858
+ const root = _weapp_tailwindcss_postcss.postcss.parse(source);
1859
+ const removedMediaWrappers = removeTailwindSourceMediaWrappersRoot(root);
1860
+ const removedTailwindDirectives = (0, _weapp_tailwindcss_postcss.removeTailwindSourceDirectivesRoot)(root);
1861
+ return removedMediaWrappers || removedTailwindDirectives ? root.toString() : source;
1837
1862
  } catch {
1838
- return css.replace(/@media\s+source\([^)]*\)\s*\{\s*\/\*!\s*weapp-tailwindcss generator-placeholder\s*\*\/?\s*\}/gi, "").replace(/@media\s+source\([^)]*\)\s*\{\s*\}/gi, "");
1863
+ return require_generator.removeTailwindSourceDirectives(removeTailwindSourceMediaWrappersFallback(css));
1839
1864
  }
1840
1865
  }
1841
- function removeTailwindEntryDirectivesFromCss(css) {
1842
- return require_v4_engine.removeTailwindSourceDirectives(removeTailwindSourceMediaWrappers(css));
1866
+ function removeUnsupportedMiniProgramCssImportsFallback(css, file) {
1867
+ if (!isMiniProgramStyleOutputFile(file) || !css.includes("@import")) return css;
1868
+ return css.split(/\r?\n/).filter((line) => {
1869
+ const trimmed = line.trim();
1870
+ if (!trimmed.startsWith("@import")) return true;
1871
+ const request = (0, _weapp_tailwindcss_postcss.parseTailwindCssDirectiveRequest)(trimmed.slice(7).trim().replace(/;$/, "").trim());
1872
+ return request === void 0 || (0, _weapp_tailwindcss_postcss.isMiniProgramLocalCssImportRequest)(request);
1873
+ }).join("\n");
1874
+ }
1875
+ function normalizeInjectableCssForTarget(css, file) {
1876
+ return normalizeInjectableCssForTargetWithImports(css, file).css;
1877
+ }
1878
+ function normalizeInjectableCssForTargetWithImports(css, file) {
1879
+ if (!css.includes("@import")) return {
1880
+ css,
1881
+ importedStyleFiles: /* @__PURE__ */ new Set()
1882
+ };
1883
+ try {
1884
+ const root = _weapp_tailwindcss_postcss.postcss.parse(css);
1885
+ const changed = isMiniProgramStyleOutputFile(file) ? (0, _weapp_tailwindcss_postcss.removeUnsupportedMiniProgramCssImportsRoot)(root) : false;
1886
+ const importedStyleFiles = collectImportedStyleFilesRoot(root, file);
1887
+ return {
1888
+ css: changed ? root.toString() : css,
1889
+ importedStyleFiles: importedStyleFiles.size > 0 ? importedStyleFiles : collectImportedStyleFilesFallback(css, file)
1890
+ };
1891
+ } catch {
1892
+ const fallbackCss = removeUnsupportedMiniProgramCssImportsFallback(css, file);
1893
+ return {
1894
+ css: fallbackCss,
1895
+ importedStyleFiles: collectImportedStyleFiles(fallbackCss, file)
1896
+ };
1897
+ }
1843
1898
  }
1844
1899
  function stripStyleExtension(file) {
1845
1900
  return file.replace(/[?#].*$/, "").replace(/\.(?:css|wxss|acss|ttss|qss|jxss|tyss|scss|sass|less|styl|stylus|pcss|postcss)$/i, "");
@@ -1854,15 +1909,27 @@ function resolveImportedStyleFile(targetFile, request) {
1854
1909
  const targetDir = posix.posix.dirname(require_source_candidate_scan_signature.normalizeOutputPathKey(targetFile));
1855
1910
  return require_source_candidate_scan_signature.normalizeOutputPathKey(posix.posix.join(targetDir === "." ? "" : targetDir, cleanRequest));
1856
1911
  }
1857
- function collectImportedStyleFiles(css, targetFile) {
1912
+ function collectImportedStyleFilesFromRequests(requests, targetFile) {
1858
1913
  const imports = /* @__PURE__ */ new Set();
1914
+ for (const request of requests) {
1915
+ const importedFile = resolveImportedStyleFile(targetFile, request);
1916
+ if (importedFile) imports.add(importedFile);
1917
+ }
1918
+ return imports;
1919
+ }
1920
+ function collectImportedStyleFilesRoot(root, targetFile) {
1921
+ return collectImportedStyleFilesFromRequests((0, _weapp_tailwindcss_postcss.collectCssImportRequestsRoot)(root), targetFile);
1922
+ }
1923
+ function collectImportedStyleFilesFallback(css, targetFile) {
1924
+ return collectImportedStyleFilesFromRequests([...css.matchAll(/@import\s+(?:url\(\s*)?(?:"([^"]+)"|'([^']+)'|([^\s;)]+))/g)].map((match) => match[1] ?? match[2] ?? match[3]).filter((request) => typeof request === "string" && request.length > 0), targetFile);
1925
+ }
1926
+ function collectImportedStyleFiles(css, targetFile) {
1927
+ if (!css.includes("@import")) return /* @__PURE__ */ new Set();
1859
1928
  try {
1860
- _weapp_tailwindcss_postcss.postcss.parse(css).walkAtRules("import", (atRule) => {
1861
- const importedFile = resolveImportedStyleFile(targetFile, require_v4_engine.parseImportRequest(atRule.params));
1862
- if (importedFile) imports.add(importedFile);
1863
- });
1929
+ const imports = collectImportedStyleFilesRoot(_weapp_tailwindcss_postcss.postcss.parse(css), targetFile);
1930
+ return imports.size > 0 ? imports : collectImportedStyleFilesFallback(css, targetFile);
1864
1931
  } catch {}
1865
- return imports;
1932
+ return collectImportedStyleFilesFallback(css, targetFile);
1866
1933
  }
1867
1934
  function normalizeMarkerOutputFile(markerFile, resolveViteProcessedCssOutputFile) {
1868
1935
  return resolveViteProcessedCssOutputFile?.(markerFile) ?? markerFile;
@@ -2019,9 +2086,21 @@ function isUnscopedMiniProgramTailwindPreflightRule(rule) {
2019
2086
  const declarations = rule.nodes?.filter((node) => node.type === "decl") ?? [];
2020
2087
  return declarations.length > 0 && declarations.every(isMiniProgramTailwindPreflightDeclaration);
2021
2088
  }
2089
+ function isScopedMiniProgramTailwindContentInitRule(rule) {
2090
+ const selectors = rule.selectors ?? [rule.selector];
2091
+ if (selectors.length === 0 || !selectors.every((selector) => {
2092
+ const normalized = normalizeCssSignatureValue(selector);
2093
+ return hasVueScopedAttr(selector) && MINI_PROGRAM_PREFLIGHT_SELECTORS.has(normalized);
2094
+ })) return false;
2095
+ const declarations = rule.nodes?.filter((node) => node.type === "decl") ?? [];
2096
+ return declarations.length > 0 && declarations.every((decl) => decl.prop === "--tw-content");
2097
+ }
2022
2098
  function hasUnscopedMiniProgramTailwindPreflightRule(css) {
2023
2099
  return /(?:^|[{}])\s*view\s*,\s*text\s*,\s*::after\s*,\s*::before\s*\{/.test(css);
2024
2100
  }
2101
+ function hasScopedMiniProgramTailwindContentInitRule(css) {
2102
+ return /(?:^|[{}])[^{}]*\.data-v-[\w-][^{}]*\{\s*--tw-content\s*:/.test(css);
2103
+ }
2025
2104
  function collectRootScopedComparableCssCoverage(cssSources) {
2026
2105
  const rules = /* @__PURE__ */ new Set();
2027
2106
  const atRules = /* @__PURE__ */ new Set();
@@ -2058,14 +2137,15 @@ function isRuleCoveredByRootCss(rule, coverage) {
2058
2137
  return declarationKeys.length > 0 && selectors.every((selector) => {
2059
2138
  const rootDeclarations = coverage.declarationsBySelector.get(normalizeCssSignatureValue(selector));
2060
2139
  return rootDeclarations != null && declarationKeys.every((declaration) => rootDeclarations.has(declaration));
2061
- }) || selectors.every((selector) => coverage.declarationsBySelector.has(normalizeCssSignatureValue(selector)));
2140
+ });
2062
2141
  }
2063
2142
  function removeScopedCssCoveredByRootStyleSources(css, rootSources) {
2064
2143
  if (!hasVueScopedAttr(css)) return css;
2065
2144
  const hasScopedTailwindGeneratedCss = /tailwindcss v\d/i.test(css);
2066
2145
  const hasUnscopedMiniProgramPreflight = hasUnscopedMiniProgramTailwindPreflightRule(css);
2146
+ const hasScopedMiniProgramContentInit = hasScopedMiniProgramTailwindContentInitRule(css);
2067
2147
  const coverage = collectRootScopedComparableCssCoverage(rootSources);
2068
- if (coverage.rules.size === 0 && coverage.atRules.size === 0 && !hasScopedTailwindGeneratedCss && !hasUnscopedMiniProgramPreflight) return css;
2148
+ if (coverage.rules.size === 0 && coverage.atRules.size === 0 && !hasScopedTailwindGeneratedCss && !hasUnscopedMiniProgramPreflight && !hasScopedMiniProgramContentInit) return css;
2069
2149
  try {
2070
2150
  const root = _weapp_tailwindcss_postcss.postcss.parse(css);
2071
2151
  let changed = false;
@@ -2076,7 +2156,7 @@ function removeScopedCssCoveredByRootStyleSources(css, rootSources) {
2076
2156
  }
2077
2157
  });
2078
2158
  root.walkRules((rule) => {
2079
- if (isRuleCoveredByRootCss(rule, coverage) || hasScopedTailwindGeneratedCss && isLikelyTailwindGlobalRule(rule) || isUnscopedMiniProgramTailwindPreflightRule(rule)) {
2159
+ if (isRuleCoveredByRootCss(rule, coverage) || hasScopedTailwindGeneratedCss && isLikelyTailwindGlobalRule(rule) || isUnscopedMiniProgramTailwindPreflightRule(rule) || isScopedMiniProgramTailwindContentInitRule(rule)) {
2080
2160
  rule.remove();
2081
2161
  changed = true;
2082
2162
  }
@@ -2210,6 +2290,7 @@ function shouldUseCssAssetAsMainInjectionTarget(opts, file, records, options, bu
2210
2290
  }) === true && !isMiniProgramStyleOutputFile(file) && matchedRootWebOutputTargets.length > 0) return matchedRootWebOutputTargets.includes(fileKey);
2211
2291
  const explicitRootTargets = records.filter((record) => record.injectIntoMain === true).map((record) => typeof record.outputFile === "string" ? require_source_candidate_scan_signature.normalizeOutputPathKey(record.outputFile) : void 0).filter((outputFile) => typeof outputFile === "string" && isRootStyleOutputFile(outputFile) && !isMiniProgramStyleOutputFile(outputFile));
2212
2292
  const explicitWebCssTargets = records.filter((record) => record.injectIntoMain === true).map((record) => typeof record.outputFile === "string" ? require_source_candidate_scan_signature.normalizeOutputPathKey(record.outputFile) : void 0).filter((outputFile) => typeof outputFile === "string" && isCssOutputFile(outputFile) && !isMiniProgramStyleOutputFile(outputFile));
2293
+ const explicitStyleOutputTargets = records.filter((record) => record.injectIntoMain === true).map((record) => typeof record.outputFile === "string" ? require_source_candidate_scan_signature.normalizeOutputPathKey(record.outputFile) : void 0).filter((outputFile) => typeof outputFile === "string" && isRootStyleOutputFile(outputFile));
2213
2294
  if (context !== void 0 && options.cssPipelineStrategy?.shouldPreferExplicitWebCssTargets?.({
2214
2295
  ...context,
2215
2296
  explicitRootTargets,
@@ -2219,12 +2300,25 @@ function shouldUseCssAssetAsMainInjectionTarget(opts, file, records, options, bu
2219
2300
  if (explicitRootTargets.length > 0) return explicitRootTargets.includes(fileKey);
2220
2301
  if (records.some((record) => {
2221
2302
  if (record.injectIntoMain !== true) return false;
2303
+ if (explicitStyleOutputTargets.length > 0) return explicitStyleOutputTargets.includes(fileKey) || isRootStyleOutputFile(file) && isViteProcessedRootStyleImportingTargets(bundle, file, explicitStyleOutputTargets) || isRootStyleOutputFile(file) && opts.mainCssChunkMatcher(file, opts.appType) && explicitStyleOutputTargets.some((outputFile) => opts.mainCssChunkMatcher(outputFile, opts.appType));
2222
2304
  return isRootStyleOutputFile(file) || typeof record.outputFile === "string" && require_source_candidate_scan_signature.normalizeOutputPathKey(record.outputFile) === fileKey;
2223
2305
  })) return true;
2224
- if (records.some((record) => record.injectIntoMain === true)) return false;
2306
+ if (records.some((record) => record.injectIntoMain === true)) {
2307
+ const matchedExplicitMiniProgramTargets = explicitStyleOutputTargets.filter((outputFile) => isMiniProgramStyleOutputFile(outputFile) && opts.mainCssChunkMatcher(outputFile, opts.appType));
2308
+ if (matchedExplicitMiniProgramTargets.length > 0) return matchedExplicitMiniProgramTargets.includes(fileKey);
2309
+ return isRootStyleOutputFile(file) && isMiniProgramStyleOutputFile(file);
2310
+ }
2225
2311
  if (opts.mainCssChunkMatcher(file, opts.appType)) return true;
2226
2312
  return isRootStyleOutputFile(file) && records.some((record) => record.injectIntoMain === true);
2227
2313
  }
2314
+ function isViteProcessedRootStyleImportingTargets(bundle, file, targetFiles) {
2315
+ const targetFileSet = new Set(targetFiles.map(require_source_candidate_scan_signature.normalizeOutputPathKey));
2316
+ for (const [bundleFile, output] of Object.entries(bundle)) {
2317
+ if (output.type !== "asset" || require_source_candidate_scan_signature.normalizeOutputPathKey(getAssetFile$1(bundleFile, output)) !== require_source_candidate_scan_signature.normalizeOutputPathKey(file)) continue;
2318
+ return [...collectImportedStyleFiles(readAssetSource$2(output), file)].some((importedFile) => targetFileSet.has(require_source_candidate_scan_signature.normalizeOutputPathKey(importedFile)));
2319
+ }
2320
+ return false;
2321
+ }
2228
2322
  function isViteProcessedCssResultImported(record, importedStyleFiles) {
2229
2323
  return importedStyleFiles.has(require_source_candidate_scan_signature.normalizeOutputPathKey(record.file)) || typeof record.outputFile === "string" && importedStyleFiles.has(require_source_candidate_scan_signature.normalizeOutputPathKey(record.outputFile));
2230
2324
  }
@@ -2268,7 +2362,84 @@ function removeCssCoveredByImportedViteResults(css, importedCssSources) {
2268
2362
  if (importedCssSources.length === 0) return css;
2269
2363
  const importedCss = importedCssSources.map((source) => require_source_candidate_scan_signature.stripBundlerGeneratedCssMarkers(source).trim()).filter(Boolean).join("\n");
2270
2364
  if (importedCss.length === 0) return css;
2271
- return (0, _weapp_tailwindcss_postcss.filterExistingCssRules)(importedCss, css);
2365
+ return restoreCssImportAtRules(css, removeCssRulesCoveredBySources(css, [importedCss], { exactOnly: true }));
2366
+ }
2367
+ function removeCssRulesCoveredBySources(css, sources, options = {}) {
2368
+ if (sources.length === 0 || css.trim().length === 0) return css;
2369
+ const coverage = collectRootScopedComparableCssCoverage(sources);
2370
+ const coveredRuleCss = collectNormalizedRuleCss(sources);
2371
+ if (coverage.rules.size === 0 && coverage.declarationsBySelector.size === 0 && coveredRuleCss.size === 0) return css;
2372
+ try {
2373
+ const root = _weapp_tailwindcss_postcss.postcss.parse(css);
2374
+ let changed = false;
2375
+ root.walkRules((rule) => {
2376
+ if (!coveredRuleCss.has(normalizeCssSignatureValue(rule.toString())) && (options.exactOnly === true || !isRuleCoveredByRootCss(rule, coverage))) return;
2377
+ rule.remove();
2378
+ changed = true;
2379
+ });
2380
+ return changed ? root.toString() : css;
2381
+ } catch {
2382
+ return css;
2383
+ }
2384
+ }
2385
+ function collectNormalizedRuleCss(sources) {
2386
+ const rules = /* @__PURE__ */ new Set();
2387
+ for (const source of sources) try {
2388
+ _weapp_tailwindcss_postcss.postcss.parse(source).walkRules((rule) => {
2389
+ rules.add(normalizeCssSignatureValue(rule.toString()));
2390
+ });
2391
+ } catch {}
2392
+ return rules;
2393
+ }
2394
+ function collectCssImportAtRuleCss(css) {
2395
+ if (!css.includes("@import")) return [];
2396
+ const fallbackImports = [...css.matchAll(/@import\s[^;]+;?/g)].map((match) => match[0]);
2397
+ if (fallbackImports.length > 0) return fallbackImports;
2398
+ try {
2399
+ const root = _weapp_tailwindcss_postcss.postcss.parse(css);
2400
+ const imports = [];
2401
+ root.each((node) => {
2402
+ if (node.type === "atrule" && node.name === "import") imports.push(node.toString());
2403
+ });
2404
+ return imports;
2405
+ } catch {
2406
+ return [];
2407
+ }
2408
+ }
2409
+ function parseCssImportRequest(importCss) {
2410
+ const trimmed = importCss.trim();
2411
+ if (!trimmed.startsWith("@import")) return;
2412
+ return (0, _weapp_tailwindcss_postcss.parseTailwindCssDirectiveRequest)(trimmed.slice(7).trim().replace(/;$/, "").trim());
2413
+ }
2414
+ function shouldRestoreCssImportAtRule(importCss, file) {
2415
+ if (file === void 0 || !isMiniProgramStyleOutputFile(file)) return true;
2416
+ const request = parseCssImportRequest(importCss);
2417
+ if (request === void 0) return false;
2418
+ if ((0, _weapp_tailwindcss_postcss.isMiniProgramLocalCssImportRequest)(request)) return true;
2419
+ return isStyleImportRequest(request) && !request.includes("/");
2420
+ }
2421
+ function restoreCssImportAtRules(source, filtered, file) {
2422
+ const imports = collectCssImportAtRuleCss(source).filter((importCss) => shouldRestoreCssImportAtRule(importCss, file));
2423
+ if (imports.length === 0) return filtered;
2424
+ const missingImports = imports.filter((importCss) => !filtered.includes(importCss));
2425
+ if (missingImports.length === 0) return filtered;
2426
+ return appendCss$1(missingImports.join("\n"), filtered);
2427
+ }
2428
+ function removeCommentOnlyAtRules(css) {
2429
+ if (!css.includes("@")) return css;
2430
+ try {
2431
+ const root = _weapp_tailwindcss_postcss.postcss.parse(css);
2432
+ let changed = false;
2433
+ root.walkAtRules((atRule) => {
2434
+ if (!atRule.nodes || atRule.nodes.length === 0) return;
2435
+ if (atRule.nodes.some((node) => node.type !== "comment")) return;
2436
+ atRule.remove();
2437
+ changed = true;
2438
+ });
2439
+ return changed ? root.toString() : css;
2440
+ } catch {
2441
+ return css;
2442
+ }
2272
2443
  }
2273
2444
  function collectImportedBundleCssSources(bundle, importedStyleFiles) {
2274
2445
  if (importedStyleFiles.size === 0) return [];
@@ -2483,8 +2654,9 @@ function injectViteProcessedCssIntoMainCssAssets(bundle, options) {
2483
2654
  }
2484
2655
  const fileKey = require_source_candidate_scan_signature.normalizeOutputPathKey(file);
2485
2656
  const mainFileKey = require_source_candidate_scan_signature.normalizeOutputPathKey(file);
2486
- let nextCss = transformCss(removeTailwindEntryDirectivesFromCss(originalSource), file);
2487
- const importedStyleFiles = collectImportedStyleFiles(nextCss, file);
2657
+ const normalizedOriginalCss = normalizeInjectableCssForTargetWithImports(transformCss(removeTailwindEntryDirectivesFromCss(originalSource), file), file);
2658
+ let nextCss = normalizedOriginalCss.css;
2659
+ const importedStyleFiles = normalizedOriginalCss.importedStyleFiles;
2488
2660
  const importedBundleCssSources = collectImportedBundleCssSources(bundle, importedStyleFiles);
2489
2661
  nextCss = removeCssCoveredByImportedViteResults(nextCss, importedBundleCssSources);
2490
2662
  const importedViteCssResults = viteCssResults.filter((record) => isViteProcessedCssResultImported(record, importedStyleFiles));
@@ -2500,7 +2672,7 @@ function injectViteProcessedCssIntoMainCssAssets(bundle, options) {
2500
2672
  if (!shouldInjectViteProcessedCssResult(options.opts, mainFileKey, record.file, record)) continue;
2501
2673
  if (isViteProcessedCssResultImported(record, importedStyleFiles)) continue;
2502
2674
  targetViteCssResults.push(record);
2503
- let css = require_source_candidate_scan_signature.stripBundlerGeneratedCssMarkers(record.css).trim();
2675
+ let css = normalizeInjectableCssForTarget(require_source_candidate_scan_signature.stripBundlerGeneratedCssMarkers(record.css).trim(), file).trim();
2504
2676
  css = removeCssCoveredByImportedViteResults(css, importedCssSources).trim();
2505
2677
  if (css.length === 0) continue;
2506
2678
  const mergedLayerCss = require_hmr_timing.mergeMarkedUserLayerComponentsCss(nextCss, css);
@@ -2533,7 +2705,9 @@ function injectViteProcessedCssIntoMainCssAssets(bundle, options) {
2533
2705
  if (missingCss.length === 0 || !hasNonCommentCss(missingCss) || (0, _weapp_tailwindcss_postcss.containsCssAfterMinify)(nextCss, missingCss)) continue;
2534
2706
  nextCss = appendCss$1(nextCss, missingCss);
2535
2707
  }
2536
- nextCss = transformCss(nextCss, file);
2708
+ const finalImportedCssSources = collectImportedBundleCssSources(bundle, collectImportedStyleFiles(originalSource, file));
2709
+ nextCss = transformCss(removeCommentOnlyAtRules(restoreCssImportAtRules(originalSource, removeCssRulesCoveredBySources(nextCss, finalImportedCssSources, { exactOnly: true }).trim(), file)), file);
2710
+ if (nextCss.trim() === originalSource.trim()) nextCss = originalSource;
2537
2711
  if (nextCss !== originalSource) {
2538
2712
  output.source = nextCss;
2539
2713
  options.markCssAssetProcessed?.(output, file);
@@ -2659,7 +2833,7 @@ function resolveViteMemoryDebugStats(context) {
2659
2833
  ...context.getViteCssCacheStats?.(),
2660
2834
  lastCssResultByFile: summarizeStringMapCache$1(context.lastCssResultByFile)
2661
2835
  },
2662
- tailwind: { v4: require_v4_engine.getTailwindV4IncrementalGenerateCacheStats() }
2836
+ tailwind: { v4: require_generator.getTailwindV4IncrementalGenerateCacheStats() }
2663
2837
  };
2664
2838
  }
2665
2839
  //#endregion
@@ -2818,14 +2992,15 @@ function getAssetFile(bundleFile, asset) {
2818
2992
  return asset.fileName || bundleFile;
2819
2993
  }
2820
2994
  function finalizeWebviewCssCompat(bundle, options) {
2821
- if (options.opts.generator?.webCompat === false) return 0;
2995
+ const generatorOptions = require_generator.normalizeWeappTailwindcssGeneratorOptions(options.opts.generator);
2996
+ if (generatorOptions.webCompat === false) return 0;
2822
2997
  let transformed = 0;
2823
2998
  for (const [bundleFile, output] of Object.entries(bundle)) {
2824
2999
  if (output.type !== "asset") continue;
2825
3000
  const file = getAssetFile(bundleFile, output);
2826
3001
  if (!options.opts.cssMatcher(file) || !/\.css(?:$|[?#])/i.test(file)) continue;
2827
3002
  const rawSource = readAssetSource(output);
2828
- const nextCss = (0, _weapp_tailwindcss_postcss.transformWebCssSafeSelectors)((0, _weapp_tailwindcss_postcss.transformWebCssCompat)(rawSource, options.opts.generator?.webCompat ?? true), { escapeMap: options.opts.escapeMap });
3003
+ const nextCss = (0, _weapp_tailwindcss_postcss.transformWebCssSafeSelectors)((0, _weapp_tailwindcss_postcss.transformWebCssCompat)(rawSource, generatorOptions.webCompat ?? true), { escapeMap: options.opts.escapeMap });
2829
3004
  if (nextCss === rawSource) continue;
2830
3005
  output.source = nextCss;
2831
3006
  options.recordCssAssetResult?.(file, nextCss);
@@ -2861,7 +3036,7 @@ function resolveSingleCssImportOutputFile(targetFile, css) {
2861
3036
  try {
2862
3037
  _weapp_tailwindcss_postcss.postcss.parse(css).walkAtRules("import", (atRule) => {
2863
3038
  if (importedFile !== void 0) return;
2864
- const request = require_v4_engine.parseImportRequest(atRule.params);
3039
+ const request = require_generator.parseImportRequest(atRule.params);
2865
3040
  if (!request || /^(?:https?:)?\/\//i.test(request) || request.startsWith("data:")) return;
2866
3041
  const cleanRequest = request.replace(/[?#].*$/, "");
2867
3042
  if (!/\.(?:css|wxss|acss|ttss|qss|jxss|tyss)$/i.test(cleanRequest)) return;
@@ -3285,7 +3460,7 @@ function resolveUniAppXStyleIsolationEnabled(root) {
3285
3460
  //#region src/uni-app-x/vite.ts
3286
3461
  let transformUVuePromise;
3287
3462
  function loadTransformUVue() {
3288
- transformUVuePromise ?? (transformUVuePromise = Promise.resolve().then(() => require("./transform-B0BxX3XB.js")).then((mod) => mod.transformUVue));
3463
+ transformUVuePromise ?? (transformUVuePromise = Promise.resolve().then(() => require("./transform-DZQETx51.js")).then((mod) => mod.transformUVue));
3289
3464
  return transformUVuePromise;
3290
3465
  }
3291
3466
  const preprocessorLangs = /* @__PURE__ */ new Set([
@@ -3359,14 +3534,14 @@ function createUniAppXPlugins(options) {
3359
3534
  const parsed = query ?? parseVueRequest(id).query;
3360
3535
  if (require_source_candidate_scan_signature.isCSSRequest(id) || parsed.vue && parsed.type === "style") {
3361
3536
  if (isCssModuleExport(code)) return;
3362
- const shouldGenerateCss = require_v4_engine.hasTailwindSourceDirectives(code, { importFallback: true }) || require_v4_engine.hasTailwindApplyDirective(code);
3537
+ const shouldGenerateCss = require_generator.hasTailwindSourceDirectives(code, { importFallback: true }) || require_generator.hasTailwindApplyDirective(code);
3363
3538
  rememberHarmonyApplySource(code);
3364
3539
  const generatedCss = shouldGenerateCss ? await generateCss?.(id, code, hookContext) : void 0;
3365
3540
  const styleCode = typeof generatedCss === "string" && generatedCss.trim().length > 0 ? generatedCss : code;
3366
3541
  const cacheKey = `${mainCssChunkMatcher(id, appType) ? "1" : "0"}:${id}`;
3367
3542
  let styleHandlerOptions = cssHandlerOptionsCache.get(cacheKey);
3368
3543
  if (!styleHandlerOptions) {
3369
- styleHandlerOptions = require_v4_engine.omitUndefined({
3544
+ styleHandlerOptions = require_generator.omitUndefined({
3370
3545
  isMainChunk: mainCssChunkMatcher(id, appType),
3371
3546
  uniAppXCssTarget: resolveUniAppXCssTarget(id),
3372
3547
  uniAppXUnsupported: resolvedUniAppXOptions.uvueUnsupported,
@@ -3429,7 +3604,7 @@ function createUniAppXPlugins(options) {
3429
3604
  const transformUVue = await loadTransformUVue();
3430
3605
  const enableComponentLocalStyle = shouldEnableComponentLocalStyle();
3431
3606
  const enablePageLocalStyle = shouldEnableHarmonyPageLocalStyle();
3432
- if (customAttributesEntities.length > 0 || disabledDefaultTemplateHandler || enableComponentLocalStyle || enablePageLocalStyle) return transformUVue(code, id, jsHandler, currentRuntimeSet, require_v4_engine.omitUndefined({
3607
+ if (customAttributesEntities.length > 0 || disabledDefaultTemplateHandler || enableComponentLocalStyle || enablePageLocalStyle) return transformUVue(code, id, jsHandler, currentRuntimeSet, require_generator.omitUndefined({
3433
3608
  ...customAttributesEntities.length > 0 ? { customAttributesEntities } : {},
3434
3609
  ...disabledDefaultTemplateHandler ? { disabledDefaultTemplateHandler } : {},
3435
3610
  ...enableComponentLocalStyle ? { enableComponentLocalStyle } : {},
@@ -3743,7 +3918,7 @@ function collectRememberedCssReplayGroups(sources, opts, rootDir, isWebGenerator
3743
3918
  //#endregion
3744
3919
  //#region src/bundlers/vite/generate-bundle/remembered-css-replay.ts
3745
3920
  async function processRememberedCssReplay(options) {
3746
- const { addWatchFile, activeViteCssCacheFiles, bundleFiles, cache, createScopedGeneratorRuntime, createScopedSourceCandidateGetter, createScopedSourceCandidateSourceGetter, cssTaskFactories, debug, defaultStyleOutputExtension, emitOrReplayCssAsset, generatorRuntime, generatorPlatform, getCssHandlerOptions, getCssUserHandlerOptions, getRememberedCssSignature, getRememberedCssSources, isNativeAppStyleTarget, isWebGeneratorTarget, lastCssResultByFile, lastCssSourceHashByFile, markCssAssetProcessed, metrics, normalizeViteCssCacheKey, onUpdate, opts, recordCssAssetResult, recordViteProcessedCssAssetResult, refreshRememberedCssSource, rootDir, runtimeState, setRememberedCssSignature, shouldInjectCssIntoMainFromOutput, shouldPreserveAppCssExtension, sourceRoot, styleHandler, timeTask, useIncrementalMode } = options;
3921
+ const { addWatchFile, activeViteCssCacheFiles, bundleFiles, cache, changedCssFiles = /* @__PURE__ */ new Set(), createScopedGeneratorRuntime, createScopedSourceCandidateGetter, createScopedSourceCandidateSourceGetter, cssTaskFactories, debug, defaultStyleOutputExtension, emitOrReplayCssAsset, generatorRuntime, generatorPlatform, getCssHandlerOptions, getCssUserHandlerOptions, getRememberedCssSignature, getRememberedCssSources, isNativeAppStyleTarget, isWebGeneratorTarget, lastCssRawSourceHashByFile = /* @__PURE__ */ new Map(), lastCssResultByFile, lastCssSourceHashByFile, markCssAssetProcessed, metrics, normalizeViteCssCacheKey, onUpdate, opts, recordCssAssetResult, recordViteProcessedCssAssetResult, refreshRememberedCssSource, rootDir, runtimeState, setRememberedCssSignature, shouldInjectCssIntoMainFromOutput, shouldPreserveAppCssExtension, sourceRoot, styleHandler, timeTask, useIncrementalMode } = options;
3747
3922
  const rememberedReplayGroups = collectRememberedCssReplayGroups(getRememberedCssSources?.(), opts, rootDir, isWebGeneratorTarget, shouldPreserveAppCssExtension, sourceRoot, defaultStyleOutputExtension, bundleFiles);
3748
3923
  for (const [outputFile, rememberedGroup] of rememberedReplayGroups) {
3749
3924
  if (require_source_candidate_scan_signature.isHTMLRequest(outputFile) || options.opts.htmlMatcher(outputFile)) continue;
@@ -3755,6 +3930,7 @@ async function processRememberedCssReplay(options) {
3755
3930
  const rememberedCssSource = mergeRememberedCssSources(refreshedRememberedGroup.map((item) => item.remembered), outputFile);
3756
3931
  if (!rememberedCssSource) continue;
3757
3932
  const { rawSource, sourceFile } = rememberedCssSource;
3933
+ const generatorRawSource = isWebGeneratorTarget ? rawSource : require_hmr_timing.normalizeMiniProgramGeneratorCssSource(rawSource, outputFile);
3758
3934
  activeViteCssCacheFiles.add(normalizeViteCssCacheKey(outputFile));
3759
3935
  activeViteCssCacheFiles.add(normalizeViteCssCacheKey(sourceFile));
3760
3936
  const outputCssHandlerOptions = getCssHandlerOptions(outputFile);
@@ -3764,17 +3940,21 @@ async function processRememberedCssReplay(options) {
3764
3940
  };
3765
3941
  const scopedSourceCandidateGetter = createScopedSourceCandidateGetter(outputFile, cssHandlerOptions);
3766
3942
  const scopedSourceCandidateSourceGetter = createScopedSourceCandidateSourceGetter(outputFile, cssHandlerOptions);
3767
- const scopedGeneratorRuntime = await createScopedGeneratorRuntime(outputFile, cssHandlerOptions, generatorRuntime, rawSource, sourceFile);
3768
- const cssRuntimeSignature = createCssRuntimeSignature(require_source_candidate_scan_signature.createCandidateSignature(scopedGeneratorRuntime), await require_source_candidate_scan_signature.createScopedGeneratorCandidateSignature(rawSource, sourceFile, require_source_candidate_scan_signature.createCandidateSignature(scopedGeneratorRuntime), scopedSourceCandidateGetter, {
3943
+ const scopedGeneratorRuntime = await createScopedGeneratorRuntime(outputFile, cssHandlerOptions, generatorRuntime, generatorRawSource, sourceFile);
3944
+ const cssRuntimeSignature = createCssRuntimeSignature(require_source_candidate_scan_signature.createCandidateSignature(scopedGeneratorRuntime), await require_source_candidate_scan_signature.createScopedGeneratorCandidateSignature(generatorRawSource, sourceFile, require_source_candidate_scan_signature.createCandidateSignature(scopedGeneratorRuntime), scopedSourceCandidateGetter, {
3769
3945
  includeFallbackSignature: cssHandlerOptions.isMainChunk,
3770
3946
  majorVersion: runtimeState.tailwindRuntime.majorVersion
3771
3947
  }));
3772
3948
  const cssRuntimeAffectingHash = cache.computeHash(require_source_candidate_scan_signature.createRuntimeAffectingSourceSignature(rawSource, "css"));
3773
3949
  const rememberedCssRuntimeSignature = createRememberedCssRuntimeSignature(cssRuntimeSignature, cssRuntimeAffectingHash);
3774
- const previousCss = useIncrementalMode && getLastCssSourceHash(lastCssSourceHashByFile, outputFile) === cssRuntimeAffectingHash ? getLastCssResult(lastCssResultByFile, outputFile) : void 0;
3950
+ const rawSourceHash = cache.computeHash(rawSource);
3951
+ const previousRawSourceHash = lastCssRawSourceHashByFile.get(outputFile);
3952
+ const cssSourceChanged = changedCssFiles.has(outputFile) || changedCssFiles.has(sourceFile) || previousRawSourceHash != null && previousRawSourceHash !== rawSourceHash;
3953
+ const previousCss = useIncrementalMode && !cssSourceChanged && getLastCssSourceHash(lastCssSourceHashByFile, outputFile) === cssRuntimeAffectingHash ? getLastCssResult(lastCssResultByFile, outputFile) : void 0;
3775
3954
  const allRememberedSignaturesFresh = rememberedKeys.length > 0 && rememberedKeys.every((key) => getRememberedCssSignature?.(key) === rememberedCssRuntimeSignature);
3776
3955
  if (bundleFiles.includes(outputFile) || bundleFiles.includes(sourceFile) || allRememberedSignaturesFresh) continue;
3777
- const sourceTraceTokenSources = scopedSourceCandidateSourceGetter ? require_hmr_timing.createCssTokenSourceMap(scopedSourceCandidateSourceGetter(void 0), opts) : void 0;
3956
+ const sourceTraceSources = scopedSourceCandidateSourceGetter ? await require_source_candidate_scan_signature.createScopedGeneratorSourceTraceMap(generatorRawSource, sourceFile, scopedSourceCandidateSourceGetter) : void 0;
3957
+ const sourceTraceTokenSources = sourceTraceSources ? require_hmr_timing.createCssTokenSourceMap(sourceTraceSources, opts) : void 0;
3778
3958
  const annotateCss = (css) => require_hmr_timing.annotateCssSourceTrace(css, {
3779
3959
  opts,
3780
3960
  tokenSources: sourceTraceTokenSources
@@ -3782,13 +3962,32 @@ async function processRememberedCssReplay(options) {
3782
3962
  const shouldRecordRememberedReplayCss = useIncrementalMode || isNativeAppStyleTarget;
3783
3963
  const shouldEmitRememberedReplayCssAsset = shouldRecordRememberedReplayCss;
3784
3964
  if (!shouldRecordRememberedReplayCss) continue;
3965
+ if (!isWebGeneratorTarget && (0, _weapp_tailwindcss_postcss.isPureLocalCssImportWrapper)(rawSource)) {
3966
+ cssTaskFactories.push(() => timeTask("css.replay", async () => {
3967
+ const start = performance.now();
3968
+ const css = annotateCss(require_hmr_timing.normalizeMiniProgramImportShell(rawSource));
3969
+ lastCssRawSourceHashByFile.set(outputFile, rawSourceHash);
3970
+ rememberLastCssResult(lastCssResultByFile, lastCssSourceHashByFile, outputFile, css, cssRuntimeAffectingHash);
3971
+ for (const key of rememberedKeys) setRememberedCssSignature?.(key, rememberedCssRuntimeSignature);
3972
+ recordCssAssetResult?.(outputFile, css);
3973
+ if (shouldEmitRememberedReplayCssAsset) {
3974
+ const replayAsset = emitOrReplayCssAsset(outputFile, css);
3975
+ if (replayAsset) markCssAssetProcessed?.(replayAsset, outputFile);
3976
+ }
3977
+ metrics.css.elapsed += measureElapsed(start);
3978
+ metrics.css.transformed++;
3979
+ onUpdate(outputFile, rawSource, css);
3980
+ debug("css replay preserve local import shell: %s", outputFile);
3981
+ }));
3982
+ continue;
3983
+ }
3785
3984
  cssTaskFactories.push(() => timeTask("css.replay", async () => {
3786
3985
  const start = performance.now();
3787
3986
  const generated = await require_source_candidate_scan_signature.generateTailwindV4Css({
3788
3987
  opts,
3789
3988
  runtimeState,
3790
3989
  runtime: scopedGeneratorRuntime,
3791
- rawSource,
3990
+ rawSource: generatorRawSource,
3792
3991
  file: sourceFile,
3793
3992
  outputFile,
3794
3993
  cssHandlerOptions,
@@ -3799,7 +3998,8 @@ async function processRememberedCssReplay(options) {
3799
3998
  debug,
3800
3999
  previousCss
3801
4000
  });
3802
- const css = annotateCss(generated?.css ?? (await styleHandler(rawSource, cssHandlerOptions)).css);
4001
+ const css = annotateCss(generated?.css ?? (await styleHandler(generatorRawSource, cssHandlerOptions)).css);
4002
+ lastCssRawSourceHashByFile.set(outputFile, rawSourceHash);
3803
4003
  rememberLastCssResult(lastCssResultByFile, lastCssSourceHashByFile, outputFile, css, cssRuntimeAffectingHash);
3804
4004
  for (const key of rememberedKeys) setRememberedCssSignature?.(key, rememberedCssRuntimeSignature);
3805
4005
  if (generated) {
@@ -3810,6 +4010,10 @@ async function processRememberedCssReplay(options) {
3810
4010
  injectIntoMain: outputCssHandlerOptions.isMainChunk ? false : shouldInjectReplayCssIntoMain,
3811
4011
  outputFile
3812
4012
  });
4013
+ if (outputFile !== sourceFile) recordViteProcessedCssAssetResult?.(outputFile, css, {
4014
+ injectIntoMain: outputCssHandlerOptions.isMainChunk ? false : shouldInjectReplayCssIntoMain,
4015
+ outputFile
4016
+ });
3813
4017
  debug("css replay generated result: %s bytes=%d", outputFile, css.length);
3814
4018
  }
3815
4019
  if (shouldEmitRememberedReplayCssAsset) {
@@ -4068,37 +4272,119 @@ function createStableTextSignature(input) {
4068
4272
  }
4069
4273
  return (hash >>> 0).toString(36);
4070
4274
  }
4275
+ function parseQuotedRequest(params) {
4276
+ const input = params.trim();
4277
+ const quote = input[0];
4278
+ if (quote !== "\"" && quote !== "'") return;
4279
+ let escaped = false;
4280
+ for (let index = 1; index < input.length; index++) {
4281
+ const char = input[index];
4282
+ if (escaped) {
4283
+ escaped = false;
4284
+ continue;
4285
+ }
4286
+ if (char === "\\") {
4287
+ escaped = true;
4288
+ continue;
4289
+ }
4290
+ if (char === quote) return input.slice(1, index);
4291
+ }
4292
+ }
4293
+ function parseSourceParams(params) {
4294
+ let input = params.trim();
4295
+ let negated = false;
4296
+ if (input.startsWith("not ")) {
4297
+ negated = true;
4298
+ input = input.slice(4).trim();
4299
+ }
4300
+ if (input.startsWith("inline(") && input.endsWith(")")) return {
4301
+ prefix: negated ? "source:inline:not" : "source:inline",
4302
+ value: input.slice(7, -1).trim()
4303
+ };
4304
+ const request = parseQuotedRequest(input);
4305
+ if (!request) return;
4306
+ return {
4307
+ prefix: negated ? "source:not" : "source",
4308
+ value: request
4309
+ };
4310
+ }
4311
+ function parseTailwindImportSource(params) {
4312
+ if (parseQuotedRequest(params) !== "tailwindcss") return;
4313
+ return /\bsource\(([^)]*)\)/.exec(params)?.[1]?.trim();
4314
+ }
4315
+ function hasExplicitTailwindV4Directive(source) {
4316
+ try {
4317
+ let found = false;
4318
+ _weapp_tailwindcss_postcss.postcss.parse(source).walkAtRules((rule) => {
4319
+ if (rule.name === "config" || rule.name === "source" || rule.name === "plugin" || rule.name === "custom-variant" || rule.name === "theme" || rule.name === "utility" || rule.name === "variant" || rule.name === "apply") {
4320
+ found = true;
4321
+ return false;
4322
+ }
4323
+ });
4324
+ return found;
4325
+ } catch {
4326
+ return false;
4327
+ }
4328
+ }
4071
4329
  function collectTailwindV4SourceFingerprint(source) {
4072
4330
  const tokens = /* @__PURE__ */ new Set();
4073
4331
  const add = (prefix, value) => {
4074
4332
  tokens.add(`${prefix}:${value.trim()}`);
4075
4333
  };
4076
- for (const match of source.matchAll(/@config\s+(["'])(.+?)\1\s*;?/g)) {
4077
- const configRequest = match[2];
4078
- add("config", node_path.default.basename(configRequest));
4079
- add("config-request", configRequest.replace(/\\/g, "/"));
4080
- }
4081
- for (const match of source.matchAll(/@source\s+(not\s+)?(["'])(.+?)\2\s*;?/g)) add(match[1] ? "source:not" : "source", match[3]);
4082
- for (const match of source.matchAll(/@plugin\s+(["'])(.+?)\1\s*(?:\{([\s\S]*?)\}|;)/g)) {
4083
- const request = match[2];
4084
- const optionBlock = match[3];
4085
- add("plugin", request);
4086
- add("plugin-request", request.replace(/\\/g, "/"));
4087
- if (optionBlock !== void 0) add("plugin-options", `${request}:${createStableTextSignature(optionBlock)}`);
4088
- }
4089
4334
  try {
4090
- _weapp_tailwindcss_postcss.postcss.parse(source).walkAtRules("plugin", (rule) => {
4091
- const request = /^(['"])(.+?)\1/.exec(rule.params.trim())?.[2];
4092
- if (!request || !rule.nodes?.length) return;
4093
- rule.walkDecls((decl) => {
4094
- add("plugin-option", `${request}:${decl.prop}:${decl.value}`);
4095
- });
4335
+ const root = _weapp_tailwindcss_postcss.postcss.parse(source);
4336
+ root.walkAtRules((rule) => {
4337
+ if (rule.name === "import") {
4338
+ const sourceMode = parseTailwindImportSource(rule.params);
4339
+ if (sourceMode) add("import-source", sourceMode);
4340
+ return;
4341
+ }
4342
+ if (rule.name === "config") {
4343
+ const configRequest = parseQuotedRequest(rule.params);
4344
+ if (configRequest) {
4345
+ add("config", node_path.default.basename(configRequest));
4346
+ add("config-request", configRequest.replace(/\\/g, "/"));
4347
+ }
4348
+ return;
4349
+ }
4350
+ if (rule.name === "source") {
4351
+ const parsed = parseSourceParams(rule.params);
4352
+ if (parsed) add(parsed.prefix, parsed.value);
4353
+ return;
4354
+ }
4355
+ if (rule.name === "plugin") {
4356
+ const request = parseQuotedRequest(rule.params);
4357
+ if (!request) return;
4358
+ add("plugin", request);
4359
+ add("plugin-request", request.replace(/\\/g, "/"));
4360
+ if (rule.nodes?.length) {
4361
+ add("plugin-options", `${request}:${createStableTextSignature(rule.toString())}`);
4362
+ rule.walkDecls((decl) => {
4363
+ add("plugin-option", `${request}:${decl.prop}:${decl.value}`);
4364
+ });
4365
+ }
4366
+ return;
4367
+ }
4368
+ if (rule.name === "custom-variant") {
4369
+ const [name] = rule.params.trim().split(/\s+/, 1);
4370
+ if (name) add("custom-variant", name);
4371
+ return;
4372
+ }
4373
+ if (rule.name === "theme" || rule.name === "utility" || rule.name === "variant" || rule.name === "layer") {
4374
+ const [name] = rule.params.trim().split(/\s+/, 1);
4375
+ if (name) add("directive", name);
4376
+ }
4377
+ });
4378
+ root.walkDecls((decl) => {
4379
+ if (decl.prop.startsWith("--")) add("theme-token", decl.prop);
4380
+ });
4381
+ root.walkRules((rule) => {
4382
+ for (const selector of rule.selectors ?? []) {
4383
+ const match = /\.([_a-z][\w-]*)/i.exec(selector);
4384
+ if (match?.[1]) add("selector", match[1]);
4385
+ }
4096
4386
  });
4097
4387
  } catch {}
4098
- for (const match of source.matchAll(/@custom-variant\s+([^{\s]+)/g)) add("custom-variant", match[1]);
4099
- for (const match of source.matchAll(/@(?:theme|utility|variant|layer)\s+([^{;\s]+)/g)) add("directive", match[1]);
4100
- for (const match of source.matchAll(/--[\w-]+(?=\s*:)/g)) add("theme-token", match[0]);
4101
- for (const match of source.matchAll(/\.([_a-z][\w-]*)\s*[{,]/gi)) add("selector", match[1]);
4102
4388
  return tokens;
4103
4389
  }
4104
4390
  function scoreConfiguredTailwindV4SourceForRawSource(rawSource, entrySource) {
@@ -4114,7 +4400,7 @@ function selectTailwindV4GenerationCssSourceForOutput(outputFile, entries, rawSo
4114
4400
  const generationSources = entries.filter((entry) => hasTailwindGenerationSource(entry.source));
4115
4401
  if (generationSources.length <= 1) return generationSources[0];
4116
4402
  const canMatchByOutputPath = Boolean(options.cwd || options.outputRoot || options.projectRoot);
4117
- const selectByOutputPath = (candidates) => {
4403
+ const selectByOutputPath = (candidates, shouldUseScore = (score) => score > 0) => {
4118
4404
  if (!canMatchByOutputPath) return;
4119
4405
  const scoredSources = candidates.map((entry) => ({
4120
4406
  entry,
@@ -4123,7 +4409,7 @@ function selectTailwindV4GenerationCssSourceForOutput(outputFile, entries, rawSo
4123
4409
  outputRoot: options.outputRoot,
4124
4410
  projectRoot: options.projectRoot
4125
4411
  })
4126
- })).filter((item) => item.score > 0).sort((a, b) => b.score - a.score);
4412
+ })).filter((item) => shouldUseScore(item.score)).sort((a, b) => b.score - a.score);
4127
4413
  const bestScore = scoredSources[0]?.score;
4128
4414
  const bestSources = bestScore ? scoredSources.filter((item) => item.score === bestScore) : [];
4129
4415
  return bestSources.length === 1 ? bestSources[0]?.entry : void 0;
@@ -4137,10 +4423,12 @@ function selectTailwindV4GenerationCssSourceForOutput(outputFile, entries, rawSo
4137
4423
  const bestSources = bestScore ? scoredSources.filter((item) => item.score === bestScore) : [];
4138
4424
  return bestSources.length === 1 ? bestSources[0]?.entry : void 0;
4139
4425
  };
4426
+ const explicitSources = generationSources.filter((entry) => hasExplicitTailwindV4Directive(entry.source));
4427
+ const candidates = explicitSources.length === 1 ? explicitSources : generationSources;
4428
+ const directoryIndexOutputPathMatched = selectByOutputPath(candidates, (score) => score >= 25e3 && score < 5e4);
4429
+ if (directoryIndexOutputPathMatched) return directoryIndexOutputPathMatched;
4140
4430
  const rawSourceMatched = selectByRawSourceFingerprint(generationSources);
4141
4431
  if (rawSourceMatched) return rawSourceMatched;
4142
- const explicitSources = generationSources.filter((entry) => /@(?:config|source|plugin|custom-variant|theme|utility|variant|apply)\b/.test(entry.source));
4143
- const candidates = explicitSources.length === 1 ? explicitSources : generationSources;
4144
4432
  const outputPathMatched = selectByOutputPath(candidates);
4145
4433
  if (outputPathMatched) return outputPathMatched;
4146
4434
  if (candidates.length === 1) return candidates[0];
@@ -4159,8 +4447,7 @@ function createTemporaryCssAssetSourceResolver(entries) {
4159
4447
  const seenEntryFiles = /* @__PURE__ */ new Set();
4160
4448
  const queuedEntries = entries.filter((entry) => {
4161
4449
  const entryFile = normalizeCssSourceKey(entry.file);
4162
- const outputFile = normalizeCssSourceKey(entry.outputFile);
4163
- if (outputFile === entryFile || !outputFile.includes("/") || seenEntryFiles.has(entryFile)) return false;
4450
+ if (normalizeCssSourceKey(entry.outputFile) === entryFile || seenEntryFiles.has(entryFile)) return false;
4164
4451
  seenEntryFiles.add(entryFile);
4165
4452
  return true;
4166
4453
  });
@@ -4173,14 +4460,18 @@ function createTemporaryCssAssetSourceResolver(entries) {
4173
4460
  },
4174
4461
  resolve(outputFile, rawSource) {
4175
4462
  if (!isTemporaryCssAssetFile(outputFile)) return;
4176
- const availableEntries = queuedEntries.filter((item) => !usedEntryFiles.has(normalizeCssSourceKey(item.file)));
4463
+ const outputFileKey = normalizeCssSourceKey(outputFile);
4464
+ const unusedEntries = queuedEntries.filter((item) => !usedEntryFiles.has(normalizeCssSourceKey(item.file)));
4465
+ const matchedOutputEntries = unusedEntries.filter((item) => normalizeCssSourceKey(item.outputFile) === outputFileKey);
4466
+ const usesMatchedOutputEntries = matchedOutputEntries.length > 0;
4467
+ const availableEntries = matchedOutputEntries.length > 0 ? matchedOutputEntries : unusedEntries.filter((item) => normalizeCssSourceKey(item.outputFile).includes("/"));
4177
4468
  const scoredEntries = rawSource ? availableEntries.map((entry) => ({
4178
4469
  entry,
4179
4470
  score: scoreConfiguredTailwindV4SourceForRawSource(rawSource, entry.source)
4180
4471
  })).filter((item) => item.score > 0).sort((a, b) => b.score - a.score) : [];
4181
4472
  const bestScore = scoredEntries[0]?.score;
4182
4473
  const bestEntries = bestScore ? scoredEntries.filter((item) => item.score === bestScore) : [];
4183
- const entry = bestEntries.length === 1 ? bestEntries[0]?.entry : availableEntries.find((item) => hasTailwindGenerationSource(item.source));
4474
+ const entry = bestEntries.length === 1 ? bestEntries[0]?.entry : usesMatchedOutputEntries || rawSource == null ? availableEntries.find((item) => hasTailwindGenerationSource(item.source)) : void 0;
4184
4475
  if (!entry) return;
4185
4476
  usedEntryFiles.add(normalizeCssSourceKey(entry.file));
4186
4477
  return {
@@ -4354,6 +4645,19 @@ function resolveSourceRootFromBundleGraph(config, bundle) {
4354
4645
  return sourceRoots.size === 1 ? [...sourceRoots][0] : void 0;
4355
4646
  }
4356
4647
  //#endregion
4648
+ //#region src/bundlers/vite/web-css-compat.ts
4649
+ /**
4650
+ * Web target 的 Tailwind 兼容转换由 generator-css 负责;Vite 外层只处理非 Web 生成目标
4651
+ * 落到 WebView 产物时的最终兼容需求,避免同一份 CSS 在 dev/build 中被重复解析转换。
4652
+ */
4653
+ function shouldApplyViteWebCssCompat(context, strategy) {
4654
+ if (strategy?.shouldApplyWebCssCompat?.(context) !== true) return false;
4655
+ return !context.currentGeneratorBranch.isWeb || context.currentGeneratorOptions.webCompat !== void 0;
4656
+ }
4657
+ function resolveViteWebCssCompatOptions(context) {
4658
+ return context.currentGeneratorBranch.isWeb ? context.currentGeneratorOptions.webCompat : context.currentGeneratorOptions.webCompat ?? true;
4659
+ }
4660
+ //#endregion
4357
4661
  //#region src/bundlers/vite/generate-bundle.ts
4358
4662
  function inferPlatformFromViteOutDir$1(outDir) {
4359
4663
  const segment = outDir ? node_path.default.basename(node_path.default.normalize(outDir)) : void 0;
@@ -4365,6 +4669,7 @@ function createGenerateBundleHook(context) {
4365
4669
  const state = require_source_candidate_scan_signature.createBundleBuildState();
4366
4670
  const lastCssResultByFile = /* @__PURE__ */ new Map();
4367
4671
  const lastCssSourceHashByFile = /* @__PURE__ */ new Map();
4672
+ const lastCssRawSourceHashByFile = /* @__PURE__ */ new Map();
4368
4673
  let currentOutDir;
4369
4674
  let currentSubpackageRoots;
4370
4675
  const createInitialCssPipelineContext = (file) => {
@@ -4437,14 +4742,14 @@ function createGenerateBundleHook(context) {
4437
4742
  resolveStylePlatform: () => generatorPlatform
4438
4743
  };
4439
4744
  const isWebGeneratorTarget = generatorBranch.isWeb;
4440
- const shouldApplyWebCssCompat = context.cssPipelineStrategy?.shouldApplyWebCssCompat?.(cssPipelineContext) === true;
4745
+ const shouldApplyWebCssCompat = shouldApplyViteWebCssCompat(cssPipelineContext, context.cssPipelineStrategy);
4441
4746
  const transformWebTargetCss = (css) => {
4442
4747
  return context.cssPipelineStrategy?.transformGeneratedCss?.(css, {
4443
4748
  ...cssPipelineContext,
4444
- defaultWebCssCompat: (value) => (0, _weapp_tailwindcss_postcss.transformWebCssCompat)(value, isWebGeneratorTarget ? generatorOptions.webCompat : generatorOptions.webCompat ?? true),
4749
+ defaultWebCssCompat: (value) => (0, _weapp_tailwindcss_postcss.transformWebCssCompat)(value, resolveViteWebCssCompatOptions(cssPipelineContext)),
4445
4750
  removeScopedPreflight: (value) => value,
4446
4751
  shouldApplyWebCssCompat
4447
- }) ?? (shouldApplyWebCssCompat ? (0, _weapp_tailwindcss_postcss.transformWebCssCompat)(css, isWebGeneratorTarget ? generatorOptions.webCompat : generatorOptions.webCompat ?? true) : css);
4752
+ }) ?? (shouldApplyWebCssCompat ? (0, _weapp_tailwindcss_postcss.transformWebCssCompat)(css, resolveViteWebCssCompatOptions(cssPipelineContext)) : css);
4448
4753
  };
4449
4754
  const isNativeAppStyleTarget = context.cssPipelineStrategy?.isNativeAppStyleTarget?.(cssPipelineContext) === true;
4450
4755
  const isHarmonyAppStyleTarget = context.cssPipelineStrategy?.isHarmonyAppStyleTarget?.(cssPipelineContext) === true;
@@ -4455,6 +4760,9 @@ function createGenerateBundleHook(context) {
4455
4760
  const sourceRoot = resolveWeappViteSourceRoot(resolvedConfig, opts.appType) ?? resolveSourceRootFromBundleGraph(resolvedConfig, bundle);
4456
4761
  const outDir = resolvedConfig?.build?.outDir ? node_path.default.resolve(rootDir, resolvedConfig.build.outDir) : rootDir;
4457
4762
  const defaultStyleOutputExtension = resolveMiniProgramStyleOutputExtension({ files: Object.keys(bundle) });
4763
+ const normalizeMiniProgramGeneratorRawSource = (source, outputFile) => {
4764
+ return isWebGeneratorTarget ? source : require_hmr_timing.normalizeMiniProgramGeneratorCssSource(source, outputFile);
4765
+ };
4458
4766
  await runtimeState.readyPromise;
4459
4767
  debug("start");
4460
4768
  onStart();
@@ -4480,7 +4788,7 @@ function createGenerateBundleHook(context) {
4480
4788
  timingDetails[name] = (timingDetails[name] ?? 0) + Math.max(0, performance.now() - startedAt);
4481
4789
  };
4482
4790
  const timeTask = createBundleTaskTimer(recordTimingDetail);
4483
- const emitOrReplayCssAsset = createCssAssetEmitter(this);
4791
+ const emitOrReplayCssAsset = createCssAssetEmitter(this, bundle);
4484
4792
  const metrics = createEmptyMetrics();
4485
4793
  const envFlags = resolveGenerateBundleEnvFlags();
4486
4794
  const bundleFiles = Object.keys(bundle);
@@ -4490,8 +4798,8 @@ function createGenerateBundleHook(context) {
4490
4798
  tailwindcssRuntimeOptions: {
4491
4799
  ...opts.tailwindcssRuntimeOptions ?? {},
4492
4800
  tailwindcss: {
4493
- ...require_v4_engine.resolveTailwindcssOptions(opts.tailwindcssRuntimeOptions) ?? {},
4494
- ...require_v4_engine.resolveTailwindcssOptions(runtimeState.tailwindRuntime.options) ?? {}
4801
+ ...require_generator.resolveTailwindcssOptions(opts.tailwindcssRuntimeOptions) ?? {},
4802
+ ...require_generator.resolveTailwindcssOptions(runtimeState.tailwindRuntime.options) ?? {}
4495
4803
  }
4496
4804
  }
4497
4805
  }, opts.tailwindcssBasedir ?? rootDir);
@@ -4520,8 +4828,8 @@ function createGenerateBundleHook(context) {
4520
4828
  const cleanFile = file.replace(/[?#].*$/, "");
4521
4829
  return normalizeSystemAliasPathKey(require_source_candidate_scan_signature.normalizeOutputPathKey(node_path.default.isAbsolute(cleanFile) ? node_path.default.resolve(cleanFile) : node_path.default.resolve(opts.tailwindcssBasedir ?? rootDir, cleanFile)));
4522
4830
  };
4523
- const runtimeTailwindcssOptions = require_v4_engine.resolveTailwindcssOptions(opts.tailwindcssRuntimeOptions);
4524
- const tailwindRuntimeOptions = require_v4_engine.resolveTailwindcssOptions(runtimeState.tailwindRuntime.options);
4831
+ const runtimeTailwindcssOptions = require_generator.resolveTailwindcssOptions(opts.tailwindcssRuntimeOptions);
4832
+ const tailwindRuntimeOptions = require_generator.resolveTailwindcssOptions(runtimeState.tailwindRuntime.options);
4525
4833
  const configuredTailwindV4CssSourceFileKeysForScope = new Set(configuredTailwindV4CssSourceEntriesForScope.map((entry) => normalizeConfiguredTailwindV4CssEntryFileKey(entry.file)));
4526
4834
  const configuredTailwindV4ExplicitCssEntryFileKeysForScope = new Set([
4527
4835
  ...Array.isArray(opts.cssEntries) ? opts.cssEntries : [],
@@ -4547,15 +4855,20 @@ function createGenerateBundleHook(context) {
4547
4855
  });
4548
4856
  };
4549
4857
  const resolveConfiguredTailwindV4CssEntryOutputFile = (sourceFile) => resolveViteCssPipelineOutputFile(sourceFile, opts, rootDir, isWebGeneratorTarget, shouldPreserveAppCssExtension, sourceRoot, defaultStyleOutputExtension, bundleFiles);
4550
- const selectConfiguredRootCssSourceEntry = (outputFile, entries, originalFileNames) => {
4551
- const matchedOriginalEntry = entries.find((entry) => originalFileNames?.some((originalFile) => normalizeConfiguredTailwindV4CssEntryFileKey(originalFile) === normalizeConfiguredTailwindV4CssEntryFileKey(entry.file)) === true);
4552
- if (matchedOriginalEntry && outputFile.replace(/[?#].*$/, "").endsWith(".css")) return matchedOriginalEntry;
4553
- if (!(context.cssPipelineStrategy?.shouldSelectConfiguredCssEntryRootSource?.({
4858
+ const shouldSelectConfiguredRootCssOutput = (outputFile) => {
4859
+ if (!opts.cssMatcher(outputFile) || !isRootStyleOutputFile(outputFile)) return false;
4860
+ return context.cssPipelineStrategy?.shouldSelectConfiguredCssEntryRootSource?.({
4554
4861
  ...cssPipelineContext,
4555
4862
  isRootStyleOutputFile,
4556
4863
  outputFile
4557
- }) === true || cssPipelineContext.currentGeneratorBranch.isWeb && opts.cssMatcher(outputFile) && isRootStyleOutputFile(outputFile))) return;
4558
- const generationEntries = entries.filter((entry) => hasTailwindGenerationSource(entry.source));
4864
+ }) === true || cssPipelineContext.currentGeneratorBranch.isWeb;
4865
+ };
4866
+ const selectConfiguredRootCssSourceEntry = (outputFile, entries, originalFileNames) => {
4867
+ const matchedOriginalEntry = entries.find((entry) => originalFileNames?.some((originalFile) => normalizeConfiguredTailwindV4CssEntryFileKey(originalFile) === normalizeConfiguredTailwindV4CssEntryFileKey(entry.file)) === true);
4868
+ if (matchedOriginalEntry && outputFile.replace(/[?#].*$/, "").endsWith(".css")) return matchedOriginalEntry;
4869
+ if (!shouldSelectConfiguredRootCssOutput(outputFile)) return;
4870
+ const shouldRequireExplicitConfiguredEntry = !cssPipelineContext.currentGeneratorBranch.isWeb && opts.cssMatcher(outputFile) && isRootStyleOutputFile(outputFile);
4871
+ const generationEntries = entries.filter((entry) => hasTailwindGenerationSource(entry.source) && (!shouldRequireExplicitConfiguredEntry || configuredTailwindV4ExplicitCssEntryFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(entry.file))));
4559
4872
  if (generationEntries.length <= 1) return generationEntries[0];
4560
4873
  const rootOutputEntries = generationEntries.filter((entry) => {
4561
4874
  return !require_source_candidate_scan_signature.normalizeOutputPathKey(resolveConfiguredTailwindV4CssEntryOutputFile(entry.file).replace(/[?#].*$/, "")).includes("/");
@@ -4568,6 +4881,35 @@ function createGenerateBundleHook(context) {
4568
4881
  if (mainPackageEntries.length === 1) return mainPackageEntries[0];
4569
4882
  }
4570
4883
  };
4884
+ const resolveConfiguredRootCssSourceStyle = (outputFile, entries, originalFileNames) => {
4885
+ const entry = selectConfiguredRootCssSourceEntry(outputFile, entries, originalFileNames);
4886
+ return entry ? {
4887
+ outputFile,
4888
+ rawSource: entry.source,
4889
+ sourceFile: entry.file
4890
+ } : void 0;
4891
+ };
4892
+ const shouldKeepCurrentRootMiniProgramStyleOutputAsImportShell = (outputFile, css) => {
4893
+ const normalizedOutputFile = require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile.replace(/[?#].*$/, ""));
4894
+ return opts.cssMatcher(outputFile) && isMiniProgramStyleOutputFile(outputFile) && !normalizedOutputFile.includes("/") && shouldKeepRootMiniProgramStyleAsImportShell(context.cssPipelineStrategy?.shouldKeepRootMiniProgramStyleAsImportShell?.({
4895
+ ...cssPipelineContext,
4896
+ css,
4897
+ file: outputFile
4898
+ }));
4899
+ };
4900
+ const shouldKeepCurrentRootCssOutputForConfiguredSource = (sourceFile, outputFile) => {
4901
+ const normalizedOutputFile = require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile.replace(/[?#].*$/, ""));
4902
+ const isRootConfiguredStyleOutput = normalizedOutputFile.endsWith(".css") ? isRootStyleOutputFile(outputFile) : isMiniProgramStyleOutputFile(outputFile) && !normalizedOutputFile.includes("/");
4903
+ return typeof sourceFile === "string" && opts.cssMatcher(outputFile) && isRootConfiguredStyleOutput && !shouldKeepCurrentRootMiniProgramStyleOutputAsImportShell(outputFile) && configuredTailwindV4ExplicitCssEntryFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(sourceFile));
4904
+ };
4905
+ const hasExplicitConfiguredRootCssEntryForOutput = (outputFile) => {
4906
+ if (cssPipelineContext.currentGeneratorBranch.isWeb || !opts.cssMatcher(outputFile) || !isRootStyleOutputFile(outputFile) || !shouldSelectConfiguredRootCssOutput(outputFile)) return false;
4907
+ return configuredTailwindV4CssSourceEntriesForScope.some((entry) => {
4908
+ if (!configuredTailwindV4ExplicitCssEntryFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(entry.file))) return false;
4909
+ const entryOutputFile = resolveConfiguredTailwindV4CssEntryOutputFile(entry.file);
4910
+ return !require_source_candidate_scan_signature.normalizeOutputPathKey(entryOutputFile.replace(/[?#].*$/, "")).includes("/") || currentSubpackageRoots != null && !isSubpackageOutputFile(entryOutputFile, currentSubpackageRoots);
4911
+ });
4912
+ };
4571
4913
  const { createScopedSourceCandidateGetter, createScopedSourceCandidateSourceGetter, shouldExcludeSubpackageSourceCandidates, shouldInjectCssIntoMainFromOutput } = createSubpackageSourceCandidateScope({
4572
4914
  cssSourceFiles: configuredTailwindV4CssSourceEntriesForScope.map((entry) => entry.file),
4573
4915
  getSourceCandidateSourcesForEntries,
@@ -4619,8 +4961,8 @@ function createGenerateBundleHook(context) {
4619
4961
  }) : await context.ensureRuntimeClassSet(envFlags.forceRuntimeRefreshByEnv);
4620
4962
  const shouldFilterTailwindV4MiniProgramCandidates = require_generator.shouldUseMiniProgramCssBranch(generatorBranch);
4621
4963
  const collectedGeneratorCandidates = /* @__PURE__ */ new Set([...runtime, ...sourceCandidates]);
4622
- const filteredGeneratorCandidates = shouldFilterTailwindV4MiniProgramCandidates ? require_v4_engine.filterUnsupportedMiniProgramTailwindV4Candidates(collectedGeneratorCandidates) : collectedGeneratorCandidates;
4623
- const filteredSourceCandidates = shouldFilterTailwindV4MiniProgramCandidates ? require_v4_engine.filterUnsupportedMiniProgramTailwindV4Candidates(sourceCandidates) : sourceCandidates;
4964
+ const filteredGeneratorCandidates = shouldFilterTailwindV4MiniProgramCandidates ? require_generator.filterUnsupportedMiniProgramTailwindV4Candidates(collectedGeneratorCandidates) : collectedGeneratorCandidates;
4965
+ const filteredSourceCandidates = shouldFilterTailwindV4MiniProgramCandidates ? require_generator.filterUnsupportedMiniProgramTailwindV4Candidates(sourceCandidates) : sourceCandidates;
4624
4966
  const transformRuntime = shouldFilterTailwindV4MiniProgramCandidates ? new Set(runtime) : new Set(filteredGeneratorCandidates);
4625
4967
  const generatorRuntime = filteredGeneratorCandidates;
4626
4968
  const cssEntries = snapshot.entries.filter((entry) => entry.type === "css" && entry.output.type === "asset");
@@ -4629,7 +4971,8 @@ function createGenerateBundleHook(context) {
4629
4971
  const mainCssEntry = cssEntries.find((entry) => getCssHandlerOptions(entry.file).isMainChunk) ?? cssEntries[0];
4630
4972
  if (mainCssEntry) {
4631
4973
  const mainCssRawSource = typeof mainCssEntry.output.source === "string" ? mainCssEntry.output.source : node_buffer.Buffer.from(mainCssEntry.output.source).toString();
4632
- if (!require_v4_engine.hasTailwindApplyDirective(mainCssRawSource)) {
4974
+ if (!require_generator.hasTailwindApplyDirective(mainCssRawSource)) {
4975
+ const validationRawSource = normalizeMiniProgramGeneratorRawSource(mainCssRawSource, mainCssEntry.file);
4633
4976
  const generatedCssSources = /* @__PURE__ */ new Set();
4634
4977
  for (const [, record] of getViteProcessedCssAssetResults?.() ?? []) if (typeof record === "string") generatedCssSources.add(record);
4635
4978
  else if (typeof record?.css === "string") generatedCssSources.add(record.css);
@@ -4637,7 +4980,7 @@ function createGenerateBundleHook(context) {
4637
4980
  opts,
4638
4981
  runtimeState,
4639
4982
  candidates: filteredSourceCandidates,
4640
- rawSource: mainCssRawSource,
4983
+ rawSource: validationRawSource,
4641
4984
  generatedCssSources,
4642
4985
  file: mainCssEntry.file,
4643
4986
  cssHandlerOptions: getCssHandlerOptions(mainCssEntry.file),
@@ -4655,6 +4998,9 @@ function createGenerateBundleHook(context) {
4655
4998
  const cssExtensionByStem = collectCssExtensionByStem(bundleFiles, opts.cssMatcher);
4656
4999
  const jsImportedCssFiles = collectJsImportedCssFiles(snapshot);
4657
5000
  const runtimeLinkedCssFiles = /* @__PURE__ */ new Set([...collectRuntimeLinkedCssFiles(snapshot, cssExtensionByStem, defaultStyleOutputExtension), ...jsImportedCssFiles]);
5001
+ const shouldQueueTemporaryCssSourceEntry = (sourceFile, outputFile) => {
5002
+ return require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile).includes("/") || typeof sourceFile === "string" && shouldSelectConfiguredRootCssOutput(outputFile) && configuredTailwindV4ExplicitCssEntryFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(sourceFile));
5003
+ };
4658
5004
  rememberRuntimeLinkedCssSources({
4659
5005
  bundleFiles,
4660
5006
  debug,
@@ -4677,7 +5023,7 @@ function createGenerateBundleHook(context) {
4677
5023
  ...[...runtimeLinkedCssFiles].filter((file) => !snapshot.sourceHashByFile.has(file)).map((file) => {
4678
5024
  const outputFile = resolveViteCssPipelineOutputFile(file, opts, rootDir, isWebGeneratorTarget, shouldPreserveAppCssExtension, sourceRoot, defaultStyleOutputExtension, bundleFiles);
4679
5025
  const inferredSourceStyle = resolveSourceStyleSourceFromOutputFile(outputFile, snapshot, outDir, sourceRoot, getCssSource, jsImportedCssFiles.has(file) ? getSourceCandidateSources : void 0, getConfiguredTailwindV4CssSourceEntries().map((entry) => [entry.file, entry.source]), debug);
4680
- return inferredSourceStyle && currentSubpackageRoots ? {
5026
+ return inferredSourceStyle && currentSubpackageRoots && shouldQueueTemporaryCssSourceEntry(inferredSourceStyle.sourceFile, outputFile) ? {
4681
5027
  file: inferredSourceStyle.sourceFile,
4682
5028
  outputFile,
4683
5029
  source: inferredSourceStyle.rawSource
@@ -4687,10 +5033,11 @@ function createGenerateBundleHook(context) {
4687
5033
  file: remembered.sourceFile,
4688
5034
  outputFile: remembered.outputFile,
4689
5035
  source: remembered.rawSource
4690
- })),
5036
+ })).filter((entry) => shouldQueueTemporaryCssSourceEntry(entry.file, entry.outputFile)),
4691
5037
  ...getConfiguredTailwindV4CssSourceEntries().map((entry) => {
4692
5038
  const outputFile = resolveMatchedCssSourceOutputFile(entry.file);
4693
- return outputFile ? {
5039
+ const isExplicitConfiguredEntry = configuredTailwindV4ExplicitCssEntryFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(entry.file));
5040
+ return outputFile && (require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile).includes("/") || isExplicitConfiguredEntry && shouldSelectConfiguredRootCssOutput(outputFile)) ? {
4694
5041
  file: entry.file,
4695
5042
  outputFile,
4696
5043
  source: entry.source
@@ -4867,6 +5214,7 @@ function createGenerateBundleHook(context) {
4867
5214
  return await refreshRememberedCssSource?.(remembered) ?? remembered;
4868
5215
  }));
4869
5216
  rememberedCssSources = rememberedCssSources.filter((remembered) => {
5217
+ if (hasExplicitConfiguredRootCssEntryForOutput(outputFile) && !configuredTailwindV4ExplicitCssEntryFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(remembered.sourceFile))) return false;
4870
5218
  if (!configuredTailwindV4CssSourceFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(remembered.sourceFile))) return true;
4871
5219
  const matchedOutputFile = resolveMatchedOutputFileForCurrentAsset(remembered.sourceFile);
4872
5220
  return !matchedOutputFile || require_source_candidate_scan_signature.normalizeOutputPathKey(matchedOutputFile) === require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile);
@@ -4883,10 +5231,17 @@ function createGenerateBundleHook(context) {
4883
5231
  hasUsableRememberedTailwindSource = false;
4884
5232
  }
4885
5233
  let outputCssHandlerOptions = getCssHandlerOptions(outputFile);
4886
- if (isTemporaryCssAssetFile(outputFile) && hasTailwindGenerationSource(rawSource)) {
5234
+ const configuredRootSourceStyle = resolveConfiguredRootCssSourceStyle(outputFile, getConfiguredTailwindV4CssSourceEntries(), originalSource.originalFileNames);
5235
+ const hasExplicitRememberedRootSource = rememberedCssSources.some((remembered) => configuredTailwindV4ExplicitCssEntryFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(remembered.sourceFile)));
5236
+ if (configuredRootSourceStyle && (!hasUsableRememberedTailwindSource || !hasExplicitRememberedRootSource)) {
5237
+ rememberedCssSources = [configuredRootSourceStyle];
5238
+ hasUsableRememberedTailwindSource = true;
5239
+ debug("source style source inferred from configured root tailwind v4 css source: %s -> %s", outputFile, configuredRootSourceStyle.sourceFile);
5240
+ }
5241
+ if (!hasUsableRememberedTailwindSource && isTemporaryCssAssetFile(outputFile) && hasTailwindGenerationSource(rawSource)) {
4887
5242
  const resolvedTemporarySource = temporaryCssAssetSourceResolver.resolve(outputFile, rawSource);
4888
5243
  if (resolvedTemporarySource) {
4889
- outputFile = resolveMatchedOutputFileForCurrentAsset(resolvedTemporarySource.sourceFile) ?? resolvedTemporarySource.outputFile;
5244
+ outputFile = shouldKeepCurrentRootCssOutputForConfiguredSource(resolvedTemporarySource.sourceFile, outputFile) ? outputFile : resolveMatchedOutputFileForCurrentAsset(resolvedTemporarySource.sourceFile) ?? resolvedTemporarySource.outputFile;
4890
5245
  activeViteCssCacheFiles.add(normalizeViteCssCacheKey(outputFile));
4891
5246
  outputCssHandlerOptions = getCssHandlerOptions(outputFile);
4892
5247
  outputCssHandlerOptions = {
@@ -4906,50 +5261,19 @@ function createGenerateBundleHook(context) {
4906
5261
  }
4907
5262
  if (!hasUsableRememberedTailwindSource) {
4908
5263
  const configuredTailwindV4CssSourceEntries = getConfiguredTailwindV4CssSourceEntries();
4909
- const inferredSourceStyle = resolveSourceStyleSourceFromOutputFile(outputFile, snapshot, outDir, sourceRoot, getCssSource, getSourceCandidateSources, configuredTailwindV4CssSourceEntries.map((entry) => [entry.file, entry.source]), debug);
4910
- const inferredWebviewRootSourceEntry = inferredSourceStyle ? void 0 : selectConfiguredRootCssSourceEntry(outputFile, configuredTailwindV4CssSourceEntries, originalSource.originalFileNames);
4911
- const inferredWebviewRootSourceStyle = inferredWebviewRootSourceEntry ? {
4912
- outputFile,
4913
- rawSource: inferredWebviewRootSourceEntry.source,
4914
- sourceFile: inferredWebviewRootSourceEntry.file
4915
- } : void 0;
4916
- const inferredOriginalSourceStyle = inferredSourceStyle ?? (outputFile === file ? void 0 : resolveSourceStyleSourceFromOutputFile(file, snapshot, outDir, sourceRoot, getCssSource, getSourceCandidateSources, configuredTailwindV4CssSourceEntries.map((entry) => [entry.file, entry.source]), debug)) ?? inferredWebviewRootSourceStyle;
4917
- if (inferredOriginalSourceStyle) {
4918
- outputFile = resolveMatchedOutputFileForCurrentAsset(inferredOriginalSourceStyle.sourceFile) ?? outputFile;
4919
- activeViteCssCacheFiles.add(normalizeViteCssCacheKey(outputFile));
4920
- outputCssHandlerOptions = getCssHandlerOptions(outputFile);
4921
- rememberedCssSources = [{
4922
- ...inferredOriginalSourceStyle,
4923
- outputFile
4924
- }];
4925
- } else if (isTemporaryCssAssetFile(outputFile) && configuredTailwindV4CssSourceEntries.length > 1) {
4926
- const resolvedTemporarySource = temporaryCssAssetSourceResolver.resolve(outputFile, rawSource);
4927
- if (resolvedTemporarySource) {
4928
- outputFile = resolveMatchedOutputFileForCurrentAsset(resolvedTemporarySource.sourceFile) ?? resolvedTemporarySource.outputFile;
4929
- activeViteCssCacheFiles.add(normalizeViteCssCacheKey(outputFile));
4930
- outputCssHandlerOptions = getCssHandlerOptions(outputFile);
4931
- outputCssHandlerOptions = {
4932
- ...outputCssHandlerOptions,
4933
- isMainChunk: false
4934
- };
4935
- resolvedFromTemporaryCssAsset = true;
4936
- usedConfiguredTailwindV4CssSourceFiles.add(require_source_candidate_scan_signature.normalizeOutputPathKey(resolvedTemporarySource.sourceFile));
4937
- rememberedCssSources = [{
4938
- outputFile,
4939
- rawSource: resolvedTemporarySource.rawSource,
4940
- sourceFile: resolvedTemporarySource.sourceFile
4941
- }];
4942
- debug("source style source inferred from temporary configured tailwind v4 css source: %s -> %s", outputFile, resolvedTemporarySource.sourceFile);
4943
- }
4944
- } else if (hasTailwindGenerationSource(rawSource) && (originalSource.originalFileNames?.length ?? 0) === 0) {
4945
- const availableConfiguredTailwindV4CssSourceEntries = configuredTailwindV4CssSourceEntries.filter((entry) => !usedConfiguredTailwindV4CssSourceFiles.has(require_source_candidate_scan_signature.normalizeOutputPathKey(entry.file)));
4946
- const configuredGenerationSource = selectTailwindV4GenerationCssSourceForOutput(outputFile, availableConfiguredTailwindV4CssSourceEntries, rawSource, {
5264
+ const isCurrentRootMiniProgramStyleOutput = opts.cssMatcher(outputFile) && isMiniProgramStyleOutputFile(outputFile) && !require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile.replace(/[?#].*$/, "")).includes("/");
5265
+ if (isCurrentRootMiniProgramStyleOutput && hasTailwindGenerationSource(rawSource)) {
5266
+ const configuredGenerationSource = selectTailwindV4GenerationCssSourceForOutput(outputFile, configuredTailwindV4CssSourceEntries, rawSource, {
4947
5267
  cwd: opts.tailwindcssBasedir,
4948
5268
  outputRoot: outDir,
4949
5269
  projectRoot: sourceRoot ?? rootDir
4950
5270
  });
4951
- if (configuredGenerationSource && !hasViteProcessedCssResultForSource(configuredGenerationSource.file, getViteProcessedCssAssetResults)) {
4952
- outputFile = resolveMatchedOutputFileForCurrentAsset(configuredGenerationSource.file) ?? outputFile;
5271
+ const configuredGenerationOutputFile = configuredGenerationSource ? shouldKeepCurrentRootMiniProgramStyleOutputAsImportShell(outputFile, rawSource) ? resolveMatchedOutputFileForCurrentAsset(configuredGenerationSource.file) ?? outputFile : outputFile : void 0;
5272
+ const hasConfiguredGenerationSourceAlreadyUsed = configuredGenerationSource ? usedConfiguredTailwindV4CssSourceFiles.has(require_source_candidate_scan_signature.normalizeOutputPathKey(configuredGenerationSource.file)) : false;
5273
+ const hasConfiguredGenerationSourceAlreadyProcessed = configuredGenerationSource ? hasViteProcessedCssResultForSource(configuredGenerationSource.file, getViteProcessedCssAssetResults) : false;
5274
+ const shouldUseConfiguredGenerationSource = configuredGenerationSource && (!hasConfiguredGenerationSourceAlreadyUsed && !hasConfiguredGenerationSourceAlreadyProcessed || require_source_candidate_scan_signature.normalizeOutputPathKey(configuredGenerationOutputFile ?? outputFile) === require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile));
5275
+ if (configuredGenerationSource && shouldUseConfiguredGenerationSource) {
5276
+ outputFile = configuredGenerationOutputFile ?? outputFile;
4953
5277
  activeViteCssCacheFiles.add(normalizeViteCssCacheKey(outputFile));
4954
5278
  outputCssHandlerOptions = getCssHandlerOptions(outputFile);
4955
5279
  usedConfiguredTailwindV4CssSourceFiles.add(require_source_candidate_scan_signature.normalizeOutputPathKey(configuredGenerationSource.file));
@@ -4958,9 +5282,70 @@ function createGenerateBundleHook(context) {
4958
5282
  rawSource: configuredGenerationSource.source,
4959
5283
  sourceFile: configuredGenerationSource.file
4960
5284
  }];
5285
+ hasUsableRememberedTailwindSource = true;
4961
5286
  debug("source style source inferred from scoped configured tailwind v4 css source: %s -> %s", outputFile, configuredGenerationSource.file);
4962
5287
  }
4963
5288
  }
5289
+ if (!hasUsableRememberedTailwindSource) {
5290
+ const inferredSourceStyle = resolveSourceStyleSourceFromOutputFile(outputFile, snapshot, outDir, sourceRoot, getCssSource, getSourceCandidateSources, configuredTailwindV4CssSourceEntries.map((entry) => [entry.file, entry.source]), debug);
5291
+ const inferredWebviewRootSourceEntry = inferredSourceStyle ? void 0 : selectConfiguredRootCssSourceEntry(outputFile, configuredTailwindV4CssSourceEntries, originalSource.originalFileNames);
5292
+ const inferredWebviewRootSourceStyle = inferredWebviewRootSourceEntry ? {
5293
+ outputFile,
5294
+ rawSource: inferredWebviewRootSourceEntry.source,
5295
+ sourceFile: inferredWebviewRootSourceEntry.file
5296
+ } : void 0;
5297
+ const inferredOriginalSourceStyle = inferredSourceStyle ?? (outputFile === file ? void 0 : resolveSourceStyleSourceFromOutputFile(file, snapshot, outDir, sourceRoot, getCssSource, getSourceCandidateSources, configuredTailwindV4CssSourceEntries.map((entry) => [entry.file, entry.source]), debug)) ?? inferredWebviewRootSourceStyle;
5298
+ if (inferredOriginalSourceStyle) {
5299
+ const matchedOutputFile = require_source_candidate_scan_signature.normalizeOutputPathKey(inferredOriginalSourceStyle.outputFile) === require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile) ? outputFile : resolveMatchedOutputFileForCurrentAsset(inferredOriginalSourceStyle.sourceFile) ?? outputFile;
5300
+ debug("source style output resolved: %s -> %s from %s", outputFile, matchedOutputFile, inferredOriginalSourceStyle.sourceFile);
5301
+ outputFile = matchedOutputFile;
5302
+ activeViteCssCacheFiles.add(normalizeViteCssCacheKey(outputFile));
5303
+ outputCssHandlerOptions = getCssHandlerOptions(outputFile);
5304
+ rememberedCssSources = [{
5305
+ ...inferredOriginalSourceStyle,
5306
+ outputFile
5307
+ }];
5308
+ } else if (isTemporaryCssAssetFile(outputFile) && configuredTailwindV4CssSourceEntries.length > 1) {
5309
+ const resolvedTemporarySource = temporaryCssAssetSourceResolver.resolve(outputFile, rawSource);
5310
+ if (resolvedTemporarySource) {
5311
+ outputFile = shouldKeepCurrentRootCssOutputForConfiguredSource(resolvedTemporarySource.sourceFile, outputFile) ? outputFile : resolveMatchedOutputFileForCurrentAsset(resolvedTemporarySource.sourceFile) ?? resolvedTemporarySource.outputFile;
5312
+ activeViteCssCacheFiles.add(normalizeViteCssCacheKey(outputFile));
5313
+ outputCssHandlerOptions = getCssHandlerOptions(outputFile);
5314
+ outputCssHandlerOptions = {
5315
+ ...outputCssHandlerOptions,
5316
+ isMainChunk: false
5317
+ };
5318
+ resolvedFromTemporaryCssAsset = true;
5319
+ usedConfiguredTailwindV4CssSourceFiles.add(require_source_candidate_scan_signature.normalizeOutputPathKey(resolvedTemporarySource.sourceFile));
5320
+ rememberedCssSources = [{
5321
+ outputFile,
5322
+ rawSource: resolvedTemporarySource.rawSource,
5323
+ sourceFile: resolvedTemporarySource.sourceFile
5324
+ }];
5325
+ debug("source style source inferred from temporary configured tailwind v4 css source: %s -> %s", outputFile, resolvedTemporarySource.sourceFile);
5326
+ }
5327
+ } else if (!isCurrentRootMiniProgramStyleOutput && hasTailwindGenerationSource(rawSource) && (originalSource.originalFileNames?.length ?? 0) === 0) {
5328
+ const availableConfiguredTailwindV4CssSourceEntries = configuredTailwindV4CssSourceEntries.filter((entry) => !usedConfiguredTailwindV4CssSourceFiles.has(require_source_candidate_scan_signature.normalizeOutputPathKey(entry.file)));
5329
+ const configuredGenerationSource = selectTailwindV4GenerationCssSourceForOutput(outputFile, availableConfiguredTailwindV4CssSourceEntries, rawSource, {
5330
+ cwd: opts.tailwindcssBasedir,
5331
+ outputRoot: outDir,
5332
+ projectRoot: sourceRoot ?? rootDir
5333
+ });
5334
+ if (configuredGenerationSource && !hasViteProcessedCssResultForSource(configuredGenerationSource.file, getViteProcessedCssAssetResults)) {
5335
+ outputFile = resolveMatchedOutputFileForCurrentAsset(configuredGenerationSource.file) ?? outputFile;
5336
+ activeViteCssCacheFiles.add(normalizeViteCssCacheKey(outputFile));
5337
+ outputCssHandlerOptions = getCssHandlerOptions(outputFile);
5338
+ usedConfiguredTailwindV4CssSourceFiles.add(require_source_candidate_scan_signature.normalizeOutputPathKey(configuredGenerationSource.file));
5339
+ rememberedCssSources = [{
5340
+ outputFile,
5341
+ rawSource: configuredGenerationSource.source,
5342
+ sourceFile: configuredGenerationSource.file
5343
+ }];
5344
+ hasUsableRememberedTailwindSource = true;
5345
+ debug("source style source inferred from scoped configured tailwind v4 css source: %s -> %s", outputFile, configuredGenerationSource.file);
5346
+ }
5347
+ }
5348
+ }
4964
5349
  }
4965
5350
  let rememberedCssSource = mergeRememberedCssSources(rememberedCssSources, outputFile);
4966
5351
  if (rememberedCssSource && viteProcessedCssAsset && outputCssHandlerOptions.isMainChunk !== true && configuredTailwindV4CssSourceFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(rememberedCssSource.sourceFile))) {
@@ -4978,10 +5363,10 @@ function createGenerateBundleHook(context) {
4978
5363
  const shouldKeepImportedCssShell = isCssImportOnlyBundleAsset(bundle, file, rawSource);
4979
5364
  const useRememberedCssSource = !shouldKeepImportedCssShell && rememberedCssSource != null && (require_source_candidate_scan_signature.normalizeOutputPathKey(rememberedCssSource.sourceFile) !== require_source_candidate_scan_signature.normalizeOutputPathKey(file) || !hasTailwindGenerationSource(rawSource) && hasTailwindGenerationSource(rememberedCssSource.rawSource));
4980
5365
  const vitePipelineCssAsset = viteProcessedCssAsset || useRememberedCssSource;
4981
- const generatorRawSource = vitePipelineCssAsset ? rememberedCssSource?.rawSource ?? rawSource : rawSource;
4982
- const hasRememberedApplySource = vitePipelineCssAsset && rememberedCssSource != null && require_v4_engine.hasTailwindApplyDirective(generatorRawSource);
5366
+ const generatorRawSource = normalizeMiniProgramGeneratorRawSource(vitePipelineCssAsset ? rememberedCssSource?.rawSource ?? rawSource : rawSource, outputFile);
5367
+ const hasRememberedApplySource = vitePipelineCssAsset && rememberedCssSource != null && require_generator.hasTailwindApplyDirective(generatorRawSource);
4983
5368
  const hasDifferentRememberedCssSource = rememberedCssSource != null && normalizeCssSourceForCompare(rememberedCssSource.rawSource) !== normalizeCssSourceForCompare(rawSource);
4984
- const hasCurrentTailwindGenerationDirective = require_v4_engine.hasTailwindSourceDirectives(rawSource, { importFallback: true }) || require_v4_engine.hasTailwindRootDirectives(rawSource, { importFallback: true }) || require_v4_engine.hasTailwindApplyDirective(rawSource);
5369
+ const hasCurrentTailwindGenerationDirective = require_generator.hasTailwindSourceDirectives(rawSource, { importFallback: true }) || require_generator.hasTailwindRootDirectives(rawSource, { importFallback: true }) || require_generator.hasTailwindApplyDirective(rawSource);
4985
5370
  if (shouldKeepImportedCssShell && !hasCurrentTailwindGenerationDirective) {
4986
5371
  applyCssResult(rawSource);
4987
5372
  markCssAssetProcessed?.(originalSource, outputFile);
@@ -4990,7 +5375,7 @@ function createGenerateBundleHook(context) {
4990
5375
  debug("css preserve imported shell asset: %s", outputFile);
4991
5376
  continue;
4992
5377
  }
4993
- const hasRememberedApplyDirective = rememberedCssSource != null && require_v4_engine.hasTailwindApplyDirective(rememberedCssSource.rawSource);
5378
+ const hasRememberedApplyDirective = rememberedCssSource != null && require_generator.hasTailwindApplyDirective(rememberedCssSource.rawSource);
4994
5379
  const hasRememberedTailwindGenerationSource = rememberedCssSource != null && hasTailwindGenerationSource(rememberedCssSource.rawSource);
4995
5380
  const hasSameOutputRememberedTailwindGenerationSource = hasRememberedTailwindGenerationSource && rememberedCssSource != null && require_source_candidate_scan_signature.normalizeOutputPathKey(rememberedCssSource.outputFile) === require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile);
4996
5381
  const hasStaleViteProcessedCssSource = vitePipelineCssAsset && hasDifferentRememberedCssSource && (hasCurrentTailwindGenerationDirective || hasRememberedApplyDirective || hasRememberedTailwindGenerationSource);
@@ -5005,7 +5390,10 @@ function createGenerateBundleHook(context) {
5005
5390
  ...getCssHandlerOptions(generatorSourceFile),
5006
5391
  isMainChunk: resolvedFromTemporaryCssAsset ? false : outputCssHandlerOptions.isMainChunk
5007
5392
  } : getCssHandlerOptions(file);
5008
- const generatorCssEntries = configuredTailwindV4ExplicitCssEntryFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(generatorSourceFile)) ? [generatorSourceFile] : opts.cssEntries;
5393
+ const generatorSourceFileKey = normalizeConfiguredTailwindV4CssEntryFileKey(generatorSourceFile);
5394
+ const isExplicitGeneratorCssEntry = configuredTailwindV4ExplicitCssEntryFileKeysForScope.has(generatorSourceFileKey);
5395
+ const shouldUsePipelineSourceAsCssEntry = !isExplicitGeneratorCssEntry && vitePipelineCssAsset && opts.cssMatcher(generatorSourceFile) && hasTailwindGenerationSource(generatorRawSource);
5396
+ const generatorCssEntries = isExplicitGeneratorCssEntry || shouldUsePipelineSourceAsCssEntry ? [generatorSourceFile] : opts.cssEntries;
5009
5397
  const generatorCssHandlerOptions = {
5010
5398
  ...cssHandlerOptions,
5011
5399
  sourceOptions: {
@@ -5016,7 +5404,8 @@ function createGenerateBundleHook(context) {
5016
5404
  };
5017
5405
  const scopedSourceCandidateGetter = createScopedSourceCandidateGetter(outputFile, generatorCssHandlerOptions);
5018
5406
  const scopedSourceCandidateSourceGetter = createScopedSourceCandidateSourceGetter(outputFile, generatorCssHandlerOptions);
5019
- const sourceTraceTokenSources = scopedSourceCandidateSourceGetter ? require_hmr_timing.createCssTokenSourceMap(scopedSourceCandidateSourceGetter(void 0), opts) : void 0;
5407
+ const sourceTraceSources = scopedSourceCandidateSourceGetter ? await require_source_candidate_scan_signature.createScopedGeneratorSourceTraceMap(generatorRawSource, generatorSourceFile, scopedSourceCandidateSourceGetter) : void 0;
5408
+ const sourceTraceTokenSources = sourceTraceSources ? require_hmr_timing.createCssTokenSourceMap(sourceTraceSources, opts) : void 0;
5020
5409
  const sourceTraceSignature = require_hmr_timing.createCssSourceTraceCacheSignature(sourceTraceTokenSources, opts);
5021
5410
  const scopedGeneratorRuntime = await createScopedGeneratorRuntime$1(outputFile, generatorCssHandlerOptions, generatorRuntime, generatorRawSource, generatorSourceFile);
5022
5411
  const annotateCss = (css) => require_hmr_timing.annotateCssSourceTrace(css, {
@@ -5040,7 +5429,7 @@ function createGenerateBundleHook(context) {
5040
5429
  const shouldTrackGeneratorRuntime = hasStaleViteProcessedCssSource || shouldRegenerateMainPackageCssWithScopedCandidates || hasCurrentTailwindGenerationDirective || hasSameOutputRememberedTailwindGenerationSource || shouldProcessTailwindGeneration && (!useIncrementalMode || cssHandlerOptions.isMainChunk || processFiles.css.has(file) || runtimeLinkedCssFiles.has(file) || runtimeLinkedCssFiles.has(outputFile) || shouldRegenerateCollectedViteCss || hasRuntimeAffectingChanges && (alreadyProcessedCssAsset || vitePipelineCssAsset));
5041
5430
  const shouldPreserveCollectedViteCssAsset = !shouldRegenerateCollectedViteCss && (state.generatorCandidateSignature === void 0 || !generatorCandidatesChanged) && (collectedBundlerGeneratedCssFiles.has(file) || require_source_candidate_scan_signature.hasBundlerGeneratedCssMarker(rawSource));
5042
5431
  const strippedViteProcessedCss = require_source_candidate_scan_signature.stripBundlerGeneratedCssMarkers(rawSource);
5043
- const shouldPreserveStaleGeneratedCssAsset = hasStaleViteProcessedCssSource && shouldPreserveCollectedViteCssAsset && strippedViteProcessedCss.trim().length > 0 && !strippedViteProcessedCss.includes("weapp-tailwindcss generator-placeholder") && !strippedViteProcessedCss.includes("vite-placeholder") && !hasTailwindGenerationSource(strippedViteProcessedCss) && !require_v4_engine.hasTailwindApplyDirective(strippedViteProcessedCss);
5432
+ const shouldPreserveStaleGeneratedCssAsset = hasStaleViteProcessedCssSource && shouldPreserveCollectedViteCssAsset && strippedViteProcessedCss.trim().length > 0 && !strippedViteProcessedCss.includes("weapp-tailwindcss generator-placeholder") && !strippedViteProcessedCss.includes("vite-placeholder") && !hasTailwindGenerationSource(strippedViteProcessedCss) && !require_generator.hasTailwindApplyDirective(strippedViteProcessedCss);
5044
5433
  if (alreadyProcessedCssAsset && !shouldRefreshViteProcessedCssByCandidates && (!hasStaleViteProcessedCssSource || shouldPreserveStaleGeneratedCssAsset) && !hasRememberedApplySource && !shouldRegenerateMainPackageCssWithScopedCandidates && (!shouldTrackGeneratorRuntime || shouldPreserveCollectedViteCssAsset)) {
5045
5434
  const nextCss = removeRootCoveredCssFromScopedAsset(strippedViteProcessedCss);
5046
5435
  applyCssResult(nextCss);
@@ -5119,11 +5508,13 @@ function createGenerateBundleHook(context) {
5119
5508
  const start = performance.now();
5120
5509
  await runtimeState.readyPromise;
5121
5510
  const previousCss = !vitePipelineCssAsset && useIncrementalMode && !hasRuntimeAffectingChanges && !snapshot.changedByType.css.has(file) ? getLastCssResult(lastCssResultByFile, outputFile, file) : void 0;
5122
- const generated = hasTailwindGenerationSource(generatorRawSource) || require_source_candidate_scan_signature.hasBundlerGeneratedCssMarker(rawSource) ? await require_source_candidate_scan_signature.generateTailwindV4Css({
5511
+ const generatorTransformRawSource = generatorRawSource;
5512
+ const previousGeneratorCss = previousCss && !isWebGeneratorTarget ? normalizeMiniProgramGeneratorRawSource(previousCss, outputFile) : previousCss;
5513
+ const generated = hasTailwindGenerationSource(generatorTransformRawSource) || require_source_candidate_scan_signature.hasBundlerGeneratedCssMarker(rawSource) ? await require_source_candidate_scan_signature.generateTailwindV4Css({
5123
5514
  opts,
5124
5515
  runtimeState,
5125
5516
  runtime: scopedGeneratorRuntime,
5126
- rawSource: generatorRawSource,
5517
+ rawSource: generatorTransformRawSource,
5127
5518
  file: generatorSourceFile,
5128
5519
  outputFile,
5129
5520
  cssHandlerOptions: generatorCssHandlerOptions,
@@ -5133,8 +5524,8 @@ function createGenerateBundleHook(context) {
5133
5524
  generatorPlatform,
5134
5525
  styleHandler,
5135
5526
  debug,
5136
- previousCss,
5137
- ...vitePipelineCssAsset && !require_source_candidate_scan_signature.hasBundlerGeneratedCssMarker(rawSource) && normalizeCssSourceForCompare(rawSource) !== normalizeCssSourceForCompare(generatorRawSource) ? { userRawSource: normalizeGeneratorUserRawSource(rawSource, generatorSourceFile, assetSourceFile) } : {},
5527
+ previousCss: previousGeneratorCss,
5528
+ ...vitePipelineCssAsset && !require_source_candidate_scan_signature.hasBundlerGeneratedCssMarker(rawSource) && normalizeCssSourceForCompare(rawSource) !== normalizeCssSourceForCompare(generatorRawSource) ? { userRawSource: normalizeMiniProgramGeneratorRawSource(normalizeGeneratorUserRawSource(rawSource, generatorSourceFile, assetSourceFile), outputFile) } : {},
5138
5529
  ...usesConfiguredTailwindV4FallbackSource ? { restoreLocalCssImports: false } : {}
5139
5530
  }) : void 0;
5140
5531
  if (generated) {
@@ -5164,9 +5555,17 @@ function createGenerateBundleHook(context) {
5164
5555
  debug("css preserve web target: %s", outputFile);
5165
5556
  return annotateCss(outputCss);
5166
5557
  }
5167
- const { css } = await styleHandler(generatorRawSource, cssHandlerOptions);
5558
+ if ((0, _weapp_tailwindcss_postcss.isPureLocalCssImportWrapper)(generatorTransformRawSource)) {
5559
+ const tracedCss = annotateCss(generatorTransformRawSource);
5560
+ recordCssAssetResult?.(outputFile, tracedCss);
5561
+ metrics.css.elapsed += measureElapsed(start);
5562
+ metrics.css.transformed++;
5563
+ debug("css preserve mini-program import shell: %s", outputFile);
5564
+ return tracedCss;
5565
+ }
5566
+ const { css } = await styleHandler(generatorTransformRawSource, cssHandlerOptions);
5168
5567
  const tracedCss = annotateCss(css);
5169
- if (envFlags.debugCssDiff) debug("css diff %s: %s", generatorSourceFile, require_source_candidate_scan_signature.summarizeStringDiff(generatorRawSource, tracedCss));
5568
+ if (envFlags.debugCssDiff) debug("css diff %s: %s", generatorSourceFile, require_source_candidate_scan_signature.summarizeStringDiff(generatorTransformRawSource, tracedCss));
5170
5569
  metrics.css.elapsed += measureElapsed(start);
5171
5570
  metrics.css.transformed++;
5172
5571
  return tracedCss;
@@ -5221,6 +5620,7 @@ function createGenerateBundleHook(context) {
5221
5620
  bundle,
5222
5621
  bundleFiles,
5223
5622
  cache,
5623
+ changedCssFiles: snapshot.changedByType.css,
5224
5624
  cssTaskFactories,
5225
5625
  createScopedGeneratorRuntime: createScopedGeneratorRuntime$1,
5226
5626
  createScopedSourceCandidateGetter,
@@ -5236,6 +5636,7 @@ function createGenerateBundleHook(context) {
5236
5636
  getRememberedCssSources,
5237
5637
  isNativeAppStyleTarget,
5238
5638
  isWebGeneratorTarget,
5639
+ lastCssRawSourceHashByFile,
5239
5640
  lastCssResultByFile,
5240
5641
  lastCssSourceHashByFile,
5241
5642
  markCssAssetProcessed,
@@ -5339,12 +5740,13 @@ function registerGeneratorDependencies(ctx, dependencies) {
5339
5740
  throw error;
5340
5741
  }
5341
5742
  }
5342
- function createCssHandlerOptions(opts, majorVersion, file, extraOptions = {}) {
5743
+ function createCssHandlerOptions(opts, majorVersion, file, outputRoot, extraOptions = {}) {
5744
+ const from = node_path.default.isAbsolute(file) ? file : outputRoot ? node_path.default.resolve(outputRoot, file) : file;
5343
5745
  return {
5344
5746
  ...extraOptions,
5345
5747
  cssPreflight: opts.cssPreflight,
5346
5748
  isMainChunk: opts.mainCssChunkMatcher(file, opts.appType),
5347
- postcssOptions: { options: { from: file } },
5749
+ postcssOptions: { options: { from } },
5348
5750
  ...require_context.normalizeStyleHandlerMajorVersion(majorVersion) === void 0 ? {} : { majorVersion: 4 }
5349
5751
  };
5350
5752
  }
@@ -5355,10 +5757,11 @@ function shouldGenerateCssByGenerator(opts, majorVersion, file, rawSource, proce
5355
5757
  tailwindcssMajorVersion: majorVersion,
5356
5758
  uniAppX: opts.uniAppX
5357
5759
  });
5358
- if (require_v4_engine.hasLocalCssImport(rawSource)) return false;
5359
- if (require_v4_engine.hasTailwindGeneratedCssMarkers(rawSource)) return true;
5360
- if (require_v4_engine.hasTailwindRootDirectives(rawSource, { importFallback: generatorOptions.importFallback })) return true;
5361
- return processed && require_v4_engine.hasTailwindApplyDirective(rawSource) && shouldFinalizeProcessedCssAsset(opts, file);
5760
+ if (!generatorOptions.enabled) return false;
5761
+ if (require_generator.hasLocalCssImport(rawSource)) return false;
5762
+ if (require_generator.hasTailwindGeneratedCssMarkers(rawSource)) return true;
5763
+ if (require_generator.hasTailwindRootDirectives(rawSource, { importFallback: generatorOptions.importFallback })) return true;
5764
+ return processed && require_generator.hasTailwindApplyDirective(rawSource) && shouldFinalizeProcessedCssAsset(opts, file);
5362
5765
  }
5363
5766
  function shouldFinalizeProcessedCssAsset(opts, file) {
5364
5767
  return opts.mainCssChunkMatcher(file, opts.appType);
@@ -5367,8 +5770,8 @@ function collectViteProcessedCssSources(getViteProcessedCssAssetResults) {
5367
5770
  return [...getViteProcessedCssAssetResults?.() ?? []].map(([, record]) => typeof record === "string" ? record : record.css);
5368
5771
  }
5369
5772
  function finalizeWebCss(css, context, cssPipelineStrategy) {
5370
- const shouldApplyWebCssCompat = cssPipelineStrategy?.shouldApplyWebCssCompat?.(context) === true;
5371
- const defaultWebCssCompat = (value) => (0, _weapp_tailwindcss_postcss.transformWebCssCompat)(value, context.currentGeneratorBranch.isWeb ? context.currentGeneratorOptions.webCompat : context.currentGeneratorOptions.webCompat ?? true);
5773
+ const shouldApplyWebCssCompat = shouldApplyViteWebCssCompat(context, cssPipelineStrategy);
5774
+ const defaultWebCssCompat = (value) => (0, _weapp_tailwindcss_postcss.transformWebCssCompat)(value, resolveViteWebCssCompatOptions(context));
5372
5775
  return cssPipelineStrategy?.transformGeneratedCss?.(css, {
5373
5776
  ...context,
5374
5777
  defaultWebCssCompat,
@@ -5414,6 +5817,7 @@ function createViteCssFinalizerOutputPlugin(context) {
5414
5817
  const isNativeAppStyleTarget = cssPipelineStrategy?.isNativeAppStyleTarget?.(createCssPipelineContext("")) === true;
5415
5818
  if (resolvedConfig?.command !== "build" && !isNativeAppStyleTarget) return;
5416
5819
  const rootDir = resolvedConfig?.root ? node_path.default.resolve(resolvedConfig.root) : node_process.default.cwd();
5820
+ const outDir = resolvedConfig?.build?.outDir ? node_path.default.resolve(rootDir, resolvedConfig.build.outDir) : rootDir;
5417
5821
  const sourceRoot = resolveWeappViteSourceRoot(resolvedConfig, opts.appType) ?? resolveSourceRootFromBundleGraph(resolvedConfig, bundle);
5418
5822
  const sourceTraceTokenSources = getSourceCandidateSourcesForEntries ? require_hmr_timing.createCssTokenSourceMap(getSourceCandidateSourcesForEntries(void 0), opts) : void 0;
5419
5823
  const annotateCss = (css) => require_hmr_timing.annotateCssSourceTrace(css, {
@@ -5460,7 +5864,7 @@ function createViteCssFinalizerOutputPlugin(context) {
5460
5864
  const applyStyleSources = collectUniAppXHarmonyApplyStyleSources(bundle);
5461
5865
  if (applyUtilities.size === 0 || applyStyleSources.length === 0) return cssSources;
5462
5866
  const harmonyRuntime = /* @__PURE__ */ new Set([...runtime, ...applyUtilities]);
5463
- const harmonyCssHandlerOptions = createCssHandlerOptions(opts, runtimeState.tailwindRuntime.majorVersion, "uni-app-x-harmony-apply.css", cssPipelineStrategy?.getCssHandlerExtraOptions?.({
5867
+ const harmonyCssHandlerOptions = createCssHandlerOptions(opts, runtimeState.tailwindRuntime.majorVersion, "uni-app-x-harmony-apply.css", outDir, cssPipelineStrategy?.getCssHandlerExtraOptions?.({
5464
5868
  ...createCssPipelineContext("uni-app-x-harmony-apply.css"),
5465
5869
  file: "uni-app-x-harmony-apply.css"
5466
5870
  }) ?? {});
@@ -5511,7 +5915,7 @@ function createViteCssFinalizerOutputPlugin(context) {
5511
5915
  await waitForSourceCandidateSyncs?.();
5512
5916
  const runtime = getRecordedGeneratorCandidates?.() ?? getSourceCandidates?.() ?? await ensureRuntimeClassSet();
5513
5917
  const collectedGeneratorCandidates = /* @__PURE__ */ new Set([...runtime, ...getSourceCandidates?.() ?? []]);
5514
- const generatorRuntime = require_generator.shouldUseMiniProgramCssBranch(generatorBranch) ? require_v4_engine.filterUnsupportedMiniProgramTailwindV4Candidates(collectedGeneratorCandidates) : collectedGeneratorCandidates;
5918
+ const generatorRuntime = require_generator.shouldUseMiniProgramCssBranch(generatorBranch) ? require_generator.filterUnsupportedMiniProgramTailwindV4Candidates(collectedGeneratorCandidates) : collectedGeneratorCandidates;
5515
5919
  await Promise.all(entries.map(async ([bundleFile, output]) => {
5516
5920
  const file = output.fileName || bundleFile;
5517
5921
  const rawSource = output.source.toString();
@@ -5526,7 +5930,7 @@ function createViteCssFinalizerOutputPlugin(context) {
5526
5930
  debug("css finalizer skip vite-processed css: %s", file);
5527
5931
  return;
5528
5932
  }
5529
- const cssHandlerOptions = createCssHandlerOptions(opts, runtimeState.tailwindRuntime.majorVersion, file, cssPipelineStrategy?.getCssHandlerExtraOptions?.({
5933
+ const cssHandlerOptions = createCssHandlerOptions(opts, runtimeState.tailwindRuntime.majorVersion, file, outDir, cssPipelineStrategy?.getCssHandlerExtraOptions?.({
5530
5934
  ...createCssPipelineContext(file),
5531
5935
  file
5532
5936
  }) ?? {});
@@ -5534,11 +5938,21 @@ function createViteCssFinalizerOutputPlugin(context) {
5534
5938
  ...cssHandlerOptions,
5535
5939
  isMainChunk: false
5536
5940
  };
5941
+ const cleanRawSource = require_source_candidate_scan_signature.stripBundlerGeneratedCssMarkers(rawSource);
5942
+ if (cleanRawSource !== rawSource && cleanRawSource.trim().length === 0) {
5943
+ output.source = cleanRawSource;
5944
+ markCssAssetProcessed(output, file);
5945
+ recordCssAssetResult?.(file, cleanRawSource);
5946
+ opts.onUpdate(file, rawSource, cleanRawSource);
5947
+ debug("css finalizer strip empty marker asset: %s", file);
5948
+ return;
5949
+ }
5537
5950
  const processed = isCssAssetProcessed(output, file);
5538
5951
  const rememberedMainCssSource = processed && cssHandlerOptions.isMainChunk ? getRememberedMainCssSource?.(file) : void 0;
5539
- const generatorRawSource = rememberedMainCssSource?.rawSource ?? rawSource;
5952
+ const resolvedGeneratorRawSource = rememberedMainCssSource?.rawSource ?? cleanRawSource;
5953
+ const generatorRawSource = generatorBranch.isWeb ? resolvedGeneratorRawSource : require_hmr_timing.normalizeMiniProgramGeneratorCssSource(resolvedGeneratorRawSource, file);
5540
5954
  const generatorSourceFile = rememberedMainCssSource?.sourceFile ?? file;
5541
- const generatorCssHandlerOptions = rememberedMainCssSource ? createCssHandlerOptions(opts, runtimeState.tailwindRuntime.majorVersion, generatorSourceFile, cssPipelineStrategy?.getCssHandlerExtraOptions?.({
5955
+ const generatorCssHandlerOptions = rememberedMainCssSource ? createCssHandlerOptions(opts, runtimeState.tailwindRuntime.majorVersion, generatorSourceFile, outDir, cssPipelineStrategy?.getCssHandlerExtraOptions?.({
5542
5956
  ...createCssPipelineContext(generatorSourceFile),
5543
5957
  file: generatorSourceFile
5544
5958
  }) ?? {}) : cssHandlerOptions;
@@ -5546,11 +5960,12 @@ function createViteCssFinalizerOutputPlugin(context) {
5546
5960
  ...generatorCssHandlerOptions,
5547
5961
  isMainChunk: false
5548
5962
  } : cssUserHandlerOptions;
5549
- const generated = shouldGenerateCssByGenerator(opts, runtimeState.tailwindRuntime.majorVersion, file, generatorRawSource, processed) ? await require_source_candidate_scan_signature.generateTailwindV4Css({
5963
+ const generatorTransformRawSource = generatorRawSource;
5964
+ const generated = shouldGenerateCssByGenerator(opts, runtimeState.tailwindRuntime.majorVersion, file, generatorTransformRawSource, processed) ? await require_source_candidate_scan_signature.generateTailwindV4Css({
5550
5965
  opts,
5551
5966
  runtimeState,
5552
5967
  runtime: generatorRuntime,
5553
- rawSource: generatorRawSource,
5968
+ rawSource: generatorTransformRawSource,
5554
5969
  file: generatorSourceFile,
5555
5970
  outputFile: file,
5556
5971
  cssHandlerOptions: generatorCssHandlerOptions,
@@ -5560,10 +5975,21 @@ function createViteCssFinalizerOutputPlugin(context) {
5560
5975
  styleHandler: opts.styleHandler,
5561
5976
  debug
5562
5977
  }) : void 0;
5563
- const nextCss = annotateCss(generated?.css ?? (generatorBranch.isWeb ? finalizeWebCss(rawSource, {
5978
+ if (!generated && !generatorBranch.isWeb && (0, _weapp_tailwindcss_postcss.isPureLocalCssImportWrapper)(generatorTransformRawSource)) {
5979
+ const nextCss = generatorTransformRawSource;
5980
+ if (nextCss !== rawSource) {
5981
+ output.source = nextCss;
5982
+ opts.onUpdate(file, rawSource, nextCss);
5983
+ }
5984
+ markCssAssetProcessed(output, file);
5985
+ recordCssAssetResult?.(file, nextCss);
5986
+ debug("css finalizer preserve mini-program import shell: %s", file);
5987
+ return;
5988
+ }
5989
+ const nextCss = annotateCss(generated?.css ?? (generatorBranch.isWeb ? finalizeWebCss(cleanRawSource, {
5564
5990
  ...createCssPipelineContext(file),
5565
5991
  file
5566
- }, cssPipelineStrategy) : (await opts.styleHandler(rawSource, cssHandlerOptions)).css));
5992
+ }, cssPipelineStrategy) : (await opts.styleHandler(generatorTransformRawSource, cssHandlerOptions)).css));
5567
5993
  if (generated) {
5568
5994
  registerGeneratorDependencies(this, generated.dependencies);
5569
5995
  debug("css finalizer generated result: %s bytes=%d", file, nextCss.length);
@@ -5849,9 +6275,21 @@ function createViteCssMemory(options) {
5849
6275
  function resolveHotTailwindCssModules(ctx, tailwindRootCssModuleIds) {
5850
6276
  const modules = [];
5851
6277
  const seenModules = /* @__PURE__ */ new Set();
6278
+ const root = ctx.server.config?.root ?? node_process.default.cwd();
6279
+ const outDir = ctx.server.config?.build?.outDir ? normalizeAbsoluteFilePath(node_path.default.resolve(root, ctx.server.config.build.outDir)) : void 0;
6280
+ const isHotSourceStyleModule = (id) => {
6281
+ if (!require_source_candidate_scan_signature.isSourceStyleRequest(id)) return false;
6282
+ const file = (0, _weapp_tailwindcss_shared.cleanUrl)(id);
6283
+ if (isRootMiniProgramStyleUrl(file) || !isAbsoluteFilePath(file) && !file.startsWith("/")) return false;
6284
+ if (outDir && isAbsoluteFilePath(file)) {
6285
+ const normalizedFile = normalizeAbsoluteFilePath(file);
6286
+ if (normalizedFile === outDir || normalizedFile.startsWith(`${outDir}/`)) return false;
6287
+ }
6288
+ return true;
6289
+ };
5852
6290
  const collectModule = (mod) => {
5853
6291
  if (mod == null || seenModules.has(mod)) return;
5854
- if (!require_source_candidate_scan_signature.isSourceStyleRequest(mod.id ?? mod.url)) return;
6292
+ if (!isHotSourceStyleModule(mod.id ?? mod.url)) return;
5855
6293
  seenModules.add(mod);
5856
6294
  ctx.server.moduleGraph.invalidateModule(mod);
5857
6295
  modules.push(mod);
@@ -5887,6 +6325,29 @@ function resolveModuleHotUrl(mod) {
5887
6325
  if (typeof mod.url === "string" && mod.url.length > 0) return mod.url;
5888
6326
  if (typeof mod.id === "string" && mod.id.startsWith("/")) return mod.id;
5889
6327
  }
6328
+ function isAbsoluteFilePath(file) {
6329
+ return node_path.default.isAbsolute(file) || /^[A-Z]:[\\/]/i.test(file) || file.startsWith("\\\\");
6330
+ }
6331
+ function normalizeAbsoluteFilePath(file) {
6332
+ if (/^[A-Z]:[\\/]/i.test(file) || file.startsWith("\\\\")) return require_source_candidate_scan_signature.slash(node_path.default.win32.resolve(file));
6333
+ return require_source_candidate_scan_signature.slash(node_path.default.resolve(file));
6334
+ }
6335
+ function isRootMiniProgramStyleUrl(file) {
6336
+ return /^\/[^/]+\.(?:wxss|acss|ttss|qss|jxss|tyss)(?:$|[?#])/i.test(file);
6337
+ }
6338
+ function resolveCssHotUrl(id, root) {
6339
+ const suffix = /[?#]/.test(id) ? id.slice(id.search(/[?#]/)) : "";
6340
+ const file = (0, _weapp_tailwindcss_shared.cleanUrl)(id);
6341
+ if (/^\/(?![A-Z]:)/i.test(file) && !file.startsWith(require_source_candidate_scan_signature.slash(root))) {
6342
+ if (isRootMiniProgramStyleUrl(file)) return;
6343
+ return `${file}${suffix}`;
6344
+ }
6345
+ if (!isAbsoluteFilePath(file)) return;
6346
+ const normalizedRoot = normalizeAbsoluteFilePath(root);
6347
+ const normalizedFile = normalizeAbsoluteFilePath(file);
6348
+ if (!normalizedFile.startsWith(`${normalizedRoot}/`)) return;
6349
+ return `/${require_source_candidate_scan_signature.slash(node_path.default.relative(normalizedRoot, normalizedFile))}${suffix}`;
6350
+ }
5890
6351
  function includesHotModule(modules, target) {
5891
6352
  const targetUrl = resolveModuleHotUrl(target);
5892
6353
  const targetId = target.id;
@@ -5895,24 +6356,46 @@ function includesHotModule(modules, target) {
5895
6356
  return targetUrl !== void 0 && resolveModuleHotUrl(mod) === targetUrl || typeof targetId === "string" && targetId.length > 0 && mod.id === targetId;
5896
6357
  });
5897
6358
  }
6359
+ function createSupplementalHotUpdate(hotUrl, timestamp) {
6360
+ if (/[?&](?:direct|vue)(?:&|$)/.test(hotUrl)) return {
6361
+ type: "js-update",
6362
+ timestamp,
6363
+ path: hotUrl,
6364
+ acceptedPath: hotUrl,
6365
+ explicitImportRequired: false,
6366
+ isWithinCircularImport: false
6367
+ };
6368
+ return {
6369
+ type: "css-update",
6370
+ timestamp,
6371
+ path: hotUrl,
6372
+ acceptedPath: hotUrl
6373
+ };
6374
+ }
5898
6375
  function hasSelfAcceptingNonStyleHotModule(modules) {
5899
6376
  return modules.some((mod) => {
5900
6377
  return !require_source_candidate_scan_signature.isSourceStyleRequest(mod.id ?? mod.url) && mod.isSelfAccepting === true;
5901
6378
  });
5902
6379
  }
5903
- function sendSupplementalCssHotUpdates(ctx, cssModules) {
5904
- const updates = cssModules.filter((mod) => !includesHotModule(ctx.modules, mod)).map((mod) => {
5905
- const hotUrl = resolveModuleHotUrl(mod);
5906
- if (!hotUrl) return;
5907
- return {
5908
- type: "js-update",
5909
- timestamp: ctx.timestamp,
5910
- path: hotUrl,
5911
- acceptedPath: hotUrl,
5912
- explicitImportRequired: false,
5913
- isWithinCircularImport: false
5914
- };
5915
- }).filter((update) => update !== void 0);
6380
+ function sendSupplementalCssHotUpdates(ctx, cssModules, fallbackCssIds = []) {
6381
+ const seenUrls = /* @__PURE__ */ new Set();
6382
+ const root = ctx.server.config?.root ?? node_process.default.cwd();
6383
+ const updates = [];
6384
+ for (const id of fallbackCssIds) {
6385
+ if (!require_source_candidate_scan_signature.isSourceStyleRequest(id)) continue;
6386
+ const hotUrl = resolveCssHotUrl(id, root);
6387
+ if (!hotUrl || seenUrls.has(hotUrl)) continue;
6388
+ seenUrls.add(hotUrl);
6389
+ updates.push(createSupplementalHotUpdate(hotUrl, ctx.timestamp));
6390
+ }
6391
+ for (const mod of cssModules) {
6392
+ if (includesHotModule(ctx.modules, mod)) continue;
6393
+ const moduleHotUrl = resolveModuleHotUrl(mod);
6394
+ const hotUrl = moduleHotUrl ? resolveCssHotUrl(moduleHotUrl, root) : void 0;
6395
+ if (!hotUrl || seenUrls.has(hotUrl)) continue;
6396
+ seenUrls.add(hotUrl);
6397
+ updates.push(createSupplementalHotUpdate(hotUrl, ctx.timestamp));
6398
+ }
5916
6399
  if (updates.length === 0) return;
5917
6400
  queueMicrotask(() => {
5918
6401
  ctx.server.ws?.send?.({
@@ -6063,9 +6546,9 @@ function createRewriteCssImportsPlugins(options) {
6063
6546
  async transform(code, id) {
6064
6547
  if (!require_source_candidate_scan_signature.isCSSRequest(id)) return null;
6065
6548
  const file = (0, _weapp_tailwindcss_shared.cleanUrl)(id);
6066
- const normalizedCode = require_v4_engine.hasTailwindRootDirectives(code) || code.includes("@config") ? require_v4_engine.normalizeTailwindConfigDirectives(code, node_path.default.dirname(file)) : code;
6549
+ const normalizedCode = require_generator.hasTailwindRootDirectives(code) || code.includes("@config") ? require_generator.normalizeTailwindConfigDirectives(code, node_path.default.dirname(file)) : code;
6067
6550
  await options.onCssSourceTransform?.(id, normalizedCode);
6068
- const hasTailwindRoot = require_v4_engine.hasTailwindRootDirectives(normalizedCode);
6551
+ const hasTailwindRoot = require_generator.hasTailwindRootDirectives(normalizedCode, { importFallback: true });
6069
6552
  if (hasTailwindRoot) await options.onTailwindRootCss?.(id, normalizedCode);
6070
6553
  const shouldGenerateInPreTransform = !options.shouldDeferGeneration?.(id, normalizedCode) && (hasTailwindRoot || options.shouldGenerateCss?.(id, normalizedCode));
6071
6554
  if (options.shouldOwnTailwindGeneration && shouldGenerateInPreTransform) {
@@ -6097,7 +6580,7 @@ function createRewriteCssImportsPlugins(options) {
6097
6580
  }];
6098
6581
  }
6099
6582
  function hasVitePipelineTailwindGenerationDirective(code) {
6100
- return require_v4_engine.hasTailwindRootDirectives(code) || require_v4_engine.hasTailwindApplyDirective(code);
6583
+ return require_generator.hasTailwindRootDirectives(code) || require_generator.hasTailwindApplyDirective(code);
6101
6584
  }
6102
6585
  //#endregion
6103
6586
  //#region src/bundlers/vite/runtime-class-set.ts
@@ -6121,7 +6604,7 @@ function createViteRuntimeClassSet(options) {
6121
6604
  let runtimeRefreshSignature;
6122
6605
  let runtimeRefreshOptionsKey;
6123
6606
  function resolveRuntimeRefreshOptions() {
6124
- const configPath = require_v4_engine.resolveTailwindcssOptions(runtimeState.tailwindRuntime.options)?.config;
6607
+ const configPath = require_generator.resolveTailwindcssOptions(runtimeState.tailwindRuntime.options)?.config;
6125
6608
  const signature = require_tailwindcss.getRuntimeClassSetSignature(runtimeState.tailwindRuntime);
6126
6609
  const optionsKey = JSON.stringify({
6127
6610
  appType: opts.appType,
@@ -6227,6 +6710,7 @@ const SPECIAL_QUERY_RE$1 = /[?&](?:worker|sharedworker|raw|url)\b/;
6227
6710
  const COMMON_JS_PROXY_RE = /\?commonjs-proxy/;
6228
6711
  const VITE_CSS_HMR_MODULE_RE = /\b__vite__updateStyle\s*\(/;
6229
6712
  const VITE_CSS_CONST_RE = /\bconst\s+__vite__css\s*=\s*("(?:\\[\s\S]|[^"])*")/;
6713
+ const DEFERRED_CSS_HMR_QUERY_RE = /[?&](?:hmr(?:[=&]|$)|t=\d+)/;
6230
6714
  function decodeJsStringLiteral(literal) {
6231
6715
  try {
6232
6716
  return JSON.parse(literal);
@@ -6260,13 +6744,13 @@ function isViteServeCssRootRequest(id, command) {
6260
6744
  return command === "serve" && require_source_candidate_scan_signature.isSourceStyleRequest(id) && !SPECIAL_QUERY_RE$1.test(id) && !COMMON_JS_PROXY_RE.test(id);
6261
6745
  }
6262
6746
  function isViteCssHmrModule(code, id, command) {
6263
- return isViteServeStyleRequest(id, command) && VITE_CSS_HMR_MODULE_RE.test(code) && /[?&](?:direct|vue)(?:&|$)/.test(id);
6747
+ return isViteServeStyleRequest(id, command) && VITE_CSS_HMR_MODULE_RE.test(code) && (/[?&](?:direct|vue)(?:&|$)/.test(id) || DEFERRED_CSS_HMR_QUERY_RE.test(id));
6264
6748
  }
6265
6749
  function hasViteServeCssGenerationDirective(code) {
6266
- return require_v4_engine.hasTailwindRootDirectives(code) || require_v4_engine.hasTailwindSourceDirectives(code, { importFallback: true }) || require_v4_engine.hasTailwindApplyDirective(code);
6750
+ return require_generator.hasTailwindRootDirectives(code) || require_generator.hasTailwindSourceDirectives(code, { importFallback: true }) || require_generator.hasTailwindApplyDirective(code);
6267
6751
  }
6268
6752
  function hasViteServeCssRootDirective(code) {
6269
- return require_v4_engine.hasTailwindRootDirectives(code);
6753
+ return require_generator.hasTailwindRootDirectives(code);
6270
6754
  }
6271
6755
  function createViteServeCssGenerationPlugins(options) {
6272
6756
  return [{
@@ -6275,7 +6759,8 @@ function createViteServeCssGenerationPlugins(options) {
6275
6759
  enforce: "pre",
6276
6760
  async transform(code, id) {
6277
6761
  if (!options.shouldGenerate() || !isViteServeCssRootRequest(id, options.getCommand())) return;
6278
- if (!require_v4_engine.hasTailwindRootDirectives(code)) return;
6762
+ if (!require_generator.hasTailwindRootDirectives(code)) return;
6763
+ if (DEFERRED_CSS_HMR_QUERY_RE.test(id)) return;
6279
6764
  await options.onTailwindRootCss?.(id, code);
6280
6765
  const generatedCss = await options.generateCss(id, code, this);
6281
6766
  if (generatedCss === void 0 || generatedCss === code) return;
@@ -6347,7 +6832,7 @@ function resolveImplicitTailwindcssBasedirFromViteRoot(root) {
6347
6832
  }
6348
6833
  const tailwindConfigPath = require_tailwindcss.findTailwindConfig(searchRoots);
6349
6834
  if (tailwindConfigPath) return node_path.default.dirname(tailwindConfigPath);
6350
- const packageRoot = require_v4_engine.findNearestPackageRoot(resolvedRoot);
6835
+ const packageRoot = require_generator.findNearestPackageRoot(resolvedRoot);
6351
6836
  if (packageRoot && (0, node_fs.existsSync)(node_path.default.join(packageRoot, PACKAGE_JSON_FILE))) return packageRoot;
6352
6837
  return resolvedRoot;
6353
6838
  }
@@ -6357,6 +6842,7 @@ const debug = require_context.createDebug();
6357
6842
  const weappTailwindcssPackageDir = require_source_candidate_scan_signature.resolvePackageDir("weapp-tailwindcss");
6358
6843
  const weappTailwindcssDirPosix = require_source_candidate_scan_signature.slash(weappTailwindcssPackageDir);
6359
6844
  const SOURCE_CANDIDATE_SCAN_CACHE_MAX = 8;
6845
+ const WEB_HMR_RUNTIME_AFFECTING_DIRECTIVE_RE = /@(?:theme|source|config|plugin|apply)\b/;
6360
6846
  const sourceCandidateScanSnapshotCache = new lru_cache.LRUCache({ max: SOURCE_CANDIDATE_SCAN_CACHE_MAX });
6361
6847
  const ENV_PLATFORM_KEYS = [
6362
6848
  "UNI_PLATFORM",
@@ -6391,9 +6877,6 @@ function inferPlatformFromOutDir(outDir) {
6391
6877
  function isWebOrNativeAppPlatform(platform) {
6392
6878
  return platform === "h5" || platform === "web" || platform?.startsWith("web-") === true || platform === "app" || platform === "app-plus" || platform?.startsWith("app-") === true;
6393
6879
  }
6394
- function applyViteWebCssCompat(css, options) {
6395
- return (0, _weapp_tailwindcss_postcss.transformWebCssCompat)(css, options.compat);
6396
- }
6397
6880
  function isInternalUserDefinedOptions(options) {
6398
6881
  return typeof options.onLoad === "function" && typeof options.mainCssChunkMatcher === "function" && typeof options.tailwindRuntime === "object" && typeof options.refreshTailwindcssRuntime === "function";
6399
6882
  }
@@ -6412,7 +6895,7 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
6412
6895
  });
6413
6896
  const syncCssEntriesFromAnchor = (anchor) => {
6414
6897
  var _opts$tailwindcss;
6415
- const normalizedCssEntries = require_v4_engine.normalizeCssEntries(rawCssEntries, anchor ?? node_process.default.cwd());
6898
+ const normalizedCssEntries = require_generator.normalizeCssEntries(rawCssEntries, anchor ?? node_process.default.cwd());
6416
6899
  if (!normalizedCssEntries) return false;
6417
6900
  const changed = !sameStringList(opts.cssEntries, normalizedCssEntries);
6418
6901
  opts.cssEntries = normalizedCssEntries;
@@ -6433,7 +6916,6 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
6433
6916
  const disabledOptions = require_source_candidate_scan_signature.resolvePluginDisabledState(disabled);
6434
6917
  const tailwindcssMajorVersion = initialTailwindRuntime.majorVersion ?? 0;
6435
6918
  if (!disabledOptions.plugin && tailwindcssMajorVersion !== 4) throw new Error("weapp-tailwindcss/vite 新生成管线仅支持 Tailwind CSS v4,请升级 tailwindcss 或停留在旧版 weapp-tailwindcss。");
6436
- const shouldOwnTailwindGeneration = !disabledOptions.plugin;
6437
6919
  const shouldRewriteCssImports = opts.rewriteCssImports === true;
6438
6920
  let resolvedConfig;
6439
6921
  const resolveViteStylePlatform = () => {
@@ -6452,6 +6934,7 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
6452
6934
  tailwindcssMajorVersion,
6453
6935
  uniAppX
6454
6936
  });
6937
+ const shouldOwnTailwindGeneration = !disabledOptions.plugin && resolveCurrentGeneratorOptions().enabled;
6455
6938
  const resolveCurrentGeneratorBranch = () => require_generator.resolveGeneratorRuntimeBranch(resolveCurrentGeneratorOptions(), {
6456
6939
  appType: opts.appType,
6457
6940
  platform: resolveGeneratorPlatform(),
@@ -6481,7 +6964,7 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
6481
6964
  return (0, _weapp_tailwindcss_postcss.unwrapUnsupportedCascadeLayers)(css);
6482
6965
  };
6483
6966
  const shouldInferAppType = !hasExplicitAppType && !initialGeneratorBranch.isWeb;
6484
- const hasInitialTailwindCssRoots = require_v4_engine.hasConfiguredTailwindV4CssRoots({
6967
+ const hasInitialTailwindCssRoots = require_generator.hasConfiguredTailwindV4CssRoots({
6485
6968
  ...rawOptions,
6486
6969
  cssEntries: opts.cssEntries ?? rawOptions.cssEntries
6487
6970
  });
@@ -6499,11 +6982,11 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
6499
6982
  if (!shouldOwnTailwindGeneration) return;
6500
6983
  const file = (0, _weapp_tailwindcss_shared.cleanUrl)(id);
6501
6984
  if (!node_path.default.isAbsolute(file)) return;
6502
- if (!require_v4_engine.isTailwindV4CssEntry(file)) return;
6985
+ if (!require_generator.isTailwindV4CssEntry(file)) return;
6503
6986
  if (isMissingInternalCssSource(file, weappTailwindcssPackageDir)) return;
6504
6987
  const sourceFile = node_path.default.normalize(file);
6505
6988
  const sourceBase = node_path.default.dirname(sourceFile);
6506
- const sourceCss = require_v4_engine.normalizeTailwindSourceForGenerator(require_v4_engine.normalizeTailwindConfigDirectives(css, sourceBase), { importFallback: true });
6989
+ const sourceCss = require_generator.normalizeTailwindSourceForGenerator(require_generator.normalizeTailwindConfigDirectives(css, sourceBase), { importFallback: true });
6507
6990
  if (autoCssSourceContent.get(sourceFile) === sourceCss) return;
6508
6991
  autoCssSourceContent.set(sourceFile, sourceCss);
6509
6992
  await syncTailwindCssSourceCandidates(sourceFile, sourceCss);
@@ -6521,7 +7004,7 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
6521
7004
  const dependencies = await require_tailwindcss.resolveViteTailwindV4CssDependencies(sourceCss, sourceBase);
6522
7005
  transientSource.dependencies = dependencies;
6523
7006
  transientAutoCssSources.set(sourceFile, transientSource);
6524
- if (!require_v4_engine.upsertTailwindV4CssSource(opts, {
7007
+ if (!require_generator.upsertTailwindV4CssSource(opts, {
6525
7008
  file: sourceFile,
6526
7009
  base: sourceBase,
6527
7010
  css: sourceCss,
@@ -6544,11 +7027,11 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
6544
7027
  for (const cssEntry of cssEntries) {
6545
7028
  const sourceFile = node_path.default.resolve(cssEntry);
6546
7029
  const sourceBase = node_path.default.dirname(sourceFile);
6547
- const sourceCss = require_v4_engine.normalizeTailwindSourceForGenerator(require_v4_engine.normalizeTailwindConfigDirectives(await (0, node_fs_promises.readFile)(sourceFile, "utf8"), sourceBase), { importFallback: true });
7030
+ const sourceCss = require_generator.normalizeTailwindSourceForGenerator(require_generator.normalizeTailwindConfigDirectives(await (0, node_fs_promises.readFile)(sourceFile, "utf8"), sourceBase), { importFallback: true });
6548
7031
  if (autoCssSourceContent.get(sourceFile) === sourceCss) continue;
6549
7032
  autoCssSourceContent.set(sourceFile, sourceCss);
6550
7033
  await syncTailwindCssSourceCandidates(sourceFile, sourceCss);
6551
- changed = require_v4_engine.upsertTailwindV4CssSource(opts, {
7034
+ changed = require_generator.upsertTailwindV4CssSource(opts, {
6552
7035
  file: sourceFile,
6553
7036
  base: sourceBase,
6554
7037
  css: sourceCss,
@@ -6572,8 +7055,11 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
6572
7055
  const pendingSourceCandidateSyncs = /* @__PURE__ */ new Set();
6573
7056
  const pendingSourceCandidateSyncByFile = /* @__PURE__ */ new Map();
6574
7057
  const processedCssAssets = /* @__PURE__ */ new WeakSet();
7058
+ const processedCssAssetSourceByFile = /* @__PURE__ */ new Map();
6575
7059
  const viteProcessedCssSourceFiles = /* @__PURE__ */ new Set();
6576
- const viteGeneratedCssByFile = /* @__PURE__ */ new Map();
7060
+ const cleanGeneratedCssByFile = /* @__PURE__ */ new Map();
7061
+ const tracedGeneratedCssByFile = /* @__PURE__ */ new Map();
7062
+ const generatedClassSetByFile = /* @__PURE__ */ new Map();
6577
7063
  const viteProcessedCssAssetResults = /* @__PURE__ */ new Map();
6578
7064
  const cssMemory = createViteCssMemory({
6579
7065
  debug,
@@ -6593,15 +7079,21 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
6593
7079
  refreshRuntimeStateForAutoCssSources = refreshRuntimeState;
6594
7080
  onLoad();
6595
7081
  const getResolvedConfig = () => resolvedConfig;
6596
- const markCssAssetProcessed = (asset, _file) => {
7082
+ const readCssAssetSource = (asset) => {
7083
+ return typeof asset.source === "string" ? asset.source : asset.source instanceof Uint8Array ? node_buffer.Buffer.from(asset.source).toString() : String(asset.source ?? "");
7084
+ };
7085
+ const markCssAssetProcessed = (asset, file) => {
6597
7086
  processedCssAssets.add(asset);
7087
+ if (file) processedCssAssetSourceByFile.set(require_source_candidate_scan_signature.normalizeOutputPathKey(file), readCssAssetSource(asset));
6598
7088
  };
6599
7089
  const isCssAssetProcessed = (asset, file) => {
6600
7090
  if (processedCssAssets.has(asset)) return true;
6601
7091
  if (!file) return false;
7092
+ const source = readCssAssetSource(asset);
7093
+ if (processedCssAssetSourceByFile.get(require_source_candidate_scan_signature.normalizeOutputPathKey(file)) === source) return true;
6602
7094
  const record = viteProcessedCssAssetResults.get(require_source_candidate_scan_signature.normalizeOutputPathKey(file));
6603
7095
  if (!record) return false;
6604
- return (typeof asset.source === "string" ? asset.source : asset.source instanceof Uint8Array ? node_buffer.Buffer.from(asset.source).toString() : String(asset.source ?? "")) === record.css;
7096
+ return source === record.css;
6605
7097
  };
6606
7098
  const recordGeneratorCandidates = (candidates) => {
6607
7099
  recordedGeneratorCandidates = new Set(candidates);
@@ -6624,6 +7116,95 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
6624
7116
  const cleanId = (0, _weapp_tailwindcss_shared.cleanUrl)(id);
6625
7117
  return cleanId.includes("/pages/") && /\.(?:vue|tsx?|jsx?)$/.test(cleanId);
6626
7118
  };
7119
+ const hasWebHmrRuntimeAffectingDirectives = (source) => typeof source === "string" && WEB_HMR_RUNTIME_AFFECTING_DIRECTIVE_RE.test(source);
7120
+ let pendingHmrCandidateChange;
7121
+ let pendingHmrCssTargetFiles;
7122
+ let pendingFullHmrCssRegeneration = false;
7123
+ const normalizeHmrCssTargetFile = (file) => normalizeVitePersistentCacheKey((0, _weapp_tailwindcss_shared.cleanUrl)(file));
7124
+ const collectPendingHmrCssTargetFiles = (cssModules, fallbackCssIds) => {
7125
+ const targets = /* @__PURE__ */ new Set();
7126
+ const addTarget = (file) => {
7127
+ if (typeof file !== "string" || file.length === 0) return;
7128
+ const key = normalizeHmrCssTargetFile(file);
7129
+ if (cleanGeneratedCssByFile.has(key)) targets.add(key);
7130
+ };
7131
+ for (const mod of cssModules) {
7132
+ addTarget(mod.id);
7133
+ addTarget(mod.file);
7134
+ addTarget(mod.url);
7135
+ }
7136
+ for (const id of fallbackCssIds) addTarget(id);
7137
+ return targets.size > 0 ? targets : void 0;
7138
+ };
7139
+ const armPendingHmrCssTargetFiles = (cssModules, fallbackCssIds) => {
7140
+ if (!pendingHmrCandidateChange) {
7141
+ pendingHmrCssTargetFiles = void 0;
7142
+ return;
7143
+ }
7144
+ pendingHmrCssTargetFiles = collectPendingHmrCssTargetFiles(cssModules, fallbackCssIds);
7145
+ };
7146
+ const createViteSourceCandidateChange = (file, change, options = {}) => ({
7147
+ ...change,
7148
+ file,
7149
+ runtimeAffecting: options.runtimeAffecting === true || require_source_candidate_scan_signature.isSourceStyleRequest(file) || hasWebHmrRuntimeAffectingDirectives(sourceCandidateCollector.source(file))
7150
+ });
7151
+ const clearPendingHmrCandidateChange = () => {
7152
+ pendingHmrCandidateChange = void 0;
7153
+ pendingHmrCssTargetFiles = void 0;
7154
+ pendingFullHmrCssRegeneration = false;
7155
+ };
7156
+ const queueHmrCandidateChange = (change) => {
7157
+ pendingFullHmrCssRegeneration = false;
7158
+ if (!pendingHmrCandidateChange) {
7159
+ pendingHmrCandidateChange = {
7160
+ file: change.file,
7161
+ runtimeAffecting: change.runtimeAffecting,
7162
+ addedCandidates: new Set(change.addedCandidates),
7163
+ removedCandidates: new Set(change.removedCandidates)
7164
+ };
7165
+ return;
7166
+ }
7167
+ for (const candidate of change.addedCandidates) {
7168
+ pendingHmrCandidateChange.addedCandidates.add(candidate);
7169
+ pendingHmrCandidateChange.removedCandidates.delete(candidate);
7170
+ }
7171
+ for (const candidate of change.removedCandidates) if (!pendingHmrCandidateChange.addedCandidates.delete(candidate)) pendingHmrCandidateChange.removedCandidates.add(candidate);
7172
+ pendingHmrCandidateChange.runtimeAffecting = pendingHmrCandidateChange.runtimeAffecting || change.runtimeAffecting;
7173
+ pendingHmrCandidateChange.file = change.file;
7174
+ };
7175
+ const queueFullHmrCssRegeneration = () => {
7176
+ pendingHmrCandidateChange = void 0;
7177
+ pendingHmrCssTargetFiles = void 0;
7178
+ pendingFullHmrCssRegeneration = true;
7179
+ };
7180
+ const applySourceCandidateHmrState = (change) => {
7181
+ if (require_source_candidate_scan_signature.isSourceStyleRequest(change.file)) {
7182
+ clearPendingHmrCandidateChange();
7183
+ return change;
7184
+ }
7185
+ const preserveDeletedCssInHmr = resolveCurrentGeneratorOptions().hmr.preserveDeletedCss;
7186
+ if (preserveDeletedCssInHmr && !change.runtimeAffecting) {
7187
+ if (change.addedCandidates.size > 0) queueHmrCandidateChange(change);
7188
+ else if (!pendingHmrCandidateChange) clearPendingHmrCandidateChange();
7189
+ return change;
7190
+ }
7191
+ clearPendingHmrCandidateChange();
7192
+ if (!preserveDeletedCssInHmr) queueFullHmrCssRegeneration();
7193
+ return change;
7194
+ };
7195
+ const resolvePendingHmrCandidateChange = (generatorCode, file) => {
7196
+ if (resolvedConfig?.command !== "serve" || !pendingHmrCandidateChange || pendingHmrCandidateChange.runtimeAffecting || pendingHmrCandidateChange.addedCandidates.size === 0 || resolveCurrentGeneratorOptions().target === "weapp" && require_generator.hasUserCssLayerBlocks(generatorCode) || !cleanGeneratedCssByFile.has(file) || !generatedClassSetByFile.has(file) || pendingHmrCssTargetFiles !== void 0 && !pendingHmrCssTargetFiles.has(normalizeHmrCssTargetFile(file))) return;
7197
+ return pendingHmrCandidateChange;
7198
+ };
7199
+ const finishPendingHmrCssTargetFile = (file) => {
7200
+ if (!pendingHmrCandidateChange) return;
7201
+ if (!pendingHmrCssTargetFiles) {
7202
+ clearPendingHmrCandidateChange();
7203
+ return;
7204
+ }
7205
+ pendingHmrCssTargetFiles.delete(normalizeHmrCssTargetFile(file));
7206
+ if (pendingHmrCssTargetFiles.size === 0) clearPendingHmrCandidateChange();
7207
+ };
6627
7208
  const hasSourceCandidateScanState = () => sourceCandidateScanSignature !== void 0;
6628
7209
  const normalizeSourceScanDependency = (file) => node_path.default.normalize(node_path.default.resolve((0, _weapp_tailwindcss_shared.cleanUrl)(file)));
6629
7210
  const isSourceScanDependency = (file) => sourceScanDependencies.has(normalizeSourceScanDependency(file));
@@ -6649,7 +7230,7 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
6649
7230
  seenRoots.add(basedir);
6650
7231
  }
6651
7232
  for (const cssEntry of opts.tailwindcss?.v4?.cssEntries ?? []) {
6652
- if (!require_v4_engine.isTailwindV4CssEntry(cssEntry)) continue;
7233
+ if (!require_generator.isTailwindV4CssEntry(cssEntry)) continue;
6653
7234
  const cssEntryRoot = node_path.default.dirname(node_path.default.resolve(cssEntry));
6654
7235
  if (seenRoots.has(cssEntryRoot)) continue;
6655
7236
  roots.push({ root: cssEntryRoot });
@@ -6728,34 +7309,41 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
6728
7309
  const waitForSourceCandidateSyncs = async () => {
6729
7310
  while (pendingSourceCandidateSyncs.size > 0) await Promise.all(pendingSourceCandidateSyncs);
6730
7311
  };
6731
- const syncChangedSourceCandidateFile = (id) => {
6732
- if (!shouldOwnTailwindGeneration || !require_hmr_timing.isSourceCandidateRequest(id)) return Promise.resolve();
7312
+ const syncChangedSourceCandidateFile = (id, sourceOverride) => {
7313
+ if (!shouldOwnTailwindGeneration || !require_hmr_timing.isSourceCandidateRequest(id)) return Promise.resolve(void 0);
6733
7314
  const file = (0, _weapp_tailwindcss_shared.cleanUrl)(id);
6734
- if (isSourceScanDependency(file)) invalidateSourceCandidateScan();
7315
+ const runtimeAffectingByDependency = isSourceScanDependency(file);
7316
+ if (runtimeAffectingByDependency) invalidateSourceCandidateScan();
6735
7317
  if (sourceScanMatcher && !sourceScanMatcher(file)) {
6736
- sourceCandidateCollector.remove(file);
7318
+ const change = sourceCandidateCollector.remove(file);
6737
7319
  cacheCurrentSourceCandidateScan();
6738
7320
  if (require_source_candidate_scan_signature.isSourceStyleRequest(file)) return (0, node_fs_promises.readFile)(file, "utf8").then((source) => cssMemory.refreshRememberedCssSourceBySourceFile(file, source)).catch((error) => {
6739
7321
  if ((typeof error === "object" && error !== null && "code" in error ? error.code : void 0) !== "ENOENT") debug("remembered css source watch refresh failed: %s %O", file, error);
6740
- }).then(() => cssMemory.refreshRememberedCssSourceByCurrentFile(file)).then(() => void 0);
6741
- return cssMemory.refreshRememberedCssSourceByCurrentFile(file);
7322
+ }).then(() => cssMemory.refreshRememberedCssSourceByCurrentFile(file)).then(() => applySourceCandidateHmrState(createViteSourceCandidateChange(file, change, { runtimeAffecting: true })));
7323
+ return cssMemory.refreshRememberedCssSourceByCurrentFile(file).then(() => applySourceCandidateHmrState(createViteSourceCandidateChange(file, change, { runtimeAffecting: true })));
6742
7324
  }
6743
- const existingTask = pendingSourceCandidateSyncByFile.get(file);
6744
- if (existingTask) return existingTask.then(() => cssMemory.refreshRememberedCssSourceByCurrentFile(file)).then(() => void 0);
6745
- const task = sourceCandidateCollector.syncCurrentFile(id).catch((error) => {
7325
+ const existingTask = sourceOverride === void 0 ? pendingSourceCandidateSyncByFile.get(file) : void 0;
7326
+ if (existingTask) return existingTask.then(async () => {
7327
+ return await syncChangedSourceCandidateFile(id);
7328
+ });
7329
+ const task = (sourceOverride === void 0 ? sourceCandidateCollector.syncCurrentFile(id) : sourceCandidateCollector.syncCurrentSource(id, sourceOverride)).catch((error) => {
6746
7330
  debug("source candidate watch sync failed: %s %O", id, error);
6747
- }).then(() => {
7331
+ }).then((change) => {
6748
7332
  cacheCurrentSourceCandidateScan();
7333
+ return change ? applySourceCandidateHmrState(createViteSourceCandidateChange(file, change, { runtimeAffecting: runtimeAffectingByDependency })) : void 0;
6749
7334
  }).finally(() => {
6750
7335
  pendingSourceCandidateSyncs.delete(task);
6751
7336
  pendingSourceCandidateSyncByFile.delete(file);
6752
7337
  });
6753
7338
  pendingSourceCandidateSyncs.add(task);
6754
7339
  pendingSourceCandidateSyncByFile.set(file, task);
6755
- return task.then(() => cssMemory.refreshRememberedCssSourceByCurrentFile(file)).then(() => void 0);
7340
+ return task.then(async (change) => {
7341
+ await cssMemory.refreshRememberedCssSourceByCurrentFile(file);
7342
+ return change;
7343
+ });
6756
7344
  };
6757
7345
  const recordCssAssetResult = (file, css) => {
6758
- touchMapEntry(viteGeneratedCssByFile, normalizeVitePersistentCacheKey(file), css);
7346
+ touchMapEntry(cleanGeneratedCssByFile, normalizeVitePersistentCacheKey(file), css);
6759
7347
  };
6760
7348
  const recordViteProcessedCssAssetResult = (file, css, options = {}) => {
6761
7349
  const key = normalizeVitePersistentCacheKey(file);
@@ -6769,8 +7357,11 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
6769
7357
  const getViteProcessedCssAssetResults = () => viteProcessedCssAssetResults.entries();
6770
7358
  const getViteProcessedCssAssetResult = (file) => viteProcessedCssAssetResults.get(normalizeVitePersistentCacheKey(file));
6771
7359
  const getViteCssCacheStats = () => ({
6772
- viteGeneratedCssByFile: viteGeneratedCssByFile.size,
6773
- viteGeneratedCssByFileRaw: summarizeStringCache(viteGeneratedCssByFile),
7360
+ cleanGeneratedCssByFile: cleanGeneratedCssByFile.size,
7361
+ cleanGeneratedCssByFileRaw: summarizeStringCache(cleanGeneratedCssByFile),
7362
+ tracedGeneratedCssByFile: tracedGeneratedCssByFile.size,
7363
+ tracedGeneratedCssByFileRaw: summarizeStringCache(tracedGeneratedCssByFile),
7364
+ generatedClassSetByFile: generatedClassSetByFile.size,
6774
7365
  viteProcessedCssAssetResults: viteProcessedCssAssetResults.size,
6775
7366
  viteProcessedCssAssetResultsRaw: summarizeViteProcessedCssResults(viteProcessedCssAssetResults),
6776
7367
  ...cssMemory.getStats(),
@@ -6780,7 +7371,9 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
6780
7371
  });
6781
7372
  const pruneViteCssCaches = (options) => {
6782
7373
  const activeFiles = new Set([...options.activeFiles].map(normalizeVitePersistentCacheKey));
6783
- for (const key of viteGeneratedCssByFile.keys()) if (!activeFiles.has(key)) viteGeneratedCssByFile.delete(key);
7374
+ for (const key of cleanGeneratedCssByFile.keys()) if (!activeFiles.has(key)) cleanGeneratedCssByFile.delete(key);
7375
+ for (const key of tracedGeneratedCssByFile.keys()) if (!activeFiles.has(key)) tracedGeneratedCssByFile.delete(key);
7376
+ for (const key of generatedClassSetByFile.keys()) if (!activeFiles.has(key)) generatedClassSetByFile.delete(key);
6784
7377
  for (const [key, record] of viteProcessedCssAssetResults) {
6785
7378
  const outputKey = typeof record.outputFile === "string" ? normalizeVitePersistentCacheKey(record.outputFile) : void 0;
6786
7379
  if (!activeFiles.has(key) && (outputKey == null || !activeFiles.has(outputKey))) viteProcessedCssAssetResults.delete(key);
@@ -6794,7 +7387,12 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
6794
7387
  const rememberTailwindRootCssModule = (id) => {
6795
7388
  if (!shouldOwnTailwindGeneration) return;
6796
7389
  tailwindRootCssModuleIds.add(id);
6797
- tailwindRootCssModuleIds.add((0, _weapp_tailwindcss_shared.cleanUrl)(id));
7390
+ const cleanId = (0, _weapp_tailwindcss_shared.cleanUrl)(id);
7391
+ if (require_source_candidate_scan_signature.isSourceStyleRequest(cleanId)) tailwindRootCssModuleIds.add(cleanId);
7392
+ };
7393
+ const registerTailwindRootCss = async (id, code) => {
7394
+ rememberTailwindRootCssModule(id);
7395
+ await registerAutoCssSource(id, code);
6798
7396
  };
6799
7397
  const isUniViteProject = () => {
6800
7398
  return resolvedConfig?.plugins?.some((plugin) => plugin.name.includes("uni")) ?? false;
@@ -6836,7 +7434,7 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
6836
7434
  const file = (0, _weapp_tailwindcss_shared.cleanUrl)(id);
6837
7435
  const requestFile = require_source_candidate_scan_signature.isCSSRequest(id) ? id === file ? resolveSfcStyleRequestFromKnownSource(file, cssMemory.getKnownSfcSource(file), code) : id : file;
6838
7436
  if (!require_source_candidate_scan_signature.isCSSRequest(requestFile) || opts.htmlMatcher(file) || require_source_candidate_scan_signature.isHTMLRequest(file)) return;
6839
- const generatorCode = require_v4_engine.normalizeEmptyTailwindCustomVariants(code);
7437
+ const generatorCode = require_generator.normalizeEmptyTailwindCustomVariants(code);
6840
7438
  const rootDir = resolvedConfig?.root ? node_path.default.resolve(resolvedConfig.root) : node_process.default.cwd();
6841
7439
  const currentGeneratorOptions = resolveCurrentGeneratorOptions();
6842
7440
  const currentGeneratorBranch = resolveCurrentGeneratorBranch();
@@ -6847,28 +7445,41 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
6847
7445
  const shouldPreserveStyleOutputExtension = frameworkCssPipelineStrategy?.shouldPreserveStyleOutputExtension?.(cssPipelineContext) ?? frameworkCssPipelineStrategy?.isNativeAppStyleTarget?.(cssPipelineContext) === true;
6848
7446
  const sourceRoot = resolveWeappViteSourceRoot(resolvedConfig, opts.appType);
6849
7447
  const outputFile = resolveViteCssPipelineOutputFile(requestFile, opts, rootDir, currentGeneratorBranch.isWeb, shouldPreserveStyleOutputExtension, sourceRoot);
6850
- const runtime = getRecordedGeneratorCandidates() ?? getSourceCandidates() ?? await ensureRuntimeClassSet();
7448
+ const generatorTransformCode = currentGeneratorBranch.isWeb ? generatorCode : require_hmr_timing.normalizeMiniProgramGeneratorCssSource(generatorCode, outputFile);
7449
+ const fullRuntime = getSourceCandidates() ?? getRecordedGeneratorCandidates() ?? await ensureRuntimeClassSet();
7450
+ const pendingHmrChange = resolvePendingHmrCandidateChange(generatorCode, file);
7451
+ const forceFullHmrCssRegeneration = pendingFullHmrCssRegeneration || resolvedConfig?.command === "serve" && pendingHmrCandidateChange !== void 0 && pendingHmrChange === void 0;
7452
+ const runtime = pendingHmrChange ? new Set(pendingHmrChange.addedCandidates) : fullRuntime;
7453
+ if (pendingHmrChange && currentGeneratorOptions.target === "weapp" && require_generator.filterUnsupportedMiniProgramTailwindV4Candidates(pendingHmrChange.addedCandidates).size === 0) {
7454
+ const previousTracedCss = tracedGeneratedCssByFile.get(file);
7455
+ if (previousTracedCss !== void 0) {
7456
+ finishPendingHmrCssTargetFile(file);
7457
+ return `${require_source_candidate_scan_signature.createBundlerGeneratedCssMarker("vite", normalizeViteProcessedCssFile(file))}\n${previousTracedCss}`;
7458
+ }
7459
+ }
6851
7460
  const sourceCssHandlerOptions = transformCssHandlerOptions.getCssHandlerOptions(requestFile);
6852
7461
  const outputCssHandlerOptions = transformCssHandlerOptions.getCssHandlerOptions(outputFile);
6853
7462
  const cssHandlerOptions = {
6854
7463
  ...sourceCssHandlerOptions,
6855
7464
  isMainChunk: outputCssHandlerOptions.isMainChunk
6856
7465
  };
6857
- const transientCssSource = transientAutoCssSources.get(file) ?? (require_v4_engine.hasTailwindRootDirectives(generatorCode, { importFallback: currentGeneratorOptions.importFallback }) || require_v4_engine.hasTailwindSourceDirectives(generatorCode, { importFallback: currentGeneratorOptions.importFallback }) || require_v4_engine.hasTailwindApplyDirective(generatorCode) ? {
7466
+ const transientCssSource = transientAutoCssSources.get(file) ?? (require_generator.hasTailwindRootDirectives(generatorTransformCode, { importFallback: currentGeneratorOptions.importFallback }) || require_generator.hasTailwindSourceDirectives(generatorTransformCode, { importFallback: currentGeneratorOptions.importFallback }) || require_generator.hasTailwindApplyDirective(generatorTransformCode) ? {
6858
7467
  base: node_path.default.dirname(node_path.default.resolve(file)),
6859
- css: generatorCode,
7468
+ css: generatorTransformCode,
6860
7469
  file: node_path.default.resolve(file)
6861
7470
  } : void 0);
6862
7471
  const shouldDeferEmptyScopedCssSource = transientCssSource == null && (frameworkCssPipelineStrategy?.shouldDeferEmptyScopedCssSource?.({
6863
7472
  ...cssPipelineContext,
6864
7473
  cssHandlerOptions,
6865
- generatorCode
7474
+ generatorCode: generatorTransformCode
6866
7475
  }) ?? true);
6867
- const generated = await require_source_candidate_scan_signature.generateTailwindV4Css({
7476
+ const previousCss = pendingHmrChange && !forceFullHmrCssRegeneration ? cleanGeneratedCssByFile.get(file) : void 0;
7477
+ const previousGeneratorCss = previousCss && !currentGeneratorBranch.isWeb ? require_hmr_timing.normalizeMiniProgramGeneratorCssSource(previousCss, outputFile) : previousCss;
7478
+ const generated = await hmrTimingRecorder.measure("generateCss.serve", () => require_source_candidate_scan_signature.generateTailwindV4Css({
6868
7479
  opts,
6869
7480
  runtimeState,
6870
7481
  runtime,
6871
- rawSource: generatorCode,
7482
+ rawSource: generatorTransformCode,
6872
7483
  file,
6873
7484
  outputFile,
6874
7485
  cssHandlerOptions,
@@ -6878,25 +7489,45 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
6878
7489
  generatorPlatform: resolveGeneratorPlatform(),
6879
7490
  styleHandler,
6880
7491
  debug,
6881
- previousCss: viteGeneratedCssByFile.get(file),
7492
+ previousCss: previousGeneratorCss,
7493
+ previousClassSet: pendingHmrChange && !forceFullHmrCssRegeneration ? generatedClassSetByFile.get(file) : void 0,
6882
7494
  deferEmptyScopedCssSource: shouldDeferEmptyScopedCssSource,
7495
+ disableSourceScan: pendingHmrChange !== void 0,
6883
7496
  restoreLocalCssImports: !currentGeneratorBranch.isWeb
7497
+ }), {
7498
+ file,
7499
+ memoryDebug: {
7500
+ cleanCacheHit: cleanGeneratedCssByFile.has(file),
7501
+ forceFullHmrCssRegeneration,
7502
+ pendingAddedCandidates: pendingHmrCandidateChange?.addedCandidates.size ?? 0,
7503
+ pendingCssTargets: pendingHmrCssTargetFiles?.size ?? 0,
7504
+ pendingResolved: pendingHmrChange !== void 0,
7505
+ runtimeCandidates: runtime.size,
7506
+ target: currentGeneratorOptions.target
7507
+ }
6884
7508
  });
6885
- if (!generated) return;
7509
+ if (!generated) {
7510
+ if (pendingHmrChange) finishPendingHmrCssTargetFile(file);
7511
+ else if (!pendingHmrCandidateChange) clearPendingHmrCandidateChange();
7512
+ return;
7513
+ }
6886
7514
  const finalizedCss = finalizeViteMiniProgramCss(generated.css);
6887
- const shouldApplyWebCssCompat = currentGeneratorBranch.isWeb || frameworkCssPipelineStrategy?.shouldApplyWebCssCompat?.(cssPipelineContext) === true;
6888
- const tracedCss = require_hmr_timing.annotateCssSourceTrace(frameworkCssPipelineStrategy?.transformGeneratedCss?.(finalizedCss, {
7515
+ const shouldApplyWebCssCompat = shouldApplyViteWebCssCompat(cssPipelineContext, frameworkCssPipelineStrategy);
7516
+ const outputCss = frameworkCssPipelineStrategy?.transformGeneratedCss?.(finalizedCss, {
6889
7517
  ...cssPipelineContext,
6890
- defaultWebCssCompat: (css) => applyViteWebCssCompat(css, { compat: currentGeneratorOptions.webCompat ?? true }),
7518
+ defaultWebCssCompat: (css) => (0, _weapp_tailwindcss_postcss.transformWebCssCompat)(css, resolveViteWebCssCompatOptions(cssPipelineContext)),
6891
7519
  removeScopedPreflight: removeScopedTailwindPreflightCss,
6892
7520
  shouldApplyWebCssCompat
6893
- }) ?? removeScopedTailwindPreflightCss(shouldApplyWebCssCompat ? applyViteWebCssCompat(finalizedCss, { compat: currentGeneratorOptions.webCompat ?? true }) : finalizedCss), {
7521
+ }) ?? removeScopedTailwindPreflightCss(shouldApplyWebCssCompat ? (0, _weapp_tailwindcss_postcss.transformWebCssCompat)(finalizedCss, resolveViteWebCssCompatOptions(cssPipelineContext)) : finalizedCss);
7522
+ const tracedCss = require_hmr_timing.annotateCssSourceTrace(outputCss, {
6894
7523
  opts,
6895
7524
  tokenSources: require_hmr_timing.createCssTokenSourceMap(getSourceCandidateSourcesForEntries(void 0), opts)
6896
7525
  });
6897
7526
  for (const dependency of generated.dependencies) hookContext?.addWatchFile?.(dependency);
6898
- viteGeneratedCssByFile.set(file, tracedCss);
6899
- const shouldInjectGeneratedCssIntoMain = mainCssChunkMatcher(outputFile, opts.appType) || require_v4_engine.hasTailwindRootDirectives(generatorCode, { importFallback: currentGeneratorOptions.importFallback }) && !require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile).includes("/");
7527
+ cleanGeneratedCssByFile.set(file, outputCss);
7528
+ tracedGeneratedCssByFile.set(file, tracedCss);
7529
+ generatedClassSetByFile.set(file, new Set(generated.classSet));
7530
+ const shouldInjectGeneratedCssIntoMain = mainCssChunkMatcher(outputFile, opts.appType) || require_generator.hasTailwindRootDirectives(generatorTransformCode, { importFallback: currentGeneratorOptions.importFallback }) && !require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile).includes("/");
6900
7531
  recordViteProcessedCssAssetResult(file, tracedCss, {
6901
7532
  injectIntoMain: shouldInjectGeneratedCssIntoMain,
6902
7533
  outputFile
@@ -6912,7 +7543,9 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
6912
7543
  });
6913
7544
  markViteProcessedCssSource(file);
6914
7545
  rememberTailwindRootCssModule(id);
6915
- recordGeneratorCandidates(runtime);
7546
+ recordGeneratorCandidates(fullRuntime);
7547
+ if (pendingHmrChange) finishPendingHmrCssTargetFile(file);
7548
+ else if (!pendingHmrCandidateChange) clearPendingHmrCandidateChange();
6916
7549
  cssMemory.rememberCssSource({
6917
7550
  outputFile,
6918
7551
  rawSource: code,
@@ -6925,10 +7558,10 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
6925
7558
  getAppType: () => opts.appType,
6926
7559
  generateTailwindCss: generateTailwindCssForVitePipeline,
6927
7560
  rootImport: shouldOwnTailwindGeneration ? `${weappTailwindcssDirPosix}/generator-placeholder.css` : void 0,
6928
- onTailwindRootCss: (id, code) => registerAutoCssSource(id, code),
7561
+ onTailwindRootCss: registerTailwindRootCss,
6929
7562
  onCssSourceTransform: (id, code) => cssMemory.refreshRememberedCssSourceBySourceFile(id, code),
6930
7563
  shouldGenerateCss: (_id, code) => hasVitePipelineTailwindGenerationDirective(code),
6931
- shouldDeferGeneration: (_id, code) => !shouldRewriteCssImports && require_v4_engine.hasTailwindRootDirectives(code, { importFallback: resolveCurrentGeneratorOptions().importFallback }),
7564
+ shouldDeferGeneration: (_id, code) => !shouldRewriteCssImports && require_generator.hasTailwindRootDirectives(code, { importFallback: resolveCurrentGeneratorOptions().importFallback }),
6932
7565
  shouldOwnTailwindGeneration,
6933
7566
  shouldRewrite: shouldRewriteCssImports,
6934
7567
  weappTailwindcssDirPosix
@@ -7031,7 +7664,10 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7031
7664
  let transformedCode = code;
7032
7665
  if (shouldOwnTailwindGeneration && !resolveCurrentGeneratorBranch().isWeb && require_source_candidate_scan_signature.isCSSRequest(id)) transformedCode = transformEarlyMiniProgramCss(code);
7033
7666
  const shouldReturnTransformedCode = transformedCode !== code;
7034
- if (shouldOwnTailwindGeneration) cssMemory.rememberKnownSfcSource(id, transformedCode);
7667
+ if (shouldOwnTailwindGeneration) {
7668
+ cssMemory.rememberKnownSfcSource(id, transformedCode);
7669
+ if (require_source_candidate_scan_signature.isCSSRequest(id) && require_generator.hasTailwindRootDirectives(transformedCode, { importFallback: resolveCurrentGeneratorOptions().importFallback })) rememberTailwindRootCssModule(id);
7670
+ }
7035
7671
  if (!shouldOwnTailwindGeneration || !require_hmr_timing.isSourceCandidateRequest(id) || !shouldCollectTransformedSourceCandidates(id)) {
7036
7672
  if (shouldReturnTransformedCode) return {
7037
7673
  code: transformedCode,
@@ -7061,8 +7697,10 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7061
7697
  if (shouldOwnTailwindGeneration && require_hmr_timing.isSourceCandidateRequest(id)) invalidateRecordedGeneratorCandidates();
7062
7698
  if (isSourceScanDependency(id)) invalidateSourceCandidateScan();
7063
7699
  if (change.event === "delete") {
7064
- sourceCandidateCollector.remove(id);
7700
+ const file = (0, _weapp_tailwindcss_shared.cleanUrl)(id);
7701
+ const sourceCandidateChange = sourceCandidateCollector.remove(file);
7065
7702
  cacheCurrentSourceCandidateScan();
7703
+ applySourceCandidateHmrState(createViteSourceCandidateChange(file, sourceCandidateChange, { runtimeAffecting: isSourceScanDependency(file) }));
7066
7704
  return;
7067
7705
  }
7068
7706
  await syncChangedSourceCandidateFile(id);
@@ -7071,18 +7709,36 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7071
7709
  async handleHotUpdate(ctx) {
7072
7710
  return hmrTimingRecorder.measure("sourceCandidates.handleHotUpdate", async () => {
7073
7711
  const isSourceCandidateHotUpdate = shouldOwnTailwindGeneration && require_hmr_timing.isSourceCandidateRequest(ctx.file);
7074
- await syncChangedSourceCandidateFile(ctx.file);
7712
+ if (isSourceCandidateHotUpdate && require_source_candidate_scan_signature.isSourceStyleRequest(ctx.file)) for (const mod of ctx.modules) {
7713
+ if (mod.id) rememberTailwindRootCssModule(mod.id);
7714
+ if (mod.url) rememberTailwindRootCssModule(mod.url);
7715
+ if (mod.file) rememberTailwindRootCssModule(mod.file);
7716
+ }
7717
+ const canReadHotSource = typeof ctx.read === "function";
7718
+ const hotSource = isSourceCandidateHotUpdate && canReadHotSource ? await ctx.read().catch(() => void 0) : void 0;
7719
+ const sourceCandidateChange = await syncChangedSourceCandidateFile(ctx.file, hotSource);
7075
7720
  const isWebLikeHotUpdate = isCurrentWebLikeStylePlatform();
7721
+ let canUseHmrCandidateAppend = false;
7076
7722
  if (isSourceCandidateHotUpdate) {
7077
7723
  invalidateRecordedGeneratorCandidates();
7078
- if (isWebLikeHotUpdate) {
7079
- await refreshRuntimeStateForAutoCssSources?.(true);
7080
- await syncSourceCandidateScan({ force: true });
7724
+ const preserveDeletedCssInHmr = resolveCurrentGeneratorOptions().hmr.preserveDeletedCss;
7725
+ canUseHmrCandidateAppend = preserveDeletedCssInHmr && !require_source_candidate_scan_signature.isSourceStyleRequest(ctx.file) && sourceCandidateChange !== void 0 && !sourceCandidateChange.runtimeAffecting;
7726
+ if (!canUseHmrCandidateAppend) {
7727
+ if (sourceCandidateChange === void 0) {
7728
+ clearPendingHmrCandidateChange();
7729
+ if (!preserveDeletedCssInHmr && !require_source_candidate_scan_signature.isSourceStyleRequest(ctx.file)) queueFullHmrCssRegeneration();
7730
+ }
7731
+ if (isWebLikeHotUpdate) {
7732
+ await refreshRuntimeStateForAutoCssSources?.(true);
7733
+ await syncSourceCandidateScan({ force: true });
7734
+ }
7081
7735
  }
7082
7736
  }
7737
+ if (isSourceCandidateHotUpdate) await waitForSourceCandidateSyncs();
7083
7738
  const cssModules = resolveHotTailwindCssModules(ctx, tailwindRootCssModuleIds);
7084
7739
  const sourceModules = isSourceCandidateHotUpdate && !require_source_candidate_scan_signature.isSourceStyleRequest(ctx.file) ? resolveHotSourceModules(ctx) : ctx.modules;
7085
- if (isSourceCandidateHotUpdate && !require_source_candidate_scan_signature.isSourceStyleRequest(ctx.file) && !isWebLikeHotUpdate && (!hasSelfAcceptingNonStyleHotModule(sourceModules) && cssModules.length === 0 || cssModules.length > 0 && isUniViteProject())) {
7740
+ const hasHmrCandidateAppend = pendingHmrCandidateChange !== void 0 && !pendingHmrCandidateChange.runtimeAffecting && pendingHmrCandidateChange.addedCandidates.size > 0 || canUseHmrCandidateAppend && sourceCandidateChange !== void 0 && sourceCandidateChange.addedCandidates.size > 0;
7741
+ if (isSourceCandidateHotUpdate && !require_source_candidate_scan_signature.isSourceStyleRequest(ctx.file) && !hasHmrCandidateAppend && !isWebLikeHotUpdate && (!hasSelfAcceptingNonStyleHotModule(sourceModules) && cssModules.length === 0 || cssModules.length > 0 && isUniViteProject())) {
7086
7742
  sendFullReloadForUnresolvedHotUpdate(ctx);
7087
7743
  return [];
7088
7744
  }
@@ -7090,7 +7746,10 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7090
7746
  sendFullReloadForUnresolvedHotUpdate(ctx);
7091
7747
  return [];
7092
7748
  }
7093
- sendSupplementalCssHotUpdates(ctx, cssModules);
7749
+ const shouldSendSupplementalCssHotUpdates = !(isWebLikeHotUpdate && isSourceCandidateHotUpdate && !require_source_candidate_scan_signature.isSourceStyleRequest(ctx.file) && resolveCurrentGeneratorOptions().hmr.preserveDeletedCss && sourceCandidateChange !== void 0 && !sourceCandidateChange.runtimeAffecting && sourceCandidateChange.addedCandidates.size === 0 && sourceCandidateChange.removedCandidates.size > 0);
7750
+ const supplementalCssFallbackIds = /* @__PURE__ */ new Set([...tailwindRootCssModuleIds, ...viteProcessedCssSourceFiles]);
7751
+ if (hasHmrCandidateAppend) armPendingHmrCssTargetFiles(cssModules, supplementalCssFallbackIds);
7752
+ if (shouldSendSupplementalCssHotUpdates) sendSupplementalCssHotUpdates(ctx, cssModules, supplementalCssFallbackIds);
7094
7753
  if (isWebLikeHotUpdate && isSourceCandidateHotUpdate && !require_source_candidate_scan_signature.isSourceStyleRequest(ctx.file)) return;
7095
7754
  if (isSourceCandidateHotUpdate && !require_source_candidate_scan_signature.isSourceStyleRequest(ctx.file) && cssModules.length > 0) return [...sourceModules, ...cssModules];
7096
7755
  return cssModules.length > 0 ? [...ctx.modules, ...cssModules] : void 0;
@@ -7105,7 +7764,7 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7105
7764
  ...createViteServeCssGenerationPlugins({
7106
7765
  generateCss: generateTailwindCssForVitePipeline,
7107
7766
  getCommand: () => resolvedConfig?.command,
7108
- onTailwindRootCss: (id, code) => registerAutoCssSource(id, code),
7767
+ onTailwindRootCss: registerTailwindRootCss,
7109
7768
  shouldGenerate: () => shouldOwnTailwindGeneration
7110
7769
  }),
7111
7770
  createViteServeJsTransformPlugin({
@@ -7290,13 +7949,13 @@ const uniAppCssPipelineStrategy = {
7290
7949
  return context.isWebGeneratorTarget && isUniAppWebviewAppBundle(context.bundleFiles);
7291
7950
  },
7292
7951
  shouldSelectConfiguredCssEntryRootSource(context) {
7293
- return context.currentGeneratorBranch.isWeb && context.opts.cssMatcher(context.outputFile) && context.isRootStyleOutputFile(context.outputFile);
7952
+ return context.opts.cssMatcher(context.outputFile) && context.isRootStyleOutputFile(context.outputFile);
7294
7953
  },
7295
7954
  shouldTransformServeJs(context) {
7296
7955
  return !context.currentGeneratorBranch.isWeb || isUniAppWebviewStylePlatform(context.resolveStylePlatform());
7297
7956
  },
7298
7957
  transformGeneratedCss(css, context) {
7299
- const webCss = context.shouldApplyWebCssCompat ? (0, _weapp_tailwindcss_postcss.transformWebCssCompat)(css, context.currentGeneratorBranch.isWeb ? context.currentGeneratorOptions.webCompat : context.currentGeneratorOptions.webCompat ?? true) : css;
7958
+ const webCss = context.shouldApplyWebCssCompat ? context.defaultWebCssCompat(css) : css;
7300
7959
  const safeCss = isUniAppWebviewStylePlatform(context.resolveStylePlatform()) ? (0, _weapp_tailwindcss_postcss.transformWebCssSafeSelectors)(webCss, { escapeMap: context.opts.escapeMap }) : webCss;
7301
7960
  return context.removeScopedPreflight(safeCss);
7302
7961
  }
@@ -7418,7 +8077,7 @@ const uniAppXCssPipelineStrategy = {
7418
8077
  return true;
7419
8078
  },
7420
8079
  shouldDeferEmptyScopedCssSource(context) {
7421
- if (!context.cssHandlerOptions.isMainChunk && require_v4_engine.hasTailwindApplyDirective(context.generatorCode)) return false;
8080
+ if (!context.cssHandlerOptions.isMainChunk && require_generator.hasTailwindApplyDirective(context.generatorCode)) return false;
7422
8081
  return true;
7423
8082
  },
7424
8083
  transformGeneratedCss(css, context) {