+
diff --git a/apps/console/components/ui/button.tsx b/apps/console/components/ui/button.tsx
index 974e1c9..359cd59 100644
--- a/apps/console/components/ui/button.tsx
+++ b/apps/console/components/ui/button.tsx
@@ -4,23 +4,23 @@ import type { ButtonHTMLAttributes } from "react";
import { cn } from "@/lib/utils";
const buttonVariants = cva(
- "inline-flex items-center justify-center gap-1.5 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50 [&_svg]:size-4 [&_svg]:shrink-0",
+ "inline-flex items-center justify-center gap-1.5 whitespace-nowrap rounded-lg text-sm font-medium transition-[background-color,box-shadow,transform,color,border-color] duration-150 active:translate-y-px focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50 focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50 disabled:active:translate-y-0 [&_svg]:size-4 [&_svg]:shrink-0",
{
variants: {
variant: {
// "primary"/"secondary" kept as the canonical names the existing call sites use.
- primary: "bg-primary text-primary-foreground hover:bg-primary/90",
+ primary: "bg-primary text-primary-foreground shadow-sm hover:bg-primary/90",
secondary:
- "border border-input bg-background text-foreground hover:bg-accent hover:text-accent-foreground",
+ "border border-input bg-card text-foreground shadow-sm hover:bg-accent hover:text-accent-foreground",
outline:
"border border-input bg-transparent hover:bg-accent hover:text-accent-foreground",
ghost: "hover:bg-accent hover:text-accent-foreground",
- destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
+ destructive: "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
},
size: {
- default: "h-8 px-3 py-1.5",
- sm: "h-7 rounded-sm px-2.5 text-xs",
- icon: "h-8 w-8",
+ default: "h-9 px-3.5 py-2",
+ sm: "h-8 rounded-md px-2.5 text-xs",
+ icon: "h-9 w-9",
},
},
defaultVariants: { variant: "primary", size: "default" },
diff --git a/apps/console/components/ui/card.tsx b/apps/console/components/ui/card.tsx
index 726c69a..645c99d 100644
--- a/apps/console/components/ui/card.tsx
+++ b/apps/console/components/ui/card.tsx
@@ -5,7 +5,9 @@ export function Card({ className, children }: { className?: string; children: Re
return (
@@ -16,7 +18,12 @@ export function Card({ className, children }: { className?: string; children: Re
export function CardTitle({ className, children }: { className?: string; children: ReactNode }) {
return (
-
+
{children}
);
diff --git a/apps/console/components/ui/empty-state.tsx b/apps/console/components/ui/empty-state.tsx
new file mode 100644
index 0000000..3ff75bb
--- /dev/null
+++ b/apps/console/components/ui/empty-state.tsx
@@ -0,0 +1,35 @@
+import type { ComponentType, ReactNode } from "react";
+import { cn } from "@/lib/utils";
+
+/** A calm placeholder for empty / unavailable data — replaces bare `
` messages. */
+export function EmptyState({
+ icon: Icon,
+ title,
+ description,
+ className,
+ children,
+}: {
+ icon?: ComponentType<{ className?: string }>;
+ title: string;
+ description?: ReactNode;
+ className?: string;
+ children?: ReactNode;
+}) {
+ return (
+
+ {Icon && (
+
+
+
+ )}
+
{title}
+ {description &&
{description}
}
+ {children}
+
+ );
+}
diff --git a/apps/console/components/ui/input.tsx b/apps/console/components/ui/input.tsx
index 4d747b0..eab5bc7 100644
--- a/apps/console/components/ui/input.tsx
+++ b/apps/console/components/ui/input.tsx
@@ -5,7 +5,7 @@ export function Input({ className, ...props }: InputHTMLAttributes
{children};
+ // Allow wide tables to scroll horizontally on small screens without breaking the card.
+ return (
+
+ );
}
export function THead({ children }: { children: ReactNode }) {
return (
-
+
{children}
);
@@ -18,17 +23,26 @@ export function TBody({ children }: { children: ReactNode }) {
}
export function TR({ children, className }: { children: ReactNode; className?: string }) {
- return {children}
;
+ return (
+
+ {children}
+
+ );
}
export function TH({ children }: { children: ReactNode }) {
return (
-
+ |
{children}
|
);
}
export function TD({ children, className }: { children: ReactNode; className?: string }) {
- return {children} | ;
+ return {children} | ;
}
diff --git a/apps/console/components/ui/textarea.tsx b/apps/console/components/ui/textarea.tsx
index 77dbd1b..dd5bec6 100644
--- a/apps/console/components/ui/textarea.tsx
+++ b/apps/console/components/ui/textarea.tsx
@@ -5,7 +5,7 @@ export function Textarea({ className, ...props }: TextareaHTMLAttributes
@@ -61,7 +61,7 @@ export function WorkspaceViewer({ jobId, files }: { jobId: string; files: Worksp
) : file.encoding === "base64" ? (
Binary file · {file.bytes} bytes
) : (
-
+
{file.content}
)}