summaryrefslogtreecommitdiff
path: root/packages/integrations/tailwind/src
diff options
context:
space:
mode:
authorGravatar Bjorn Lu <bjornlu.dev@gmail.com> 2023-12-28 00:34:01 +0700
committerGravatar GitHub <noreply@github.com> 2023-12-27 12:34:01 -0500
commitd252fc61b04c1491f51822f5e23fabd404d84d40 (patch)
tree25fdb45853238821af98fac9f720887c4ff7aaeb /packages/integrations/tailwind/src
parentcf993bc263b58502096f00d383266cd179f331af (diff)
downloadastro-d252fc61b04c1491f51822f5e23fabd404d84d40.tar.gz
astro-d252fc61b04c1491f51822f5e23fabd404d84d40.tar.zst
astro-d252fc61b04c1491f51822f5e23fabd404d84d40.zip
Add tailwindcss nesting support (#9529)
* Add tailwindcss nesting support * Update lockfile
Diffstat (limited to 'packages/integrations/tailwind/src')
-rw-r--r--packages/integrations/tailwind/src/index.ts26
1 files changed, 23 insertions, 3 deletions
diff --git a/packages/integrations/tailwind/src/index.ts b/packages/integrations/tailwind/src/index.ts
index 5f30ae4b6..1da44f5dd 100644
--- a/packages/integrations/tailwind/src/index.ts
+++ b/packages/integrations/tailwind/src/index.ts
@@ -1,3 +1,4 @@
+import { fileURLToPath } from 'node:url';
import type { AstroIntegration } from 'astro';
import autoprefixerPlugin from 'autoprefixer';
import tailwindPlugin from 'tailwindcss';
@@ -23,15 +24,22 @@ async function getPostCssConfig(
async function getViteConfiguration(
tailwindConfigPath: string | undefined,
- viteConfig: UserConfig
+ nesting: boolean,
+ root: string,
+ postcssInlineOptions: CSSOptions['postcss']
): Promise<Partial<UserConfig>> {
// We need to manually load postcss config files because when inlining the tailwind and autoprefixer plugins,
// that causes vite to ignore postcss config files
- const postcssConfigResult = await getPostCssConfig(viteConfig.root, viteConfig.css?.postcss);
+ const postcssConfigResult = await getPostCssConfig(root, postcssInlineOptions);
const postcssOptions = postcssConfigResult?.options ?? {};
const postcssPlugins = postcssConfigResult?.plugins?.slice() ?? [];
+ if (nesting) {
+ const tailwindcssNestingPlugin = (await import('tailwindcss/nesting/index.js')).default;
+ postcssPlugins.push(tailwindcssNestingPlugin());
+ }
+
postcssPlugins.push(tailwindPlugin(tailwindConfigPath));
postcssPlugins.push(autoprefixerPlugin());
@@ -59,18 +67,30 @@ type TailwindOptions = {
* @default true
*/
applyBaseStyles?: boolean;
+ /**
+ * Add CSS nesting support using `tailwindcss/nesting`. See {@link https://tailwindcss.com/docs/using-with-preprocessors#nesting Tailwind's docs}
+ * for how this works with `postcss-nesting` and `postcss-nested`.
+ */
+ nesting?: boolean;
};
export default function tailwindIntegration(options?: TailwindOptions): AstroIntegration {
const applyBaseStyles = options?.applyBaseStyles ?? true;
const customConfigPath = options?.configFile;
+ const nesting = options?.nesting ?? false;
+
return {
name: '@astrojs/tailwind',
hooks: {
'astro:config:setup': async ({ config, updateConfig, injectScript }) => {
// Inject the Tailwind postcss plugin
updateConfig({
- vite: await getViteConfiguration(customConfigPath, config.vite),
+ vite: await getViteConfiguration(
+ customConfigPath,
+ nesting,
+ fileURLToPath(config.root),
+ config.vite.css?.postcss
+ ),
});
if (applyBaseStyles) {