weapp-tailwindcss 5.1.4 → 5.1.5

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 (53) hide show
  1. package/dist/bundlers/shared/generator-css/generation-helpers.d.ts +8 -2
  2. package/dist/bundlers/shared/generator-css/source-resolver/metadata.d.ts +5 -1
  3. package/dist/bundlers/vite/generate-bundle/tailwind-v4-css-source.d.ts +6 -3
  4. package/dist/bundlers/vite/hot-css-modules.d.ts +1 -0
  5. package/dist/bundlers/vite/source-scan/css-entries.d.ts +1 -0
  6. package/dist/bundlers/webpack/BaseUnifiedPlugin/v5-assets/pipeline-helpers.d.ts +2 -1
  7. package/dist/cli.js +18 -3
  8. package/dist/cli.mjs +16 -1
  9. package/dist/{context-DCVMkTRj.js → context-BziwyWy1.js} +21 -6
  10. package/dist/{context-Bkpmt3ja.mjs → context-rrYZuUBU.mjs} +18 -3
  11. package/dist/core.js +1 -1
  12. package/dist/core.mjs +1 -1
  13. package/dist/css-macro/index.d.ts +2 -1
  14. package/dist/{defaults-BhE26nSw.mjs → defaults-9B6aMyZb.mjs} +2 -2
  15. package/dist/{defaults-DQhgnnn-.js → defaults-nsf4VNMX.js} +2 -2
  16. package/dist/defaults.d.ts +1 -1
  17. package/dist/defaults.js +1 -1
  18. package/dist/defaults.mjs +1 -1
  19. package/dist/{gulp-Bogfnoki.js → gulp-CuVsZdO9.js} +3 -3
  20. package/dist/{gulp-0RsqkF_d.mjs → gulp-ygWfmOqh.mjs} +3 -3
  21. package/dist/gulp.js +1 -1
  22. package/dist/gulp.mjs +1 -1
  23. package/dist/{hmr-timing-BV6nFPoT.js → hmr-timing-BKdCeIrn.js} +207 -67
  24. package/dist/{hmr-timing-BRNaz8Od.mjs → hmr-timing-Dh_nn3w5.mjs} +207 -67
  25. package/dist/index.js +3 -3
  26. package/dist/index.mjs +3 -3
  27. package/dist/js/js-string-escape.d.ts +1 -0
  28. package/dist/presets.js +1 -1
  29. package/dist/presets.mjs +1 -1
  30. package/dist/rspack.js +1 -1
  31. package/dist/rspack.mjs +1 -1
  32. package/dist/{source-candidate-scan-signature-BB1hvW68.mjs → source-candidate-scan-signature-DATRnS1X.mjs} +157 -6
  33. package/dist/{source-candidate-scan-signature-CaDT0gkj.js → source-candidate-scan-signature-DIj9m4wB.js} +168 -5
  34. package/dist/style-injector/internal.d.ts +7 -0
  35. package/dist/style-injector/options.d.ts +25 -0
  36. package/dist/tailwindcss/v4/preflight.d.ts +4 -0
  37. package/dist/{tailwindcss-D2xs4OEu.js → tailwindcss-BwoNQ3t8.js} +52 -12
  38. package/dist/{tailwindcss-D0JF0fuZ.mjs → tailwindcss-C-uM4rB8.mjs} +47 -13
  39. package/dist/{transform-BP86eSZp.mjs → transform-DHLemtaX.mjs} +1 -1
  40. package/dist/{transform-CXCQ28Tc.js → transform-KLD1tJdb.js} +1 -1
  41. package/dist/typedoc.export.d.ts +1 -0
  42. package/dist/types/index.d.ts +2 -1
  43. package/dist/types/user-defined-options/general.d.ts +2 -0
  44. package/dist/{vite-BYgT1ir9.js → vite-Yp14HNyS.js} +101 -37
  45. package/dist/{vite-B1SlBmqO.mjs → vite-cH0tTMHc.mjs} +101 -37
  46. package/dist/vite.js +1 -1
  47. package/dist/vite.mjs +1 -1
  48. package/dist/weapp-tw-css-import-rewrite-loader.js +276 -83
  49. package/dist/{webpack-Bg6pefpb.mjs → webpack-DBhmJ-_P.mjs} +62 -18
  50. package/dist/{webpack-khSwkXP5.js → webpack-DN3tgLbF.js} +61 -17
  51. package/dist/webpack.js +1 -1
  52. package/dist/webpack.mjs +1 -1
  53. package/package.json +16 -5
@@ -12,6 +12,41 @@ import { logger } from "@weapp-tailwindcss/logger";
12
12
  import fg from "fast-glob";
13
13
  import { loadConfig } from "tailwindcss-config";
14
14
  import { fileURLToPath } from "node:url";
