fix: migrate 11 remaining files missed by component sweep
editor-ai, guides, maintenance, scripts, settings, NavItem, and dashboard active-glow removal. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -70,10 +70,7 @@ export function PerformanceCards() {
|
|||||||
<button
|
<button
|
||||||
key={card.label}
|
key={card.label}
|
||||||
onClick={() => navigate(card.href)}
|
onClick={() => navigate(card.href)}
|
||||||
className={cn(
|
className="card-interactive p-4 text-left fade-in"
|
||||||
'card-interactive p-4 text-left fade-in',
|
|
||||||
i === 0 && 'active-glow'
|
|
||||||
)}
|
|
||||||
style={{ animationDelay: `${400 + i * 60}ms` }}
|
style={{ animationDelay: `${400 + i * 60}ms` }}
|
||||||
>
|
>
|
||||||
<div className="flex items-center justify-between mb-2">
|
<div className="flex items-center justify-between mb-2">
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ export function QuickStats({ stats }: QuickStatsProps) {
|
|||||||
{stats.map((stat, i) => (
|
{stats.map((stat, i) => (
|
||||||
<div
|
<div
|
||||||
key={stat.label}
|
key={stat.label}
|
||||||
className={cn('card-interactive p-4 fade-in', i === 0 && 'active-glow')}
|
className={cn('card-interactive p-4 fade-in')}
|
||||||
style={{ animationDelay: `${50 + i * 30}ms` }}
|
style={{ animationDelay: `${50 + i * 30}ms` }}
|
||||||
>
|
>
|
||||||
<p className="font-sans text-xs text-[0.625rem] font-medium uppercase tracking-widest text-[#848b9b]">
|
<p className="font-sans text-xs text-[0.625rem] font-medium uppercase tracking-widest text-[#848b9b]">
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ export function AIPromptDialog({
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
{/* Dialog */}
|
{/* Dialog */}
|
||||||
<div className="glass-card-static relative w-full max-w-lg p-6 shadow-xl">
|
<div className="card-flat relative w-full max-w-lg p-6 shadow-xl">
|
||||||
<div className="flex items-center gap-2 mb-4">
|
<div className="flex items-center gap-2 mb-4">
|
||||||
<Sparkles className="h-5 w-5 text-primary" />
|
<Sparkles className="h-5 w-5 text-primary" />
|
||||||
<h2 className="text-lg font-heading font-semibold text-foreground">
|
<h2 className="text-lg font-heading font-semibold text-foreground">
|
||||||
@@ -90,7 +90,7 @@ export function AIPromptDialog({
|
|||||||
<button
|
<button
|
||||||
onClick={handleGenerate}
|
onClick={handleGenerate}
|
||||||
disabled={!prompt.trim() || isGenerating}
|
disabled={!prompt.trim() || isGenerating}
|
||||||
className="flex items-center gap-2 rounded-[10px] bg-gradient-brand px-4 py-2 text-sm font-semibold text-brand-dark shadow-lg shadow-primary/20 hover:opacity-90 active:scale-[0.97] transition-all disabled:opacity-50"
|
className="flex items-center gap-2 rounded-lg bg-[#22d3ee] px-4 py-2 text-sm font-semibold text-white hover:brightness-110 active:scale-[0.98] transition-all disabled:opacity-50"
|
||||||
>
|
>
|
||||||
{isGenerating ? (
|
{isGenerating ? (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ export function ChatTab({ messages, input, onInputChange, onSend, isLoading }: C
|
|||||||
<button
|
<button
|
||||||
onClick={onSend}
|
onClick={onSend}
|
||||||
disabled={!input.trim() || isLoading}
|
disabled={!input.trim() || isLoading}
|
||||||
className="bg-gradient-brand text-brand-dark p-2.5 rounded-xl hover:opacity-90 active:scale-[0.97] transition-all disabled:opacity-40"
|
className="bg-[#22d3ee] text-white p-2.5 rounded-xl hover:brightness-110 active:scale-[0.98] transition-all disabled:opacity-40"
|
||||||
>
|
>
|
||||||
<Send size={16} />
|
<Send size={16} />
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ export function GuideCard({ guide }: GuideCardProps) {
|
|||||||
return (
|
return (
|
||||||
<Link
|
<Link
|
||||||
to={`/guides/${guide.slug}`}
|
to={`/guides/${guide.slug}`}
|
||||||
className="glass-card block rounded-2xl p-5 transition-all"
|
className="card-interactive block rounded-lg p-5 transition-all"
|
||||||
>
|
>
|
||||||
<div className="flex items-start gap-3.5">
|
<div className="flex items-start gap-3.5">
|
||||||
<div className="flex h-10 w-10 shrink-0 items-center justify-center rounded-xl bg-primary/10">
|
<div className="flex h-10 w-10 shrink-0 items-center justify-center rounded-xl bg-primary/10">
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ export function NavItem({ href, icon: Icon, label, badge, iconColor, matchPaths,
|
|||||||
title={label}
|
title={label}
|
||||||
>
|
>
|
||||||
{isActive && (
|
{isActive && (
|
||||||
<div className="absolute left-0 top-1/2 h-6 w-[3px] -translate-y-1/2 rounded-r-full bg-gradient-brand" />
|
<div className="absolute left-0 top-1/2 h-6 w-[3px] -translate-y-1/2 rounded-r-full bg-[#22d3ee]" />
|
||||||
)}
|
)}
|
||||||
<Icon size={18} className={cn('shrink-0', isActive ? 'opacity-100' : 'opacity-70')} style={iconColor ? { color: iconColor } : undefined} />
|
<Icon size={18} className={cn('shrink-0', isActive ? 'opacity-100' : 'opacity-70')} style={iconColor ? { color: iconColor } : undefined} />
|
||||||
{badge !== undefined && badge !== 0 && badge !== 'dot' && (
|
{badge !== undefined && badge !== 0 && badge !== 'dot' && (
|
||||||
@@ -76,7 +76,7 @@ export function NavItem({ href, icon: Icon, label, badge, iconColor, matchPaths,
|
|||||||
>
|
>
|
||||||
{/* Active indicator bar */}
|
{/* Active indicator bar */}
|
||||||
{isActive && !isParentDimmed && (
|
{isActive && !isParentDimmed && (
|
||||||
<div className="absolute left-0 top-1/2 h-6 w-[3px] -translate-y-1/2 rounded-r-full bg-gradient-brand" />
|
<div className="absolute left-0 top-1/2 h-6 w-[3px] -translate-y-1/2 rounded-r-full bg-[#22d3ee]" />
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<Icon size={18} className={cn('shrink-0', isActive ? 'opacity-100' : 'opacity-70')} style={iconColor ? { color: iconColor } : undefined} />
|
<Icon size={18} className={cn('shrink-0', isActive ? 'opacity-100' : 'opacity-70')} style={iconColor ? { color: iconColor } : undefined} />
|
||||||
|
|||||||
@@ -192,7 +192,7 @@ export function BatchLaunchModal({ treeId, treeName, onClose, onLaunched }: Batc
|
|||||||
<button
|
<button
|
||||||
onClick={handleLaunch}
|
onClick={handleLaunch}
|
||||||
disabled={isLaunching || targets.length === 0}
|
disabled={isLaunching || targets.length === 0}
|
||||||
className="rounded-lg bg-gradient-brand px-4 py-2 text-[0.875rem] font-medium text-white shadow-lg shadow-primary/20 hover:opacity-90 disabled:opacity-50"
|
className="rounded-lg bg-[#22d3ee] px-4 py-2 text-[0.875rem] font-medium text-white hover:brightness-110 disabled:opacity-50"
|
||||||
>
|
>
|
||||||
{isLaunching ? 'Launching\u2026' : targets.length > 0 ? `Launch ${targets.length} Sessions` : 'Launch'}
|
{isLaunching ? 'Launching\u2026' : targets.length > 0 ? `Launch ${targets.length} Sessions` : 'Launch'}
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ export function BatchStatusCard({ session, targetLabel, treeId, batchId }: Batch
|
|||||||
{isNotStarted && (
|
{isNotStarted && (
|
||||||
<button
|
<button
|
||||||
onClick={handleStart}
|
onClick={handleStart}
|
||||||
className="flex items-center gap-1.5 rounded-lg bg-gradient-brand px-3 py-1.5 text-[0.8125rem] font-medium text-white shadow-xs shadow-primary/20 hover:opacity-90 transition-opacity"
|
className="flex items-center gap-1.5 rounded-lg bg-[#22d3ee] px-3 py-1.5 text-[0.8125rem] font-medium text-white hover:brightness-110 transition-opacity"
|
||||||
>
|
>
|
||||||
<Play className="h-3.5 w-3.5" />
|
<Play className="h-3.5 w-3.5" />
|
||||||
Start
|
Start
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ export function ScriptConfigurePane({ canGenerate, onBack }: Props) {
|
|||||||
// Loading state
|
// Loading state
|
||||||
if (isLoadingDetail) {
|
if (isLoadingDetail) {
|
||||||
return (
|
return (
|
||||||
<div className="glass-card-static h-full flex flex-col p-4 overflow-y-auto">
|
<div className="card-flat h-full flex flex-col p-4 overflow-y-auto">
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
onClick={onBack}
|
onClick={onBack}
|
||||||
@@ -73,7 +73,7 @@ export function ScriptConfigurePane({ canGenerate, onBack }: Props) {
|
|||||||
// First-selection failure state
|
// First-selection failure state
|
||||||
if (!selectedTemplate) {
|
if (!selectedTemplate) {
|
||||||
return (
|
return (
|
||||||
<div className="glass-card-static h-full flex flex-col p-4 overflow-y-auto">
|
<div className="card-flat h-full flex flex-col p-4 overflow-y-auto">
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
onClick={onBack}
|
onClick={onBack}
|
||||||
@@ -95,7 +95,7 @@ export function ScriptConfigurePane({ canGenerate, onBack }: Props) {
|
|||||||
const extraTagCount = selectedTemplate.tags.length - 3
|
const extraTagCount = selectedTemplate.tags.length - 3
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="glass-card-static h-full flex flex-col p-4 overflow-y-auto">
|
<div className="card-flat h-full flex flex-col p-4 overflow-y-auto">
|
||||||
{/* Back button */}
|
{/* Back button */}
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
@@ -171,7 +171,7 @@ export function ScriptConfigurePane({ canGenerate, onBack }: Props) {
|
|||||||
type="button"
|
type="button"
|
||||||
onClick={() => generate()}
|
onClick={() => generate()}
|
||||||
disabled={isGenerating || !canGenerate}
|
disabled={isGenerating || !canGenerate}
|
||||||
className="w-full flex items-center justify-center gap-1.5 bg-gradient-brand text-[#101114] font-semibold text-sm px-4 py-2 rounded-[10px] hover:opacity-90 active:scale-[0.97] transition-all shadow-lg shadow-primary/20 disabled:opacity-50 disabled:cursor-not-allowed disabled:active:scale-100"
|
className="w-full flex items-center justify-center gap-1.5 bg-[#22d3ee] text-white font-semibold text-sm px-4 py-2 rounded-lg hover:brightness-110 active:scale-[0.98] transition-all disabled:opacity-50 disabled:cursor-not-allowed disabled:active:scale-100"
|
||||||
>
|
>
|
||||||
{isGenerating && <Loader2 size={14} className="animate-spin" />}
|
{isGenerating && <Loader2 size={14} className="animate-spin" />}
|
||||||
Generate Script
|
Generate Script
|
||||||
|
|||||||
@@ -227,7 +227,7 @@ export function SessionFilters({ filters, onChange, onClear, trees }: SessionFil
|
|||||||
setShowDatePicker(false)
|
setShowDatePicker(false)
|
||||||
}}
|
}}
|
||||||
className={cn(
|
className={cn(
|
||||||
'flex-1 rounded-md bg-gradient-brand px-3 py-1.5 text-sm font-medium text-white shadow-lg shadow-primary/20',
|
'flex-1 rounded-md bg-[#22d3ee] px-3 py-1.5 text-sm font-medium text-white',
|
||||||
'hover:brightness-110'
|
'hover:brightness-110'
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ export function BrandingSettings({ teamId }: BrandingSettingsProps) {
|
|||||||
|
|
||||||
if (isLoading) {
|
if (isLoading) {
|
||||||
return (
|
return (
|
||||||
<div className="glass-card-static p-4 sm:p-6">
|
<div className="card-flat p-4 sm:p-6">
|
||||||
<div className="flex items-center gap-2">
|
<div className="flex items-center gap-2">
|
||||||
<Palette className="h-5 w-5 text-muted-foreground" />
|
<Palette className="h-5 w-5 text-muted-foreground" />
|
||||||
<h2 className="text-lg font-semibold text-foreground">Branding</h2>
|
<h2 className="text-lg font-semibold text-foreground">Branding</h2>
|
||||||
@@ -127,7 +127,7 @@ export function BrandingSettings({ teamId }: BrandingSettingsProps) {
|
|||||||
const hasChanges = companyName !== (branding?.company_display_name || '') || logoFile !== null
|
const hasChanges = companyName !== (branding?.company_display_name || '') || logoFile !== null
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="glass-card-static p-4 sm:p-6">
|
<div className="card-flat p-4 sm:p-6">
|
||||||
<div className="flex items-center gap-2">
|
<div className="flex items-center gap-2">
|
||||||
<Palette className="h-5 w-5 text-muted-foreground" />
|
<Palette className="h-5 w-5 text-muted-foreground" />
|
||||||
<h2 className="text-lg font-semibold text-foreground">Branding</h2>
|
<h2 className="text-lg font-semibold text-foreground">Branding</h2>
|
||||||
|
|||||||
Reference in New Issue
Block a user