feat(frontend): scaffold Vite+React+TS+Tailwind/ShadCn + Vitest
TDD: App-renders-ThothII test RED then GREEN. ShadCn v4 (base-nova style) init + button/checkbox/radio-group/textarea/card/dialog/badge/sonner added. tailwind.config.ts extended with oklch CSS-variable color mapping required by ShadCn v4 @apply directives. npm test passes; npm run build clean. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
import type { Config } from "tailwindcss";
|
||||
|
||||
export default {
|
||||
content: ["./index.html", "./src/**/*.{ts,tsx}"],
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
background: "oklch(var(--background) / <alpha-value>)",
|
||||
foreground: "oklch(var(--foreground) / <alpha-value>)",
|
||||
card: {
|
||||
DEFAULT: "oklch(var(--card) / <alpha-value>)",
|
||||
foreground: "oklch(var(--card-foreground) / <alpha-value>)",
|
||||
},
|
||||
popover: {
|
||||
DEFAULT: "oklch(var(--popover) / <alpha-value>)",
|
||||
foreground: "oklch(var(--popover-foreground) / <alpha-value>)",
|
||||
},
|
||||
primary: {
|
||||
DEFAULT: "oklch(var(--primary) / <alpha-value>)",
|
||||
foreground: "oklch(var(--primary-foreground) / <alpha-value>)",
|
||||
},
|
||||
secondary: {
|
||||
DEFAULT: "oklch(var(--secondary) / <alpha-value>)",
|
||||
foreground: "oklch(var(--secondary-foreground) / <alpha-value>)",
|
||||
},
|
||||
muted: {
|
||||
DEFAULT: "oklch(var(--muted) / <alpha-value>)",
|
||||
foreground: "oklch(var(--muted-foreground) / <alpha-value>)",
|
||||
},
|
||||
accent: {
|
||||
DEFAULT: "oklch(var(--accent) / <alpha-value>)",
|
||||
foreground: "oklch(var(--accent-foreground) / <alpha-value>)",
|
||||
},
|
||||
destructive: {
|
||||
DEFAULT: "oklch(var(--destructive) / <alpha-value>)",
|
||||
},
|
||||
border: "oklch(var(--border) / <alpha-value>)",
|
||||
input: "oklch(var(--input) / <alpha-value>)",
|
||||
ring: "oklch(var(--ring) / <alpha-value>)",
|
||||
sidebar: {
|
||||
DEFAULT: "oklch(var(--sidebar) / <alpha-value>)",
|
||||
foreground: "oklch(var(--sidebar-foreground) / <alpha-value>)",
|
||||
primary: "oklch(var(--sidebar-primary) / <alpha-value>)",
|
||||
"primary-foreground": "oklch(var(--sidebar-primary-foreground) / <alpha-value>)",
|
||||
accent: "oklch(var(--sidebar-accent) / <alpha-value>)",
|
||||
"accent-foreground": "oklch(var(--sidebar-accent-foreground) / <alpha-value>)",
|
||||
border: "oklch(var(--sidebar-border) / <alpha-value>)",
|
||||
ring: "oklch(var(--sidebar-ring) / <alpha-value>)",
|
||||
},
|
||||
},
|
||||
borderRadius: {
|
||||
lg: "var(--radius)",
|
||||
md: "calc(var(--radius) - 2px)",
|
||||
sm: "calc(var(--radius) - 4px)",
|
||||
},
|
||||
fontFamily: {
|
||||
sans: ["var(--font-sans)", "sans-serif"],
|
||||
heading: ["var(--font-heading)", "sans-serif"],
|
||||
},
|
||||
},
|
||||
},
|
||||
plugins: [],
|
||||
} satisfies Config;
|
||||
Reference in New Issue
Block a user