tpmjs/packages/config/tailwind/base.ts
Ajax Davis a137afd65d feat: redesign dashboard with sidebar layout and table components
- Add new Table UI component with rich features (sorting, empty states, interactive rows)
- Create DashboardLayout component with sidebar navigation
- Redesign Agents page with table layout showing provider, tools, and actions
- Redesign Collections page with table layout showing visibility and tool counts
- Add surface-secondary color token for proper dark mode support
- Add home and user icons to icon library
- Fix missing foreground-quaternary with muted color

🤖 Generated with [Claude Code](https://claude.ai/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-07 18:40:52 +10:00

199 lines
5.9 KiB
TypeScript

import type { Config } from 'tailwindcss';
export default {
content: [],
safelist: [
// Custom border utilities
'border-dotted-1',
'border-dotted-2',
'border-dashed-1',
'border-t-dotted',
'border-b-dotted',
'border-l-dotted',
'border-r-dotted',
// Custom shadow utilities
'shadow-blueprint',
'shadow-blueprint-hover',
// Grid backgrounds
'dotted-grid-background',
'blueprint-background',
'grid-background',
],
theme: {
extend: {
colors: {
// Backgrounds & Surfaces
background: 'hsl(var(--background))',
surface: 'hsl(var(--surface))',
'surface-secondary': 'hsl(var(--surface-secondary))',
'surface-elevated': 'hsl(var(--surface-elevated))',
'surface-overlay': 'hsl(var(--surface-overlay))',
// Foreground (Text)
foreground: {
DEFAULT: 'hsl(var(--foreground))',
secondary: 'hsl(var(--foreground-secondary))',
tertiary: 'hsl(var(--foreground-tertiary))',
muted: 'hsl(var(--foreground-muted))',
},
// Borders
border: {
DEFAULT: 'hsl(var(--border))',
strong: 'hsl(var(--border-strong))',
subtle: 'hsl(var(--border-subtle))',
},
// Interactive States
primary: {
DEFAULT: 'hsl(var(--primary))',
foreground: 'hsl(var(--primary-foreground))',
},
secondary: {
DEFAULT: 'hsl(var(--secondary))',
foreground: 'hsl(var(--secondary-foreground))',
},
accent: {
DEFAULT: 'hsl(var(--accent))',
foreground: 'hsl(var(--accent-foreground))',
},
muted: {
DEFAULT: 'hsl(var(--muted))',
foreground: 'hsl(var(--muted-foreground))',
},
// Status Colors
success: {
DEFAULT: 'hsl(var(--success))',
foreground: 'hsl(var(--success-foreground))',
},
error: {
DEFAULT: 'hsl(var(--error))',
foreground: 'hsl(var(--error-foreground))',
},
warning: {
DEFAULT: 'hsl(var(--warning))',
foreground: 'hsl(var(--warning-foreground))',
},
info: {
DEFAULT: 'hsl(var(--info))',
foreground: 'hsl(var(--info-foreground))',
},
// Destructive (legacy support)
destructive: {
DEFAULT: 'hsl(var(--destructive))',
foreground: 'hsl(var(--destructive-foreground))',
},
// Form Elements
input: 'hsl(var(--input))',
ring: 'hsl(var(--ring))',
// Card
card: {
DEFAULT: 'hsl(var(--card))',
foreground: 'hsl(var(--card-foreground))',
},
// Grid/Blueprint
grid: 'hsl(var(--grid-color))',
},
borderRadius: {
sm: 'var(--radius-sm)',
md: 'var(--radius-md)',
lg: 'var(--radius-lg)',
xl: 'var(--radius-xl)',
},
fontFamily: {
sans: 'var(--font-sans)',
mono: 'var(--font-mono)',
},
lineHeight: {
tight: 'var(--leading-tight)',
snug: 'var(--leading-snug)',
normal: 'var(--leading-normal)',
relaxed: 'var(--leading-relaxed)',
loose: 'var(--leading-loose)',
editorial: 'var(--leading-editorial)',
},
letterSpacing: {
tighter: 'var(--tracking-tighter)',
tight: 'var(--tracking-tight)',
normal: 'var(--tracking-normal)',
wide: 'var(--tracking-wide)',
wider: 'var(--tracking-wider)',
widest: 'var(--tracking-widest)',
},
keyframes: {
'slide-up': {
from: { transform: 'translateY(10px)', opacity: '0' },
to: { transform: 'translateY(0)', opacity: '1' },
},
'slide-down': {
from: { transform: 'translateY(-10px)', opacity: '0' },
to: { transform: 'translateY(0)', opacity: '1' },
},
'slide-left': {
from: { transform: 'translateX(10px)', opacity: '0' },
to: { transform: 'translateX(0)', opacity: '1' },
},
'slide-right': {
from: { transform: 'translateX(-10px)', opacity: '0' },
to: { transform: 'translateX(0)', opacity: '1' },
},
'scale-in': {
from: { transform: 'scale(0.95)', opacity: '0' },
to: { transform: 'scale(1)', opacity: '1' },
},
'scale-out': {
from: { transform: 'scale(1)', opacity: '1' },
to: { transform: 'scale(0.95)', opacity: '0' },
},
shimmer: {
'0%': { backgroundPosition: '-1000px 0' },
'100%': { backgroundPosition: '1000px 0' },
},
pulse: {
'0%, 100%': { opacity: '1' },
'50%': { opacity: '0.5' },
},
'grid-pulse': {
'0%, 100%': { opacity: '0.4' },
'50%': { opacity: '0.6' },
},
orbit: {
'0%': {
transform: 'rotate(0deg) translateX(150%) rotate(0deg)',
opacity: '1',
},
'50%': {
opacity: '0.6',
},
'100%': {
transform: 'rotate(360deg) translateX(150%) rotate(-360deg)',
opacity: '1',
},
},
},
animation: {
'slide-up': 'slide-up 300ms cubic-bezier(0.4, 0, 0.2, 1)',
'slide-down': 'slide-down 300ms cubic-bezier(0.4, 0, 0.2, 1)',
'slide-left': 'slide-left 300ms cubic-bezier(0.4, 0, 0.2, 1)',
'slide-right': 'slide-right 300ms cubic-bezier(0.4, 0, 0.2, 1)',
'scale-in': 'scale-in 200ms cubic-bezier(0.4, 0, 0.2, 1)',
'scale-out': 'scale-out 200ms cubic-bezier(0.4, 0, 0.2, 1)',
shimmer: 'shimmer 2s infinite linear',
pulse: 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite',
'grid-pulse': 'grid-pulse 8s ease-in-out infinite',
orbit: 'orbit 1.2s ease-in-out infinite',
},
},
},
plugins: [],
} satisfies Config;