weapp-tailwindcss 5.1.5 → 5.1.7

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 (50) hide show
  1. package/README.en.md +1 -1
  2. package/README.md +1 -1
  3. package/dist/bundlers/shared/generator-css/types.d.ts +1 -0
  4. package/dist/bundlers/shared/generator-css/user-css.d.ts +4 -1
  5. package/dist/bundlers/vite/generate-bundle/finalize.d.ts +1 -0
  6. package/dist/bundlers/vite/generate-bundle/remembered-css-replay.d.ts +1 -0
  7. package/dist/bundlers/vite/processed-css-assets.d.ts +7 -0
  8. package/dist/bundlers/webpack/BaseUnifiedPlugin/v5-assets/pipeline-helpers.d.ts +10 -0
  9. package/dist/{context-rrYZuUBU.mjs → context-BqeDu1Ha.mjs} +5 -4
  10. package/dist/{context-BziwyWy1.js → context-C7KTDlrG.js} +5 -4
  11. package/dist/core.js +1 -1
  12. package/dist/core.mjs +1 -1
  13. package/dist/{generator-24-HgU9F.mjs → generator-BOt2Tvx3.mjs} +2 -2
  14. package/dist/{generator-CilgHtxb.js → generator-DASZwC6t.js} +2 -2
  15. package/dist/generator.js +2 -2
  16. package/dist/generator.mjs +2 -2
  17. package/dist/{gulp-CuVsZdO9.js → gulp-D6hsaTLM.js} +4 -4
  18. package/dist/{gulp-ygWfmOqh.mjs → gulp-alDZryyB.mjs} +4 -4
  19. package/dist/gulp.js +1 -1
  20. package/dist/gulp.mjs +1 -1
  21. package/dist/{hmr-timing-BKdCeIrn.js → hmr-timing-BIr_CiPW.js} +55 -566
  22. package/dist/{hmr-timing-Dh_nn3w5.mjs → hmr-timing-CYwVMRol.mjs} +32 -513
  23. package/dist/index.js +4 -4
  24. package/dist/index.mjs +4 -4
  25. package/dist/postcss.js +2 -2
  26. package/dist/postcss.mjs +2 -2
  27. package/dist/presets.js +6 -3
  28. package/dist/presets.mjs +6 -3
  29. package/dist/rspack.js +1 -1
  30. package/dist/rspack.mjs +1 -1
  31. package/dist/runtime-branch/generator-target-env.d.ts +1 -0
  32. package/dist/{source-candidate-scan-signature-DATRnS1X.mjs → source-candidate-scan-signature-D97ZEXcj.mjs} +3 -3
  33. package/dist/{source-candidate-scan-signature-DIj9m4wB.js → source-candidate-scan-signature-Djr2Hw8y.js} +3 -3
  34. package/dist/{tailwindcss-C-uM4rB8.mjs → tailwindcss-DDGD90w7.mjs} +15 -2
  35. package/dist/{tailwindcss-BwoNQ3t8.js → tailwindcss-DPxJpRVP.js} +15 -2
  36. package/dist/{transform-KLD1tJdb.js → transform-CvqqZBuq.js} +1 -1
  37. package/dist/{transform-DHLemtaX.mjs → transform-DPPr79r2.mjs} +1 -1
  38. package/dist/uni-app-x/web-preflight-reset.d.ts +3 -0
  39. package/dist/{v4-engine-CKtsdKxK.js → v4-engine-3UmJkAY7.js} +641 -3
  40. package/dist/{v4-engine-BuuYDXt1.mjs → v4-engine-CYSrDVNp.mjs} +560 -6
  41. package/dist/{vite-Yp14HNyS.js → vite-BJRlG835.js} +636 -114
  42. package/dist/{vite-cH0tTMHc.mjs → vite-XxJh7Xtu.mjs} +637 -115
  43. package/dist/vite.js +1 -1
  44. package/dist/vite.mjs +1 -1
  45. package/dist/weapp-tw-css-import-rewrite-loader.js +3078 -2907
  46. package/dist/{webpack-DN3tgLbF.js → webpack-BxBOMUtY.js} +286 -47
  47. package/dist/{webpack-DBhmJ-_P.mjs → webpack-eN8WzIT-.mjs} +280 -41
  48. package/dist/webpack.js +1 -1
  49. package/dist/webpack.mjs +1 -1
  50. package/package.json +3 -3
@@ -1,12 +1,12 @@
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-CKtsdKxK.js");
4
- const require_generator = require("./generator-CilgHtxb.js");
3
+ const require_v4_engine = require("./v4-engine-3UmJkAY7.js");
4
+ const require_generator = require("./generator-DASZwC6t.js");
5
5
  const require_utils = require("./utils-D3h8j7Mk.js");
6
- const require_context = require("./context-BziwyWy1.js");
7
- const require_tailwindcss = require("./tailwindcss-BwoNQ3t8.js");
8
- const require_hmr_timing = require("./hmr-timing-BKdCeIrn.js");
9
- const require_source_candidate_scan_signature = require("./source-candidate-scan-signature-DIj9m4wB.js");
6
+ const require_context = require("./context-C7KTDlrG.js");
7
+ const require_tailwindcss = require("./tailwindcss-DPxJpRVP.js");
8
+ const require_hmr_timing = require("./hmr-timing-BIr_CiPW.js");
9
+ const require_source_candidate_scan_signature = require("./source-candidate-scan-signature-Djr2Hw8y.js");
10
10
  require("./logger-TlKT3xmR.js");
11
11
  let node_fs = require("node:fs");
12
12
  node_fs = require_rolldown_runtime.__toESM(node_fs);
@@ -515,7 +515,7 @@ function resolveUniAppXStyleIsolationEnabled(root) {
515
515
  //#region src/uni-app-x/vite.ts
516
516
  let transformUVuePromise;
517
517
  function loadTransformUVue() {
518
- transformUVuePromise ?? (transformUVuePromise = Promise.resolve().then(() => require("./transform-KLD1tJdb.js")).then((mod) => mod.transformUVue));
518
+ transformUVuePromise ?? (transformUVuePromise = Promise.resolve().then(() => require("./transform-CvqqZBuq.js")).then((mod) => mod.transformUVue));
519
519
  return transformUVuePromise;
520
520
  }
521
521
  const preprocessorLangs = /* @__PURE__ */ new Set([
@@ -749,6 +749,68 @@ function createUniAppXAssetTask(file, originalSource, outDir, options) {
749
749
  });
750
750
  };
751
751
  }
752
+ const UNI_APP_X_WEB_PREFLIGHT_RESET_CSS = [`/* weapp-tailwindcss uni-app-x web preflight reset */`, `${[
753
+ "uni-ad-draw",
754
+ "uni-ad-fullscreen-video",
755
+ "uni-ad-interactive",
756
+ "uni-ad-interstitial",
757
+ "uni-ad-rewarded-video",
758
+ "uni-ad",
759
+ "uni-animation-view",
760
+ "uni-audio",
761
+ "uni-block",
762
+ "uni-button",
763
+ "uni-camera",
764
+ "uni-canvas",
765
+ "uni-checkbox-group",
766
+ "uni-checkbox",
767
+ "uni-cover-image",
768
+ "uni-cover-view",
769
+ "uni-custom-tab-bar",
770
+ "uni-editor",
771
+ "uni-form",
772
+ "uni-icon",
773
+ "uni-image",
774
+ "uni-input",
775
+ "uni-label",
776
+ "uni-list-item",
777
+ "uni-list-view",
778
+ "uni-live-player",
779
+ "uni-live-pusher",
780
+ "uni-map",
781
+ "uni-match-media",
782
+ "uni-movable-area",
783
+ "uni-movable-view",
784
+ "uni-navigation-bar",
785
+ "uni-navigator",
786
+ "uni-open-data",
787
+ "uni-page-meta",
788
+ "uni-picker-view",
789
+ "uni-picker",
790
+ "uni-progress",
791
+ "uni-radio-group",
792
+ "uni-radio",
793
+ "uni-rich-text",
794
+ "uni-scroll-view",
795
+ "uni-slider",
796
+ "uni-sticky-header",
797
+ "uni-sticky-section",
798
+ "uni-swiper-item",
799
+ "uni-swiper",
800
+ "uni-switch",
801
+ "uni-template",
802
+ "uni-text",
803
+ "uni-textarea",
804
+ "uni-unicloud-db",
805
+ "uni-video",
806
+ "uni-view",
807
+ "uni-web-view"
808
+ ].map((tag) => `uni-app ${tag}`).join(", ")}{border-width:0;}`].join("\n");
809
+ const TAILWIND_PREFLIGHT_BORDER_RE = /\bborder\s*:\s*0(?:px)?\s+solid\b/;
810
+ function withUniAppXWebPreflightReset(css, enabled) {
811
+ if (!enabled || css.includes("weapp-tailwindcss uni-app-x web preflight reset") || !TAILWIND_PREFLIGHT_BORDER_RE.test(css)) return css;
812
+ return css.length > 0 ? `${UNI_APP_X_WEB_PREFLIGHT_RESET_CSS}\n${css}` : UNI_APP_X_WEB_PREFLIGHT_RESET_CSS;
813
+ }
752
814
  //#endregion
753
815
  //#region src/bundlers/vite/generate-bundle/configured-css-sources.ts
