weapp-tailwindcss 5.5.4 → 5.5.6

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 (134) hide show
  1. package/dist/bundlers/gulp/shared/create-native-framework-plugins/file-transforms.d.ts +5 -4
  2. package/dist/bundlers/shared/final-css-cleanup.d.ts +1 -2
  3. package/dist/bundlers/shared/framework-css-composition.d.ts +1 -0
  4. package/dist/bundlers/shared/framework-postcss.d.ts +2 -1
  5. package/dist/bundlers/shared/framework-user-css.d.ts +1 -0
  6. package/dist/bundlers/shared/generated-css-marker.d.ts +1 -0
  7. package/dist/bundlers/shared/generator-css/generation-helpers/results.d.ts +5 -7
  8. package/dist/bundlers/shared/generator-css/legacy-compat.d.ts +4 -1
  9. package/dist/bundlers/shared/generator-css/legacy-selectors.d.ts +1 -4
  10. package/dist/bundlers/shared/generator-css/legacy-units.d.ts +1 -1
  11. package/dist/bundlers/shared/generator-css/pipeline/context.d.ts +4 -2
  12. package/dist/bundlers/shared/generator-css/source-resolver/apply-reference.d.ts +1 -1
  13. package/dist/bundlers/shared/generator-css/types.d.ts +6 -3
  14. package/dist/bundlers/shared/generator-css/user-css/apply-only.d.ts +1 -0
  15. package/dist/bundlers/shared/generator-css/user-css/compile-functions.d.ts +4 -0
  16. package/dist/bundlers/shared/generator-css/user-css/generated-cleanup.d.ts +3 -1
  17. package/dist/bundlers/shared/generator-css/user-css/source-fragments.d.ts +1 -1
  18. package/dist/bundlers/shared/generator-css/user-css/transform.d.ts +3 -0
  19. package/dist/bundlers/shared/style-handler-options.d.ts +7 -0
  20. package/dist/bundlers/shared/v4-generation-core.d.ts +0 -1
  21. package/dist/bundlers/vite/css-finalizer/css-calc.d.ts +3 -0
  22. package/dist/bundlers/vite/css-finalizer/final-assets.d.ts +3 -0
  23. package/dist/bundlers/vite/css-handler-options.d.ts +1 -1
  24. package/dist/bundlers/vite/frameworks/generic/web.d.ts +2 -1
  25. package/dist/bundlers/vite/generate-bundle/css-transform-decision-plan.d.ts +1 -0
  26. package/dist/bundlers/vite/generate-bundle/finalize/sync-processed-css.d.ts +4 -0
  27. package/dist/bundlers/vite/generate-bundle/framework-style-memory.d.ts +4 -0
  28. package/dist/bundlers/vite/generate-bundle/js-handler-options.d.ts +7 -0
  29. package/dist/bundlers/vite/generate-bundle/remembered-css.d.ts +1 -0
  30. package/dist/bundlers/vite/generate-bundle/rollup-assets.d.ts +1 -1
  31. package/dist/bundlers/vite/generate-bundle/runtime.d.ts +3 -1
  32. package/dist/bundlers/vite/generate-bundle/sfc-style-source.d.ts +1 -1
  33. package/dist/bundlers/vite/generate-bundle/temporary-css-assets.d.ts +2 -2
  34. package/dist/bundlers/vite/generate-bundle/types.d.ts +1 -1
  35. package/dist/bundlers/vite/generate-bundle/web-css-module.d.ts +1 -0
  36. package/dist/bundlers/vite/plugin-hook.d.ts +3 -0
  37. package/dist/bundlers/vite/processed-css-assets/coverage.d.ts +3 -1
  38. package/dist/bundlers/vite/processed-css-assets/markers-imports.d.ts +1 -1
  39. package/dist/bundlers/vite/processed-css-assets/scoped-tailwind-noise.d.ts +1 -1
  40. package/dist/bundlers/vite/shared/create-framework-plugins-runtime.d.ts +3 -1
  41. package/dist/bundlers/vite/shared/framework-module-candidates.d.ts +2 -1
  42. package/dist/bundlers/vite/shared/framework-runtime-configuration.d.ts +3 -0
  43. package/dist/bundlers/vite/shared/framework-runtime-options.d.ts +9 -0
  44. package/dist/bundlers/vite/shared/framework-runtime-utils.d.ts +6 -5
  45. package/dist/bundlers/vite/shared/framework-source-scan-session.d.ts +3 -3
  46. package/dist/bundlers/vite/shared/framework-strategy.d.ts +3 -1
  47. package/dist/bundlers/vite/shared/hmr-source.d.ts +2 -0
  48. package/dist/bundlers/webpack/BaseUnifiedPlugin/v5-assets/processed-css-task.d.ts +2 -1
  49. package/dist/bundlers/webpack/BaseUnifiedPlugin/v5.d.ts +1 -1
  50. package/dist/bundlers/webpack/shared/create-framework-plugin/plugin.d.ts +1 -1
  51. package/dist/compiler/index.d.ts +2 -0
  52. package/dist/compiler/semantic-css.d.ts +1 -1
  53. package/dist/compiler/types.d.ts +1 -1
  54. package/dist/{compiler-DFROuh5Z.cjs → compiler-C8FqI-P3.cjs} +1060 -1163
  55. package/dist/{compiler-CJ5yX-on.js → compiler-D3GBwxoa.js} +32 -23
  56. package/dist/core/compiler/transforms.d.ts +1 -1
  57. package/dist/core.cjs +4 -4
  58. package/dist/core.js +4 -4
  59. package/dist/{css-imports-_5cwJnx-.cjs → css-imports-XvtI1zCY.cjs} +2 -3
  60. package/dist/css-macro.cjs +1 -1
  61. package/dist/css-macro.js +1 -1
  62. package/dist/{defaults-CKx-4LcW.js → defaults-AQuvJS-h.js} +4 -2
  63. package/dist/{defaults-CiGsr8Xq.cjs → defaults-CyX5iO9y.cjs} +4 -2
  64. package/dist/defaults.cjs +1 -1
  65. package/dist/defaults.js +1 -1
  66. package/dist/final-css-cleanup-CDTmVAye.cjs +1 -0
  67. package/dist/{final-css-cleanup-B0HUBtiE.js → final-css-cleanup-u_sI2p56.js} +1 -126
  68. package/dist/framework/index.d.ts +1 -1
  69. package/dist/framework/platform.d.ts +2 -2
  70. package/dist/{generator-RK2HtgOb.cjs → generator-Bvr4WmuF.cjs} +150 -150
  71. package/dist/{generator-BgbYHNgD.js → generator-C0BJjyLM.js} +131 -131
  72. package/dist/generator.cjs +1 -1
  73. package/dist/generator.js +1 -1
  74. package/dist/{gulp-BS7fTmyj.cjs → gulp-BExe5RBF.cjs} +8 -8
  75. package/dist/{gulp-nl-2p5Dw.js → gulp-BhkIIk7J.js} +5 -5
  76. package/dist/gulp.cjs +1 -1
  77. package/dist/gulp.js +1 -1
  78. package/dist/{hmr-timing-BfxWwMeT.js → hmr-timing-B9Yt86-U.js} +299 -404
  79. package/dist/{hmr-timing-D45cTIzM.cjs → hmr-timing-CoiJIqDu.cjs} +4 -4
  80. package/dist/index.cjs +4 -4
  81. package/dist/index.js +4 -4
  82. package/dist/js/NodePathWalker.d.ts +1 -1
  83. package/dist/js/node-path-walker/export-handlers.d.ts +1 -1
  84. package/dist/js/node-path-walker/import-tokens.d.ts +1 -1
  85. package/dist/{pipeline-helpers-BEhISt4D.cjs → pipeline-helpers-BOjTEmMi.cjs} +6 -6
  86. package/dist/postcss.cjs +1 -1
  87. package/dist/postcss.js +1 -1
  88. package/dist/presets.cjs +2 -2
  89. package/dist/presets.js +2 -2
  90. package/dist/rspack.cjs +2 -2
  91. package/dist/rspack.js +2 -2
  92. package/dist/{scoped-generator-Dqq2iLky.js → scoped-generator-B6Y1bxzM.js} +46 -31
  93. package/dist/{scoped-generator-DccPwmJT.cjs → scoped-generator-BUBls_oM.cjs} +46 -31
  94. package/dist/{source-candidate-scan-signature-CnUlGWhP.cjs → source-candidate-scan-signature-BtJZp28T.cjs} +32 -3
  95. package/dist/{source-candidate-scan-signature-BJkQJtRM.js → source-candidate-scan-signature-DNuGKTqf.js} +21 -4
  96. package/dist/style-injector/internal.d.ts +118 -8
  97. package/dist/style-injector/options.d.ts +5 -1
  98. package/dist/tailwindcss/runtime-options.d.ts +5 -0
  99. package/dist/tailwindcss/v4/preflight.d.ts +0 -1
  100. package/dist/tailwindcss/v4-engine/generator/incremental-cache.d.ts +1 -0
  101. package/dist/tailwindcss/v4-engine/generator/style-context.d.ts +4 -0
  102. package/dist/{tailwindcss-o3Xe-o7M.js → tailwindcss-B_4E52WF.js} +7 -13
  103. package/dist/{tailwindcss-B03BGeTO.cjs → tailwindcss-CBYjzRmV.cjs} +4 -10
  104. package/dist/{transform-BVH7iLHn.js → transform-CkEnJYIP.js} +18 -12
  105. package/dist/{transform-MIhriZRr.cjs → transform-FkqbTBJR.cjs} +17 -11
  106. package/dist/types/index.d.ts +3 -2
  107. package/dist/uni-app-x/border-preflight.d.ts +1 -2
  108. package/dist/uni-app-x/component-local-style.d.ts +2 -1
  109. package/dist/uni-app-x/transform.d.ts +4 -2
  110. package/dist/uni-app-x/vite/author-apply.d.ts +3 -1
  111. package/dist/uni-app-x/vite/native-hmr.d.ts +1 -1
  112. package/dist/uni-app-x/vite/style-result.d.ts +5 -0
  113. package/dist/{v4-generation-core-BvW2aK23.cjs → v4-generation-core-Cz1D7wm1.cjs} +313 -418
  114. package/dist/vite/web.cjs +1 -1
  115. package/dist/vite/web.js +1 -1
  116. package/dist/{vite-4RznbXVI.cjs → vite-DxuKPZlp.cjs} +565 -592
  117. package/dist/{vite-hGECCqfq.js → vite-lP35OguX.js} +558 -578
  118. package/dist/vite-web.d.ts +1 -1
  119. package/dist/vite.cjs +1 -1
  120. package/dist/vite.js +1 -1
  121. package/dist/weapp-tw-css-generation-loader.cjs +2 -2
  122. package/dist/weapp-tw-css-import-rewrite-loader.cjs +7 -7
  123. package/dist/{web-0FAisq6H.js → web-Dfz_jpNj.js} +144 -107
  124. package/dist/{web-DQZ27KWH.cjs → web-DhDxhlkq.cjs} +156 -107
  125. package/dist/{webpack-8cQlXIo4.js → webpack-D6jp1o3m.js} +18 -17
  126. package/dist/{webpack-DOQ_3ViW.cjs → webpack-R2Sbggiy.cjs} +20 -20
  127. package/dist/webpack.cjs +1 -1
  128. package/dist/webpack.js +1 -1
  129. package/dist/wxml/utils/codegen/legacy-visitor.d.ts +2 -2
  130. package/dist/wxml/utils/custom-template.d.ts +1 -1
  131. package/package.json +9 -11
  132. package/dist/final-css-cleanup-DSjczga3.cjs +0 -138
  133. package/dist/tailwindcss/v4-engine/css-import.d.ts +0 -14
  134. package/dist/uni-app-x/style-asset/source-parser.d.ts +0 -2
