Replace the two bespoke textarea composers (SpawnBox / ResumeBox) with the shared RichInput from the design system, so both share one input with all features combined: auto-grow textarea, localStorage draft, file attachments, prompt-shortcut toggles, project/service #-mention tags, history recall and reverse-search. - New lib/richComposer.tsx adapts app concepts to RichInput's GuidelineTag / RichFile vocabulary and rebuilds the exact prompt block format via the existing composePrompt (thread viewer still strips the attachments block). - SpawnBox keeps its app-level un-send lifecycle (optimistic You card, sync-and-redirect) around RichInput; resume gains file attachments and keeps its guidelines master switch (now in the toolbar). - Bump vendored @gabvdl/ui 0.3.0 -> 0.4.0 (adds RichInput + setFiles handle). - Add popover/destructive design tokens so RichInput's menus render. - Drop now-unused lib/useDraft, lib/tagMention and the shortcut chip helpers. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
48 lines
1.8 KiB
JavaScript
48 lines
1.8 KiB
JavaScript
/** @type {import('tailwindcss').Config} */
|
|
export default {
|
|
darkMode: "class",
|
|
content: [
|
|
"./index.html",
|
|
"./src/**/*.{ts,tsx}",
|
|
// Scan the vendored @gabvdl/ui build so utility classes it emits (e.g. the
|
|
// ProgressiveList reveal transition) survive Tailwind's purge.
|
|
"./node_modules/@gabvdl/ui/dist/**/*.js",
|
|
],
|
|
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))" },
|
|
popover: { DEFAULT: "hsl(var(--popover))", foreground: "hsl(var(--popover-foreground))" },
|
|
destructive: { DEFAULT: "hsl(var(--destructive))", foreground: "hsl(var(--destructive-foreground))" },
|
|
card: { DEFAULT: "hsl(var(--card))", foreground: "hsl(var(--card-foreground))" },
|
|
},
|
|
borderRadius: {
|
|
lg: "var(--radius)",
|
|
md: "calc(var(--radius) - 2px)",
|
|
sm: "calc(var(--radius) - 4px)",
|
|
},
|
|
fontFamily: {
|
|
mono: ["ui-monospace", "SFMono-Regular", "Menlo", "monospace"],
|
|
},
|
|
keyframes: {
|
|
"wifi-flash": {
|
|
"0%, 100%": { color: "#ef4444", opacity: "1" },
|
|
"50%": { color: "#0a0a0a", opacity: "0.85" },
|
|
},
|
|
},
|
|
animation: {
|
|
"wifi-flash": "wifi-flash 1.6s ease-in-out infinite",
|
|
},
|
|
},
|
|
},
|
|
plugins: [require("tailwindcss-animate")],
|
|
};
|