Adds the styling foundation for the UI redesign (vibe-kanban / Magentic-UI / Langflow references): Tailwind CSS + shadcn/ui primitives, HSL design tokens (index.css) ported from theme.css, @/ alias, and the App.tsx Board|Pipeline tabs shell. Extends StateResponse with the backend's existing stages[] for the Board. theme.css kept transiently until components migrate to Tailwind. No backend changes. Component fan-out (Board, MapNode, TaskDrawer, TopBar) follows.
100 lines
3.2 KiB
JavaScript
100 lines
3.2 KiB
JavaScript
import animate from "tailwindcss-animate";
|
|
|
|
/**
|
|
* Tailwind config for the agent-team dashboard.
|
|
*
|
|
* Colors are driven by HSL CSS variables defined in src/index.css (shadcn/ui
|
|
* convention) so the dark theme stays in one place. On top of the standard
|
|
* shadcn tokens we add pipeline `status.*` colors (active/waiting/parked/done/
|
|
* failed) that the Board, MapNode, and badges share.
|
|
*/
|
|
/** @type {import('tailwindcss').Config} */
|
|
export default {
|
|
darkMode: ["class"],
|
|
content: ["./index.html", "./src/**/*.{ts,tsx}"],
|
|
theme: {
|
|
extend: {
|
|
colors: {
|
|
border: "hsl(var(--border))",
|
|
input: "hsl(var(--input))",
|
|
ring: "hsl(var(--ring))",
|
|
background: "hsl(var(--background))",
|
|
foreground: "hsl(var(--foreground))",
|
|
primary: {
|
|
DEFAULT: "hsl(var(--primary))",
|
|
foreground: "hsl(var(--primary-foreground))",
|
|
},
|
|
secondary: {
|
|
DEFAULT: "hsl(var(--secondary))",
|
|
foreground: "hsl(var(--secondary-foreground))",
|
|
},
|
|
muted: {
|
|
DEFAULT: "hsl(var(--muted))",
|
|
foreground: "hsl(var(--muted-foreground))",
|
|
},
|
|
accent: {
|
|
DEFAULT: "hsl(var(--accent))",
|
|
foreground: "hsl(var(--accent-foreground))",
|
|
},
|
|
destructive: {
|
|
DEFAULT: "hsl(var(--destructive))",
|
|
foreground: "hsl(var(--destructive-foreground))",
|
|
},
|
|
card: {
|
|
DEFAULT: "hsl(var(--card))",
|
|
foreground: "hsl(var(--card-foreground))",
|
|
},
|
|
popover: {
|
|
DEFAULT: "hsl(var(--popover))",
|
|
foreground: "hsl(var(--popover-foreground))",
|
|
},
|
|
// Pipeline status palette — each has a tinted surface (`bg`) and a
|
|
// bright foreground (`fg`), mirroring the original theme.css mapping.
|
|
status: {
|
|
active: "hsl(var(--status-active))",
|
|
"active-bg": "hsl(var(--status-active-bg))",
|
|
waiting: "hsl(var(--status-waiting))",
|
|
"waiting-bg": "hsl(var(--status-waiting-bg))",
|
|
parked: "hsl(var(--status-parked))",
|
|
"parked-bg": "hsl(var(--status-parked-bg))",
|
|
done: "hsl(var(--status-done))",
|
|
"done-bg": "hsl(var(--status-done-bg))",
|
|
failed: "hsl(var(--status-failed))",
|
|
"failed-bg": "hsl(var(--status-failed-bg))",
|
|
},
|
|
},
|
|
borderRadius: {
|
|
lg: "var(--radius)",
|
|
md: "calc(var(--radius) - 2px)",
|
|
sm: "calc(var(--radius) - 4px)",
|
|
},
|
|
fontFamily: {
|
|
sans: [
|
|
"-apple-system",
|
|
"BlinkMacSystemFont",
|
|
"Segoe UI",
|
|
"Roboto",
|
|
"Helvetica",
|
|
"Arial",
|
|
"sans-serif",
|
|
],
|
|
mono: ["ui-monospace", "SFMono-Regular", "Menlo", "monospace"],
|
|
},
|
|
keyframes: {
|
|
"accordion-down": {
|
|
from: { height: "0" },
|
|
to: { height: "var(--radix-accordion-content-height)" },
|
|
},
|
|
"accordion-up": {
|
|
from: { height: "var(--radix-accordion-content-height)" },
|
|
to: { height: "0" },
|
|
},
|
|
},
|
|
animation: {
|
|
"accordion-down": "accordion-down 0.2s ease-out",
|
|
"accordion-up": "accordion-up 0.2s ease-out",
|
|
},
|
|
},
|
|
},
|
|
plugins: [animate],
|
|
};
|