@@ -12,7 +12,6 @@ let _tailwindcss_mangle_engine = require("@tailwindcss-mangle/engine");
12
12
  let _weapp_tailwindcss_postcss = require("@weapp-tailwindcss/postcss");
13
13
  let lru_cache = require("lru-cache");
14
14
  let node_module = require("node:module");
15
- let _csstools_css_tokenizer = require("@csstools/css-tokenizer");
16
15
  let node_fs_promises = require("node:fs/promises");
17
16
  let micromatch = require("micromatch");
18
17
  micromatch = require_rolldown_runtime.__toESM(micromatch, 1);
@@ -321,7 +320,7 @@ async function transformTailwindV4CssToWeapp(css, options) {
321
320
  ...options
322
321
  });
323
322
  const pruneOptions = {
324
- preserveContentInit: options?.uniAppX === true && options.uniAppXCssTarget === "uvue" ? false : void 0,
323
+ ...options?.uniAppX === true && options.uniAppXCssTarget === "uvue" ? { preserveContentInit: false } : {},
325
324
  preservePreflight: true,
326
325
  preserveConditionalComments: (0, _weapp_tailwindcss_postcss.hasCssMacroStyleOptions)(options)
327
326
  };
@@ -339,48 +338,8 @@ function transformTailwindV4WebRpxCss(css) {
339
338
  async function transformTailwindV4CssByTarget(css, target, options) {
340
339
  if (target === "weapp") return transformTailwindV4CssToWeapp(css, options);
341
340
  const resolvedWebCss = await ((0, _weapp_tailwindcss_postcss.hasCssMacroStyleOptions)(options) ? (0, _weapp_tailwindcss_postcss.transformCssMacroCss)(css, options) : css);
342
- return shouldUseUniAppWebRpxCompatibility(options?.appType) ? transformTailwindV4WebRpxCss(resolvedWebCss) : resolvedWebCss;
343
- }
344
- //#endregion
345
- //#region src/tailwindcss/v4-engine/css-import.ts
346
- function parseCssImportSpecifier(params) {
347
- const tokens = (0, _csstools_css_tokenizer.tokenize)({ css: params }).filter((token) => token[0] !== _csstools_css_tokenizer.TokenType.Whitespace && token[0] !== _csstools_css_tokenizer.TokenType.Comment);
348
- const first = tokens[0];
349
- if (!first) return;
350
- if (first[0] === _csstools_css_tokenizer.TokenType.String || first[0] === _csstools_css_tokenizer.TokenType.URL) return {
351
- specifier: first[4].value,
352
- raw: first[1],
353
- quote: first[0] === _csstools_css_tokenizer.TokenType.String ? first[1][0] : void 0
354
- };
355
- if (first[0] === _csstools_css_tokenizer.TokenType.Function && first[4].value.toLowerCase() === "url" && tokens[1]?.[0] === _csstools_css_tokenizer.TokenType.String && tokens[2]?.[0] === _csstools_css_tokenizer.TokenType.CloseParen) return {
356
- specifier: tokens[1][4].value,
357
- raw: params.slice(first[2], tokens[2][3] + 1),
358
- quote: tokens[1][1][0]
359
- };
360
- }
361
- function quoteCssImportSpecifier(file, quote = "\"") {
362
- return `${quote}${(node_path.default.sep === "\\" || /^[a-z]:[\\/]|^\\\\/i.test(file) ? file.replaceAll("\\", "/") : file).replaceAll("\\", "\\\\").replaceAll(quote, `\\${quote}`).replaceAll("\n", "\\a ").replaceAll("\r", "\\d ")}${quote}`;
363
- }
364
- function isTailwindCssImport(params) {
365
- const specifier = parseCssImportSpecifier(params)?.specifier;
366
- if (!specifier) return false;
367
- if (specifier === "tailwindcss" || specifier.startsWith("tailwindcss/")) return true;
368
- const paths = specifier.includes("\\") ? node_path.default.win32 : node_path.default.posix;
369
- return paths.basename(specifier) === "index.css" && paths.basename(paths.dirname(specifier)) === "tailwindcss";
370
- }
371
- function parseImportSourceParam(params) {
372
- const tokens = (0, _csstools_css_tokenizer.tokenize)({ css: params }).filter((token) => token[0] !== _csstools_css_tokenizer.TokenType.Whitespace && token[0] !== _csstools_css_tokenizer.TokenType.Comment);
373
- const index = tokens.findIndex((token) => token[0] === _csstools_css_tokenizer.TokenType.Function && token[4].value === "source");
374
- const value = tokens[index + 1];
375
- if (index < 0 || tokens[index + 2]?.[0] !== _csstools_css_tokenizer.TokenType.CloseParen) return;
376
- if (value?.[0] === _csstools_css_tokenizer.TokenType.Ident && value[4].value === "none") return {
377
- none: true,
378
- sourcePath: void 0
379
- };
380
- return value?.[0] === _csstools_css_tokenizer.TokenType.String ? {
381
- none: false,
382
- sourcePath: value[4].value
383
- } : void 0;
341
+ const calculatedWebCss = await (0, _weapp_tailwindcss_postcss.applyConfiguredCssCalc)(resolvedWebCss, options ?? {});
342
+ return shouldUseUniAppWebRpxCompatibility(options?.appType) ? transformTailwindV4WebRpxCss(calculatedWebCss) : calculatedWebCss;
384
343
  }
385
344
  //#endregion
386
345
  //#region src/tailwindcss/v4-engine/tailwind-v4-default-colors.ts
@@ -772,7 +731,7 @@ function resolveTailwindV4ThemeCssFromImport(css) {
772
731
  let resolved;
773
732
  root.walkAtRules("import", (rule) => {
774
733
  if (resolved) return;
775
- const specifier = parseCssImportSpecifier(rule.params)?.specifier;
734
+ const specifier = (0, _weapp_tailwindcss_postcss.parseCssImportSpecifier)(rule.params)?.specifier;
776
735
  if (!specifier || !node_path.default.isAbsolute(specifier) || node_path.default.basename(specifier) !== "index.css") return;
777
736
  const themeCss = node_path.default.join(node_path.default.dirname(specifier), "theme.css");
778
737
  if ((0, node_fs.existsSync)(themeCss)) resolved = themeCss;
@@ -804,58 +763,10 @@ function applyMiniProgramTailwindV4DefaultColorCss(css, source) {
804
763
  if (insertionIndex === 0) return `${themeCss}\n${css}`;
805
764
  return `${css.slice(0, insertionIndex)}\n${themeCss}\n${css.slice(insertionIndex)}`;
806
765
  }
807
- function isTailwindCssPreflightImport(params) {
808
- const specifier = parseCssImportSpecifier(params)?.specifier;
809
- return specifier === "tailwindcss/preflight.css" || specifier === "tailwindcss/preflight";
810
- }
811
- function removeTailwindV4PreflightImports(css) {
812
- if (!css.includes("preflight")) return css;
813
- let root;
814
- try {
815
- root = _weapp_tailwindcss_postcss.postcss.parse(css);
816
- } catch {
817
- return css;
818
- }
819
- let changed = false;
820
- root.walkAtRules("import", (rule) => {
821
- if (isTailwindCssPreflightImport(rule.params)) {
822
- rule.remove();
823
- changed = true;
824
- }
825
- });
826
- return changed ? root.toString() : css;
827
- }
828
- function hasThemeParent(rule) {
829
- let parent = rule.parent;
830
- while (parent) {
831
- if (parent.type === "atrule" && parent.name === "theme") return true;
832
- parent = parent.parent;
833
- }
834
- return false;
835
- }
836
- function isVendorPrefixedKeyframes(rule) {
837
- return rule.name.startsWith("-") && rule.name.endsWith("keyframes");
838
- }
839
- function removeUnsupportedThemeVendorKeyframes(css) {
840
- if (!css.includes("@theme") || !css.includes("@-")) return css;
841
- let root;
842
- try {
843
- root = _weapp_tailwindcss_postcss.postcss.parse(css);
844
- } catch {
845
- return css;
846
- }
847
- let changed = false;
848
- root.walkAtRules((rule) => {
849
- if (isVendorPrefixedKeyframes(rule) && hasThemeParent(rule)) {
850
- rule.remove();
851
- changed = true;
852
- }
853
- });
854
- return changed ? root.toString() : css;
855
- }
856
766
  function createCompatibleSource(source, target) {
857
- const filteredSourceCss = target === "weapp" ? removeTailwindV4PreflightImports(source.css) : source.css;
858
- const compatibleSourceCss = removeUnsupportedThemeVendorKeyframes(target === "weapp" ? applyMiniProgramTailwindV4DefaultColorCss(filteredSourceCss, source) : filteredSourceCss);
767
+ const filteredSourceCss = target === "weapp" ? (0, _weapp_tailwindcss_postcss.removeTailwindV4PreflightImports)(source.css) : source.css;
768
+ const sourceCss = target === "weapp" ? applyMiniProgramTailwindV4DefaultColorCss(filteredSourceCss, source) : filteredSourceCss;
769
+ const compatibleSourceCss = (0, _weapp_tailwindcss_postcss.removeUnsupportedThemeVendorKeyframes)(sourceCss);
859
770
  return compatibleSourceCss === source.css ? source : {
860
771
  ...source,
861
772
  css: compatibleSourceCss
@@ -1273,7 +1184,7 @@ async function resolveCssDefinedScanSources(source) {
1273
1184
  const definitions = [{
1274
1185
  css: source.css,
1275
1186
  base: source.base,
1276
- from: source.dependencies[0]
1187
+ ...source.dependencies[0] === void 0 ? {} : { from: source.dependencies[0] }
1277
1188
  }];
1278
1189
  for (const dependency of source.dependencies.slice(1)) {
1279
1190
  if (!(0, node_fs.existsSync)(dependency)) continue;
@@ -1293,28 +1204,22 @@ async function resolveCssDefinedScanSources(source) {
1293
1204
  continue;
1294
1205
  }
1295
1206
  root.walkAtRules((rule) => {
1296
- if (rule.name !== "import" || !isTailwindCssImport(rule.params)) return;
1207
+ if (rule.name !== "import" || !(0, _weapp_tailwindcss_postcss.isTailwindCssImport)(rule.params)) return;
1297
1208
  hasTailwindImport = true;
1298
- const sourceParam = parseImportSourceParam(rule.params);
1209
+ const sourceParam = (0, _weapp_tailwindcss_postcss.parseImportSourceParam)(rule.params);
1299
1210
  if (sourceParam?.none) hasSourceNone = true;
1300
1211
  if (sourceParam?.sourcePath) importSourceBase = resolveSourceBase(definition.base, sourceParam.sourcePath);
1301
1212
  });
1302
1213
  sourcePatterns.push(...await resolveCssSourceEntries(root, definition.base, "**/*"));
1303
1214
  }
1304
- if (!importSourceBase) {
1305
- if (sourcePatterns.length > 0) return [...normalizeCssDefinedScanSources(source.base, sourcePatterns), ...createDefaultIgnoredScanSources(source.base)];
1306
- if (hasSourceNone) return false;
1307
- if (hasTailwindImport) {
1308
- const defaultBase = resolveDefaultSourceBase(source);
1309
- return [await resolveTailwindSourceEntry(".", defaultBase, false, "**/*"), ...createDefaultIgnoredScanSources(defaultBase)];
1310
- }
1311
- return;
1312
- }
1313
- return [
1314
- await resolveTailwindSourceEntry(".", importSourceBase, false, "**/*"),
1315
- ...sourcePatterns,
1316
- ...createDefaultIgnoredScanSources(importSourceBase)
1317
- ];
1215
+ let entries;
1216
+ if (importSourceBase) entries = [await resolveTailwindSourceEntry(".", importSourceBase, false, "**/*"), ...sourcePatterns];
1217
+ else if (sourcePatterns.length > 0) entries = normalizeCssDefinedScanSources(source.base, sourcePatterns);
1218
+ else if (hasSourceNone) return false;
1219
+ else if (hasTailwindImport) entries = [await resolveTailwindSourceEntry(".", resolveDefaultSourceBase(source), false, "**/*")];
1220
+ else return;
1221
+ const scanBases = /* @__PURE__ */ new Set([importSourceBase ?? (sourcePatterns.length > 0 ? source.base : resolveDefaultSourceBase(source)), ...entries.filter((entry) => !entry.negated).map((entry) => entry.base)]);
1222
+ return [...entries, ...[...scanBases].flatMap((base) => createDefaultIgnoredScanSources(base))];
1318
1223
  }
1319
1224
  async function resolveScanSources(source, scanSources) {
1320
1225
  if (scanSources !== true) return scanSources;
@@ -1324,8 +1229,8 @@ function resolveCompiledSourceRoot(source) {
1324
1229
  let root = null;
1325
1230
  try {
1326
1231
  _weapp_tailwindcss_postcss.postcss.parse(source.css).walkAtRules("import", (rule) => {
1327
- if (!isTailwindCssImport(rule.params)) return;
1328
- const sourceParam = parseImportSourceParam(rule.params);
1232
+ if (!(0, _weapp_tailwindcss_postcss.isTailwindCssImport)(rule.params)) return;
1233
+ const sourceParam = (0, _weapp_tailwindcss_postcss.parseImportSourceParam)(rule.params);
1329
1234
  if (sourceParam?.none) {
1330
1235
  root = "none";
1331
1236
  return false;
@@ -1342,6 +1247,20 @@ function resolveCompiledSourceRoot(source) {
1342
1247
  return root;
1343
1248
  }
1344
1249
  //#endregion
1250
+ //#region src/tailwindcss/v4-engine/generator/style-context.ts
1251
+ function resolveGenerationStyleContext(sourceCss, generatedCss, options) {
1252
+ const calc = options?.cssOptions?.cssCalc ?? options?.cssCalc;
1253
+ const include = Array.isArray(calc) ? calc : calc && typeof calc === "object" ? calc.includeCustomProperties : void 0;
1254
+ if (calc !== true && !include?.length) return options;
1255
+ const customPropertyValues = collectCustomPropertyValues(sourceCss);
1256
+ mergeCustomPropertyValues(customPropertyValues, generatedCss);
1257
+ for (const [name, value] of options?.customPropertyValues ?? []) customPropertyValues.set(name, value);
1258
+ return {
1259
+ ...options,
1260
+ customPropertyValues
1261
+ };
1262
+ }
1263
+ //#endregion
1345
1264
  //#region src/tailwindcss/v4-engine/generator/engine.ts
1346
1265
  function isCssSyntaxError(error) {
1347
1266
  return error instanceof Error && error.name === "CssSyntaxError";
@@ -1388,7 +1307,7 @@ function createTailwindV4Engine(source) {
1388
1307
  }
1389
1308
  const sources = Array.isArray(resolvedScanSources) ? resolvedScanSources : [];
1390
1309
  const rawCss = restoreRpxLengthCssSelectors(generatedCss, normalizedCandidates.restoreCandidates);
1391
- const css = await transformTailwindV4CssByTarget(rawCss, target, resolvedStyleOptions);
1310
+ const css = await transformTailwindV4CssByTarget(rawCss, target, resolveGenerationStyleContext(compatibleSource.css, rawCss, resolvedStyleOptions));
1392
1311
  return {
1393
1312
  classSet: restoreRpxLengthCandidates(classSet, normalizedCandidates.restoreCandidates),
1394
1313
  rawCandidates: restoreRpxLengthCandidates(rawCandidates, normalizedCandidates.restoreCandidates),
@@ -2058,8 +1977,7 @@ function createCssNodeSignature(node) {
2058
1977
  node.selector,
2059
1978
  node.nodes?.map(createCssNodeSignature) ?? null
2060
1979
  ]);
2061
- if (node.type === "comment") return JSON.stringify(["comment", node.text]);
2062
- return node.toString();
1980
+ return JSON.stringify(["comment", node.text]);
2063
1981
  }
2064
1982
  function createRuleBodySignature(rule) {
2065
1983
  return JSON.stringify(rule.nodes?.map(createCssNodeSignature) ?? []);
@@ -2067,7 +1985,7 @@ function createRuleBodySignature(rule) {
2067
1985
  function createRuleAtRuleContextSignature(rule) {
2068
1986
  const context = [];
2069
1987
  let parent = rule.parent;
2070
- while (parent && parent.type !== "root" && parent.type !== "document") {
1988
+ while (parent && parent.type !== "root") {
2071
1989
  if (parent.type === "atrule") context.unshift(JSON.stringify([parent.name, parent.params]));
2072
1990
  parent = parent.parent;
2073
1991
  }
@@ -2261,6 +2179,7 @@ function filterApplyOnlyGeneratedCss(css, source, options = {}) {
2261
2179
  });
2262
2180
  });
2263
2181
  const isVariableRule = rule.nodes?.some((node) => node.type === "decl" && node.prop.startsWith("--"));
2182
+ if (options.preserveRuntimeProperties && (0, _weapp_tailwindcss_postcss.isTailwindRuntimePropertyRule)(rule)) return;
2264
2183
  if (!isApplySelector && (!preserveVariables || !isVariableRule)) rule.remove();
2265
2184
  });
2266
2185
  root.walkAtRules((rule) => {
@@ -2343,9 +2262,38 @@ function isTailwindGeneratedThemeScopeSelector(selector) {
2343
2262
  if (!selectors.every((item) => TAILWIND_GENERATED_THEME_SCOPE_SELECTORS.has(item))) return false;
2344
2263
  return selectorSet.size === 2 && selectorSet.has(":root") && selectorSet.has(":host") || selectorSet.size === 4 && selectorSet.has(":host") && selectorSet.has("page") && selectorSet.has(".tw-root") && selectorSet.has("wx-root-portal-content");
2345
2264
  }
2346
- function isTailwindGeneratedThemeRule(selector, node) {
2347
- if (!isTailwindGeneratedThemeScopeSelector(selector)) return false;
2348
- return node.nodes?.some((child) => child.type === "decl" && /^--(?:color|spacing|text|font|default|radius|tw-)/.test(child.prop)) ?? false;
2265
+ function themeDeclarationContext(declaration) {
2266
+ const context = [];
2267
+ let parent = declaration.parent?.parent;
2268
+ while (parent && parent.type !== "root") {
2269
+ if (parent.type === "atrule" && parent.name !== "layer") context.unshift(`@${parent.name} ${parent.params}`);
2270
+ parent = parent.parent;
2271
+ }
2272
+ return context;
2273
+ }
2274
+ function themeDeclarationKey(declaration) {
2275
+ const value = declaration.value.trim().replace(/^(-?)0\.(\d+(?:[a-z]+|%)?)$/i, "$1.$2");
2276
+ return JSON.stringify([
2277
+ themeDeclarationContext(declaration),
2278
+ declaration.prop,
2279
+ value,
2280
+ Boolean(declaration.important)
2281
+ ]);
2282
+ }
2283
+ function collectGeneratedThemeDeclarations(source) {
2284
+ const declarations = /* @__PURE__ */ new Set();
2285
+ try {
2286
+ _weapp_tailwindcss_postcss.postcss.parse(source).walkRules((rule) => {
2287
+ if (!isTailwindGeneratedThemeScopeSelector(rule.selector.replace(/\s+/g, " ").replace(/\s*,\s*/g, ",").trim())) return;
2288
+ for (const child of rule.nodes ?? []) if (child.type === "decl") declarations.add(themeDeclarationKey(child));
2289
+ });
2290
+ } catch {}
2291
+ return declarations;
2292
+ }
2293
+ /** 同一轮框架恢复共享声明索引;只有遇到根变量时才解析生成产物。 */
2294
+ function createGeneratedThemeDeclarationResolver(source) {
2295
+ let declarations;
2296
+ return () => declarations ?? (declarations = collectGeneratedThemeDeclarations(source));
2349
2297
  }
2350
2298
  function isTailwindGeneratedPreflightRule(selector, node) {
2351
2299
  if (selector === "view,text,::after,::before" || selector === "view, text, ::after, ::before" || selector === "*" || selector === "::after" || selector === "::before" || selector === "::backdrop" || selector === ":host" || selector === "[hidden]:not([hidden=\"until-found\"])" || selector === "[hidden]:not([hidden='until-found'])" || selector === "button,input[type=\"button\"],input[type=\"reset\"],input[type=\"submit\"]" || selector === "button, input[type=\"button\"], input[type=\"reset\"], input[type=\"submit\"]" || selector === "button,input[type='button'],input[type='reset'],input[type='submit']" || selector === "button, input[type='button'], input[type='reset'], input[type='submit']") return true;
@@ -2353,7 +2301,7 @@ function isTailwindGeneratedPreflightRule(selector, node) {
2353
2301
  if (selector === ":host") return node.nodes?.some((child) => child.type === "decl" && child.value?.includes("--theme(")) ?? false;
2354
2302
  return false;
2355
2303
  }
2356
- function removeTailwindV4GeneratedUserCssArtifacts(source) {
2304
+ function removeTailwindV4GeneratedUserCssArtifacts(source, generatedSource) {
2357
2305
  try {
2358
2306
  const root = _weapp_tailwindcss_postcss.postcss.parse(source);
2359
2307
  let changed = false;
@@ -2362,9 +2310,27 @@ function removeTailwindV4GeneratedUserCssArtifacts(source) {
2362
2310
  comment.remove();
2363
2311
  changed = true;
2364
2312
  });
2313
+ let generatedDeclarations;
2314
+ const overriddenProperties = /* @__PURE__ */ new Set();
2365
2315
  root.walkRules((rule) => {
2366
- const selector = rule.selector.replace(/\s+/g, " ").trim();
2367
- if (isTailwindGeneratedThemeRule(selector, rule) || isTailwindGeneratedPreflightRule(selector, rule)) {
2316
+ const selector = rule.selector.replace(/\s+/g, " ").replace(/\s*,\s*/g, ",").trim();
2317
+ if (isTailwindGeneratedThemeScopeSelector(selector) || TAILWIND_GENERATED_THEME_SCOPE_SELECTORS.has(selector) && rule.nodes.some((child) => child.type === "decl" && child.prop.startsWith("--"))) {
2318
+ generatedDeclarations ?? (generatedDeclarations = typeof generatedSource === "function" ? generatedSource() : generatedSource ? collectGeneratedThemeDeclarations(generatedSource) : /* @__PURE__ */ new Set());
2319
+ for (const child of [...rule.nodes]) {
2320
+ if (child.type !== "decl") continue;
2321
+ const propertyKey = JSON.stringify([themeDeclarationContext(child), child.prop]);
2322
+ if (generatedDeclarations?.has(themeDeclarationKey(child)) && !overriddenProperties.has(propertyKey)) {
2323
+ child.remove();
2324
+ changed = true;
2325
+ } else overriddenProperties.add(propertyKey);
2326
+ }
2327
+ if (rule.nodes.length === 0) {
2328
+ rule.remove();
2329
+ changed = true;
2330
+ }
2331
+ return;
2332
+ }
2333
+ if (isTailwindGeneratedPreflightRule(selector, rule)) {
2368
2334
  rule.remove();
2369
2335
  changed = true;
2370
2336
  }
@@ -2628,16 +2594,37 @@ function unwrapMiniProgramCascadeLayers(source) {
2628
2594
  function hasClassSelector(selector) {
2629
2595
  return /(?:^|[^\w-])\.[_a-z\u00A0-\uFFFF\\-]/i.test(selector);
2630
2596
  }
2631
- function collectBareSelectorUserCss(source) {
2597
+ function collectBareSelectorUserCss(source, transformedCss) {
2632
2598
  try {
2633
2599
  const root = _weapp_tailwindcss_postcss.postcss.parse(source);
2600
+ const representedSelectors = /* @__PURE__ */ new Set();
2601
+ const rootSelectors = /* @__PURE__ */ new Set([
2602
+ ":root",
2603
+ ":host",
2604
+ "page",
2605
+ ".tw-root",
2606
+ "wx-root-portal-content"
2607
+ ]);
2608
+ const selectorKey = (rule, selector) => {
2609
+ const context = [];
2610
+ let parent = rule.parent;
2611
+ while (parent && parent.type !== "root") {
2612
+ if (parent.type === "atrule") context.unshift(`@${parent.name} ${parent.params}`);
2613
+ parent = parent.parent;
2614
+ }
2615
+ return JSON.stringify([...context, rootSelectors.has(selector.trim()) ? ":root" : selector.trim()]);
2616
+ };
2617
+ if (transformedCss !== void 0) _weapp_tailwindcss_postcss.postcss.parse(transformedCss).walkRules((rule) => {
2618
+ for (const selector of rule.selectors) representedSelectors.add(selectorKey(rule, selector));
2619
+ });
2634
2620
  let changed = false;
2635
2621
  root.walkAtRules("import", (rule) => {
2636
2622
  rule.remove();
2637
2623
  changed = true;
2638
2624
  });
2639
2625
  root.walkRules((rule) => {
2640
- if ((rule.selectors?.length ? rule.selectors : [rule.selector]).some((selector) => hasClassSelector(selector))) {
2626
+ const selectors = rule.selectors?.length ? rule.selectors : [rule.selector];
2627
+ if (selectors.some((selector) => hasClassSelector(selector)) || selectors.every((selector) => representedSelectors.has(selectorKey(rule, selector)))) {
2641
2628
  rule.remove();
2642
2629
  changed = true;
2643
2630
  }
@@ -2683,22 +2670,30 @@ function stripUnmatchedTailwindSourceMediaCloseFragments(source) {
2683
2670
  //#region src/bundlers/shared/generator-css/user-css/transform.ts
2684
2671
  async function transformGeneratorUserCss(source, options) {
2685
2672
  if (source.trim().length === 0) return "";
2686
- if (options.processed) return stripUnmatchedTailwindSourceMediaCloseFragments(stripTailwindSourceMediaFragments(removeTailwindV4GeneratorAtRules(options.generatorTarget === "weapp" ? removeTailwindV4GeneratedUserCssArtifacts(unwrapMiniProgramCascadeLayers(removeProcessedMiniProgramUnsupportedCss(source, {
2687
- ...options.generatorStyleOptions,
2688
- ...options.cssUserHandlerOptions
2689
- }))) : source)));
2673
+ if (options.processed) {
2674
+ const compiledSource = await options.compileAuthorCssFunctions?.(source) ?? source;
2675
+ return stripUnmatchedTailwindSourceMediaCloseFragments(stripTailwindSourceMediaFragments(removeTailwindV4GeneratorAtRules(options.generatorTarget === "weapp" ? removeTailwindV4GeneratedUserCssArtifacts(unwrapMiniProgramCascadeLayers(removeProcessedMiniProgramUnsupportedCss(compiledSource, {
2676
+ ...options.generatorStyleOptions,
2677
+ ...options.cssUserHandlerOptions
2678
+ })), options.generatedSource) : compiledSource)));
2679
+ }
2690
2680
  const cleanedSource = removeTailwindSourceDirectives(removeTailwindV4GeneratorAtRules(stripUnmatchedTailwindSourceMediaCloseFragments(stripTailwindSourceMediaFragments(source))), { importFallback: options.importFallback });
2691
2681
  if (cleanedSource.trim().length === 0) return "";
2692
- const userSource = stripUnmatchedTailwindSourceMediaCloseFragments(removeTailwindApplyAtRules(removeTailwindSourceDirectives(stripUnmatchedTailwindSourceMediaCloseFragments(stripTailwindSourceMediaFragments(options.generatorTarget === "weapp" ? removeTailwindV4GeneratedUserCssArtifacts((0, _weapp_tailwindcss_postcss.removeUnsupportedMiniProgramAtRules)(unwrapMiniProgramCascadeLayers(cleanedSource))) : cleanedSource)), { importFallback: options.importFallback })));
2682
+ const authorSource = stripUnmatchedTailwindSourceMediaCloseFragments(removeTailwindApplyAtRules(removeTailwindSourceDirectives(stripUnmatchedTailwindSourceMediaCloseFragments(stripTailwindSourceMediaFragments(options.generatorTarget === "weapp" ? removeTailwindV4GeneratedUserCssArtifacts((0, _weapp_tailwindcss_postcss.removeUnsupportedMiniProgramAtRules)(unwrapMiniProgramCascadeLayers(stripTailwindBanners(cleanedSource))), options.generatedSource) : cleanedSource)), { importFallback: options.importFallback })));
2683
+ const userSource = await options.compileAuthorCssFunctions?.(authorSource) ?? authorSource;
2693
2684
  if (userSource.trim().length === 0) return "";
2694
2685
  if (isCommentOnlyCss(userSource)) return userSource;
2695
- if (options.generatorTarget !== "weapp") return userSource;
2686
+ if (options.generatorTarget !== "weapp") return (0, _weapp_tailwindcss_postcss.applyConfiguredCssCalc)(userSource, {
2687
+ cssCalc: options.generatorStyleOptions.cssOptions?.cssCalc ?? options.generatorStyleOptions.cssCalc ?? options.cssUserHandlerOptions.cssOptions?.cssCalc ?? options.cssUserHandlerOptions.cssCalc,
2688
+ customPropertyValues: options.generatorStyleOptions.customPropertyValues ?? options.cssUserHandlerOptions.customPropertyValues,
2689
+ contextCss: typeof options.generatedSource === "string" ? options.generatedSource : void 0
2690
+ });
2696
2691
  const { css } = await options.styleHandler(userSource, {
2697
2692
  ...options.generatorStyleOptions,
2698
2693
  ...options.cssUserHandlerOptions
2699
2694
  });
2700
- const transformedCss = removeTailwindV4GeneratedUserCssArtifacts((0, _weapp_tailwindcss_postcss.removeUnsupportedMiniProgramAtRules)(css));
2701
- const bareSelectorUserCss = collectBareSelectorUserCss(userSource);
2695
+ const transformedCss = removeTailwindV4GeneratedUserCssArtifacts((0, _weapp_tailwindcss_postcss.removeUnsupportedMiniProgramAtRules)(stripTailwindBanners(css)), options.generatedSource);
2696
+ const bareSelectorUserCss = collectBareSelectorUserCss(userSource, transformedCss);
2702
2697
  const missingBareSelectorUserCss = bareSelectorUserCss.trim().length > 0 ? (0, _weapp_tailwindcss_postcss.filterExistingCssRules)(transformedCss, bareSelectorUserCss) : "";
2703
2698
  return missingBareSelectorUserCss.trim().length > 0 ? `${transformedCss}\n${missingBareSelectorUserCss}` : transformedCss;
2704
2699
  }
@@ -2732,6 +2727,11 @@ function normalizeExtendLengthUnits(value) {
2732
2727
  function normalizeTailwindcssRuntimeOptions(options) {
2733
2728
  return options;
2734
2729
  }
2730
+ /** 清除可选字段中的 undefined,再交给引擎候选校验与生成契约。 */
2731
+ function resolveRuntimeBareArbitraryValues(options) {
2732
+ const value = resolveTailwindcssOptions(options)?.v4?.bareArbitraryValues;
2733
+ return value && typeof value === "object" ? value.units === void 0 ? {} : { units: value.units } : value;
2734
+ }
2735
2735
  //#endregion
2736
2736
  //#region src/utils/object.ts
2737
2737
  function definedEntries(value) {
@@ -3022,11 +3022,11 @@ function normalizeTailwindV4CssPackageImports(css, packageName) {
3022
3022
  let changed = false;
3023
3023
  root.walkAtRules((rule) => {
3024
3024
  if (rule.name !== "import" && rule.name !== "reference") return;
3025
- const parsed = parseCssImportSpecifier(rule.params);
3025
+ const parsed = (0, _weapp_tailwindcss_postcss.parseCssImportSpecifier)(rule.params);
3026
3026
  if (!parsed || !importSpecifiers.has(parsed.specifier)) return;
3027
3027
  const cssEntryPoint = resolvePackageCssEntryPoint(`${parsed.specifier}/index.css`);
3028
3028
  if (!cssEntryPoint) return;
3029
- rule.params = rule.params.replace(parsed.raw, quoteCssImportSpecifier(cssEntryPoint, parsed.quote));
3029
+ rule.params = rule.params.replace(parsed.raw, (0, _weapp_tailwindcss_postcss.quoteCssImportSpecifier)(cssEntryPoint, parsed.quote));
3030
3030
  changed = true;
3031
3031
  });
3032
3032
  return changed ? root.toString() : css;
@@ -3080,7 +3080,7 @@ function normalizeTailwindV4CssEntrySources(cssEntries, packageName) {
3080
3080
  }
3081
3081
  const base = node_path.default.dirname(normalizedFile);
3082
3082
  root.walkAtRules("import", (rule) => {
3083
- const parsed = parseCssImportSpecifier(rule.params);
3083
+ const parsed = (0, _weapp_tailwindcss_postcss.parseCssImportSpecifier)(rule.params);
3084
3084
  if (!parsed || !parsed.specifier.startsWith(".")) return;
3085
3085
  const importedFile = resolveCssImportFile(base, parsed.specifier);
3086
3086
  const resolved = (node_path.default.extname(importedFile) ? [importedFile] : [
@@ -3385,6 +3385,12 @@ Object.defineProperty(exports, "createCssAppend", {
3385
3385
  return createCssAppend;
3386
3386
  }
3387
3387
  });
3388
+ Object.defineProperty(exports, "createGeneratedThemeDeclarationResolver", {
3389
+ enumerable: true,
3390
+ get: function() {
3391
+ return createGeneratedThemeDeclarationResolver;
3392
+ }
3393
+ });
3388
3394
  Object.defineProperty(exports, "createTailwindV4Engine", {
3389
3395
  enumerable: true,
3390
3396
  get: function() {
@@ -3631,12 +3637,6 @@ Object.defineProperty(exports, "parseConfigParam", {
3631
3637
  return parseConfigParam;
3632
3638
  }
3633
3639
  });
3634
- Object.defineProperty(exports, "parseCssImportSpecifier", {
3635
- enumerable: true,
3636
- get: function() {
3637
- return parseCssImportSpecifier;
3638
- }
3639
- });
3640
3640
  Object.defineProperty(exports, "parseImportRequest", {
3641
3641
  enumerable: true,
3642
3642
  get: function() {
@@ -3655,12 +3655,6 @@ Object.defineProperty(exports, "prependConfigDirective", {
3655
3655
  return prependConfigDirective;
3656
3656
  }
3657
3657
  });
3658
- Object.defineProperty(exports, "quoteCssImportSpecifier", {
3659
- enumerable: true,
3660
- get: function() {
3661
- return quoteCssImportSpecifier;
3662
- }
3663
- });
3664
3658
  Object.defineProperty(exports, "removeMiniProgramInteractiveSelectors", {
3665
3659
  enumerable: true,
3666
3660
  get: function() {
@@ -3721,6 +3715,12 @@ Object.defineProperty(exports, "resolveGeneratorRuntimeBranch", {
3721
3715
  return resolveGeneratorRuntimeBranch;
3722
3716
  }
3723
3717
  });
3718
+ Object.defineProperty(exports, "resolveRuntimeBareArbitraryValues", {
3719
+ enumerable: true,
3720
+ get: function() {
3721
+ return resolveRuntimeBareArbitraryValues;
3722
+ }
3723
+ });
3724
3724
  Object.defineProperty(exports, "resolveRuntimeBranch", {
3725
3725
  enumerable: true,
3726
3726
  get: function() {