15
+ //#region src/tailwindcss/v4/preflight.ts
16
+ function parseCssImportSpecifier(params) {
17
+ const value = params.trim();
18
+ const quoted = /^(['"])(.*?)\1/.exec(value);
19
+ if (quoted) return quoted[2];
20
+ const url = /^url\(\s*(?:(['"])(.*?)\1|([^'")\s]+))\s*\)/.exec(value);
21
+ return url?.[2] ?? url?.[3];
22
+ }
23
+ function normalizeTailwindImportSpecifier(params) {
24
+ return parseCssImportSpecifier(params)?.replaceAll("\\", "/");
25
+ }
26
+ function isTailwindV4CssImportParam(params) {
27
+ const specifier = normalizeTailwindImportSpecifier(params);
28
+ return specifier === "tailwindcss" || specifier === "tailwindcss4" || specifier?.startsWith("tailwindcss/") === true || specifier?.startsWith("tailwindcss4/") === true || specifier?.endsWith("/tailwindcss/index.css") === true;
29
+ }
30
+ function isTailwindV4PreflightImportParam(params) {
31
+ const specifier = normalizeTailwindImportSpecifier(params);
32
+ return specifier === "tailwindcss" || specifier === "tailwindcss4" || specifier === "tailwindcss/preflight" || specifier === "tailwindcss/preflight.css" || specifier === "tailwindcss4/preflight" || specifier === "tailwindcss4/preflight.css" || specifier?.endsWith("/tailwindcss/index.css") === true || specifier?.endsWith("/tailwindcss/preflight.css") === true;
33
+ }
34
+ function includesTailwindV4PreflightDirective(css) {
35
+ try {
36
+ const root = postcss.parse(css);
37
+ let includesPreflight = false;
38
+ root.walkAtRules("import", (rule) => {
39
+ includesPreflight || (includesPreflight = isTailwindV4PreflightImportParam(rule.params));
40
+ });
41
+ root.walkAtRules("tailwind", (rule) => {
42
+ includesPreflight || (includesPreflight = rule.params.trim() === "base");
43
+ });
44
+ return includesPreflight;
45
+ } catch {
46
+ return /@import\s+(?:url\(\s*)?["']?tailwindcss4?(?:\/(?:preflight(?:\.css)?|index\.css))?["')\s;]/.test(css) || /@tailwind\s+base\b/.test(css);
47
+ }
48
+ }
49
+ //#endregion
15
50
  //#region src/bundlers/vite/static-config-content.ts
16
51
  function skipWhitespaceAndComments(source, start) {
17
52
  let index = start;
@@ -194,17 +229,6 @@ function parseImportSourceParam(params) {
194
229
  sourcePath: match[3]
195
230
  };
196
231
  }
197
- function parseCssImportSpecifier(params) {
198
- const value = params.trim();
199
- const quoted = /^(['"])(.*?)\1/.exec(value);
200
- if (quoted) return quoted[2];
201
- const url = /^url\(\s*(?:(['"])(.*?)\1|([^'")\s]+))\s*\)/.exec(value);
202
- return url?.[2] ?? url?.[3];
203
- }
204
- function isTailwindCssImport(params) {
205
- const specifier = parseCssImportSpecifier(params);
206
- return specifier === "tailwindcss" || specifier?.startsWith("tailwindcss/") || specifier?.replaceAll("\\", "/").endsWith("/tailwindcss/index.css");
207
- }
208
232
  function resolveSourceBase(base, sourcePath) {
209
233
  return path.isAbsolute(sourcePath) ? sourcePath : path.resolve(base, sourcePath);
210
234
  }
@@ -294,17 +318,22 @@ async function resolveTailwindV4EntriesFromCss(css, base) {
294
318
  let importSourceBase;
295
319
  let hasSourceNone = false;
296
320
  let hasTailwindCssImport = false;
321
+ let includesPreflight = false;
297
322
  const [sourceEntries, configEntries] = await Promise.all([resolveCssSourceEntries(root, base, VITE_SOURCE_CANDIDATE_PATTERN), resolveConfigContentEntries(root, base)]);
298
323
  const entries = [...configEntries.entries, ...sourceEntries];
299
324
  const hasPositiveEntries = entries.some((entry) => !entry.negated);
300
325
  const inlineCandidates = collectCssInlineSourceCandidates(root);
301
326
  root.walkAtRules("import", (rule) => {
302
- if (!isTailwindCssImport(rule.params)) return;
327
+ if (!isTailwindV4CssImportParam(rule.params)) return;
303
328
  hasTailwindCssImport = true;
329
+ includesPreflight || (includesPreflight = isTailwindV4PreflightImportParam(rule.params));
304
330
  const sourceParam = parseImportSourceParam(rule.params);
305
331
  if (sourceParam?.none) hasSourceNone = true;
306
332
  if (sourceParam?.sourcePath) importSourceBase = resolveSourceBase(base, sourceParam.sourcePath);
307
333
  });
334
+ root.walkAtRules("tailwind", (rule) => {
335
+ includesPreflight || (includesPreflight = rule.params.trim() === "base");
336
+ });
308
337
  if (importSourceBase) return {
309
338
  entries: [{
310
339
  base: importSourceBase,
@@ -312,30 +341,35 @@ async function resolveTailwindV4EntriesFromCss(css, base) {
312
341
  pattern: VITE_SOURCE_CANDIDATE_PATTERN
313
342
  }, ...entries],
314
343
  explicit: true,
344
+ includesPreflight,
315
345
  inlineCandidates,
316
346
  dependencies: configEntries.dependencies
317
347
  };
318
348
  if (hasSourceNone) return {
319
349
  entries,
320
350
  explicit: true,
351
+ includesPreflight,
321
352
  inlineCandidates,
322
353
  dependencies: configEntries.dependencies
323
354
  };
324
355
  if (hasPositiveEntries) return {
325
356
  entries,
326
357
  explicit: true,
358
+ includesPreflight,
327
359
  inlineCandidates,
328
360
  dependencies: configEntries.dependencies
329
361
  };
330
362
  if (inlineCandidates.included.size > 0 || inlineCandidates.excluded.size > 0) return {
331
363
  entries: [],
332
364
  explicit: true,
365
+ includesPreflight,
333
366
  inlineCandidates,
334
367
  dependencies: configEntries.dependencies
335
368
  };
336
369
  return hasTailwindCssImport ? {
337
370
  entries,
338
371
  explicit: false,
372
+ includesPreflight,
339
373
  inlineCandidates,
340
374
  dependencies: configEntries.dependencies
341
375
  } : void 0;
@@ -1420,4 +1454,4 @@ function createTailwindcssRuntimeFromContext(ctx) {
1420
1454
  return createTailwindcssRuntimeForBase(resolvedTailwindcssBasedir, normalizedCssEntries ?? rawCssEntries, runtimeOptions);
1421
1455
  }
1422
1456
  //#endregion
1423
- export { resolveViteTailwindV4CssDependencies as _, findTailwindConfig as a, getRuntimeClassSetCacheEntry as c, invalidateRuntimeClassSet as d, createViteSourceScanMatcher as f, resolveTailwindV4EntriesFromCssCached as g, resolveTailwindV4EntriesFromCss as h, resolveUniAppXOptions as i, getRuntimeClassSetSignature as l, discoverTailwindV4CssEntries as m, resolveTailwindcssBasedir as n, applyV4CssCalcDefaults as o, resolveViteSourceScanEntries as p, isUniAppXEnabled as r, warnMissingCssEntries as s, createTailwindcssRuntimeFromContext as t, getRuntimeClassSetSignatureWithSources as u };
1457
+ export { resolveViteTailwindV4CssDependencies as _, findTailwindConfig as a, getRuntimeClassSetCacheEntry as c, invalidateRuntimeClassSet as d, createViteSourceScanMatcher as f, resolveTailwindV4EntriesFromCssCached as g, resolveTailwindV4EntriesFromCss as h, resolveUniAppXOptions as i, getRuntimeClassSetSignature as l, discoverTailwindV4CssEntries as m, resolveTailwindcssBasedir as n, applyV4CssCalcDefaults as o, resolveViteSourceScanEntries as p, isUniAppXEnabled as r, warnMissingCssEntries as s, createTailwindcssRuntimeFromContext as t, getRuntimeClassSetSignatureWithSources as u, includesTailwindV4PreflightDirective as v };
@@ -1,4 +1,4 @@
1
- import { c as createAttributeMatcher, d as JsTokenUpdater, f as _defineProperty, h as babelParse, m as replaceWxml, p as isClassContextLiteralPath, s as generateCode, u as analyzeSource } from "./context-Bkpmt3ja.mjs";
1
+ import { c as createAttributeMatcher, d as JsTokenUpdater, f as _defineProperty, h as babelParse, m as replaceWxml, p as isClassContextLiteralPath, s as generateCode, u as analyzeSource } from "./context-rrYZuUBU.mjs";
2
2
  import { createRequire } from "node:module";
3
3
  import { splitCandidateTokens } from "@tailwindcss-mangle/engine";
4
4
  import MagicString from "magic-string";
@@ -1,5 +1,5 @@
1
1
  const require_rolldown_runtime = require("./rolldown-runtime-emK7D4bc.js");
2
- const require_context = require("./context-DCVMkTRj.js");
2
+ const require_context = require("./context-BziwyWy1.js");
3
3
  let _tailwindcss_mangle_engine = require("@tailwindcss-mangle/engine");
4
4
  let magic_string = require("magic-string");
5
5
  magic_string = require_rolldown_runtime.__toESM(magic_string);
@@ -1,3 +1,4 @@
1
1
  export type { WeappTailwindcssGenerateOptions, WeappTailwindcssGenerateResult, WeappTailwindcssGenerator, WeappTailwindcssGeneratorTarget, WeappTailwindcssPostcssPluginOptions, } from './index';
2
+ export type { WeappTailwindcssStyleInjectorOptions } from './types';
2
3
  export type { ApplyOptions, CacheOptions, ExtractOptions, TailwindCssOptions, TailwindCssRuntimeOptions, TailwindV4Options, } from './types/typedoc-tailwindcss-runtime';
3
4
  export type { UserDefinedOptions } from './types/user-defined-options';
@@ -7,8 +7,9 @@ import type { AppType, IArbitraryValues, ICustomAttributesEntities } from './sha
7
7
  import type { UniAppXComponentLocalStylesOptions, UniAppXOptions as UniAppXUserDefinedOptions, UserDefinedOptions } from './user-defined-options';
8
8
  import type { LengthUnitsRuntimeOptions, TailwindContentTokenReport, TailwindcssExtractOptions, TailwindcssExtractResult, TailwindCssOptions, TailwindCssRuntimeOptions, TailwindPackageInfo } from '../tailwindcss/runtime-types';
9
9
  export type { TailwindCssOptions, TailwindCssRuntimeOptions, UniAppXComponentLocalStylesOptions, UniAppXUserDefinedOptions, UserDefinedOptions, };
10
- export type { CssPreflightOptions, IStyleHandlerOptions, ItemOrItemArray };
11
10
  export type { AppType, IArbitraryValues, ICustomAttributes, ICustomAttributesEntities, IUnocssCompatibilityOptions } from './shared';
11
+ export type { CssPreflightOptions, IStyleHandlerOptions, ItemOrItemArray };
12
+ export type { WeappTailwindcssStyleInjectorOptions } from '../style-injector/internal';
12
13
  export type RequiredDefined<T> = {
13
14
  [K in keyof T]-?: Exclude<T[K], undefined>;
14
15
  };
@@ -2,6 +2,7 @@ import type { ParserOptions } from '@babel/parser';
2
2
  import type { CssOptions, LoadedPostcssOptions } from '@weapp-tailwindcss/postcss/types';
3
3
  import type { ICreateCacheReturnType } from '../../cache';
4
4
  import type { WeappTailwindcssGeneratorUserOptions } from '../../generator';
5
+ import type { WeappTailwindcssStyleInjectorUserOptions } from '../../style-injector/internal';
5
6
  import type { AppType, IArbitraryValues, IUnocssCompatibilityOptions } from '../shared';
6
7
  import type { LengthUnitsRuntimeOptions, TailwindCssRuntimeOptions } from '../../tailwindcss/runtime-types';
7
8
  export interface CssSourceTraceOptions {
@@ -18,6 +19,7 @@ export interface UserDefinedOptionsGeneralPart {
18
19
  replaceRuntimePackages?: boolean | Record<string, string> | undefined;
19
20
  rewriteCssImports?: boolean | undefined;
20
21
  generator?: WeappTailwindcssGeneratorUserOptions | undefined;
22
+ styleInjector?: WeappTailwindcssStyleInjectorUserOptions | undefined;
21
23
  cssSourceTrace?: CssSourceTraceUserOptions | undefined;
22
24
  disabledDefaultTemplateHandler?: boolean | undefined;
23
25
  runtimeLoaderPath?: string | undefined;
@@ -3,10 +3,10 @@ const require_framework = require("./framework.js");
3
3
  const require_v4_engine = require("./v4-engine-CKtsdKxK.js");
4
4
  const require_generator = require("./generator-CilgHtxb.js");
5
5
  const require_utils = require("./utils-D3h8j7Mk.js");
6
- const require_context = require("./context-DCVMkTRj.js");
7
- const require_tailwindcss = require("./tailwindcss-D2xs4OEu.js");
8
- const require_hmr_timing = require("./hmr-timing-BV6nFPoT.js");
9
- const require_source_candidate_scan_signature = require("./source-candidate-scan-signature-CaDT0gkj.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");
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-CXCQ28Tc.js")).then((mod) => mod.transformUVue));
518
+ transformUVuePromise ?? (transformUVuePromise = Promise.resolve().then(() => require("./transform-KLD1tJdb.js")).then((mod) => mod.transformUVue));
519
519
  return transformUVuePromise;
520
520
  }
521
521
  const preprocessorLangs = /* @__PURE__ */ new Set([
@@ -1928,8 +1928,14 @@ function resolveSourceStyleSourceFromOutputFile(outputFile, snapshot, outputRoot
1928
1928
  //#endregion
1929
1929
  //#region src/bundlers/vite/generate-bundle/subpackages.ts
1930
1930
  function readBundleAssetSource(output) {
1931
- if (output.type !== "asset") return;
1932
- return typeof output.source === "string" ? output.source : output.source.toString();
1931
+ if ("type" in output && output.type !== "asset") return;
1932
+ const source = output.source;
1933
+ if (typeof source === "string") return source;
1934
+ if (typeof source === "function") {
1935
+ const value = source.call(output);
1936
+ return typeof value === "string" ? value : value?.toString();
1937
+ }
1938
+ if (source != null && typeof source.toString === "function") return source.toString();
1933
1939
  }
1934
1940
  function normalizePackageRoot(root) {
1935
1941
  return require_source_candidate_scan_signature.normalizeOutputPathKey(root).replace(/\/+$/, "");
@@ -3214,13 +3220,15 @@ function createRememberedCssRuntimeSignature(cssRuntimeSignature, cssRuntimeAffe
3214
3220
  function normalizeRememberedSourceIdentity(file) {
3215
3221
  return require_source_candidate_scan_signature.normalizeOutputPathKey(file.replace(/[?#].*$/, ""));
3216
3222
  }
3217
- function selectBestRememberedCssSourceMatches(sources, outputFile, outputRoot, sourceRoot) {
3218
- if (sources.length <= 1) return sources;
3223
+ function selectBestRememberedCssSourceMatches(sources, outputFile, outputRoot, sourceRoot, options = {}) {
3224
+ const minimumScore = options.minimumScore ?? (options.requirePositiveScore ? 1 : 0);
3219
3225
  const scoredMatches = sources.map((remembered) => ({
3220
3226
  remembered,
3221
3227
  score: Math.max(scoreMatchingStyleFileBase(outputFile, remembered.sourceFile, outputRoot, sourceRoot), scoreMatchingStyleFileBase(outputFile, remembered.outputFile, outputRoot, sourceRoot))
3222
- })).filter((match) => match.score > 0).sort((a, b) => b.score - a.score);
3228
+ })).filter((match) => match.score >= minimumScore && match.score > 0).sort((a, b) => b.score - a.score);
3223
3229
  const bestScore = scoredMatches[0]?.score;
3230
+ if (!bestScore && minimumScore > 0) return [];
3231
+ if (sources.length <= 1) return sources;
3224
3232
  return bestScore ? scoredMatches.filter((match) => match.score === bestScore).map((match) => match.remembered) : sources;
3225
3233
  }
3226
3234
  function findRememberedCssSources(sources, outputFile, file, originalSource, outputRoot, sourceRoot) {
@@ -3238,11 +3246,16 @@ function findRememberedCssSources(sources, outputFile, file, originalSource, out
3238
3246
  ...originalSource.originalFileNames ?? []
3239
3247
  ].filter((item) => typeof item === "string" && item.length > 0);
3240
3248
  const sourceMatched = rememberedSources.filter((remembered) => originalFiles.some((originalFile) => normalizeRememberedSourceIdentity(remembered.sourceFile) === normalizeRememberedSourceIdentity(originalFile)));
3241
- if (sourceMatched.length > 0) return sourceMatched;
3249
+ if (sourceMatched.length > 0) {
3250
+ const scoredSourceMatched = selectBestRememberedCssSourceMatches(sourceMatched, outputFile, outputRoot, sourceRoot, { requirePositiveScore: true });
3251
+ if (scoredSourceMatched.length > 0) return scoredSourceMatched;
3252
+ }
3242
3253
  const outputMatched = rememberedSources.filter((remembered) => require_source_candidate_scan_signature.normalizeOutputPathKey(remembered.outputFile) === require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile));
3243
3254
  if (outputMatched.length > 0) return outputMatched;
3244
3255
  if (!require_source_candidate_scan_signature.hasBundlerGeneratedCssMarker(source) && !hasTailwindGenerationSource(source)) return [];
3245
3256
  const scoredMatches = selectBestRememberedCssSourceMatches(rememberedSources, outputFile, outputRoot, sourceRoot);
3257
+ const strongScoredMatches = selectBestRememberedCssSourceMatches(rememberedSources, outputFile, outputRoot, sourceRoot, { minimumScore: 1e5 });
3258
+ if (strongScoredMatches.length > 0 && strongScoredMatches.length < rememberedSources.length) return strongScoredMatches;
3246
3259
  return scoredMatches.length === rememberedSources.length ? [] : scoredMatches;
3247
3260
  }
3248
3261
  function mergeRememberedCssSources(sources, outputFile) {
@@ -3644,16 +3657,24 @@ function scoreConfiguredTailwindV4SourceForRawSource(rawSource, entrySource) {
3644
3657
  for (const token of entryTokens) if (rawTokens.has(token)) score += token.startsWith("config:") ? 100 : 1;
3645
3658
  return score;
3646
3659
  }
3647
- function resolveSubpackageRootForFile(file, subpackageRoots) {
3648
- if (!file || !subpackageRoots) return;
3649
- return [...subpackageRoots].find((root) => isSubpackageOutputFile(file, /* @__PURE__ */ new Set([root])));
3650
- }
3651
- function isSameSubpackageScope(outputFile, sourceFile, subpackageRoots) {
3652
- return resolveSubpackageRootForFile(outputFile, subpackageRoots) === resolveSubpackageRootForFile(sourceFile, subpackageRoots);
3653
- }
3654
- function selectTailwindV4GenerationCssSourceForOutput(outputFile, entries, rawSource, subpackageRoots) {
3660
+ function selectTailwindV4GenerationCssSourceForOutput(outputFile, entries, rawSource, options = {}) {
3655
3661
  const generationSources = entries.filter((entry) => hasTailwindGenerationSource(entry.source));
3656
3662
  if (generationSources.length <= 1) return generationSources[0];
3663
+ const canMatchByOutputPath = Boolean(options.cwd || options.outputRoot || options.projectRoot);
3664
+ const selectByOutputPath = (candidates) => {
3665
+ if (!canMatchByOutputPath) return;
3666
+ const scoredSources = candidates.map((entry) => ({
3667
+ entry,
3668
+ score: require_hmr_timing.scoreTailwindV4CssSourceFileMatch(outputFile, entry.file, {
3669
+ cwd: options.cwd,
3670
+ outputRoot: options.outputRoot,
3671
+ projectRoot: options.projectRoot
3672
+ })
3673
+ })).filter((item) => item.score > 0).sort((a, b) => b.score - a.score);
3674
+ const bestScore = scoredSources[0]?.score;
3675
+ const bestSources = bestScore ? scoredSources.filter((item) => item.score === bestScore) : [];
3676
+ return bestSources.length === 1 ? bestSources[0]?.entry : void 0;
3677
+ };
3657
3678
  const selectByRawSourceFingerprint = (candidates) => {
3658
3679
  const scoredSources = candidates.map((entry) => ({
3659
3680
  entry,
@@ -3665,14 +3686,10 @@ function selectTailwindV4GenerationCssSourceForOutput(outputFile, entries, rawSo
3665
3686
  };
3666
3687
  const rawSourceMatched = selectByRawSourceFingerprint(generationSources);
3667
3688
  if (rawSourceMatched) return rawSourceMatched;
3668
- const scopedSources = subpackageRoots ? generationSources.filter((entry) => {
3669
- const outputMatchesSubpackage = isSubpackageOutputFile(outputFile, subpackageRoots);
3670
- const sourceMatchesSubpackage = isSubpackageOutputFile(entry.file, subpackageRoots);
3671
- if (!outputMatchesSubpackage) return !sourceMatchesSubpackage;
3672
- return sourceMatchesSubpackage && [...subpackageRoots].some((root) => isSubpackageOutputFile(outputFile, /* @__PURE__ */ new Set([root])) && isSubpackageOutputFile(entry.file, /* @__PURE__ */ new Set([root])));
3673
- }) : generationSources;
3674
- const explicitSources = scopedSources.filter((entry) => /@(?:config|source|plugin|custom-variant|theme|utility|variant|apply)\b/.test(entry.source));
3675
- const candidates = explicitSources.length === 1 ? explicitSources : scopedSources;
3689
+ const explicitSources = generationSources.filter((entry) => /@(?:config|source|plugin|custom-variant|theme|utility|variant|apply)\b/.test(entry.source));
3690
+ const candidates = explicitSources.length === 1 ? explicitSources : generationSources;
3691
+ const outputPathMatched = selectByOutputPath(candidates);
3692
+ if (outputPathMatched) return outputPathMatched;
3676
3693
  if (candidates.length === 1) return candidates[0];
3677
3694
  return selectByRawSourceFingerprint(candidates);
3678
3695
  }
@@ -4289,6 +4306,11 @@ function createGenerateBundleHook(context) {
4289
4306
  if (rememberedCssSources.length > 0) rememberedCssSources = await Promise.all(rememberedCssSources.map(async (remembered) => {
4290
4307
  return await refreshRememberedCssSource?.(remembered) ?? remembered;
4291
4308
  }));
4309
+ rememberedCssSources = rememberedCssSources.filter((remembered) => {
4310
+ if (!configuredTailwindV4CssSourceFileKeysForScope.has(require_source_candidate_scan_signature.normalizeOutputPathKey(remembered.sourceFile.replace(/[?#].*$/, "")))) return true;
4311
+ const matchedOutputFile = resolveMatchedOutputFileForCurrentAsset(remembered.sourceFile);
4312
+ return !matchedOutputFile || require_source_candidate_scan_signature.normalizeOutputPathKey(matchedOutputFile) === require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile);
4313
+ });
4292
4314
  let hasUsableRememberedTailwindSource = rememberedCssSources.some((remembered) => hasTailwindGenerationSource(remembered.rawSource) && require_source_candidate_scan_signature.normalizeOutputPathKey(remembered.sourceFile.replace(/[?#].*$/, "")) !== require_source_candidate_scan_signature.normalizeOutputPathKey(file));
4293
4315
  const inferredSfcStyleSource = await resolveSfcStyleSourceFromOutputFile(outputFile, snapshot, outDir, opts.tailwindcssBasedir, opts.cssMatcher, getSfcSource, debug);
4294
4316
  if (inferredSfcStyleSource) {
@@ -4301,10 +4323,6 @@ function createGenerateBundleHook(context) {
4301
4323
  hasUsableRememberedTailwindSource = false;
4302
4324
  }
4303
4325
  let outputCssHandlerOptions = getCssHandlerOptions(outputFile);
4304
- if (currentSubpackageRoots && rememberedCssSources.length > 0 && rememberedCssSources.some((remembered) => configuredTailwindV4CssSourceFileKeysForScope.has(require_source_candidate_scan_signature.normalizeOutputPathKey(remembered.sourceFile.replace(/[?#].*$/, ""))) && !isSameSubpackageScope(outputFile, remembered.sourceFile, currentSubpackageRoots))) {
4305
- rememberedCssSources = [];
4306
- hasUsableRememberedTailwindSource = false;
4307
- }
4308
4326
  if (isTemporaryCssAssetFile(outputFile) && hasTailwindGenerationSource(rawSource)) {
4309
4327
  const resolvedTemporarySource = temporaryCssAssetSourceResolver.resolve(outputFile, rawSource);
4310
4328
  if (resolvedTemporarySource) {
@@ -4358,7 +4376,11 @@ function createGenerateBundleHook(context) {
4358
4376
  }
4359
4377
  } else if (hasTailwindGenerationSource(rawSource) && (originalSource.originalFileNames?.length ?? 0) === 0) {
4360
4378
  const availableConfiguredTailwindV4CssSourceEntries = configuredTailwindV4CssSourceEntries.filter((entry) => !usedConfiguredTailwindV4CssSourceFiles.has(require_source_candidate_scan_signature.normalizeOutputPathKey(entry.file)));
4361
- const configuredGenerationSource = selectTailwindV4GenerationCssSourceForOutput(outputFile, availableConfiguredTailwindV4CssSourceEntries, rawSource, currentSubpackageRoots);
4379
+ const configuredGenerationSource = selectTailwindV4GenerationCssSourceForOutput(outputFile, availableConfiguredTailwindV4CssSourceEntries, rawSource, {
4380
+ cwd: opts.tailwindcssBasedir,
4381
+ outputRoot: outDir,
4382
+ projectRoot: sourceRoot ?? rootDir
4383
+ });
4362
4384
  if (configuredGenerationSource && !hasViteProcessedCssResultForSource(configuredGenerationSource.file, getViteProcessedCssAssetResults)) {
4363
4385
  outputFile = resolveMatchedOutputFileForCurrentAsset(configuredGenerationSource.file) ?? outputFile;
4364
4386
  activeViteCssCacheFiles.add(normalizeViteCssCacheKey(outputFile));
@@ -4415,12 +4437,13 @@ function createGenerateBundleHook(context) {
4415
4437
  ...getCssHandlerOptions(generatorSourceFile),
4416
4438
  isMainChunk: resolvedFromTemporaryCssAsset ? false : outputCssHandlerOptions.isMainChunk
4417
4439
  } : getCssHandlerOptions(file);
4440
+ const generatorCssEntries = configuredTailwindV4CssSourceFileKeysForScope.has(require_source_candidate_scan_signature.normalizeOutputPathKey(generatorSourceFile.replace(/[?#].*$/, ""))) ? [generatorSourceFile] : opts.cssEntries;
4418
4441
  const generatorCssHandlerOptions = {
4419
4442
  ...cssHandlerOptions,
4420
4443
  sourceOptions: {
4421
4444
  ...cssHandlerOptions.sourceOptions ?? {},
4422
4445
  sourceFile: generatorSourceFile,
4423
- cssEntries: opts.cssEntries
4446
+ cssEntries: generatorCssEntries
4424
4447
  }
4425
4448
  };
4426
4449
  const scopedSourceCandidateGetter = createScopedSourceCandidateGetter(outputFile, generatorCssHandlerOptions);
@@ -5205,6 +5228,22 @@ function resolveHotTailwindCssModules(ctx, tailwindRootCssModuleIds) {
5205
5228
  }
5206
5229
  return modules;
5207
5230
  }
5231
+ function resolveHotSourceModules(ctx) {
5232
+ const modules = [];
5233
+ const seenModules = /* @__PURE__ */ new Set();
5234
+ const collectModule = (mod) => {
5235
+ if (mod == null || seenModules.has(mod)) return;
5236
+ if (require_source_candidate_scan_signature.isSourceStyleRequest(mod.id ?? mod.url)) return;
5237
+ seenModules.add(mod);
5238
+ modules.push(mod);
5239
+ };
5240
+ for (const mod of ctx.modules) collectModule(mod);
5241
+ for (const mod of ctx.server.moduleGraph.getModulesByFile(ctx.file) ?? []) collectModule(mod);
5242
+ for (const mod of ctx.server.moduleGraph.getModulesByFile((0, _weapp_tailwindcss_shared.cleanUrl)(ctx.file)) ?? []) collectModule(mod);
5243
+ collectModule(ctx.server.moduleGraph.getModuleById?.(ctx.file));
5244
+ collectModule(ctx.server.moduleGraph.getModuleById?.((0, _weapp_tailwindcss_shared.cleanUrl)(ctx.file)));
5245
+ return modules;
5246
+ }
5208
5247
  function resolveModuleHotUrl(mod) {
5209
5248
  if (typeof mod.url === "string" && mod.url.length > 0) return mod.url;
5210
5249
  if (typeof mod.id === "string" && mod.id.startsWith("/")) return mod.id;
@@ -5724,7 +5763,7 @@ function WeappTailwindcss(options = {}) {
5724
5763
  return changed;
5725
5764
  };
5726
5765
  syncCssEntriesFromAnchor(opts.tailwindcssBasedir);
5727
- const { disabled, customAttributes, onLoad, mainCssChunkMatcher, styleHandler, jsHandler, tailwindRuntime, refreshTailwindcssRuntime, uniAppX, disabledDefaultTemplateHandler } = opts;
5766
+ const { disabled, customAttributes, onLoad, mainCssChunkMatcher, styleHandler, jsHandler, tailwindRuntime, refreshTailwindcssRuntime, uniAppX, disabledDefaultTemplateHandler, styleInjector } = opts;
5728
5767
  const initialTailwindRuntime = tailwindRuntime;
5729
5768
  const refreshTailwindRuntime = refreshTailwindcssRuntime;
5730
5769
  const uniAppXEnabled = require_tailwindcss.isUniAppXEnabled(uniAppX);
@@ -5903,6 +5942,15 @@ function WeappTailwindcss(options = {}) {
5903
5942
  const getSourceCandidateSourcesForEntries = (entries, options) => sourceCandidateCollector.sourcesForEntries(entries, options);
5904
5943
  const isWatchBuild = () => resolvedConfig?.command === "build" && resolvedConfig.build.watch != null;
5905
5944
  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
+ const isCurrentWebLikeStylePlatform = () => {
5946
+ const platform = resolveViteStylePlatform();
5947
+ return platform ? isWebOrNativeAppPlatform(platform) : generatorBranch.isWeb;
5948
+ };
5949
+ const isNuxtPageMacroHotModule = (id) => {
5950
+ if (typeof id !== "string" || !/[?&]macro=true(?:&|$)/.test(id)) return false;
5951
+ const cleanId = (0, _weapp_tailwindcss_shared.cleanUrl)(id);
5952
+ return cleanId.includes("/pages/") && /\.(?:vue|tsx?|jsx?)$/.test(cleanId);
5953
+ };
5906
5954
  const hasSourceCandidateScanState = () => sourceCandidateScanSignature !== void 0;
5907
5955
  const normalizeSourceScanDependency = (file) => node_path.default.normalize(node_path.default.resolve((0, _weapp_tailwindcss_shared.cleanUrl)(file)));
5908
5956
  const isSourceScanDependency = (file) => sourceScanDependencies.has(normalizeSourceScanDependency(file));
@@ -6147,7 +6195,8 @@ function WeappTailwindcss(options = {}) {
6147
6195
  styleHandler,
6148
6196
  debug,
6149
6197
  previousCss: viteGeneratedCssByFile.get(file),
6150
- deferEmptyScopedCssSource: shouldDeferEmptyScopedCssSource
6198
+ deferEmptyScopedCssSource: shouldDeferEmptyScopedCssSource,
6199
+ restoreLocalCssImports: !generatorBranch.isWeb
6151
6200
  });
6152
6201
  if (!generated) return;
6153
6202
  const tracedCss = require_hmr_timing.annotateCssSourceTrace(finalizeViteMiniProgramCss(generated.css), {
@@ -6330,13 +6379,27 @@ function WeappTailwindcss(options = {}) {
6330
6379
  return hmrTimingRecorder.measure("sourceCandidates.handleHotUpdate", async () => {
6331
6380
  const isSourceCandidateHotUpdate = shouldOwnTailwindGeneration && require_hmr_timing.isSourceCandidateRequest(ctx.file);
6332
6381
  await syncChangedSourceCandidateFile(ctx.file);
6333
- if (isSourceCandidateHotUpdate) invalidateRecordedGeneratorCandidates();
6382
+ const isWebLikeHotUpdate = isCurrentWebLikeStylePlatform();
6383
+ if (isSourceCandidateHotUpdate) {
6384
+ invalidateRecordedGeneratorCandidates();
6385
+ if (isWebLikeHotUpdate) {
6386
+ await refreshRuntimeStateForAutoCssSources?.(true);
6387
+ await syncSourceCandidateScan({ force: true });
6388
+ }
6389
+ }
6334
6390
  const cssModules = resolveHotTailwindCssModules(ctx, tailwindRootCssModuleIds);
6335
- if (isSourceCandidateHotUpdate && !require_source_candidate_scan_signature.isSourceStyleRequest(ctx.file) && (!hasSelfAcceptingNonStyleHotModule(ctx.modules) && cssModules.length === 0 || cssModules.length > 0 && isUniViteProject())) {
6391
+ const sourceModules = isSourceCandidateHotUpdate && !require_source_candidate_scan_signature.isSourceStyleRequest(ctx.file) ? resolveHotSourceModules(ctx) : ctx.modules;
6392
+ if (isSourceCandidateHotUpdate && !require_source_candidate_scan_signature.isSourceStyleRequest(ctx.file) && !isWebLikeHotUpdate && (!hasSelfAcceptingNonStyleHotModule(sourceModules) && cssModules.length === 0 || cssModules.length > 0 && isUniViteProject())) {
6393
+ sendFullReloadForUnresolvedHotUpdate(ctx);
6394
+ return [];
6395
+ }
6396
+ if (isWebLikeHotUpdate && isSourceCandidateHotUpdate && !require_source_candidate_scan_signature.isSourceStyleRequest(ctx.file) && ctx.modules.some((mod) => isNuxtPageMacroHotModule(mod.id ?? mod.url))) {
6336
6397
  sendFullReloadForUnresolvedHotUpdate(ctx);
6337
6398
  return [];
6338
6399
  }
6339
6400
  sendSupplementalCssHotUpdates(ctx, cssModules);
6401
+ if (isWebLikeHotUpdate && isSourceCandidateHotUpdate && !require_source_candidate_scan_signature.isSourceStyleRequest(ctx.file)) return;
6402
+ if (isSourceCandidateHotUpdate && !require_source_candidate_scan_signature.isSourceStyleRequest(ctx.file) && cssModules.length > 0) return [...sourceModules, ...cssModules];
6340
6403
  return cssModules.length > 0 ? [...ctx.modules, ...cssModules] : void 0;
6341
6404
  }, { emit: false });
6342
6405
  },
@@ -6433,6 +6496,7 @@ function WeappTailwindcss(options = {}) {
6433
6496
  ];
6434
6497
  if (uniAppXPlugins) plugins.push(...uniAppXPlugins);
6435
6498
  plugins.push(cssFinalizerOutputPlugin);
6499
+ plugins.push(...require_source_candidate_scan_signature.createBuiltinViteStyleInjectorPlugins(styleInjector, () => opts.appType));
6436
6500
  return plugins;
6437
6501
  }
6438
6502
  //#endregion