754
816
  function collectConfiguredTailwindV4CssSources(opts) {
@@ -1061,7 +1123,7 @@ function normalizeMatchedCssSourcePath(file) {
1061
1123
  if (!file || !node_path.default.isAbsolute(file)) return;
1062
1124
  return node_path.default.resolve(file.replace(/[?#].*$/, ""));
1063
1125
  }
1064
- function collectConfiguredCssEntries(opts) {
1126
+ function collectConfiguredCssEntries$1(opts) {
1065
1127
  const runtimeCssEntries = opts.tailwindcssRuntimeOptions?.tailwindcss?.v4?.cssEntries ?? [];
1066
1128
  return [
1067
1129
  ...opts.cssEntries ?? [],
@@ -1084,7 +1146,7 @@ function collectCssConfigBaseCandidates(source, file, outputRoot, opts) {
1084
1146
  const runtimeProjectRoot = typeof opts.tailwindcssRuntimeOptions?.projectRoot === "string" ? opts.tailwindcssRuntimeOptions.projectRoot : void 0;
1085
1147
  const sourceBaseFallback = opts.tailwindcss?.v4?.base ?? runtimeProjectRoot ?? opts.tailwindcssBasedir ?? outputRoot;
1086
1148
  const sourceRoot = opts.tailwindcssBasedir ?? runtimeProjectRoot;
1087
- const configuredCssEntries = collectConfiguredCssEntries(opts);
1149
+ const configuredCssEntries = collectConfiguredCssEntries$1(opts);
1088
1150
  for (const cssEntry of configuredCssEntries) {
1089
1151
  const resolvedCssEntry = node_path.default.resolve(cssEntry);
1090
1152
  if (configuredCssEntries.length === 1 || isMatchingCssSourceFile(file, resolvedCssEntry, outputRoot) || hasMatchingStyleFileBase(file, resolvedCssEntry, outputRoot, sourceRoot)) addCandidate(node_path.default.dirname(resolvedCssEntry));
@@ -2020,6 +2082,21 @@ function appendCss$1(baseCss, css) {
2020
2082
  if (css.length === 0) return baseCss;
2021
2083
  return `${baseCss}\n${css}`;
2022
2084
  }
2085
+ function normalizeCssRecordIdentity(css) {
2086
+ return css.trim();
2087
+ }
2088
+ function hasNonCommentCss(css) {
2089
+ return css.replace(/\/\*[\s\S]*?\*\//g, "").trim().length > 0;
2090
+ }
2091
+ function dedupeViteCssResults(records) {
2092
+ const seen = /* @__PURE__ */ new Set();
2093
+ return records.filter((record) => {
2094
+ const key = `${require_source_candidate_scan_signature.normalizeOutputPathKey(record.outputFile ?? "")}\0${normalizeCssRecordIdentity(record.css)}`;
2095
+ if (seen.has(key)) return false;
2096
+ seen.add(key);
2097
+ return true;
2098
+ });
2099
+ }
2023
2100
  function removeTailwindSourceMediaWrappers(css) {
2024
2101
  if (!css.includes("@media source(")) return css;
2025
2102
  try {
@@ -2096,6 +2173,183 @@ function collectRootStyleBundleCssSources(bundle, excludedFile) {
2096
2173
  }
2097
2174
  return sources;
2098
2175
  }
2176
+ function isHtmlOutputFile(file) {
2177
+ return /\.html(?:$|[?#])/i.test(file);
2178
+ }
2179
+ function stripQueryAndHash(file) {
2180
+ return file.replace(/[?#].*$/, "");
2181
+ }
2182
+ function resolveHtmlLinkedStyleFile(htmlFile, request) {
2183
+ if (!isStyleImportRequest(request)) return;
2184
+ const cleanRequest = stripQueryAndHash(request);
2185
+ if (cleanRequest.startsWith("/")) return require_source_candidate_scan_signature.normalizeOutputPathKey(cleanRequest.slice(1));
2186
+ const htmlDir = posix.posix.dirname(require_source_candidate_scan_signature.normalizeOutputPathKey(stripQueryAndHash(htmlFile)));
2187
+ return require_source_candidate_scan_signature.normalizeOutputPathKey(posix.posix.join(htmlDir === "." ? "" : htmlDir, cleanRequest));
2188
+ }
2189
+ function collectHtmlLinkedStyleFiles(bundle) {
2190
+ const linkedFiles = /* @__PURE__ */ new Set();
2191
+ const linkedBasenames = /* @__PURE__ */ new Set();
2192
+ const linkHrefRE = /<link\s[^>]*href\s*=\s*(["'])([^"']+)\1[^>]*>/gi;
2193
+ for (const [bundleFile, output] of Object.entries(bundle)) {
2194
+ if (output.type !== "asset") continue;
2195
+ const htmlFile = getAssetFile$1(bundleFile, output);
2196
+ if (!isHtmlOutputFile(htmlFile)) continue;
2197
+ const html = readAssetSource$2(output);
2198
+ for (const match of html.matchAll(linkHrefRE)) {
2199
+ const href = match[2];
2200
+ if (!href) continue;
2201
+ const linkedFile = resolveHtmlLinkedStyleFile(htmlFile, href);
2202
+ if (!linkedFile || !isRootStyleOutputFile(linkedFile)) continue;
2203
+ linkedFiles.add(linkedFile);
2204
+ linkedBasenames.add(posix.posix.basename(linkedFile));
2205
+ }
2206
+ }
2207
+ return {
2208
+ linkedBasenames,
2209
+ linkedFiles
2210
+ };
2211
+ }
2212
+ function isLinkedStyleFile(file, linked) {
2213
+ const fileKey = require_source_candidate_scan_signature.normalizeOutputPathKey(stripQueryAndHash(file));
2214
+ return linked.linkedFiles.has(fileKey) || isRootStyleOutputFile(fileKey) && linked.linkedBasenames.has(posix.posix.basename(fileKey));
2215
+ }
2216
+ function removeDuplicateUnlinkedRootCssAssetsReferencedByHtml(bundle, options = {}) {
2217
+ const linked = collectHtmlLinkedStyleFiles(bundle);
2218
+ if (linked.linkedFiles.size === 0 && linked.linkedBasenames.size === 0) return 0;
2219
+ const linkedSources = /* @__PURE__ */ new Set();
2220
+ for (const [bundleFile, output] of Object.entries(bundle)) {
2221
+ if (output.type !== "asset") continue;
2222
+ const file = getAssetFile$1(bundleFile, output);
2223
+ if (!isCssOutputFile(file) || isMiniProgramStyleOutputFile(file) || !isLinkedStyleFile(file, linked)) continue;
2224
+ const source = require_source_candidate_scan_signature.stripBundlerGeneratedCssMarkers(readAssetSource$2(output)).trim();
2225
+ if (source.length > 0) linkedSources.add(source);
2226
+ }
2227
+ if (linkedSources.size === 0) return 0;
2228
+ let removed = 0;
2229
+ for (const [bundleFile, output] of Object.entries(bundle)) {
2230
+ if (output.type !== "asset") continue;
2231
+ const file = getAssetFile$1(bundleFile, output);
2232
+ if (!isRootStyleOutputFile(file) || isMiniProgramStyleOutputFile(file) || isLinkedStyleFile(file, linked)) continue;
2233
+ const source = require_source_candidate_scan_signature.stripBundlerGeneratedCssMarkers(readAssetSource$2(output)).trim();
2234
+ if (!linkedSources.has(source)) continue;
2235
+ delete bundle[bundleFile];
2236
+ options.debug?.("remove duplicate unlinked root css asset referenced by html: %s", file);
2237
+ removed++;
2238
+ }
2239
+ return removed;
2240
+ }
2241
+ const VUE_SCOPED_ATTR_RE = /\[data-v-[^\]]+\]/gi;
2242
+ function hasVueScopedAttr(value) {
2243
+ VUE_SCOPED_ATTR_RE.lastIndex = 0;
2244
+ const matched = VUE_SCOPED_ATTR_RE.test(value);
2245
+ VUE_SCOPED_ATTR_RE.lastIndex = 0;
2246
+ return matched;
2247
+ }
2248
+ function normalizeCssSignatureValue(value) {
2249
+ return value.replace(VUE_SCOPED_ATTR_RE, "").replace(/\s+/g, " ").replace(/\s*([>+~])\s*/g, "$1").replace(/\(\s+/g, "(").replace(/\s+\)/g, ")").trim();
2250
+ }
2251
+ function createDeclarationSignature(rule) {
2252
+ return createDeclarationKeys(rule).sort().join(";");
2253
+ }
2254
+ function createRuleCoverageKey(selector, declarations) {
2255
+ return `${normalizeCssSignatureValue(selector)}\0${declarations}`;
2256
+ }
2257
+ function createDeclarationKeys(rule) {
2258
+ return (rule.nodes ?? []).filter((node) => node.type === "decl").map((node) => `${node.prop}:${normalizeCssSignatureValue(node.value)}${node.important ? "!important" : ""}`);
2259
+ }
2260
+ function createAtRuleCoverageKey(atRule) {
2261
+ return `${atRule.name}\0${normalizeCssSignatureValue(atRule.params)}\0${normalizeCssSignatureValue(atRule.toString())}`;
2262
+ }
2263
+ function hasClassSelector(selector) {
2264
+ return /(?:^|[^\\])\.[_a-z\u00A0-\uFFFF-]/i.test(normalizeCssSignatureValue(selector));
2265
+ }
2266
+ function isLikelyTailwindGlobalSelector(selector) {
2267
+ const normalized = normalizeCssSignatureValue(selector);
2268
+ return normalized === "*" || normalized.startsWith("::") || normalized.startsWith(":root") || normalized.startsWith(":host") || /^(?:html|body|hr|abbr|h1|h2|h3|h4|h5|h6|a|b|strong|code|kbd|samp|small|sub|sup|table|button|input|select|optgroup|textarea|summary|blockquote|dl|dd|fieldset|legend|ol|ul|menu|dialog|progress|video|audio|canvas|embed|iframe|img|object|svg|details|template|[uo]ni-progress)(?:$|[:,[\s>+~.#])/.test(normalized);
2269
+ }
2270
+ function isLikelyTailwindGlobalRule(rule) {
2271
+ return (rule.selectors ?? [rule.selector]).every((selector) => !hasClassSelector(selector) && isLikelyTailwindGlobalSelector(selector));
2272
+ }
2273
+ function isLikelyTailwindPropertyAtRule(atRule) {
2274
+ return atRule.name.toLowerCase() === "property" && normalizeCssSignatureValue(atRule.params).startsWith("--tw-");
2275
+ }
2276
+ function collectRootScopedComparableCssCoverage(cssSources) {
2277
+ const rules = /* @__PURE__ */ new Set();
2278
+ const atRules = /* @__PURE__ */ new Set();
2279
+ const declarationsBySelector = /* @__PURE__ */ new Map();
2280
+ for (const source of cssSources) try {
2281
+ const root = _weapp_tailwindcss_postcss.postcss.parse(source);
2282
+ root.walkRules((rule) => {
2283
+ const declarations = createDeclarationSignature(rule);
2284
+ if (declarations.length === 0) return;
2285
+ for (const selector of rule.selectors ?? [rule.selector]) {
2286
+ const normalizedSelector = normalizeCssSignatureValue(selector);
2287
+ rules.add(`${normalizedSelector}\0${declarations}`);
2288
+ const selectorDeclarations = declarationsBySelector.get(normalizedSelector) ?? /* @__PURE__ */ new Set();
2289
+ for (const declaration of createDeclarationKeys(rule)) selectorDeclarations.add(declaration);
2290
+ declarationsBySelector.set(normalizedSelector, selectorDeclarations);
2291
+ }
2292
+ });
2293
+ root.walkAtRules((atRule) => {
2294
+ atRules.add(createAtRuleCoverageKey(atRule));
2295
+ });
2296
+ } catch {}
2297
+ return {
2298
+ rules,
2299
+ atRules,
2300
+ declarationsBySelector
2301
+ };
2302
+ }
2303
+ function isRuleCoveredByRootCss(rule, coverage) {
2304
+ const declarations = createDeclarationSignature(rule);
2305
+ if (declarations.length === 0) return false;
2306
+ const selectors = rule.selectors ?? [rule.selector];
2307
+ if (selectors.every((selector) => coverage.rules.has(createRuleCoverageKey(selector, declarations)))) return true;
2308
+ const declarationKeys = createDeclarationKeys(rule);
2309
+ return declarationKeys.length > 0 && selectors.every((selector) => {
2310
+ const rootDeclarations = coverage.declarationsBySelector.get(normalizeCssSignatureValue(selector));
2311
+ return rootDeclarations != null && declarationKeys.every((declaration) => rootDeclarations.has(declaration));
2312
+ }) || selectors.every((selector) => coverage.declarationsBySelector.has(normalizeCssSignatureValue(selector)));
2313
+ }
2314
+ function removeScopedCssCoveredByRootStyleSources(css, rootSources) {
2315
+ if (!hasVueScopedAttr(css)) return css;
2316
+ const hasScopedTailwindGeneratedCss = /tailwindcss v\d/i.test(css);
2317
+ const coverage = collectRootScopedComparableCssCoverage(rootSources);
2318
+ if (coverage.rules.size === 0 && coverage.atRules.size === 0 && !hasScopedTailwindGeneratedCss) return css;
2319
+ try {
2320
+ const root = _weapp_tailwindcss_postcss.postcss.parse(css);
2321
+ let changed = false;
2322
+ root.walkComments((comment) => {
2323
+ if (/tailwindcss v\d/i.test(comment.text)) {
2324
+ comment.remove();
2325
+ changed = true;
2326
+ }
2327
+ });
2328
+ root.walkRules((rule) => {
2329
+ if (isRuleCoveredByRootCss(rule, coverage) || hasScopedTailwindGeneratedCss && isLikelyTailwindGlobalRule(rule)) {
2330
+ rule.remove();
2331
+ changed = true;
2332
+ }
2333
+ });
2334
+ root.walkAtRules((atRule) => {
2335
+ if (coverage.atRules.has(createAtRuleCoverageKey(atRule)) || hasScopedTailwindGeneratedCss && isLikelyTailwindPropertyAtRule(atRule)) {
2336
+ atRule.remove();
2337
+ changed = true;
2338
+ return;
2339
+ }
2340
+ if (atRule.nodes !== void 0 && atRule.nodes.length === 0) {
2341
+ atRule.remove();
2342
+ changed = true;
2343
+ }
2344
+ });
2345
+ return changed ? removeDanglingCssSourceTraceComments(root.toString()).trim() : css;
2346
+ } catch {
2347
+ return css;
2348
+ }
2349
+ }
2350
+ function removeScopedTailwindPreflightCss(css) {
2351
+ return removeScopedCssCoveredByRootStyleSources(css, []);
2352
+ }
2099
2353
  function collectSingleViteGeneratedCssMarkerFile(rawSource) {
2100
2354
  const blocks = require_source_candidate_scan_signature.parseBundlerGeneratedCssMarkerBlocks(rawSource).filter((block) => block.bundler === "vite");
2101
2355
  if (blocks.length !== 1) return;
@@ -2108,7 +2362,9 @@ function shouldFilterRootGeneratedCssMarkerForScopedAsset(targetFile, markerFile
2108
2362
  return !isMatchingGeneratedCssMarkerFile(targetFile, markerFile, resolveViteProcessedCssOutputFile);
2109
2363
  }
2110
2364
  function removeCssCoveredByRootStyleBundleSources(bundle, file, css) {
2111
- return removeDanglingCssSourceTraceComments(removeCssCoveredByImportedViteResults(css, collectRootStyleBundleCssSources(bundle, file)));
2365
+ const rootSources = collectRootStyleBundleCssSources(bundle, file);
2366
+ const nextCss = removeScopedCssCoveredByRootStyleSources(removeDanglingCssSourceTraceComments(removeCssCoveredByImportedViteResults(css, rootSources)), rootSources);
2367
+ return hasNonCommentCss(nextCss) ? nextCss : "";
2112
2368
  }
2113
2369
  function removeDanglingCssSourceTraceComments(css) {
2114
2370
  if (!css.includes("/* tokens:")) return css;
@@ -2132,8 +2388,11 @@ function removeCssCoveredByRootStyleAssets(bundle, options) {
2132
2388
  for (const [bundleFile, output] of Object.entries(bundle)) {
2133
2389
  if (output.type !== "asset") continue;
2134
2390
  const file = getAssetFile$1(bundleFile, output);
2135
- if (!options.cssMatcher(file) || isRootStyleOutputFile(file) || options.isViteProcessedCssAsset?.(output, file) === true || options.subpackageRoots != null && isSubpackageOutputFile(file, options.subpackageRoots)) continue;
2136
2391
  const rawSource = readAssetSource$2(output);
2392
+ const hasScopedCss = hasVueScopedAttr(rawSource);
2393
+ const hasTailwindGeneratedCss = /tailwindcss v\d/i.test(rawSource);
2394
+ const shouldIncludeTailwindGeneratedCssAsset = options.includeTailwindGeneratedCssAssets === true && hasTailwindGeneratedCss && isCssOutputFile(file) && !isMiniProgramStyleOutputFile(file);
2395
+ if (!(options.cssMatcher(file) || hasScopedCss && isCssOutputFile(file) || shouldIncludeTailwindGeneratedCssAsset) || isRootStyleOutputFile(file) || options.isViteProcessedCssAsset?.(output, file) === true && !hasScopedCss && !shouldIncludeTailwindGeneratedCssAsset || options.subpackageRoots != null && isSubpackageOutputFile(file, options.subpackageRoots)) continue;
2137
2396
  const nextCss = removeCssCoveredByRootStyleBundleSources(bundle, file, rawSource);
2138
2397
  if (nextCss === rawSource) continue;
2139
2398
  output.source = nextCss;
@@ -2186,6 +2445,12 @@ function shouldUseCssAssetAsMainInjectionTarget(opts, file, records) {
2186
2445
  const fileKey = require_source_candidate_scan_signature.normalizeOutputPathKey(file);
2187
2446
  if (!isRootStyleOutputFile(file) && records.some((record) => typeof record.outputFile === "string" && require_source_candidate_scan_signature.normalizeOutputPathKey(record.outputFile) === fileKey)) return true;
2188
2447
  if (!isRootStyleOutputFile(file)) return records.some((record) => record.injectIntoMain === true && typeof record.outputFile === "string" && require_source_candidate_scan_signature.normalizeOutputPathKey(record.outputFile) === fileKey);
2448
+ const matchedRootWebOutputTargets = records.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)).filter((outputFile) => opts.mainCssChunkMatcher(outputFile, opts.appType));
2449
+ if (opts.appType === "uni-app-vite" && !isMiniProgramStyleOutputFile(file) && matchedRootWebOutputTargets.length > 0) return matchedRootWebOutputTargets.includes(fileKey);
2450
+ 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));
2451
+ 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));
2452
+ if (opts.appType === "uni-app-vite" && !isMiniProgramStyleOutputFile(file) && explicitWebCssTargets.length > 0) return explicitRootTargets.includes(fileKey);
2453
+ if (explicitRootTargets.length > 0) return explicitRootTargets.includes(fileKey);
2189
2454
  if (records.some((record) => {
2190
2455
  if (record.injectIntoMain !== true) return false;
2191
2456
  return isRootStyleOutputFile(file) || typeof record.outputFile === "string" && require_source_candidate_scan_signature.normalizeOutputPathKey(record.outputFile) === fileKey;
@@ -2206,6 +2471,33 @@ function isViteProcessedCssResultCoveredByImportedBundleAsset(record, importedSt
2206
2471
  }
2207
2472
  return false;
2208
2473
  }
2474
+ function removeCoveredInjectedSourceAssets(bundle, targetFile, targetCss, records, options) {
2475
+ let removed = 0;
2476
+ const targetFileKey = require_source_candidate_scan_signature.normalizeOutputPathKey(targetFile);
2477
+ const targetIsRootWebStyle = isRootStyleOutputFile(targetFileKey) && !isMiniProgramStyleOutputFile(targetFileKey);
2478
+ for (const record of records) {
2479
+ if (!options.shouldRemoveInjectedSourceAsset?.(targetFile, record)) continue;
2480
+ const recordFileKey = require_source_candidate_scan_signature.normalizeOutputPathKey(record.file);
2481
+ for (const [candidateFile, candidateOutput] of Object.entries(bundle)) {
2482
+ if (candidateOutput.type !== "asset") continue;
2483
+ const candidateKey = require_source_candidate_scan_signature.normalizeOutputPathKey(getAssetFile$1(candidateFile, candidateOutput));
2484
+ if (candidateKey === targetFileKey) continue;
2485
+ const isRecordFile = candidateKey === recordFileKey;
2486
+ const candidateIsRootWebStyle = isRootStyleOutputFile(candidateKey) && !isMiniProgramStyleOutputFile(candidateKey);
2487
+ const candidateSource = readAssetSource$2(candidateOutput).trim();
2488
+ const uncoveredCandidateSource = candidateSource.length > 0 ? (0, _weapp_tailwindcss_postcss.filterExistingCssRules)(targetCss, candidateSource).trim() : candidateSource;
2489
+ const isProcessedSource = candidateSource === record.css.trim() || candidateSource.length > 0 && (0, _weapp_tailwindcss_postcss.containsCssAfterMinify)(targetCss, candidateSource) || targetIsRootWebStyle && candidateIsRootWebStyle && candidateSource.length > 0 && !hasNonCommentCss(uncoveredCandidateSource);
2490
+ if (!isRecordFile && !isProcessedSource) continue;
2491
+ if (candidateIsRootWebStyle && !targetIsRootWebStyle) continue;
2492
+ if (candidateIsRootWebStyle && !isRecordFile) continue;
2493
+ if (candidateIsRootWebStyle) delete bundle[candidateFile];
2494
+ else clearAssetSource(candidateOutput);
2495
+ options.debug?.("remove injected vite-processed source css asset: %s -> %s", candidateKey, targetFile);
2496
+ removed++;
2497
+ }
2498
+ }
2499
+ return removed;
2500
+ }
2209
2501
  function removeCssCoveredByImportedViteResults(css, importedCssSources) {
2210
2502
  if (importedCssSources.length === 0) return css;
2211
2503
  const importedCss = importedCssSources.map((source) => require_source_candidate_scan_signature.stripBundlerGeneratedCssMarkers(source).trim()).filter(Boolean).join("\n");
@@ -2232,6 +2524,38 @@ function collectBundleAssetFiles(bundle) {
2232
2524
  }
2233
2525
  return files;
2234
2526
  }
2527
+ function normalizeComparableStyleFile(file) {
2528
+ return require_source_candidate_scan_signature.normalizeOutputPathKey(posix.normalize(file.replace(/[?#].*$/, "")));
2529
+ }
2530
+ function collectConfiguredTailwindV4CssEntryFiles(opts) {
2531
+ const runtimeCssEntries = opts.tailwindRuntime?.options?.tailwindcss?.v4?.cssEntries;
2532
+ return [
2533
+ ...Array.isArray(opts.cssEntries) ? opts.cssEntries : [],
2534
+ ...Array.isArray(opts.tailwindcss?.v4?.cssEntries) ? opts.tailwindcss.v4.cssEntries : [],
2535
+ ...Array.isArray(opts.tailwindcssRuntimeOptions?.tailwindcss?.v4?.cssEntries) ? opts.tailwindcssRuntimeOptions.tailwindcss.v4.cssEntries : [],
2536
+ ...Array.isArray(runtimeCssEntries) ? runtimeCssEntries : []
2537
+ ].filter((file) => typeof file === "string" && file.length > 0);
2538
+ }
2539
+ function isConfiguredTailwindV4CssEntryFile(opts, file) {
2540
+ if (typeof file !== "string" || file.length === 0) return false;
2541
+ const fileKey = normalizeComparableStyleFile(file);
2542
+ return collectConfiguredTailwindV4CssEntryFiles(opts).some((entry) => normalizeComparableStyleFile(entry) === fileKey);
2543
+ }
2544
+ function resolveUniAppViteWebviewRootCssInjectionTarget(bundle, opts, sourceFile, outputFile) {
2545
+ if (opts.appType !== "uni-app-vite" || isMiniProgramStyleOutputFile(outputFile) || !isConfiguredTailwindV4CssEntryFile(opts, sourceFile)) return;
2546
+ const rootCssFiles = [];
2547
+ const matchedRootCssFiles = [];
2548
+ for (const [bundleFile, output] of Object.entries(bundle)) {
2549
+ if (output.type !== "asset") continue;
2550
+ const file = getAssetFile$1(bundleFile, output);
2551
+ if (!opts.cssMatcher(file) || !isRootStyleOutputFile(file) || isMiniProgramStyleOutputFile(file)) continue;
2552
+ rootCssFiles.push(file);
2553
+ if (opts.mainCssChunkMatcher(file, opts.appType)) matchedRootCssFiles.push(file);
2554
+ }
2555
+ if (matchedRootCssFiles.length === 1) return matchedRootCssFiles[0];
2556
+ if (matchedRootCssFiles.length > 1) return;
2557
+ return rootCssFiles.length === 1 ? rootCssFiles[0] : void 0;
2558
+ }
2235
2559
  function findBundleAssetByOutputFile(bundle, file) {
2236
2560
  const fileKey = require_source_candidate_scan_signature.normalizeOutputPathKey(file);
2237
2561
  return Object.entries(bundle).find(([bundleFile, output]) => {
@@ -2285,6 +2609,8 @@ function collectViteProcessedCssAssetResults(bundle, options) {
2285
2609
  options.markCssAssetProcessed?.(output, file);
2286
2610
  options.recordCssAssetResult?.(file, nextCss);
2287
2611
  const resolvedOutputFile = resolveViteGeneratedCssMarkerOutputFile(file, singleMarkerFile, existingAssetFiles, options.resolveViteProcessedCssOutputFile);
2612
+ const webviewRootCssInjectionTarget = options.opts ? resolveUniAppViteWebviewRootCssInjectionTarget(bundle, options.opts, singleMarkerFile ?? file, resolvedOutputFile) : void 0;
2613
+ const recordOutputFile = webviewRootCssInjectionTarget ?? resolvedOutputFile;
2288
2614
  if (singleMarkerFile && require_source_candidate_scan_signature.normalizeOutputPathKey(resolvedOutputFile) !== require_source_candidate_scan_signature.normalizeOutputPathKey(file) && !isRootStyleOutputFile(resolvedOutputFile) && existingAssetFiles.has(require_source_candidate_scan_signature.normalizeOutputPathKey(resolvedOutputFile))) {
2289
2615
  const targetAsset = findBundleAssetByOutputFile(bundle, resolvedOutputFile);
2290
2616
  if (targetAsset) {
@@ -2304,24 +2630,24 @@ function collectViteProcessedCssAssetResults(bundle, options) {
2304
2630
  continue;
2305
2631
  }
2306
2632
  }
2307
- const shouldReplayIntoMainCss = options.opts != null && shouldReplayViteProcessedCssIntoMainCss(options.opts, file, singleMarkerFile, resolvedOutputFile, options.subpackageRoots);
2633
+ const shouldReplayIntoMainCss = options.opts != null && (webviewRootCssInjectionTarget != null || shouldReplayViteProcessedCssIntoMainCss(options.opts, file, singleMarkerFile, resolvedOutputFile, options.subpackageRoots));
2308
2634
  options.recordViteProcessedCssAssetResult?.(file, nextCss, {
2309
2635
  injectIntoMain: shouldReplayIntoMainCss || void 0,
2310
- outputFile: resolvedOutputFile
2636
+ outputFile: recordOutputFile
2311
2637
  });
2312
- if (require_source_candidate_scan_signature.normalizeOutputPathKey(resolvedOutputFile) !== require_source_candidate_scan_signature.normalizeOutputPathKey(file)) options.recordViteProcessedCssAssetResult?.(resolvedOutputFile, nextCss, {
2638
+ if (require_source_candidate_scan_signature.normalizeOutputPathKey(recordOutputFile) !== require_source_candidate_scan_signature.normalizeOutputPathKey(file)) options.recordViteProcessedCssAssetResult?.(recordOutputFile, nextCss, {
2313
2639
  injectIntoMain: shouldReplayIntoMainCss || void 0,
2314
- outputFile: resolvedOutputFile
2640
+ outputFile: recordOutputFile
2315
2641
  });
2316
2642
  for (const markerFile of collectMatchingGeneratedCssMarkerFiles(file, rawSource, options.resolveViteProcessedCssOutputFile)) {
2317
2643
  if (require_source_candidate_scan_signature.normalizeOutputPathKey(markerFile) === require_source_candidate_scan_signature.normalizeOutputPathKey(file)) continue;
2318
2644
  options.recordViteProcessedCssAssetResult?.(markerFile, nextCss, {
2319
2645
  injectIntoMain: shouldReplayIntoMainCss || void 0,
2320
- outputFile: resolvedOutputFile
2646
+ outputFile: recordOutputFile
2321
2647
  });
2322
- if (require_source_candidate_scan_signature.normalizeOutputPathKey(resolvedOutputFile) !== require_source_candidate_scan_signature.normalizeOutputPathKey(markerFile) && require_source_candidate_scan_signature.normalizeOutputPathKey(resolvedOutputFile) !== require_source_candidate_scan_signature.normalizeOutputPathKey(file)) options.recordViteProcessedCssAssetResult?.(resolvedOutputFile, nextCss, {
2648
+ if (require_source_candidate_scan_signature.normalizeOutputPathKey(recordOutputFile) !== require_source_candidate_scan_signature.normalizeOutputPathKey(markerFile) && require_source_candidate_scan_signature.normalizeOutputPathKey(recordOutputFile) !== require_source_candidate_scan_signature.normalizeOutputPathKey(file)) options.recordViteProcessedCssAssetResult?.(recordOutputFile, nextCss, {
2323
2649
  injectIntoMain: shouldReplayIntoMainCss || void 0,
2324
- outputFile: resolvedOutputFile
2650
+ outputFile: recordOutputFile
2325
2651
  });
2326
2652
  }
2327
2653
  if (isCoveredViteGeneratedSourceAsset(file, existingAssetFiles, options.resolveViteProcessedCssOutputFile)) {
@@ -2336,7 +2662,8 @@ function collectViteProcessedCssAssetResults(bundle, options) {
2336
2662
  return collected;
2337
2663
  }
2338
2664
  function injectViteProcessedCssIntoMainCssAssets(bundle, options) {
2339
- const viteCssResults = [...options.getViteProcessedCssAssetResults?.() ?? []].map(([file, record]) => {
2665
+ const transformCss = (css, file) => options.transformCss?.(css, file) ?? css;
2666
+ const viteCssResults = dedupeViteCssResults([...options.getViteProcessedCssAssetResults?.() ?? []].map(([file, record]) => {
2340
2667
  return typeof record === "string" ? {
2341
2668
  file,
2342
2669
  css: record,
@@ -2347,10 +2674,14 @@ function injectViteProcessedCssIntoMainCssAssets(bundle, options) {
2347
2674
  injectIntoMain: record.injectIntoMain,
2348
2675
  outputFile: record.outputFile
2349
2676
  };
2350
- }).filter((record) => record.css.length > 0);
2677
+ })).map((record) => ({
2678
+ ...record,
2679
+ css: transformCss(record.css, record.outputFile ?? record.file)
2680
+ })).filter((record) => record.css.length > 0);
2351
2681
  let injected = 0;
2352
2682
  for (const [bundleFile, bundleOutput] of Object.entries(bundle)) {
2353
2683
  let output = bundleOutput;
2684
+ if (bundle[bundleFile] !== bundleOutput) continue;
2354
2685
  if (output.type !== "asset") continue;
2355
2686
  let file = getAssetFile$1(bundleFile, output);
2356
2687
  if (!options.opts.cssMatcher(file) || !shouldUseCssAssetAsMainInjectionTarget(options.opts, file, viteCssResults)) continue;
@@ -2372,7 +2703,7 @@ function injectViteProcessedCssIntoMainCssAssets(bundle, options) {
2372
2703
  }
2373
2704
  const fileKey = require_source_candidate_scan_signature.normalizeOutputPathKey(file);
2374
2705
  const mainFileKey = require_source_candidate_scan_signature.normalizeOutputPathKey(file);
2375
- let nextCss = removeTailwindEntryDirectivesFromCss(originalSource);
2706
+ let nextCss = transformCss(removeTailwindEntryDirectivesFromCss(originalSource), file);
2376
2707
  const importedStyleFiles = collectImportedStyleFiles(nextCss, file);
2377
2708
  const importedBundleCssSources = collectImportedBundleCssSources(bundle, importedStyleFiles);
2378
2709
  nextCss = removeCssCoveredByImportedViteResults(nextCss, importedBundleCssSources);
@@ -2381,12 +2712,14 @@ function injectViteProcessedCssIntoMainCssAssets(bundle, options) {
2381
2712
  const uncoveredImportedViteCssResults = importedViteCssResults.filter((record) => !isViteProcessedCssResultCoveredByImportedBundleAsset(record, importedStyleFiles, bundleAssetFiles));
2382
2713
  const importedCssSources = [...importedBundleCssSources, ...uncoveredImportedViteCssResults.map((record) => record.css)];
2383
2714
  nextCss = removeCssCoveredByImportedViteResults(nextCss, uncoveredImportedViteCssResults.map((record) => record.css));
2715
+ const targetViteCssResults = [];
2384
2716
  for (const record of viteCssResults) {
2385
2717
  if (!isRootStyleOutputFile(file)) {
2386
2718
  if (typeof record.outputFile !== "string" || require_source_candidate_scan_signature.normalizeOutputPathKey(record.outputFile) !== fileKey) continue;
2387
2719
  }
2388
2720
  if (!shouldInjectViteProcessedCssResult(options.opts, mainFileKey, record.file, record)) continue;
2389
2721
  if (isViteProcessedCssResultImported(record, importedStyleFiles)) continue;
2722
+ targetViteCssResults.push(record);
2390
2723
  let css = require_source_candidate_scan_signature.stripBundlerGeneratedCssMarkers(record.css).trim();
2391
2724
  css = removeCssCoveredByImportedViteResults(css, importedCssSources).trim();
2392
2725
  if (css.length === 0) continue;
@@ -2417,29 +2750,19 @@ function injectViteProcessedCssIntoMainCssAssets(bundle, options) {
2417
2750
  if (css.length === 0) continue;
2418
2751
  }
2419
2752
  const missingCss = (0, _weapp_tailwindcss_postcss.filterExistingCssRules)(nextCss, css);
2420
- if (missingCss.length === 0 || (0, _weapp_tailwindcss_postcss.containsCssAfterMinify)(nextCss, missingCss)) continue;
2753
+ if (missingCss.length === 0 || !hasNonCommentCss(missingCss) || (0, _weapp_tailwindcss_postcss.containsCssAfterMinify)(nextCss, missingCss)) continue;
2421
2754
  nextCss = appendCss$1(nextCss, missingCss);
2422
2755
  }
2423
- if (nextCss === originalSource) continue;
2424
- output.source = nextCss;
2425
- options.markCssAssetProcessed?.(output, file);
2426
- options.recordCssAssetResult?.(file, nextCss);
2427
- options.onUpdate?.(file, originalSource, nextCss);
2428
- options.debug?.("inject vite-processed css into main css asset: %s bytes=%d", file, nextCss.length);
2429
- for (const record of viteCssResults) {
2430
- if (!options.shouldRemoveInjectedSourceAsset?.(file, record)) continue;
2431
- const recordFileKey = require_source_candidate_scan_signature.normalizeOutputPathKey(record.file);
2432
- for (const [candidateFile, candidateOutput] of Object.entries(bundle)) {
2433
- if (candidateOutput.type !== "asset") continue;
2434
- const candidateKey = require_source_candidate_scan_signature.normalizeOutputPathKey(getAssetFile$1(candidateFile, candidateOutput));
2435
- const isRecordFile = candidateKey === recordFileKey;
2436
- const candidateSource = readAssetSource$2(candidateOutput).trim();
2437
- const isProcessedSource = candidateSource === record.css.trim() || candidateSource.length > 0 && (0, _weapp_tailwindcss_postcss.containsCssAfterMinify)(nextCss, candidateSource);
2438
- if (!isRecordFile && !isProcessedSource || candidateKey === require_source_candidate_scan_signature.normalizeOutputPathKey(file)) continue;
2439
- clearAssetSource(candidateOutput);
2440
- options.debug?.("remove injected vite-processed source css asset: %s -> %s", candidateKey, file);
2441
- }
2756
+ nextCss = transformCss(nextCss, file);
2757
+ if (nextCss !== originalSource) {
2758
+ output.source = nextCss;
2759
+ options.markCssAssetProcessed?.(output, file);
2760
+ options.recordCssAssetResult?.(file, nextCss);
2761
+ options.onUpdate?.(file, originalSource, nextCss);
2762
+ options.debug?.("inject vite-processed css into main css asset: %s bytes=%d", file, nextCss.length);
2442
2763
  }
2764
+ const removedSources = removeCoveredInjectedSourceAssets(bundle, file, nextCss, targetViteCssResults, options);
2765
+ if (nextCss === originalSource && removedSources === 0) continue;
2443
2766
  injected++;
2444
2767
  }
2445
2768
  return injected;
@@ -2711,9 +3034,34 @@ function pruneLastCssResults(resultByFile, sourceHashByFile, activeFiles) {
2711
3034
  function readAssetSource(asset) {
2712
3035
  return typeof asset.source === "string" ? asset.source : asset.source.toString();
2713
3036
  }
3037
+ function isUniAppViteWebviewAppBundle(bundleFiles) {
3038
+ return bundleFiles.some((file) => node_path.default.basename(file.replace(/[?#].*$/, "")) === "app-service.js");
3039
+ }
3040
+ function isUniAppViteWebviewOutDir$2(outDir) {
3041
+ const normalized = outDir ? node_path.default.basename(node_path.default.normalize(outDir)).trim().toLowerCase() : void 0;
3042
+ return normalized === "app" || normalized === "app-plus";
3043
+ }
2714
3044
  function getAssetFile(bundleFile, asset) {
2715
3045
  return asset.fileName || bundleFile;
2716
3046
  }
3047
+ function finalizeUniAppViteWebviewCssCompat(bundle, options) {
3048
+ if (options.opts.generator?.webCompat === false) return 0;
3049
+ let transformed = 0;
3050
+ for (const [bundleFile, output] of Object.entries(bundle)) {
3051
+ if (output.type !== "asset") continue;
3052
+ const file = getAssetFile(bundleFile, output);
3053
+ if (!options.opts.cssMatcher(file) || !/\.css(?:$|[?#])/i.test(file)) continue;
3054
+ const rawSource = readAssetSource(output);
3055
+ const nextCss = (0, _weapp_tailwindcss_postcss.transformWebCssSafeSelectors)((0, _weapp_tailwindcss_postcss.transformWebCssCompat)(rawSource, options.opts.generator?.webCompat ?? true), { escapeMap: options.opts.escapeMap });
3056
+ if (nextCss === rawSource) continue;
3057
+ output.source = nextCss;
3058
+ options.recordCssAssetResult?.(file, nextCss);
3059
+ options.onUpdate(file, rawSource, nextCss);
3060
+ options.debug("finalize uni-app vite webview css compat: %s bytes=%d", file, nextCss.length);
3061
+ transformed++;
3062
+ }
3063
+ return transformed;
3064
+ }
2717
3065
  function isRootMiniProgramStyleOutputFile(file) {
2718
3066
  const normalized = require_source_candidate_scan_signature.normalizeOutputPathKey(file.replace(/[?#].*$/, ""));
2719
3067
  return !normalized.includes("/") && /\.(?:wxss|acss|ttss|qss|jxss|tyss)$/i.test(normalized);
@@ -2782,7 +3130,7 @@ function normalizeTaroRootImportShellAssets(bundle, options) {
2782
3130
  return updated;
2783
3131
  }
2784
3132
  async function finalizeGenerateBundle(options) {
2785
- const { activeProcessCacheKeys, activeProcessHashKeys, activeViteCssCacheFiles, bundle, bundleFiles, cache, cssTaskFactories, debug, defaultStyleOutputExtension, formatIteration, generatorCandidateSignature, generatorRuntime, getCssHandlerOptions, getSourceCandidateSourcesForEntries, getSourceCandidatesForEntries, getViteCssCacheStats, getViteProcessedCssAssetResults, hmrTimingRecorder, hmrTimingStartedAt, isHarmonyAppStyleTarget, isNativeAppStyleTarget, isViteProcessedCssAsset, isWebGeneratorTarget, jsAfterCss, jsTaskFactories, lastCssResultByFile, lastCssSourceHashByFile, linkedByEntry, markCssAssetProcessed, metrics, onEnd, onUpdate, opts, pendingLinkedUpdates, pruneViteCssCaches, recordCssAssetResult, recordTimingDetail, recordViteProcessedCssAssetResult, rootDir, runtime, runtimeState, shouldPreserveAppCssExtension, snapshot, sourceCandidates, sourceRoot, state, styleHandler, tasks, timingDetails, transformRuntime, useIncrementalMode } = options;
3133
+ const { activeProcessCacheKeys, activeProcessHashKeys, activeViteCssCacheFiles, bundle, bundleFiles, cache, cssTaskFactories, debug, defaultStyleOutputExtension, formatIteration, generatorCandidateSignature, generatorRuntime, getCssHandlerOptions, getSourceCandidateSourcesForEntries, getSourceCandidatesForEntries, getViteCssCacheStats, getViteProcessedCssAssetResults, hmrTimingRecorder, hmrTimingStartedAt, isHarmonyAppStyleTarget, isNativeAppStyleTarget, isViteProcessedCssAsset, isWebGeneratorTarget, jsAfterCss, jsTaskFactories, lastCssResultByFile, lastCssSourceHashByFile, linkedByEntry, markCssAssetProcessed, metrics, onEnd, onUpdate, opts, outDir, pendingLinkedUpdates, pruneViteCssCaches, recordCssAssetResult, recordTimingDetail, recordViteProcessedCssAssetResult, rootDir, runtime, runtimeState, shouldPreserveAppCssExtension, snapshot, sourceCandidates, sourceRoot, state, styleHandler, tasks, timingDetails, transformRuntime, transformWebTargetCss, useIncrementalMode } = options;
2786
3134
  const tasksStart = performance.now();
2787
3135
  if (cssTaskFactories.length > 0) {
2788
3136
  const cssTask = require_hmr_timing.runWithConcurrency(cssTaskFactories, resolveViteCssTaskConcurrency(useIncrementalMode, runtimeState.tailwindRuntime.majorVersion)).then(() => void 0);
@@ -2817,6 +3165,7 @@ async function finalizeGenerateBundle(options) {
2817
3165
  recordViteProcessedCssAssetResult,
2818
3166
  resolveViteProcessedCssOutputFile: (file) => resolveViteCssPipelineOutputFile(file, opts, rootDir, isWebGeneratorTarget, shouldPreserveAppCssExtension, sourceRoot, defaultStyleOutputExtension, bundleFiles),
2819
3167
  subpackageRoots: collectMiniProgramSubpackageRoots(bundle),
3168
+ transformCss: transformWebTargetCss,
2820
3169
  debug
2821
3170
  });
2822
3171
  return injectViteProcessedCssIntoMainCssAssets(bundle, {
@@ -2824,6 +3173,7 @@ async function finalizeGenerateBundle(options) {
2824
3173
  getViteProcessedCssAssetResults,
2825
3174
  markCssAssetProcessed,
2826
3175
  recordCssAssetResult,
3176
+ transformCss: transformWebTargetCss,
2827
3177
  shouldRemoveInjectedSourceAsset: (targetFile, record) => {
2828
3178
  if (record.injectIntoMain === false) return false;
2829
3179
  const targetFileKey = require_source_candidate_scan_signature.normalizeOutputPathKey(targetFile);
@@ -2849,11 +3199,13 @@ async function finalizeGenerateBundle(options) {
2849
3199
  removeCssCoveredByRootStyleAssets(bundle, {
2850
3200
  cssMatcher: opts.cssMatcher,
2851
3201
  debug,
3202
+ includeTailwindGeneratedCssAssets: opts.appType === "uni-app-vite" && isWebGeneratorTarget && isUniAppViteWebviewAppBundle(bundleFiles),
2852
3203
  isViteProcessedCssAsset,
2853
3204
  onUpdate,
2854
3205
  recordCssAssetResult,
2855
3206
  subpackageRoots: collectMiniProgramSubpackageRoots(bundle)
2856
3207
  });
3208
+ if (opts.appType === "uni-app-vite" && isWebGeneratorTarget && isUniAppViteWebviewAppBundle(Object.keys(bundle))) removeDuplicateUnlinkedRootCssAssetsReferencedByHtml(bundle, { debug });
2857
3209
  await finalizeMiniProgramCssAssets(bundle, {
2858
3210
  cssMatcher: opts.cssMatcher,
2859
3211
  debug,
@@ -2864,6 +3216,12 @@ async function finalizeGenerateBundle(options) {
2864
3216
  recordCssAssetResult,
2865
3217
  styleHandler
2866
3218
  });
3219
+ if (opts.appType === "uni-app-vite" && (isWebGeneratorTarget || isUniAppViteWebviewAppBundle(Object.keys(bundle)) || isUniAppViteWebviewOutDir$2(outDir))) finalizeUniAppViteWebviewCssCompat(bundle, {
3220
+ debug,
3221
+ onUpdate,
3222
+ opts,
3223
+ recordCssAssetResult
3224
+ });
2867
3225
  const stateUpdateStart = performance.now();
2868
3226
  require_source_candidate_scan_signature.updateBundleBuildState(state, snapshot, useIncrementalMode ? linkedByEntry ?? /* @__PURE__ */ new Map() : /* @__PURE__ */ new Map(), { incremental: useIncrementalMode });
2869
3227
  state.generatorCandidateSignature = generatorCandidateSignature;
@@ -3278,7 +3636,9 @@ function collectRememberedCssReplayGroups(sources, opts, rootDir, isWebGenerator
3278
3636
  const groups = /* @__PURE__ */ new Map();
3279
3637
  for (const [key, remembered] of sources ?? []) {
3280
3638
  const cleanSourceFile = remembered.sourceFile.replace(/[?#].*$/, "");
3281
- const outputKey = require_source_candidate_scan_signature.normalizeOutputPathKey(CSS_SOURCE_OUTPUT_EXT_RE.test(cleanSourceFile) ? resolveViteCssPipelineOutputFileFromSourceFile(remembered.sourceFile, opts, rootDir, isWebGeneratorTarget, preserveCssExtension, sourceRoot, styleOutputExtension, styleOutputFiles) : resolveViteCssPipelineOutputFileFromSourceFile(remembered.outputFile, opts, rootDir, isWebGeneratorTarget, preserveCssExtension, sourceRoot, styleOutputExtension, styleOutputFiles));
3639
+ const resolvedOutputFile = CSS_SOURCE_OUTPUT_EXT_RE.test(cleanSourceFile) ? resolveViteCssPipelineOutputFileFromSourceFile(remembered.sourceFile, opts, rootDir, isWebGeneratorTarget, preserveCssExtension, sourceRoot, styleOutputExtension, styleOutputFiles) : resolveViteCssPipelineOutputFileFromSourceFile(remembered.outputFile, opts, rootDir, isWebGeneratorTarget, preserveCssExtension, sourceRoot, styleOutputExtension, styleOutputFiles);
3640
+ const rememberedOutputFile = remembered.outputFile.replace(/[?#].*$/, "");
3641
+ const outputKey = require_source_candidate_scan_signature.normalizeOutputPathKey(opts.cssMatcher(rememberedOutputFile) && !require_source_candidate_scan_signature.normalizeOutputPathKey(rememberedOutputFile).includes("/") && require_source_candidate_scan_signature.normalizeOutputPathKey(rememberedOutputFile) !== require_source_candidate_scan_signature.normalizeOutputPathKey(resolvedOutputFile.replace(/[?#].*$/, "")) ? remembered.outputFile : resolvedOutputFile);
3282
3642
  const group = groups.get(outputKey) ?? [];
3283
3643
  group.push({
3284
3644
  key,
@@ -3291,7 +3651,7 @@ function collectRememberedCssReplayGroups(sources, opts, rootDir, isWebGenerator
3291
3651
  //#endregion
3292
3652
  //#region src/bundlers/vite/generate-bundle/remembered-css-replay.ts
3293
3653
  async function processRememberedCssReplay(options) {
3294
- const { addWatchFile, activeViteCssCacheFiles, bundleFiles, cache, createScopedGeneratorRuntime, createScopedSourceCandidateGetter, createScopedSourceCandidateSourceGetter, cssTaskFactories, debug, defaultStyleOutputExtension, emitOrReplayCssAsset, generatorRuntime, 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;
3654
+ 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;
3295
3655
  const rememberedReplayGroups = collectRememberedCssReplayGroups(getRememberedCssSources?.(), opts, rootDir, isWebGeneratorTarget, shouldPreserveAppCssExtension, sourceRoot, defaultStyleOutputExtension, bundleFiles);
3296
3656
  for (const [outputFile, rememberedGroup] of rememberedReplayGroups) {
3297
3657
  if (require_source_candidate_scan_signature.isHTMLRequest(outputFile) || options.opts.htmlMatcher(outputFile)) continue;
@@ -3342,6 +3702,7 @@ async function processRememberedCssReplay(options) {
3342
3702
  cssHandlerOptions,
3343
3703
  cssUserHandlerOptions: getCssUserHandlerOptions(sourceFile),
3344
3704
  getSourceCandidatesForEntries: scopedSourceCandidateGetter,
3705
+ generatorPlatform,
3345
3706
  styleHandler,
3346
3707
  debug,
3347
3708
  previousCss
@@ -3923,6 +4284,16 @@ function resolveSourceRootFromBundleGraph(config, bundle) {
3923
4284
  }
3924
4285
  //#endregion
3925
4286
  //#region src/bundlers/vite/generate-bundle.ts
4287
+ function inferPlatformFromViteOutDir$1(outDir) {
4288
+ const segment = outDir ? node_path.default.basename(node_path.default.normalize(outDir)) : void 0;
4289
+ if (!segment) return;
4290
+ const normalized = segment.trim().toLowerCase();
4291
+ if (normalized === "h5" || normalized === "web" || normalized === "app" || normalized === "app-plus" || normalized.startsWith("app-") || normalized.startsWith("mp-") || normalized.startsWith("quickapp-webview")) return normalized;
4292
+ }
4293
+ function isUniAppViteWebviewOutDir$1(outDir) {
4294
+ const normalized = outDir ? node_path.default.basename(node_path.default.normalize(outDir)).trim().toLowerCase() : void 0;
4295
+ return normalized === "app" || normalized === "app-plus";
4296
+ }
3926
4297
  function createGenerateBundleHook(context) {
3927
4298
  const state = require_source_candidate_scan_signature.createBundleBuildState();
3928
4299
  const lastCssResultByFile = /* @__PURE__ */ new Map();
@@ -3952,23 +4323,32 @@ function createGenerateBundleHook(context) {
3952
4323
  const { cache, onEnd, onStart, onUpdate, styleHandler, templateHandler, jsHandler, uniAppX } = opts;
3953
4324
  const resolvedConfig = getResolvedConfig();
3954
4325
  const uniUtsPlatform = require_utils.resolveUniUtsPlatform();
3955
- const generatorBranch = require_generator.resolveGeneratorRuntimeBranch(require_generator.normalizeWeappTailwindcssGeneratorOptions(opts.generator, {
4326
+ const generatorPlatform = opts.cssOptions?.platform ?? opts.platform ?? inferPlatformFromViteOutDir$1(resolvedConfig?.build?.outDir);
4327
+ const generatorOptions = require_generator.normalizeWeappTailwindcssGeneratorOptions(opts.generator, {
3956
4328
  appType: opts.appType,
3957
- platform: opts.cssOptions?.platform ?? opts.platform,
4329
+ platform: generatorPlatform,
3958
4330
  tailwindcssMajorVersion: runtimeState.tailwindRuntime.majorVersion,
3959
4331
  uniAppX,
3960
4332
  uniUtsPlatform
3961
- }), {
4333
+ });
4334
+ const generatorBranch = require_generator.resolveGeneratorRuntimeBranch(generatorOptions, {
3962
4335
  appType: opts.appType,
3963
- platform: opts.cssOptions?.platform ?? opts.platform,
4336
+ platform: generatorPlatform,
3964
4337
  tailwindcssMajorVersion: runtimeState.tailwindRuntime.majorVersion,
3965
4338
  uniAppX,
3966
4339
  uniUtsPlatform
3967
4340
  });
3968
4341
  const isWebGeneratorTarget = generatorBranch.isWeb;
3969
- const isNativeAppStyleTarget = uniUtsPlatform.isApp;
3970
- const canInferHarmonyAppStyleTarget = !uniUtsPlatform.normalized || uniUtsPlatform.isApp;
3971
- const isHarmonyAppStyleTarget = uniUtsPlatform.isAppHarmony || canInferHarmonyAppStyleTarget && (isUniAppXHarmonyBundle(bundle) || isUniAppXHarmonyOutDir(resolvedConfig?.build?.outDir));
4342
+ const shouldApplyWebviewSafeSelectors = opts.appType === "uni-app-vite" && isUniAppViteWebviewOutDir$1(resolvedConfig?.build?.outDir);
4343
+ const shouldApplyWebviewCssCompat = isWebGeneratorTarget || shouldApplyWebviewSafeSelectors;
4344
+ const transformWebTargetCss = (css) => {
4345
+ const compatCss = isWebGeneratorTarget ? (0, _weapp_tailwindcss_postcss.transformWebCssCompat)(css, generatorOptions.webCompat) : shouldApplyWebviewCssCompat ? (0, _weapp_tailwindcss_postcss.transformWebCssCompat)(css, generatorOptions.webCompat ?? true) : css;
4346
+ return withUniAppXWebPreflightReset(shouldApplyWebviewSafeSelectors ? (0, _weapp_tailwindcss_postcss.transformWebCssSafeSelectors)(compatCss, { escapeMap: opts.escapeMap }) : compatCss, opts.appType === "uni-app-x" && isWebGeneratorTarget);
4347
+ };
4348
+ const isUniAppXStyleTarget = opts.appType === "uni-app-x";
4349
+ const isNativeAppStyleTarget = isUniAppXStyleTarget && uniUtsPlatform.isApp;
4350
+ const canInferHarmonyAppStyleTarget = isUniAppXStyleTarget && (!uniUtsPlatform.normalized || uniUtsPlatform.isApp);
4351
+ const isHarmonyAppStyleTarget = isUniAppXStyleTarget && (uniUtsPlatform.isAppHarmony || canInferHarmonyAppStyleTarget && (isUniAppXHarmonyBundle(bundle) || isUniAppXHarmonyOutDir(resolvedConfig?.build?.outDir)));
3972
4352
  const shouldPreserveAppCssExtension = isNativeAppStyleTarget || isHarmonyAppStyleTarget;
3973
4353
  const shouldGenerateWebCssByGenerator = isWebGeneratorTarget;
3974
4354
  const { getCssHandlerOptions, getCssUserHandlerOptions } = cssHandlerOptions;
@@ -3990,6 +4370,7 @@ function createGenerateBundleHook(context) {
3990
4370
  recordViteProcessedCssAssetResult,
3991
4371
  resolveViteProcessedCssOutputFile: (file) => resolveViteCssPipelineOutputFile(file, opts, rootDir, isWebGeneratorTarget, shouldPreserveAppCssExtension, sourceRoot, defaultStyleOutputExtension, Object.keys(bundle)),
3992
4372
  subpackageRoots: currentSubpackageRoots,
4373
+ transformCss: transformWebTargetCss,
3993
4374
  debug
3994
4375
  });
3995
4376
  const hmrTimingStartedAt = performance.now();
@@ -4033,7 +4414,47 @@ function createGenerateBundleHook(context) {
4033
4414
  const snapshotStart = performance.now();
4034
4415
  const snapshot = require_source_candidate_scan_signature.buildBundleSnapshot(bundle, opts, outDir, state, envFlags.disableDirtyOptimization || !useIncrementalMode, { hasOmittedKnownFiles });
4035
4416
  const configuredTailwindV4CssSourceEntriesForScope = getConfiguredTailwindV4CssSourceEntries();
4036
- const configuredTailwindV4CssSourceFileKeysForScope = new Set(configuredTailwindV4CssSourceEntriesForScope.map((entry) => require_source_candidate_scan_signature.normalizeOutputPathKey(entry.file.replace(/[?#].*$/, ""))));
4417
+ const normalizeSystemAliasPathKey = (file) => file.startsWith("/private/var/") ? file.slice(8) : file;
4418
+ const normalizeConfiguredTailwindV4CssEntryFileKey = (file) => {
4419
+ const cleanFile = file.replace(/[?#].*$/, "");
4420
+ 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)));
4421
+ };
4422
+ const runtimeTailwindcssOptions = require_v4_engine.resolveTailwindcssOptions(opts.tailwindcssRuntimeOptions);
4423
+ const tailwindRuntimeOptions = require_v4_engine.resolveTailwindcssOptions(runtimeState.tailwindRuntime.options);
4424
+ const configuredTailwindV4CssSourceFileKeysForScope = new Set(configuredTailwindV4CssSourceEntriesForScope.map((entry) => normalizeConfiguredTailwindV4CssEntryFileKey(entry.file)));
4425
+ const configuredTailwindV4ExplicitCssEntryFileKeysForScope = new Set([
4426
+ ...Array.isArray(opts.cssEntries) ? opts.cssEntries : [],
4427
+ ...Array.isArray(opts.tailwindcss?.v4?.cssEntries) ? opts.tailwindcss.v4.cssEntries : [],
4428
+ ...Array.isArray(runtimeTailwindcssOptions?.v4?.cssEntries) ? runtimeTailwindcssOptions.v4.cssEntries : [],
4429
+ ...Array.isArray(tailwindRuntimeOptions?.v4?.cssEntries) ? tailwindRuntimeOptions.v4.cssEntries : []
4430
+ ].filter((file) => typeof file === "string" && file.length > 0).map(normalizeConfiguredTailwindV4CssEntryFileKey));
4431
+ const resolveUniAppViteWebviewRootCssInjectionTarget = (sourceFile, outputFile) => {
4432
+ if (opts.appType !== "uni-app-vite" || !outputFile.replace(/[?#].*$/, "").endsWith(".css") || typeof sourceFile !== "string" || !configuredTailwindV4ExplicitCssEntryFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(sourceFile))) return;
4433
+ const rootCssFiles = bundleFiles.filter((file) => {
4434
+ const normalized = require_source_candidate_scan_signature.normalizeOutputPathKey(file.replace(/[?#].*$/, ""));
4435
+ return opts.cssMatcher(file) && normalized.endsWith(".css") && !normalized.includes("/");
4436
+ });
4437
+ const matchedRootCssFiles = rootCssFiles.filter((file) => getCssHandlerOptions(file).isMainChunk);
4438
+ if (matchedRootCssFiles.length === 1) return matchedRootCssFiles[0];
4439
+ if (matchedRootCssFiles.length > 1) return;
4440
+ return rootCssFiles.length === 1 ? rootCssFiles[0] : void 0;
4441
+ };
4442
+ const resolveConfiguredTailwindV4CssEntryOutputFile = (sourceFile) => resolveViteCssPipelineOutputFile(sourceFile, opts, rootDir, isWebGeneratorTarget, shouldPreserveAppCssExtension, sourceRoot, defaultStyleOutputExtension, bundleFiles);
4443
+ const selectUniAppViteWebviewRootCssSourceEntry = (outputFile, entries) => {
4444
+ if (opts.appType !== "uni-app-vite" || !isWebGeneratorTarget || !opts.cssMatcher(outputFile) || require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile.replace(/[?#].*$/, "")).includes("/")) return;
4445
+ const generationEntries = entries.filter((entry) => hasTailwindGenerationSource(entry.source));
4446
+ if (generationEntries.length <= 1) return generationEntries[0];
4447
+ const rootOutputEntries = generationEntries.filter((entry) => {
4448
+ return !require_source_candidate_scan_signature.normalizeOutputPathKey(resolveConfiguredTailwindV4CssEntryOutputFile(entry.file).replace(/[?#].*$/, "")).includes("/");
4449
+ });
4450
+ if (rootOutputEntries.length === 1) return rootOutputEntries[0];
4451
+ if (currentSubpackageRoots) {
4452
+ const mainPackageEntries = generationEntries.filter((entry) => {
4453
+ return !isSubpackageOutputFile(resolveConfiguredTailwindV4CssEntryOutputFile(entry.file), currentSubpackageRoots);
4454
+ });
4455
+ if (mainPackageEntries.length === 1) return mainPackageEntries[0];
4456
+ }
4457
+ };
4037
4458
  const { createScopedSourceCandidateGetter, createScopedSourceCandidateSourceGetter, shouldExcludeSubpackageSourceCandidates, shouldInjectCssIntoMainFromOutput } = createSubpackageSourceCandidateScope({
4038
4459
  cssSourceFiles: configuredTailwindV4CssSourceEntriesForScope.map((entry) => entry.file),
4039
4460
  getSourceCandidateSourcesForEntries,
@@ -4189,10 +4610,14 @@ function createGenerateBundleHook(context) {
4189
4610
  onUpdate,
4190
4611
  debug
4191
4612
  });
4192
- const createHandlerOptions = createJsHandlerOptionsFactory({
4613
+ const createBaseHandlerOptions = createJsHandlerOptionsFactory({
4193
4614
  getMajorVersion: () => runtimeState.tailwindRuntime.majorVersion,
4194
4615
  moduleGraph: moduleGraphOptions
4195
4616
  });
4617
+ const createHandlerOptions = (absoluteFilename, extra) => createBaseHandlerOptions(absoluteFilename, shouldApplyWebviewSafeSelectors ? {
4618
+ needEscaped: true,
4619
+ ...extra
4620
+ } : extra);
4196
4621
  const linkedByEntry = useIncrementalMode ? /* @__PURE__ */ new Map() : void 0;
4197
4622
  const sharedCssResultCache = /* @__PURE__ */ new Map();
4198
4623
  const activeProcessCacheKeys = /* @__PURE__ */ new Set();
@@ -4307,7 +4732,7 @@ function createGenerateBundleHook(context) {
4307
4732
  return await refreshRememberedCssSource?.(remembered) ?? remembered;
4308
4733
  }));
4309
4734
  rememberedCssSources = rememberedCssSources.filter((remembered) => {
4310
- if (!configuredTailwindV4CssSourceFileKeysForScope.has(require_source_candidate_scan_signature.normalizeOutputPathKey(remembered.sourceFile.replace(/[?#].*$/, "")))) return true;
4735
+ if (!configuredTailwindV4CssSourceFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(remembered.sourceFile))) return true;
4311
4736
  const matchedOutputFile = resolveMatchedOutputFileForCurrentAsset(remembered.sourceFile);
4312
4737
  return !matchedOutputFile || require_source_candidate_scan_signature.normalizeOutputPathKey(matchedOutputFile) === require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile);
4313
4738
  });
@@ -4318,7 +4743,7 @@ function createGenerateBundleHook(context) {
4318
4743
  const rememberedSourcesBelongToInferredSfc = rememberedCssSources.length > 0 && rememberedCssSources.every((remembered) => normalizeSfcSourceFileForCompare(remembered.sourceFile) === inferredSourceFile);
4319
4744
  if (!hasUsableRememberedTailwindSource || rememberedSourcesBelongToInferredSfc) rememberedCssSources = [inferredSfcStyleSource];
4320
4745
  }
4321
- if (isTemporaryCssAssetFile(outputFile) && rememberedCssSources.some((remembered) => configuredTailwindV4CssSourceFileKeysForScope.has(require_source_candidate_scan_signature.normalizeOutputPathKey(remembered.sourceFile.replace(/[?#].*$/, ""))))) {
4746
+ if (isTemporaryCssAssetFile(outputFile) && rememberedCssSources.some((remembered) => configuredTailwindV4CssSourceFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(remembered.sourceFile)))) {
4322
4747
  rememberedCssSources = [];
4323
4748
  hasUsableRememberedTailwindSource = false;
4324
4749
  }
@@ -4346,7 +4771,14 @@ function createGenerateBundleHook(context) {
4346
4771
  }
4347
4772
  if (!hasUsableRememberedTailwindSource) {
4348
4773
  const configuredTailwindV4CssSourceEntries = getConfiguredTailwindV4CssSourceEntries();
4349
- const inferredOriginalSourceStyle = resolveSourceStyleSourceFromOutputFile(outputFile, snapshot, outDir, sourceRoot, getCssSource, getSourceCandidateSources, configuredTailwindV4CssSourceEntries.map((entry) => [entry.file, entry.source]), debug) ?? (outputFile === file ? void 0 : resolveSourceStyleSourceFromOutputFile(file, snapshot, outDir, sourceRoot, getCssSource, getSourceCandidateSources, configuredTailwindV4CssSourceEntries.map((entry) => [entry.file, entry.source]), debug));
4774
+ const inferredSourceStyle = resolveSourceStyleSourceFromOutputFile(outputFile, snapshot, outDir, sourceRoot, getCssSource, getSourceCandidateSources, configuredTailwindV4CssSourceEntries.map((entry) => [entry.file, entry.source]), debug);
4775
+ const inferredWebviewRootSourceEntry = inferredSourceStyle ? void 0 : selectUniAppViteWebviewRootCssSourceEntry(outputFile, configuredTailwindV4CssSourceEntries);
4776
+ const inferredWebviewRootSourceStyle = inferredWebviewRootSourceEntry ? {
4777
+ outputFile,
4778
+ rawSource: inferredWebviewRootSourceEntry.source,
4779
+ sourceFile: inferredWebviewRootSourceEntry.file
4780
+ } : void 0;
4781
+ const inferredOriginalSourceStyle = inferredSourceStyle ?? (outputFile === file ? void 0 : resolveSourceStyleSourceFromOutputFile(file, snapshot, outDir, sourceRoot, getCssSource, getSourceCandidateSources, configuredTailwindV4CssSourceEntries.map((entry) => [entry.file, entry.source]), debug)) ?? inferredWebviewRootSourceStyle;
4350
4782
  if (inferredOriginalSourceStyle) {
4351
4783
  outputFile = resolveMatchedOutputFileForCurrentAsset(inferredOriginalSourceStyle.sourceFile) ?? outputFile;
4352
4784
  activeViteCssCacheFiles.add(normalizeViteCssCacheKey(outputFile));
@@ -4396,7 +4828,7 @@ function createGenerateBundleHook(context) {
4396
4828
  }
4397
4829
  }
4398
4830
  let rememberedCssSource = mergeRememberedCssSources(rememberedCssSources, outputFile);
4399
- if (rememberedCssSource && viteProcessedCssAsset && outputCssHandlerOptions.isMainChunk !== true && configuredTailwindV4CssSourceFileKeysForScope.has(require_source_candidate_scan_signature.normalizeOutputPathKey(rememberedCssSource.sourceFile.replace(/[?#].*$/, "")))) {
4831
+ if (rememberedCssSource && viteProcessedCssAsset && outputCssHandlerOptions.isMainChunk !== true && configuredTailwindV4CssSourceFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(rememberedCssSource.sourceFile))) {
4400
4832
  const matchedOutputFile = resolveMatchedOutputFileForCurrentAsset(rememberedCssSource.sourceFile);
4401
4833
  if (matchedOutputFile && require_source_candidate_scan_signature.normalizeOutputPathKey(matchedOutputFile) !== require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile)) {
4402
4834
  outputFile = matchedOutputFile;
@@ -4425,11 +4857,12 @@ function createGenerateBundleHook(context) {
4425
4857
  }
4426
4858
  const hasRememberedApplyDirective = rememberedCssSource != null && require_v4_engine.hasTailwindApplyDirective(rememberedCssSource.rawSource);
4427
4859
  const hasRememberedTailwindGenerationSource = rememberedCssSource != null && hasTailwindGenerationSource(rememberedCssSource.rawSource);
4428
- const usesConfiguredTailwindV4FallbackSource = rememberedCssSource != null && require_source_candidate_scan_signature.normalizeOutputPathKey(rememberedCssSource.outputFile) === require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile) && require_source_candidate_scan_signature.normalizeOutputPathKey(rememberedCssSource.sourceFile.replace(/[?#].*$/, "")) !== require_source_candidate_scan_signature.normalizeOutputPathKey(file);
4429
4860
  const hasSameOutputRememberedTailwindGenerationSource = hasRememberedTailwindGenerationSource && rememberedCssSource != null && require_source_candidate_scan_signature.normalizeOutputPathKey(rememberedCssSource.outputFile) === require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile);
4430
4861
  const hasStaleViteProcessedCssSource = vitePipelineCssAsset && hasDifferentRememberedCssSource && (hasCurrentTailwindGenerationDirective || hasRememberedApplyDirective || hasRememberedTailwindGenerationSource);
4431
4862
  const generatorSourceFile = vitePipelineCssAsset ? rememberedCssSource?.sourceFile ?? assetSourceFile : assetSourceFile;
4432
- if (vitePipelineCssAsset && outputCssHandlerOptions.isMainChunk !== true && configuredTailwindV4CssSourceFileKeysForScope.has(require_source_candidate_scan_signature.normalizeOutputPathKey(generatorSourceFile.replace(/[?#].*$/, "")))) {
4863
+ const webviewRootCssInjectionTarget = vitePipelineCssAsset ? resolveUniAppViteWebviewRootCssInjectionTarget(generatorSourceFile, outputFile) : void 0;
4864
+ const usesConfiguredTailwindV4FallbackSource = rememberedCssSource != null && require_source_candidate_scan_signature.normalizeOutputPathKey(rememberedCssSource.outputFile) === require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile) && require_source_candidate_scan_signature.normalizeOutputPathKey(rememberedCssSource.sourceFile.replace(/[?#].*$/, "")) !== require_source_candidate_scan_signature.normalizeOutputPathKey(file);
4865
+ if (vitePipelineCssAsset && outputCssHandlerOptions.isMainChunk !== true && configuredTailwindV4CssSourceFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(generatorSourceFile))) {
4433
4866
  usedConfiguredTailwindV4CssSourceFiles.add(require_source_candidate_scan_signature.normalizeOutputPathKey(generatorSourceFile));
4434
4867
  temporaryCssAssetSourceResolver.markUsed(generatorSourceFile);
4435
4868
  }
@@ -4437,7 +4870,7 @@ function createGenerateBundleHook(context) {
4437
4870
  ...getCssHandlerOptions(generatorSourceFile),
4438
4871
  isMainChunk: resolvedFromTemporaryCssAsset ? false : outputCssHandlerOptions.isMainChunk
4439
4872
  } : getCssHandlerOptions(file);
4440
- const generatorCssEntries = configuredTailwindV4CssSourceFileKeysForScope.has(require_source_candidate_scan_signature.normalizeOutputPathKey(generatorSourceFile.replace(/[?#].*$/, ""))) ? [generatorSourceFile] : opts.cssEntries;
4873
+ const generatorCssEntries = configuredTailwindV4ExplicitCssEntryFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(generatorSourceFile)) ? [generatorSourceFile] : opts.cssEntries;
4441
4874
  const generatorCssHandlerOptions = {
4442
4875
  ...cssHandlerOptions,
4443
4876
  sourceOptions: {
@@ -4455,6 +4888,10 @@ function createGenerateBundleHook(context) {
4455
4888
  opts,
4456
4889
  tokenSources: sourceTraceTokenSources
4457
4890
  });
4891
+ const removeRootCoveredCssFromScopedAsset = (css) => {
4892
+ const normalizedOutputFile = require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile.replace(/[?#].*$/, ""));
4893
+ return !normalizedOutputFile.includes("/") || currentSubpackageRoots != null && isSubpackageOutputFile(normalizedOutputFile, currentSubpackageRoots) ? css : removeCssCoveredByRootStyleBundleSources(bundle, outputFile, css);
4894
+ };
4458
4895
  const shouldRegenerateMainPackageCssWithScopedCandidates = vitePipelineCssAsset && shouldExcludeSubpackageSourceCandidates(outputFile, generatorCssHandlerOptions);
4459
4896
  const generatorCssUserHandlerOptions = getCssUserHandlerOptions(generatorSourceFile);
4460
4897
  const cssRuntimeAffectingSignature = vitePipelineCssAsset ? require_source_candidate_scan_signature.createRuntimeAffectingSourceSignature(generatorRawSource, "css") : snapshot.runtimeAffectingSignatureByFile.get(file) ?? require_source_candidate_scan_signature.createRuntimeAffectingSourceSignature(generatorRawSource, "css");
@@ -4462,19 +4899,30 @@ function createGenerateBundleHook(context) {
4462
4899
  const cssShareScope = createCssTransformShareScopeKey(opts, outputFile, generatorRawSource);
4463
4900
  const shouldRegenerateCollectedViteCss = viteProcessedCssAsset && useIncrementalMode && state.generatorCandidateSignature !== void 0 && generatorCandidatesChanged && (hasTailwindGenerationSource(generatorRawSource) || require_source_candidate_scan_signature.hasBundlerGeneratedCssMarker(rawSource) || rememberedCssSource != null && hasTailwindGenerationSource(rememberedCssSource.rawSource));
4464
4901
  const shouldRefreshViteProcessedCssByCandidates = viteProcessedCssAsset && useIncrementalMode && state.generatorCandidateSignature !== void 0 && generatorCandidatesChanged;
4465
- const shouldInjectVitePipelineCssIntoMain = vitePipelineCssAsset && outputCssHandlerOptions.isMainChunk !== true && shouldInjectCssIntoMainFromOutput(outputFile, generatorSourceFile, outputCssHandlerOptions);
4902
+ const vitePipelineCssInjectionOutputFile = webviewRootCssInjectionTarget ?? outputFile;
4903
+ const shouldRecordVitePipelineCssByOutput = require_source_candidate_scan_signature.normalizeOutputPathKey(vitePipelineCssInjectionOutputFile) === require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile);
4904
+ const shouldInjectVitePipelineCssIntoMain = vitePipelineCssAsset && outputCssHandlerOptions.isMainChunk !== true && (webviewRootCssInjectionTarget != null || shouldInjectCssIntoMainFromOutput(outputFile, generatorSourceFile, outputCssHandlerOptions));
4466
4905
  const shouldTrackGeneratorRuntime = hasStaleViteProcessedCssSource || shouldRegenerateMainPackageCssWithScopedCandidates || hasCurrentTailwindGenerationDirective || hasSameOutputRememberedTailwindGenerationSource || shouldProcessTailwindGeneration && (!useIncrementalMode || cssHandlerOptions.isMainChunk || processFiles.css.has(file) || runtimeLinkedCssFiles.has(file) || runtimeLinkedCssFiles.has(outputFile) || shouldRegenerateCollectedViteCss || hasRuntimeAffectingChanges && (alreadyProcessedCssAsset || vitePipelineCssAsset));
4467
4906
  const shouldPreserveCollectedViteCssAsset = !shouldRegenerateCollectedViteCss && (state.generatorCandidateSignature === void 0 || !generatorCandidatesChanged) && (collectedBundlerGeneratedCssFiles.has(file) || require_source_candidate_scan_signature.hasBundlerGeneratedCssMarker(rawSource));
4468
4907
  const strippedViteProcessedCss = require_source_candidate_scan_signature.stripBundlerGeneratedCssMarkers(rawSource);
4469
4908
  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);
4470
4909
  if (alreadyProcessedCssAsset && !shouldRefreshViteProcessedCssByCandidates && (!hasStaleViteProcessedCssSource || shouldPreserveStaleGeneratedCssAsset) && !hasRememberedApplySource && !shouldRegenerateMainPackageCssWithScopedCandidates && (!shouldTrackGeneratorRuntime || shouldPreserveCollectedViteCssAsset)) {
4471
- const nextCss = strippedViteProcessedCss;
4910
+ const nextCss = removeRootCoveredCssFromScopedAsset(strippedViteProcessedCss);
4472
4911
  applyCssResult(nextCss);
4473
4912
  markCssAssetProcessed?.(originalSource, outputFile);
4474
4913
  recordCssAssetResult?.(outputFile, nextCss);
4475
- recordViteProcessedCssAssetResult?.(outputFile, nextCss, {
4914
+ if (vitePipelineCssAsset && rememberedCssSource) rememberCssSource?.({
4915
+ outputFile: vitePipelineCssInjectionOutputFile,
4916
+ rawSource: generatorRawSource,
4917
+ sourceFile: generatorSourceFile
4918
+ });
4919
+ if (shouldRecordVitePipelineCssByOutput) recordViteProcessedCssAssetResult?.(vitePipelineCssInjectionOutputFile, nextCss, {
4476
4920
  injectIntoMain: outputCssHandlerOptions.isMainChunk ? false : shouldInjectVitePipelineCssIntoMain,
4477
- outputFile
4921
+ outputFile: vitePipelineCssInjectionOutputFile
4922
+ });
4923
+ if (vitePipelineCssAsset && shouldInjectVitePipelineCssIntoMain) recordViteProcessedCssAssetResult?.(file, nextCss, {
4924
+ injectIntoMain: shouldInjectVitePipelineCssIntoMain,
4925
+ outputFile: vitePipelineCssInjectionOutputFile
4478
4926
  });
4479
4927
  onUpdate(outputFile, rawSource, nextCss);
4480
4928
  debug("css skip vite-processed asset: %s", outputFile);
@@ -4512,7 +4960,7 @@ function createGenerateBundleHook(context) {
4512
4960
  rememberLastCssResult(lastCssResultByFile, lastCssSourceHashByFile, outputFile, source, cssRuntimeAffectingHash);
4513
4961
  markCssAssetProcessed?.(originalSource, outputFile);
4514
4962
  if (rememberedCssSources.length <= 1) rememberCssSource?.({
4515
- outputFile,
4963
+ outputFile: vitePipelineCssInjectionOutputFile,
4516
4964
  rawSource: generatorRawSource,
4517
4965
  sourceFile: generatorSourceFile
4518
4966
  }, rememberedCssRuntimeSignature);
@@ -4547,6 +4995,7 @@ function createGenerateBundleHook(context) {
4547
4995
  cssUserHandlerOptions: generatorCssUserHandlerOptions,
4548
4996
  getSourceCandidatesForEntries: scopedSourceCandidateGetter,
4549
4997
  sourceCandidates: scopedGeneratorRuntime,
4998
+ generatorPlatform,
4550
4999
  styleHandler,
4551
5000
  debug,
4552
5001
  previousCss,
@@ -4554,19 +5003,19 @@ function createGenerateBundleHook(context) {
4554
5003
  ...usesConfiguredTailwindV4FallbackSource ? { restoreLocalCssImports: false } : {}
4555
5004
  }) : void 0;
4556
5005
  if (generated) {
4557
- const tracedCss = annotateCss(generated.css);
5006
+ const tracedCss = removeRootCoveredCssFromScopedAsset(annotateCss(transformWebTargetCss(generated.css)));
4558
5007
  registerGeneratorDependencies$1({ addWatchFile }, generated.dependencies);
4559
5008
  if (envFlags.debugCssDiff) debug("css diff %s: %s", generatorSourceFile, require_source_candidate_scan_signature.summarizeStringDiff(generatorRawSource, tracedCss));
4560
5009
  debug("css generated result: %s bytes=%d", file, tracedCss.length);
4561
5010
  for (const candidate of generated.classSet ?? []) transformRuntime.add(candidate);
4562
5011
  recordCssAssetResult?.(outputFile, tracedCss);
4563
- recordViteProcessedCssAssetResult?.(outputFile, tracedCss, {
5012
+ if (shouldRecordVitePipelineCssByOutput) recordViteProcessedCssAssetResult?.(vitePipelineCssInjectionOutputFile, tracedCss, {
4564
5013
  injectIntoMain: outputCssHandlerOptions.isMainChunk ? false : shouldInjectVitePipelineCssIntoMain,
4565
- outputFile
5014
+ outputFile: vitePipelineCssInjectionOutputFile
4566
5015
  });
4567
5016
  if (vitePipelineCssAsset && shouldInjectVitePipelineCssIntoMain) recordViteProcessedCssAssetResult?.(file, tracedCss, {
4568
5017
  injectIntoMain: shouldInjectVitePipelineCssIntoMain,
4569
- outputFile
5018
+ outputFile: vitePipelineCssInjectionOutputFile
4570
5019
  });
4571
5020
  metrics.css.elapsed += measureElapsed(start);
4572
5021
  metrics.css.transformed++;
@@ -4574,10 +5023,11 @@ function createGenerateBundleHook(context) {
4574
5023
  return tracedCss;
4575
5024
  }
4576
5025
  if (isWebGeneratorTarget) {
5026
+ const outputCss = transformWebTargetCss(rawSource);
4577
5027
  metrics.css.elapsed += measureElapsed(start);
4578
5028
  metrics.css.transformed++;
4579
5029
  debug("css preserve web target: %s", outputFile);
4580
- return annotateCss(rawSource);
5030
+ return annotateCss(outputCss);
4581
5031
  }
4582
5032
  const { css } = await styleHandler(generatorRawSource, cssHandlerOptions);
4583
5033
  const tracedCss = annotateCss(css);
@@ -4597,7 +5047,7 @@ function createGenerateBundleHook(context) {
4597
5047
  continue;
4598
5048
  }
4599
5049
  if (type !== "js") continue;
4600
- if (isWebGeneratorTarget) {
5050
+ if (isWebGeneratorTarget && !shouldApplyWebviewSafeSelectors) {
4601
5051
  debug("js skip web target: %s", file);
4602
5052
  continue;
4603
5053
  }
@@ -4643,6 +5093,7 @@ function createGenerateBundleHook(context) {
4643
5093
  debug,
4644
5094
  defaultStyleOutputExtension,
4645
5095
  emitOrReplayCssAsset,
5096
+ generatorPlatform,
4646
5097
  generatorRuntime,
4647
5098
  getCssHandlerOptions,
4648
5099
  getCssUserHandlerOptions,
@@ -4722,12 +5173,19 @@ function createGenerateBundleHook(context) {
4722
5173
  tasks,
4723
5174
  timingDetails,
4724
5175
  transformRuntime,
5176
+ transformWebTargetCss,
4725
5177
  useIncrementalMode
4726
5178
  });
4727
5179
  };
4728
5180
  }
4729
5181
  //#endregion
4730
5182
  //#region src/bundlers/vite/css-finalizer.ts
5183
+ function inferPlatformFromViteOutDir(outDir) {
5184
+ const segment = outDir ? node_path.default.basename(node_path.default.normalize(outDir)) : void 0;
5185
+ if (!segment) return;
5186
+ const normalized = segment.trim().toLowerCase();
5187
+ if (normalized === "h5" || normalized === "web" || normalized === "app" || normalized === "app-plus" || normalized.startsWith("app-") || normalized.startsWith("mp-") || normalized.startsWith("quickapp-webview")) return normalized;
5188
+ }
4731
5189
  function isAddWatchFileInvalidRollupPhaseError(error) {
4732
5190
  const candidate = error;
4733
5191
  return candidate?.code === "INVALID_ROLLUP_PHASE" || candidate?.pluginCode === "INVALID_ROLLUP_PHASE" || candidate?.message?.includes("Cannot call \"addWatchFile\" after the build has finished.") === true;
@@ -4771,8 +5229,13 @@ function shouldFinalizeProcessedCssAsset(opts, file) {
4771
5229
  function collectViteProcessedCssSources(getViteProcessedCssAssetResults) {
4772
5230
  return [...getViteProcessedCssAssetResults?.() ?? []].map(([, record]) => typeof record === "string" ? record : record.css);
4773
5231
  }
4774
- function finalizeWebCss(css, enabled, webCompat) {
4775
- return enabled ? (0, _weapp_tailwindcss_postcss.transformWebCssCompat)(css, webCompat) : css;
5232
+ function isUniAppViteWebviewOutDir(outDir) {
5233
+ const normalized = outDir ? node_path.default.basename(node_path.default.normalize(outDir)).trim().toLowerCase() : void 0;
5234
+ return normalized === "app" || normalized === "app-plus";
5235
+ }
5236
+ function finalizeWebCss(css, enabled, webCompat, options = {}) {
5237
+ const compatCss = enabled ? (0, _weapp_tailwindcss_postcss.transformWebCssCompat)(css, webCompat) : css;
5238
+ return withUniAppXWebPreflightReset(options.safeSelectors ? (0, _weapp_tailwindcss_postcss.transformWebCssSafeSelectors)(compatCss, { escapeMap: options.escapeMap }) : compatCss, options.uniAppXWebPreflightReset === true);
4776
5239
  }
4777
5240
  function createViteCssFinalizerOutputPlugin(context) {
4778
5241
  return {
@@ -4784,24 +5247,27 @@ function createViteCssFinalizerOutputPlugin(context) {
4784
5247
  const { opts, runtimeState, ensureRuntimeClassSet, isCssAssetProcessed, markCssAssetProcessed, debug, getResolvedConfig, recordCssAssetResult, recordViteProcessedCssAssetResult, getViteProcessedCssAssetResults, getRecordedGeneratorCandidates, getSourceCandidates, getSourceCandidatesForEntries, getSourceCandidateSourcesForEntries, waitForSourceCandidateSyncs, rememberMainCssSource, getRememberedMainCssSource, isViteProcessedCssAsset } = context;
4785
5248
  const resolvedConfig = getResolvedConfig();
4786
5249
  const uniUtsPlatform = require_utils.resolveUniUtsPlatform();
5250
+ const generatorPlatform = opts.cssOptions?.platform ?? opts.platform ?? inferPlatformFromViteOutDir(resolvedConfig?.build?.outDir);
4787
5251
  const generatorOptions = require_generator.normalizeWeappTailwindcssGeneratorOptions(opts.generator, {
4788
5252
  appType: opts.appType,
4789
- platform: opts.cssOptions?.platform ?? opts.platform,
5253
+ platform: generatorPlatform,
4790
5254
  tailwindcssMajorVersion: runtimeState.tailwindRuntime.majorVersion,
4791
5255
  uniAppX: opts.uniAppX,
4792
5256
  uniUtsPlatform
4793
5257
  });
4794
5258
  const generatorBranch = require_generator.resolveGeneratorRuntimeBranch(generatorOptions, {
4795
5259
  appType: opts.appType,
4796
- platform: opts.cssOptions?.platform ?? opts.platform,
5260
+ platform: generatorPlatform,
4797
5261
  tailwindcssMajorVersion: runtimeState.tailwindRuntime.majorVersion,
4798
5262
  uniAppX: opts.uniAppX,
4799
5263
  uniUtsPlatform
4800
5264
  });
4801
5265
  const isWebGeneratorTarget = generatorBranch.isWeb;
4802
- const canInferHarmonyAppStyleTarget = !uniUtsPlatform.normalized || uniUtsPlatform.isApp;
4803
- const isHarmonyAppStyleTarget = uniUtsPlatform.isAppHarmony || canInferHarmonyAppStyleTarget && (isUniAppXHarmonyBundle(bundle) || isUniAppXHarmonyOutDir(resolvedConfig?.build?.outDir));
4804
- const isNativeAppStyleTarget = uniUtsPlatform.isApp || isHarmonyAppStyleTarget;
5266
+ const shouldApplyWebviewSafeSelectors = opts.appType === "uni-app-vite" && isUniAppViteWebviewOutDir(resolvedConfig?.build?.outDir);
5267
+ const isUniAppXStyleTarget = opts.appType === "uni-app-x";
5268
+ const canInferHarmonyAppStyleTarget = isUniAppXStyleTarget && (!uniUtsPlatform.normalized || uniUtsPlatform.isApp);
5269
+ const isHarmonyAppStyleTarget = isUniAppXStyleTarget && (uniUtsPlatform.isAppHarmony || canInferHarmonyAppStyleTarget && (isUniAppXHarmonyBundle(bundle) || isUniAppXHarmonyOutDir(resolvedConfig?.build?.outDir)));
5270
+ const isNativeAppStyleTarget = isUniAppXStyleTarget && (uniUtsPlatform.isApp || isHarmonyAppStyleTarget);
4805
5271
  if (resolvedConfig?.command !== "build" && !isNativeAppStyleTarget) return;
4806
5272
  const rootDir = resolvedConfig?.root ? node_path.default.resolve(resolvedConfig.root) : node_process.default.cwd();
4807
5273
  const sourceRoot = resolveWeappViteSourceRoot(resolvedConfig, opts.appType) ?? resolveSourceRootFromBundleGraph(resolvedConfig, bundle);
@@ -4818,7 +5284,11 @@ function createViteCssFinalizerOutputPlugin(context) {
4818
5284
  recordCssAssetResult,
4819
5285
  recordViteProcessedCssAssetResult,
4820
5286
  resolveViteProcessedCssOutputFile: (file) => resolveViteCssPipelineOutputFile(file, opts, rootDir, isWebGeneratorTarget, isNativeAppStyleTarget, sourceRoot, resolveMiniProgramStyleOutputExtension({ files: Object.keys(bundle) }), Object.keys(bundle)),
4821
- transformCss: (css) => finalizeWebCss(css, generatorBranch.isWeb, generatorOptions.webCompat),
5287
+ transformCss: (css) => finalizeWebCss(css, generatorBranch.isWeb, generatorOptions.webCompat, {
5288
+ escapeMap: opts.escapeMap,
5289
+ safeSelectors: shouldApplyWebviewSafeSelectors,
5290
+ uniAppXWebPreflightReset: opts.appType === "uni-app-x" && generatorBranch.isWeb
5291
+ }),
4822
5292
  debug
4823
5293
  });
4824
5294
  };
@@ -4828,6 +5298,11 @@ function createViteCssFinalizerOutputPlugin(context) {
4828
5298
  getViteProcessedCssAssetResults,
4829
5299
  markCssAssetProcessed,
4830
5300
  recordCssAssetResult,
5301
+ transformCss: (css) => finalizeWebCss(css, generatorBranch.isWeb, generatorOptions.webCompat, {
5302
+ escapeMap: opts.escapeMap,
5303
+ safeSelectors: shouldApplyWebviewSafeSelectors,
5304
+ uniAppXWebPreflightReset: opts.appType === "uni-app-x" && generatorBranch.isWeb
5305
+ }),
4831
5306
  debug,
4832
5307
  onUpdate: opts.onUpdate
4833
5308
  });
@@ -4853,6 +5328,7 @@ function createViteCssFinalizerOutputPlugin(context) {
4853
5328
  isMainChunk: false
4854
5329
  },
4855
5330
  getSourceCandidatesForEntries,
5331
+ generatorPlatform,
4856
5332
  styleHandler: opts.styleHandler,
4857
5333
  debug
4858
5334
  });
@@ -4891,7 +5367,11 @@ function createViteCssFinalizerOutputPlugin(context) {
4891
5367
  const file = output.fileName || bundleFile;
4892
5368
  const rawSource = output.source.toString();
4893
5369
  if (isViteProcessedCssAsset?.(output, file)) {
4894
- const nextCss = annotateCss(finalizeWebCss(require_source_candidate_scan_signature.stripBundlerGeneratedCssMarkers(rawSource), generatorBranch.isWeb, generatorOptions.webCompat));
5370
+ const nextCss = annotateCss(finalizeWebCss(require_source_candidate_scan_signature.stripBundlerGeneratedCssMarkers(rawSource), generatorBranch.isWeb, generatorOptions.webCompat, {
5371
+ escapeMap: opts.escapeMap,
5372
+ safeSelectors: shouldApplyWebviewSafeSelectors,
5373
+ uniAppXWebPreflightReset: opts.appType === "uni-app-x" && generatorBranch.isWeb
5374
+ }));
4895
5375
  output.source = nextCss;
4896
5376
  markCssAssetProcessed(output, file);
4897
5377
  recordCssAssetResult?.(file, nextCss);
@@ -4922,10 +5402,15 @@ function createViteCssFinalizerOutputPlugin(context) {
4922
5402
  cssHandlerOptions: generatorCssHandlerOptions,
4923
5403
  cssUserHandlerOptions: generatorCssUserHandlerOptions,
4924
5404
  getSourceCandidatesForEntries,
5405
+ generatorPlatform,
4925
5406
  styleHandler: opts.styleHandler,
4926
5407
  debug
4927
5408
  }) : void 0;
4928
- const nextCss = annotateCss(generated?.css ?? (generatorBranch.isWeb ? finalizeWebCss(rawSource, true, generatorOptions.webCompat) : (await opts.styleHandler(rawSource, cssHandlerOptions)).css));
5409
+ const nextCss = annotateCss(generated?.css ?? (generatorBranch.isWeb ? finalizeWebCss(rawSource, true, generatorOptions.webCompat, {
5410
+ escapeMap: opts.escapeMap,
5411
+ safeSelectors: shouldApplyWebviewSafeSelectors,
5412
+ uniAppXWebPreflightReset: opts.appType === "uni-app-x" && generatorBranch.isWeb
5413
+ }) : (await opts.styleHandler(rawSource, cssHandlerOptions)).css));
4929
5414
  if (generated) {
4930
5415
  registerGeneratorDependencies(this, generated.dependencies);
4931
5416
  debug("css finalizer generated result: %s bytes=%d", file, nextCss.length);
@@ -5074,6 +5559,7 @@ function createViteCssMemory(options) {
5074
5559
  for (const [rememberedKey, remembered] of relatedRememberedEntries) {
5075
5560
  touchMapEntry(rememberedCssSources, rememberedKey, {
5076
5561
  ...remembered,
5562
+ outputFile: entry.outputFile,
5077
5563
  rawSource: entry.rawSource,
5078
5564
  sourceFile: entry.sourceFile
5079
5565
  });
@@ -5623,6 +6109,12 @@ function isViteServeCssRootRequest(id, command) {
5623
6109
  function isViteCssHmrModule(code, id, command) {
5624
6110
  return isViteServeStyleRequest(id, command) && VITE_CSS_HMR_MODULE_RE.test(code) && /[?&](?:direct|vue)(?:&|$)/.test(id);
5625
6111
  }
6112
+ function hasViteServeCssGenerationDirective(code) {
6113
+ return require_v4_engine.hasTailwindRootDirectives(code) || require_v4_engine.hasTailwindSourceDirectives(code, { importFallback: true }) || require_v4_engine.hasTailwindApplyDirective(code);
6114
+ }
6115
+ function hasViteServeCssRootDirective(code) {
6116
+ return require_v4_engine.hasTailwindRootDirectives(code);
6117
+ }
5626
6118
  function createViteServeCssGenerationPlugins(options) {
5627
6119
  return [{
5628
6120
  name: `${require_context.vitePluginName}:generate:serve`,
@@ -5647,7 +6139,8 @@ function createViteServeCssGenerationPlugins(options) {
5647
6139
  if (!options.shouldGenerate() || !isViteCssHmrModule(code, id, options.getCommand())) return;
5648
6140
  const extracted = extractViteCssHmrModuleCss(code);
5649
6141
  if (!extracted) return;
5650
- await options.onTailwindRootCss?.(id, extracted.css);
6142
+ if (!hasViteServeCssGenerationDirective(extracted.css)) return;
6143
+ if (hasViteServeCssRootDirective(extracted.css)) await options.onTailwindRootCss?.(id, extracted.css);
5651
6144
  const generatedCss = await options.generateCss(id, extracted.css, this);
5652
6145
  if (generatedCss === void 0 || generatedCss === extracted.css) return;
5653
6146
  const nextCode = replaceViteCssHmrModuleCss(code, generatedCss);
@@ -5724,6 +6217,15 @@ function sameStringList(first, second) {
5724
6217
  if (!first || !second || first.length !== second.length) return false;
5725
6218
  return first.every((item, index) => item === second[index]);
5726
6219
  }
6220
+ function collectConfiguredCssEntries(options) {
6221
+ const runtimeCssEntries = options.tailwindcssRuntimeOptions?.tailwindcss?.v4?.cssEntries;
6222
+ const entries = [
6223
+ ...Array.isArray(options.cssEntries) ? options.cssEntries : [],
6224
+ ...Array.isArray(options.tailwindcss?.v4?.cssEntries) ? options.tailwindcss.v4.cssEntries : [],
6225
+ ...Array.isArray(runtimeCssEntries) ? runtimeCssEntries : []
6226
+ ].filter((item) => typeof item === "string" && item.length > 0);
6227
+ return entries.length > 0 ? [...new Set(entries)] : void 0;
6228
+ }
5727
6229
  function normalizeViteStylePlatform(value, appType) {
5728
6230
  return require_context.normalizeFrameworkStylePlatform(value, appType);
5729
6231
  }
@@ -5736,6 +6238,13 @@ function inferPlatformFromOutDir(outDir) {
5736
6238
  function isWebOrNativeAppPlatform(platform) {
5737
6239
  return platform === "h5" || platform === "web" || platform?.startsWith("web-") === true || platform === "app" || platform === "app-plus" || platform?.startsWith("app-") === true;
5738
6240
  }
6241
+ function isUniAppViteWebviewStylePlatform(platform) {
6242
+ return platform === "app" || platform === "app-plus";
6243
+ }
6244
+ function applyUniAppViteWebviewCssCompat(css, options) {
6245
+ const compatCss = (0, _weapp_tailwindcss_postcss.transformWebCssCompat)(css, options.compat);
6246
+ return options.safeSelectors ? (0, _weapp_tailwindcss_postcss.transformWebCssSafeSelectors)(compatCss, { escapeMap: options.escapeMap }) : compatCss;
6247
+ }
5739
6248
  /**
5740
6249
  * @name WeappTailwindcss
5741
6250
  * @description uni-app vite / uni-app-x 版本插件
@@ -5744,7 +6253,7 @@ function isWebOrNativeAppPlatform(platform) {
5744
6253
  function WeappTailwindcss(options = {}) {
5745
6254
  const hasExplicitAppType = typeof options.appType === "string" && options.appType.trim().length > 0;
5746
6255
  const hasExplicitTailwindcssBasedir = typeof options.tailwindcssBasedir === "string" && options.tailwindcssBasedir.trim().length > 0;
5747
- const rawCssEntries = Array.isArray(options.cssEntries) ? [...options.cssEntries] : void 0;
6256
+ const rawCssEntries = collectConfiguredCssEntries(options);
5748
6257
  const opts = require_context.getCompilerContext({
5749
6258
  ...options,
5750
6259
  __internalDeferMissingCssEntriesWarning: true
@@ -5767,23 +6276,13 @@ function WeappTailwindcss(options = {}) {
5767
6276
  const initialTailwindRuntime = tailwindRuntime;
5768
6277
  const refreshTailwindRuntime = refreshTailwindcssRuntime;
5769
6278
  const uniAppXEnabled = require_tailwindcss.isUniAppXEnabled(uniAppX);
6279
+ const shouldEnableUniAppXPlugins = opts.appType === "uni-app-x" || uniAppXEnabled;
5770
6280
  const disabledOptions = require_source_candidate_scan_signature.resolvePluginDisabledState(disabled);
5771
6281
  const tailwindcssMajorVersion = initialTailwindRuntime.majorVersion ?? 0;
5772
6282
  if (!disabledOptions.plugin && tailwindcssMajorVersion !== 4) throw new Error("weapp-tailwindcss/vite 新生成管线仅支持 Tailwind CSS v4,请升级 tailwindcss 或停留在旧版 weapp-tailwindcss。");
5773
6283
  const shouldOwnTailwindGeneration = !disabledOptions.plugin;
5774
6284
  const shouldRewriteCssImports = opts.rewriteCssImports === true;
5775
- const generatorOptions = require_generator.normalizeWeappTailwindcssGeneratorOptions(opts.generator, {
5776
- appType: opts.appType,
5777
- platform: opts.cssOptions?.platform ?? opts.platform,
5778
- tailwindcssMajorVersion,
5779
- uniAppX
5780
- });
5781
- const generatorBranch = require_generator.resolveGeneratorRuntimeBranch(generatorOptions, {
5782
- appType: opts.appType,
5783
- platform: opts.cssOptions?.platform ?? opts.platform,
5784
- tailwindcssMajorVersion,
5785
- uniAppX
5786
- });
6285
+ let resolvedConfig;
5787
6286
  const resolveViteStylePlatform = () => {
5788
6287
  const explicit = normalizeViteStylePlatform(opts.cssOptions?.platform ?? opts.platform, opts.appType);
5789
6288
  if (explicit) return explicit;
@@ -5793,9 +6292,23 @@ function WeappTailwindcss(options = {}) {
5793
6292
  }
5794
6293
  return inferPlatformFromOutDir(resolvedConfig?.build?.outDir);
5795
6294
  };
6295
+ const resolveGeneratorPlatform = () => opts.cssOptions?.platform ?? opts.platform ?? resolveViteStylePlatform();
6296
+ const resolveCurrentGeneratorOptions = () => require_generator.normalizeWeappTailwindcssGeneratorOptions(opts.generator, {
6297
+ appType: opts.appType,
6298
+ platform: resolveGeneratorPlatform(),
6299
+ tailwindcssMajorVersion,
6300
+ uniAppX
6301
+ });
6302
+ const resolveCurrentGeneratorBranch = () => require_generator.resolveGeneratorRuntimeBranch(resolveCurrentGeneratorOptions(), {
6303
+ appType: opts.appType,
6304
+ platform: resolveGeneratorPlatform(),
6305
+ tailwindcssMajorVersion,
6306
+ uniAppX
6307
+ });
6308
+ const initialGeneratorBranch = resolveCurrentGeneratorBranch();
5796
6309
  const transformEarlyMiniProgramCss = (code) => {
5797
6310
  const platform = resolveViteStylePlatform();
5798
- if (!shouldOwnTailwindGeneration || (platform ? isWebOrNativeAppPlatform(platform) : generatorBranch.isWeb)) return code;
6311
+ if (!shouldOwnTailwindGeneration || (platform ? isWebOrNativeAppPlatform(platform) : resolveCurrentGeneratorBranch().isWeb)) return code;
5799
6312
  let transformedCode = code;
5800
6313
  if (transformedCode.includes("#if")) transformedCode = (0, _weapp_tailwindcss_postcss.compileCssMacroConditionalComments)(transformedCode, { platform: resolveViteStylePlatform() });
5801
6314
  if (transformedCode.includes("@layer")) transformedCode = (0, _weapp_tailwindcss_postcss.unwrapUnsupportedCascadeLayers)(transformedCode);
@@ -5803,10 +6316,10 @@ function WeappTailwindcss(options = {}) {
5803
6316
  };
5804
6317
  const finalizeViteMiniProgramCss = (css) => {
5805
6318
  const platform = resolveViteStylePlatform();
5806
- if (!shouldOwnTailwindGeneration || (platform ? isWebOrNativeAppPlatform(platform) : generatorBranch.isWeb)) return css;
6319
+ if (!shouldOwnTailwindGeneration || (platform ? isWebOrNativeAppPlatform(platform) : resolveCurrentGeneratorBranch().isWeb)) return css;
5807
6320
  return (0, _weapp_tailwindcss_postcss.unwrapUnsupportedCascadeLayers)(css);
5808
6321
  };
5809
- const shouldInferAppType = !hasExplicitAppType && !generatorBranch.isWeb;
6322
+ const shouldInferAppType = !hasExplicitAppType && !initialGeneratorBranch.isWeb;
5810
6323
  const hasInitialTailwindCssRoots = require_v4_engine.hasConfiguredTailwindV4CssRoots({
5811
6324
  ...options,
5812
6325
  cssEntries: opts.cssEntries ?? options.cssEntries
@@ -5886,7 +6399,6 @@ function WeappTailwindcss(options = {}) {
5886
6399
  await refreshRuntimeStateForAutoCssSources?.(true);
5887
6400
  };
5888
6401
  const customAttributesEntities = require_context.toCustomAttributesEntities(customAttributes);
5889
- let resolvedConfig;
5890
6402
  let recordedGeneratorCandidates;
5891
6403
  const sourceCandidateCollector = require_hmr_timing.createSourceCandidateCollector({ bareArbitraryValues: opts.arbitraryValues?.bareArbitraryValues });
5892
6404
  const sourceCandidateScanCache = new lru_cache.LRUCache({ max: SOURCE_CANDIDATE_SCAN_CACHE_MAX });
@@ -5944,7 +6456,7 @@ function WeappTailwindcss(options = {}) {
5944
6456
  const isWatchLikeBuild = () => isWatchBuild() || resolvedConfig?.command === "serve" || node_process.default.env["WEAPP_TW_WATCH_REGRESSION"] === "1" || node_process.default.env["WEAPP_TW_HMR_TIMING"] === "1";
5945
6457
  const isCurrentWebLikeStylePlatform = () => {
5946
6458
  const platform = resolveViteStylePlatform();
5947
- return platform ? isWebOrNativeAppPlatform(platform) : generatorBranch.isWeb;
6459
+ return platform ? isWebOrNativeAppPlatform(platform) : resolveCurrentGeneratorBranch().isWeb;
5948
6460
  };
5949
6461
  const isNuxtPageMacroHotModule = (id) => {
5950
6462
  if (typeof id !== "string" || !/[?&]macro=true(?:&|$)/.test(id)) return false;
@@ -6164,48 +6676,58 @@ function WeappTailwindcss(options = {}) {
6164
6676
  const file = (0, _weapp_tailwindcss_shared.cleanUrl)(id);
6165
6677
  const requestFile = require_source_candidate_scan_signature.isCSSRequest(id) ? id : file;
6166
6678
  if (!require_source_candidate_scan_signature.isCSSRequest(requestFile) || opts.htmlMatcher(file) || require_source_candidate_scan_signature.isHTMLRequest(file)) return;
6679
+ const generatorCode = require_v4_engine.normalizeEmptyTailwindCustomVariants(code);
6167
6680
  const rootDir = resolvedConfig?.root ? node_path.default.resolve(resolvedConfig.root) : node_process.default.cwd();
6168
6681
  const isHarmonyAppStyleTarget = isHarmonyAppBuildTarget();
6169
- const isNativeAppStyleTarget = require_utils.resolveUniUtsPlatform().isApp || isHarmonyAppStyleTarget;
6682
+ const isNativeAppStyleTarget = opts.appType === "uni-app-x" && (require_utils.resolveUniUtsPlatform().isApp || isHarmonyAppStyleTarget);
6170
6683
  const sourceRoot = resolveWeappViteSourceRoot(resolvedConfig, opts.appType);
6171
- const outputFile = resolveViteCssPipelineOutputFile(requestFile, opts, rootDir, generatorBranch.isWeb, isNativeAppStyleTarget, sourceRoot);
6684
+ const currentGeneratorOptions = resolveCurrentGeneratorOptions();
6685
+ const currentGeneratorBranch = resolveCurrentGeneratorBranch();
6686
+ const outputFile = resolveViteCssPipelineOutputFile(requestFile, opts, rootDir, currentGeneratorBranch.isWeb, isNativeAppStyleTarget, sourceRoot);
6172
6687
  const runtime = getRecordedGeneratorCandidates() ?? getSourceCandidates() ?? await ensureRuntimeClassSet();
6173
6688
  const outputCssHandlerOptions = transformCssHandlerOptions.getCssHandlerOptions(outputFile);
6174
6689
  const cssHandlerOptions = {
6175
6690
  ...transformCssHandlerOptions.getCssHandlerOptions(file),
6176
6691
  isMainChunk: outputCssHandlerOptions.isMainChunk
6177
6692
  };
6178
- const transientCssSource = transientAutoCssSources.get(file) ?? (require_v4_engine.hasTailwindRootDirectives(code, { importFallback: generatorOptions.importFallback }) || require_v4_engine.hasTailwindSourceDirectives(code, { importFallback: generatorOptions.importFallback }) || require_v4_engine.hasTailwindApplyDirective(code) ? {
6693
+ 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) ? {
6179
6694
  base: node_path.default.dirname(node_path.default.resolve(file)),
6180
- css: code,
6695
+ css: generatorCode,
6181
6696
  file: node_path.default.resolve(file)
6182
6697
  } : void 0);
6183
- const shouldDeferEmptyScopedCssSource = transientCssSource == null && !(opts.appType === "uni-app-x" && !cssHandlerOptions.isMainChunk && require_v4_engine.hasTailwindApplyDirective(code));
6698
+ const shouldDeferEmptyScopedCssSource = transientCssSource == null && !(opts.appType === "uni-app-x" && !cssHandlerOptions.isMainChunk && require_v4_engine.hasTailwindApplyDirective(generatorCode));
6184
6699
  const generated = await require_source_candidate_scan_signature.generateTailwindV4Css({
6185
6700
  opts,
6186
6701
  runtimeState,
6187
6702
  runtime,
6188
- rawSource: code,
6703
+ rawSource: generatorCode,
6189
6704
  file,
6190
6705
  outputFile,
6191
6706
  cssHandlerOptions,
6192
6707
  cssUserHandlerOptions: transformCssHandlerOptions.getCssUserHandlerOptions(file),
6193
6708
  cssSources: transientCssSource ? [transientCssSource] : void 0,
6194
6709
  getSourceCandidatesForEntries,
6710
+ generatorPlatform: resolveGeneratorPlatform(),
6195
6711
  styleHandler,
6196
6712
  debug,
6197
6713
  previousCss: viteGeneratedCssByFile.get(file),
6198
6714
  deferEmptyScopedCssSource: shouldDeferEmptyScopedCssSource,
6199
- restoreLocalCssImports: !generatorBranch.isWeb
6715
+ restoreLocalCssImports: !currentGeneratorBranch.isWeb
6200
6716
  });
6201
6717
  if (!generated) return;
6202
- const tracedCss = require_hmr_timing.annotateCssSourceTrace(finalizeViteMiniProgramCss(generated.css), {
6718
+ const finalizedCss = finalizeViteMiniProgramCss(generated.css);
6719
+ const isUniAppViteWebviewPlatform = opts.appType === "uni-app-vite" && isUniAppViteWebviewStylePlatform(resolveViteStylePlatform());
6720
+ const tracedCss = require_hmr_timing.annotateCssSourceTrace(withUniAppXWebPreflightReset(removeScopedTailwindPreflightCss(currentGeneratorBranch.isWeb || isUniAppViteWebviewPlatform ? applyUniAppViteWebviewCssCompat(finalizedCss, {
6721
+ compat: currentGeneratorOptions.webCompat ?? true,
6722
+ escapeMap: opts.escapeMap,
6723
+ safeSelectors: isUniAppViteWebviewPlatform
6724
+ }) : finalizedCss), opts.appType === "uni-app-x" && currentGeneratorBranch.isWeb), {
6203
6725
  opts,
6204
6726
  tokenSources: require_hmr_timing.createCssTokenSourceMap(getSourceCandidateSourcesForEntries(void 0), opts)
6205
6727
  });
6206
6728
  for (const dependency of generated.dependencies) hookContext?.addWatchFile?.(dependency);
6207
6729
  viteGeneratedCssByFile.set(file, tracedCss);
6208
- const shouldInjectGeneratedCssIntoMain = mainCssChunkMatcher(outputFile, opts.appType) || require_v4_engine.hasTailwindRootDirectives(code, { importFallback: generatorOptions.importFallback }) && !require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile).includes("/");
6730
+ const shouldInjectGeneratedCssIntoMain = mainCssChunkMatcher(outputFile, opts.appType) || require_v4_engine.hasTailwindRootDirectives(generatorCode, { importFallback: currentGeneratorOptions.importFallback }) && !require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile).includes("/");
6209
6731
  recordViteProcessedCssAssetResult(file, tracedCss, {
6210
6732
  injectIntoMain: shouldInjectGeneratedCssIntoMain,
6211
6733
  outputFile
@@ -6237,7 +6759,7 @@ function WeappTailwindcss(options = {}) {
6237
6759
  onTailwindRootCss: (id, code) => registerAutoCssSource(id, code),
6238
6760
  onCssSourceTransform: (id, code) => cssMemory.refreshRememberedCssSourceBySourceFile(id, code),
6239
6761
  shouldGenerateCss: (_id, code) => hasVitePipelineTailwindGenerationDirective(code),
6240
- shouldDeferGeneration: (_id, code) => !shouldRewriteCssImports && require_v4_engine.hasTailwindRootDirectives(code, { importFallback: generatorOptions.importFallback }),
6762
+ shouldDeferGeneration: (_id, code) => !shouldRewriteCssImports && require_v4_engine.hasTailwindRootDirectives(code, { importFallback: resolveCurrentGeneratorOptions().importFallback }),
6241
6763
  shouldOwnTailwindGeneration,
6242
6764
  shouldRewrite: shouldRewriteCssImports,
6243
6765
  weappTailwindcssDirPosix
@@ -6304,7 +6826,7 @@ function WeappTailwindcss(options = {}) {
6304
6826
  if (shouldDiscoverAutoCssSources()) await discoverAndRegisterAutoCssSources();
6305
6827
  await syncSourceCandidateScan();
6306
6828
  };
6307
- const uniAppXPlugins = uniAppXEnabled ? createUniAppXPlugins({
6829
+ const uniAppXPlugins = shouldEnableUniAppXPlugins ? createUniAppXPlugins({
6308
6830
  appType: opts.appType ?? "uni-app-x",
6309
6831
  customAttributesEntities,
6310
6832
  disabledDefaultTemplateHandler,
@@ -6336,7 +6858,7 @@ function WeappTailwindcss(options = {}) {
6336
6858
  order: "pre",
6337
6859
  async handler(code, id) {
6338
6860
  let transformedCode = code;
6339
- if (shouldOwnTailwindGeneration && !generatorBranch.isWeb && require_source_candidate_scan_signature.isCSSRequest(id)) transformedCode = transformEarlyMiniProgramCss(code);
6861
+ if (shouldOwnTailwindGeneration && !resolveCurrentGeneratorBranch().isWeb && require_source_candidate_scan_signature.isCSSRequest(id)) transformedCode = transformEarlyMiniProgramCss(code);
6340
6862
  const shouldReturnTransformedCode = transformedCode !== code;
6341
6863
  if (shouldOwnTailwindGeneration) cssMemory.rememberKnownSfcSource(id, transformedCode);
6342
6864
  if (!shouldOwnTailwindGeneration || !require_hmr_timing.isSourceCandidateRequest(id) || !shouldCollectTransformedSourceCandidates(id)) {
@@ -6416,10 +6938,10 @@ function WeappTailwindcss(options = {}) {
6416
6938
  shouldGenerate: () => shouldOwnTailwindGeneration
6417
6939
  }),
6418
6940
  createViteServeJsTransformPlugin({
6419
- createHandlerOptions: serveJsHandlerOptions,
6941
+ createHandlerOptions: (file) => serveJsHandlerOptions(file, opts.appType === "uni-app-vite" && isUniAppViteWebviewStylePlatform(resolveViteStylePlatform()) ? { needEscaped: true } : void 0),
6420
6942
  getCommand: () => resolvedConfig?.command,
6421
6943
  jsHandler,
6422
- shouldTransform: () => shouldOwnTailwindGeneration && !generatorBranch.isWeb,
6944
+ shouldTransform: () => shouldOwnTailwindGeneration && (!resolveCurrentGeneratorBranch().isWeb || opts.appType === "uni-app-vite" && isUniAppViteWebviewStylePlatform(resolveViteStylePlatform())),
6423
6945
  transformRuntime: ensureRuntimeClassSet
6424
6946
  }),
6425
6947
  {