This commit is contained in:
Jack Mechem 2026-05-21 21:13:06 -07:00
parent 3f178f8795
commit c6e6c5ca48
Signed by: jackmechem
SSH key fingerprint: SHA256:GjIjMAC33pzYOe+hWcX5uvgnPrVFAXSrquvt84AOJbU
20 changed files with 664 additions and 277 deletions

View file

@ -32,12 +32,12 @@ function tryPretty(text: string): string {
function methodBg(method: string): string {
switch (method) {
case "GET": return "#2563eb";
case "POST": return "#16a34a";
case "PUT": return "#d97706";
case "GET": return "#428ce2";
case "POST": return "#5dd776";
case "PUT": return "#f59e0b";
case "PATCH": return "#7c3aed";
case "DELETE": return "#dc2626";
default: return "#6b7280";
case "DELETE": return "#ef4444";
default: return "#7b899a";
}
}
@ -124,8 +124,8 @@ export default function DevConsole({
zIndex: 50,
display: "flex",
flexDirection: "column",
background: "#ffffff",
borderLeft: "1px solid #e5e7eb",
background: "var(--color-primary)",
borderLeft: "1px solid var(--color-secondary)",
boxShadow: "-4px 0 24px rgba(0,0,0,0.06)",
transform: open ? "translateX(0)" : "translateX(100%)",
transition: "transform 280ms cubic-bezier(0.4,0,0.2,1)",
@ -158,17 +158,17 @@ export default function DevConsole({
alignItems: "center",
gap: "8px",
padding: "10px 14px",
borderBottom: "1px solid #e5e7eb",
borderBottom: "1px solid var(--color-secondary)",
flexShrink: 0,
background: "#ffffff",
background: "var(--color-primary)",
}}>
<LuTerminal size={13} style={{ color: "#9ca3af" }} />
<LuTerminal size={13} style={{ color: "var(--color-foreground-sec)" }} />
<span style={{
fontSize: "0.65rem",
fontWeight: 700,
letterSpacing: "0.1em",
textTransform: "uppercase",
color: "#9ca3af",
color: "var(--color-foreground-sec)",
}}>
Dev Console
</span>
@ -185,8 +185,8 @@ export default function DevConsole({
borderRadius: "6px",
border: "none",
cursor: "pointer",
background: activeTab === tab ? "#f3f4f6" : "transparent",
color: activeTab === tab ? "#111827" : "#9ca3af",
background: activeTab === tab ? "var(--color-secondary)" : "transparent",
color: activeTab === tab ? "var(--color-foreground)" : "var(--color-foreground-sec)",
textTransform: "capitalize",
}}
>
@ -200,7 +200,7 @@ export default function DevConsole({
background: "transparent",
border: "none",
cursor: "pointer",
color: "#9ca3af",
color: "var(--color-foreground-sec)",
display: "flex",
alignItems: "center",
padding: "2px",
@ -213,9 +213,9 @@ export default function DevConsole({
{/* Logs tab */}
{activeTab === "logs" && (
<div style={{ flex: 1, overflowY: "auto", fontFamily: "ui-monospace, 'Cascadia Code', monospace" }}>
<div style={{ flex: 1, overflowY: "auto", fontFamily: "inherit" }}>
{logs.length === 0 ? (
<div style={{ padding: "32px 16px", textAlign: "center", color: "#d1d5db", fontSize: "0.75rem" }}>
<div style={{ padding: "32px 16px", textAlign: "center", color: "var(--color-foreground-sec)", fontSize: "0.75rem" }}>
No requests captured yet
</div>
) : (
@ -234,20 +234,20 @@ export default function DevConsole({
{/* Request tab */}
{activeTab === "request" && (
<div style={{ flex: 1, display: "flex", flexDirection: "column", overflow: "hidden" }}>
<div style={{ padding: "12px", borderBottom: "1px solid #e5e7eb", flexShrink: 0 }}>
<div style={{ padding: "12px", borderBottom: "1px solid var(--color-secondary)", flexShrink: 0 }}>
<div style={{ display: "flex", gap: "6px", marginBottom: "8px" }}>
<select
value={reqMethod}
onChange={(e) => setReqMethod(e.target.value)}
style={{
background: "#f9fafb",
border: "1px solid #e5e7eb",
background: "var(--color-secondary)",
border: "1px solid var(--color-secondary)",
borderRadius: "8px",
color: "#111827",
color: "var(--color-foreground)",
fontSize: "0.68rem",
padding: "5px 6px",
cursor: "pointer",
fontFamily: "ui-monospace, monospace",
fontFamily: "inherit",
outline: "none",
}}
>
@ -262,13 +262,13 @@ export default function DevConsole({
placeholder="/api/power"
style={{
flex: 1,
background: "#f9fafb",
border: "1px solid #e5e7eb",
background: "var(--color-secondary)",
border: "1px solid var(--color-secondary)",
borderRadius: "8px",
color: "#111827",
color: "var(--color-foreground)",
fontSize: "0.68rem",
padding: "5px 8px",
fontFamily: "ui-monospace, monospace",
fontFamily: "inherit",
outline: "none",
minWidth: 0,
}}
@ -277,7 +277,7 @@ export default function DevConsole({
onClick={sendRequest}
disabled={reqLoading}
style={{
background: "#2563eb",
background: "#428ce2",
border: "none",
borderRadius: "8px",
color: "white",
@ -305,13 +305,13 @@ export default function DevConsole({
rows={4}
style={{
width: "100%",
background: "#f9fafb",
border: "1px solid #e5e7eb",
background: "var(--color-secondary)",
border: "1px solid var(--color-secondary)",
borderRadius: "8px",
color: "#111827",
color: "var(--color-foreground)",
fontSize: "0.68rem",
padding: "6px 8px",
fontFamily: "ui-monospace, monospace",
fontFamily: "inherit",
resize: "vertical",
outline: "none",
boxSizing: "border-box",
@ -320,11 +320,11 @@ export default function DevConsole({
/>
)}
<div style={{ fontSize: "0.6rem", color: "#d1d5db" }}>
<div style={{ fontSize: "0.6rem", color: "var(--color-foreground-sec)" }}>
Bearer token attached via cookie ·{" "}
<span style={{ color: "#9ca3af" }}>use</span>{" "}
<code style={{ color: "#6b7280" }}>http://localhost:3001/path</code>{" "}
<span style={{ color: "#9ca3af" }}>to bypass Next.js proxy</span>
<span style={{ color: "var(--color-foreground-sec)" }}>use</span>{" "}
<code style={{ color: "var(--color-blue, #428ce2)" }}>http://localhost:3001/path</code>{" "}
<span style={{ color: "var(--color-foreground-sec)" }}>to bypass Next.js proxy</span>
</div>
</div>
@ -332,11 +332,11 @@ export default function DevConsole({
flex: 1,
overflow: "auto",
padding: "12px",
fontFamily: "ui-monospace, 'Cascadia Code', monospace",
background: "#f9fafb",
fontFamily: "inherit",
background: "var(--color-secondary)",
}}>
{reqLoading && (
<div style={{ fontSize: "0.7rem", color: "#9ca3af" }}>Sending</div>
<div style={{ fontSize: "0.7rem", color: "var(--color-foreground-sec)" }}>Sending</div>
)}
{!reqLoading && reqResponse && (
<>
@ -344,13 +344,13 @@ export default function DevConsole({
fontSize: "0.65rem",
fontWeight: 600,
marginBottom: "8px",
color: reqResponse.status >= 200 && reqResponse.status < 300 ? "#16a34a" : "#dc2626",
color: reqResponse.status >= 200 && reqResponse.status < 300 ? "#5dd776" : "#ef4444",
}}>
HTTP {reqResponse.status}
</div>
<pre style={{
fontSize: "0.65rem",
color: "#6b7280",
color: "var(--color-foreground-sec)",
margin: 0,
whiteSpace: "pre-wrap",
wordBreak: "break-all",
@ -361,7 +361,7 @@ export default function DevConsole({
</>
)}
{!reqLoading && !reqResponse && (
<div style={{ fontSize: "0.7rem", color: "#d1d5db" }}>
<div style={{ fontSize: "0.7rem", color: "var(--color-foreground-sec)" }}>
Response will appear here
</div>
)}
@ -384,13 +384,13 @@ function LogRow({
const [hovered, setHovered] = useState(false);
const statusColor =
entry.status === null
? "#9ca3af"
? "var(--color-foreground-sec)"
: entry.status >= 200 && entry.status < 300
? "#16a34a"
: "#dc2626";
? "#5dd776"
: "#ef4444";
return (
<div style={{ borderBottom: "1px solid #f3f4f6" }}>
<div style={{ borderBottom: "1px solid var(--color-secondary)" }}>
<div
onClick={onToggle}
onMouseEnter={() => setHovered(true)}
@ -401,7 +401,7 @@ function LogRow({
gap: "8px",
padding: "6px 12px",
cursor: "pointer",
background: hovered ? "#f9fafb" : "transparent",
background: hovered ? "var(--color-secondary)" : "transparent",
}}
>
<span style={{
@ -430,7 +430,7 @@ function LogRow({
</span>
<span style={{
fontSize: "0.68rem",
color: "#6b7280",
color: "var(--color-foreground-sec)",
flex: 1,
overflow: "hidden",
textOverflow: "ellipsis",
@ -438,23 +438,23 @@ function LogRow({
}}>
{entry.path}
</span>
<span style={{ fontSize: "0.6rem", color: "#9ca3af", flexShrink: 0 }}>
<span style={{ fontSize: "0.6rem", color: "var(--color-foreground-sec)", flexShrink: 0 }}>
{entry.duration !== null ? `${entry.duration}ms` : ""}
</span>
<span style={{ fontSize: "0.6rem", color: "#d1d5db", flexShrink: 0 }}>
<span style={{ fontSize: "0.6rem", color: "var(--color-foreground-sec)", flexShrink: 0, opacity: 0.6 }}>
{entry.timestamp}
</span>
</div>
{expanded && (
<div style={{
background: "#f9fafb",
background: "var(--color-secondary)",
padding: "8px 12px 10px",
borderTop: "1px solid #e5e7eb",
borderTop: "1px solid var(--color-secondary)",
}}>
<div style={{
fontSize: "0.6rem",
color: "#9ca3af",
color: "var(--color-foreground-sec)",
marginBottom: "6px",
wordBreak: "break-all",
}}>
@ -463,7 +463,7 @@ function LogRow({
{entry.response !== null && (
<pre style={{
fontSize: "0.63rem",
color: "#6b7280",
color: "var(--color-foreground-sec)",
margin: 0,
overflow: "auto",
maxHeight: "220px",