Skip to content

Commit

Permalink
feat: react-ui tailwindcss plugin (#413)
Browse files Browse the repository at this point in the history
  • Loading branch information
Yonom authored Jul 6, 2024
1 parent bb9241b commit 07a3a42
Show file tree
Hide file tree
Showing 6 changed files with 113 additions and 43 deletions.
3 changes: 0 additions & 3 deletions apps/www/pages/_app.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,6 @@ import React from "react";

import "./styles.css";
import "@radix-ui/themes/styles.css";
import "@assistant-ui/react-ui/styles.css";
import "@assistant-ui/react-ui/markdown-styles.css";
import "@assistant-ui/react-ui/themes/default.css";

export default function MyApp({ Component, pageProps }: AppProps) {
return (
Expand Down
9 changes: 8 additions & 1 deletion apps/www/tailwind.config.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import type { Config } from "tailwindcss";
import auiPlugin from "@assistant-ui/react-ui/tailwindcss";

const config = {
darkMode: "class",
Expand Down Expand Up @@ -76,7 +77,13 @@ const config = {
},
},
},
plugins: [require("@tailwindcss/typography"), require("tailwindcss-animate")],
plugins: [
require("@tailwindcss/typography"),
require("tailwindcss-animate"),
auiPlugin({
components: ["thread", "assistant-modal", "markdown"],
}),
],
} satisfies Config;

export default config;
12 changes: 11 additions & 1 deletion packages/react-ui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,16 @@
"default": "./dist/index.js"
}
},
"./tailwindcss": {
"import": {
"types": "./dist/tailwindcss.d.mts",
"default": "./dist/tailwindcss.mjs"
},
"require": {
"types": "./dist/tailwindcss.d.ts",
"default": "./dist/tailwindcss.js"
}
},
"./styles.css": {
"types": "./dist/styles.css.d.ts",
"default": "./dist/styles.css"
Expand All @@ -39,7 +49,7 @@
"README.md"
],
"scripts": {
"build": "tsup"
"build": "tsup && tsup --config tsup.plugin.config.ts"
},
"dependencies": {
"@assistant-ui/react-markdown": "workspace:*",
Expand Down
82 changes: 82 additions & 0 deletions packages/react-ui/src/tailwindcss.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import plugin from "tailwindcss/plugin";

type AssisstantTailwindPluginOptions = {
components?: ("markdown" | "thread" | "assistant-modal")[];
shadcn?: boolean;
};

const auiPlugin = plugin.withOptions<AssisstantTailwindPluginOptions>(
({ components = [], shadcn = false } = {}) =>
({ addComponents }) => {
const markdown = components.includes("markdown");
const assistantModal = components.includes("assistant-modal");
const thread =
markdown || assistantModal || components.includes("thread");

if (thread) {
addComponents({
'@import "@assistant-ui/react-ui/styles.css"': "",
});

if (!shadcn) {
addComponents({
'@import "@assistant-ui/react-ui/themes/default.css"': "",
});
}
}

if (markdown) {
addComponents({
'@import "@assistant-ui/react-ui/markdown-styles.css"': "",
});
}
},
({ shadcn = false } = {}) => {
const prefix = shadcn ? "--aui-" : "--";
return {
theme: {
extend: {
colors: {
aui: {
border: `hsl(var(${prefix}border))`,
input: `hsl(var(${prefix}input))`,
ring: `hsl(var(${prefix}ring))`,
background: `hsl(var(${prefix}background))`,
foreground: `hsl(var(${prefix}foreground))`,
primary: {
DEFAULT: `hsl(var(${prefix}primary))`,
foreground: `hsl(var(${prefix}primary-foreground))`,
},
// secondary: {
// DEFAULT: "hsl(var(--aui-secondary))",
// foreground: "hsl(var(--aui-secondary-foreground))",
// },
// destructive: {
// DEFAULT: "hsl(var(--aui-destructive))",
// foreground: "hsl(var(--aui-destructive-foreground))",
// },
muted: {
DEFAULT: `hsl(var(${prefix}muted))`,
foreground: `hsl(var(${prefix}muted-foreground))`,
},
accent: {
DEFAULT: `hsl(var(${prefix}accent))`,
foreground: `hsl(var(${prefix}accent-foreground))`,
},
popover: {
DEFAULT: `hsl(var(${prefix}popover))`,
foreground: `hsl(var(${prefix}popover-foreground))`,
},
card: {
DEFAULT: `hsl(var(${prefix}card))`,
foreground: `hsl(var(${prefix}card-foreground))`,
},
},
},
},
},
};
},
);

export default auiPlugin;
39 changes: 1 addition & 38 deletions packages/react-ui/tailwind.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,51 +41,14 @@ const config = {
},
},
extend: {
colors: {
aui: {
border: "hsl(var(--aui-border))",
input: "hsl(var(--aui-input))",
ring: "hsl(var(--aui-ring))",
background: "hsl(var(--aui-background))",
foreground: "hsl(var(--aui-foreground))",
primary: {
DEFAULT: "hsl(var(--aui-primary))",
foreground: "hsl(var(--aui-primary-foreground))",
},
// secondary: {
// DEFAULT: "hsl(var(--aui-secondary))",
// foreground: "hsl(var(--aui-secondary-foreground))",
// },
// destructive: {
// DEFAULT: "hsl(var(--aui-destructive))",
// foreground: "hsl(var(--aui-destructive-foreground))",
// },
muted: {
DEFAULT: "hsl(var(--aui-muted))",
foreground: "hsl(var(--aui-muted-foreground))",
},
accent: {
DEFAULT: "hsl(var(--aui-accent))",
foreground: "hsl(var(--aui-accent-foreground))",
},
popover: {
DEFAULT: "hsl(var(--aui-popover))",
foreground: "hsl(var(--aui-popover-foreground))",
},
card: {
DEFAULT: "hsl(var(--aui-card))",
foreground: "hsl(var(--aui-card-foreground))",
},
},
},
borderRadius: {
lg: "var(--aui-radius)",
md: "calc(var(--aui-radius) - 2px)",
sm: "calc(var(--aui-radius) - 4px)",
},
},
},
plugins: [require("tailwindcss-animate")],
plugins: [require("tailwindcss-animate"), require("./src/tailwindcss")],
} satisfies Config;

export default config;
11 changes: 11 additions & 0 deletions packages/react-ui/tsup.plugin.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { defineConfig } from "tsup";

export default defineConfig(() => {
return {
entry: ["src/tailwindcss.ts"],
format: ["cjs", "esm"],
dts: true,
sourcemap: true,
external: ["tailwindcss/plugin"],
};
});

0 comments on commit 07a3a42

Please sign in to comment.