From b1e2c8fd5cb5dfa46bc440a12eafaf56cd844b1c Mon Sep 17 00:00:00 2001 From: Philipp Tanlak Date: Mon, 24 Nov 2025 20:54:57 +0100 Subject: Docs --- .../src/lib/normalizeTailwindDirectives.js | 84 ++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 node_modules/tailwindcss/src/lib/normalizeTailwindDirectives.js (limited to 'node_modules/tailwindcss/src/lib/normalizeTailwindDirectives.js') diff --git a/node_modules/tailwindcss/src/lib/normalizeTailwindDirectives.js b/node_modules/tailwindcss/src/lib/normalizeTailwindDirectives.js new file mode 100644 index 0000000..3349a7e --- /dev/null +++ b/node_modules/tailwindcss/src/lib/normalizeTailwindDirectives.js @@ -0,0 +1,84 @@ +import log from '../util/log' + +export default function normalizeTailwindDirectives(root) { + let tailwindDirectives = new Set() + let layerDirectives = new Set() + let applyDirectives = new Set() + + root.walkAtRules((atRule) => { + if (atRule.name === 'apply') { + applyDirectives.add(atRule) + } + + if (atRule.name === 'import') { + if (atRule.params === '"tailwindcss/base"' || atRule.params === "'tailwindcss/base'") { + atRule.name = 'tailwind' + atRule.params = 'base' + } else if ( + atRule.params === '"tailwindcss/components"' || + atRule.params === "'tailwindcss/components'" + ) { + atRule.name = 'tailwind' + atRule.params = 'components' + } else if ( + atRule.params === '"tailwindcss/utilities"' || + atRule.params === "'tailwindcss/utilities'" + ) { + atRule.name = 'tailwind' + atRule.params = 'utilities' + } else if ( + atRule.params === '"tailwindcss/screens"' || + atRule.params === "'tailwindcss/screens'" || + atRule.params === '"tailwindcss/variants"' || + atRule.params === "'tailwindcss/variants'" + ) { + atRule.name = 'tailwind' + atRule.params = 'variants' + } + } + + if (atRule.name === 'tailwind') { + if (atRule.params === 'screens') { + atRule.params = 'variants' + } + tailwindDirectives.add(atRule.params) + } + + if (['layer', 'responsive', 'variants'].includes(atRule.name)) { + if (['responsive', 'variants'].includes(atRule.name)) { + log.warn(`${atRule.name}-at-rule-deprecated`, [ + `The \`@${atRule.name}\` directive has been deprecated in Tailwind CSS v3.0.`, + `Use \`@layer utilities\` or \`@layer components\` instead.`, + 'https://tailwindcss.com/docs/upgrade-guide#replace-variants-with-layer', + ]) + } + layerDirectives.add(atRule) + } + }) + + if ( + !tailwindDirectives.has('base') || + !tailwindDirectives.has('components') || + !tailwindDirectives.has('utilities') + ) { + for (let rule of layerDirectives) { + if (rule.name === 'layer' && ['base', 'components', 'utilities'].includes(rule.params)) { + if (!tailwindDirectives.has(rule.params)) { + throw rule.error( + `\`@layer ${rule.params}\` is used but no matching \`@tailwind ${rule.params}\` directive is present.` + ) + } + } else if (rule.name === 'responsive') { + if (!tailwindDirectives.has('utilities')) { + throw rule.error('`@responsive` is used but `@tailwind utilities` is missing.') + } + } else if (rule.name === 'variants') { + if (!tailwindDirectives.has('utilities')) { + throw rule.error('`@variants` is used but `@tailwind utilities` is missing.') + } + } + } + } + + return { tailwindDirectives, applyDirectives } +} -- cgit v1.2.3