Spaces:
Sleeping
Sleeping
Readable dark theme and light theme
Browse files- api-tester.html +94 -4
api-tester.html
CHANGED
|
@@ -4,6 +4,14 @@
|
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
<title>LibraxisAI Responses API Tester</title>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7 |
<style>
|
| 8 |
:root {
|
| 9 |
--bg: #0a0a0f;
|
|
@@ -13,13 +21,71 @@
|
|
| 13 |
--accent: #6366f1;
|
| 14 |
--accent-hover: #818cf8;
|
| 15 |
--text: #e4e4e7;
|
| 16 |
-
--text-dim: #
|
| 17 |
--success: #22c55e;
|
| 18 |
--error: #ef4444;
|
| 19 |
--warning: #f59e0b;
|
| 20 |
--gradient: linear-gradient(135deg, #6366f1 0%, #a855f7 50%, #ec4899 100%);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21 |
}
|
| 22 |
|
|
|
|
|
|
|
| 23 |
* { box-sizing: border-box; margin: 0; padding: 0; }
|
| 24 |
|
| 25 |
body {
|
|
@@ -32,6 +98,7 @@
|
|
| 32 |
|
| 33 |
/* Header */
|
| 34 |
.header {
|
|
|
|
| 35 |
text-align: center;
|
| 36 |
padding: 1.5rem 0;
|
| 37 |
border-bottom: 1px solid var(--border);
|
|
@@ -337,14 +404,14 @@
|
|
| 337 |
justify-content: space-between;
|
| 338 |
align-items: center;
|
| 339 |
padding: 0.5rem 0.75rem;
|
| 340 |
-
background:
|
| 341 |
border-bottom: 1px solid var(--border);
|
| 342 |
font-size: 0.75rem;
|
| 343 |
cursor: pointer;
|
| 344 |
}
|
| 345 |
|
| 346 |
.output-item-header:hover {
|
| 347 |
-
background:
|
| 348 |
}
|
| 349 |
|
| 350 |
.output-step {
|
|
@@ -458,7 +525,7 @@
|
|
| 458 |
color: var(--text-dim);
|
| 459 |
text-transform: uppercase;
|
| 460 |
letter-spacing: 0.05em;
|
| 461 |
-
font-size: 0.
|
| 462 |
}
|
| 463 |
|
| 464 |
/* Footer */
|
|
@@ -508,6 +575,7 @@
|
|
| 508 |
</head>
|
| 509 |
<body>
|
| 510 |
<div class="header">
|
|
|
|
| 511 |
<h1>LibraxisAI Responses API Tester</h1>
|
| 512 |
<p>Multi-lane comparison tool for Responses API endpoints with conversation chaining</p>
|
| 513 |
</div>
|
|
@@ -635,6 +703,28 @@
|
|
| 635 |
// Parsed step summaries per lane: laneId -> { steps: [...] }
|
| 636 |
const laneRuns = new Map();
|
| 637 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 638 |
function collectResults() {
|
| 639 |
const results = {
|
| 640 |
timestamp: new Date().toISOString(),
|
|
|
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
<title>LibraxisAI Responses API Tester</title>
|
| 7 |
+
<script>
|
| 8 |
+
try {
|
| 9 |
+
const savedTheme = localStorage.getItem('api-tester-theme');
|
| 10 |
+
if (savedTheme === 'light' || savedTheme === 'dark') document.documentElement.dataset.theme = savedTheme;
|
| 11 |
+
} catch (e) {
|
| 12 |
+
// Storage unavailable: follow the system theme.
|
| 13 |
+
}
|
| 14 |
+
</script>
|
| 15 |
<style>
|
| 16 |
:root {
|
| 17 |
--bg: #0a0a0f;
|
|
|
|
| 21 |
--accent: #6366f1;
|
| 22 |
--accent-hover: #818cf8;
|
| 23 |
--text: #e4e4e7;
|
| 24 |
+
--text-dim: #a1a1aa;
|
| 25 |
--success: #22c55e;
|
| 26 |
--error: #ef4444;
|
| 27 |
--warning: #f59e0b;
|
| 28 |
--gradient: linear-gradient(135deg, #6366f1 0%, #a855f7 50%, #ec4899 100%);
|
| 29 |
+
--overlay: rgba(255, 255, 255, 0.03);
|
| 30 |
+
--overlay-strong: rgba(255, 255, 255, 0.06);
|
| 31 |
+
color-scheme: dark;
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
/* Light theme: explicit choice, or the system preference unless dark is forced. */
|
| 35 |
+
:root[data-theme="light"] {
|
| 36 |
+
--bg: #f5f6fa;
|
| 37 |
+
--surface: #ffffff;
|
| 38 |
+
--surface-hover: #eef0f6;
|
| 39 |
+
--border: #d4d7e2;
|
| 40 |
+
--accent: #4f46e5;
|
| 41 |
+
--accent-hover: #4338ca;
|
| 42 |
+
--text: #111827;
|
| 43 |
+
--text-dim: #4b5563;
|
| 44 |
+
--success: #15803d;
|
| 45 |
+
--error: #b91c1c;
|
| 46 |
+
--warning: #b45309;
|
| 47 |
+
--gradient: linear-gradient(135deg, #4f46e5 0%, #9333ea 50%, #db2777 100%);
|
| 48 |
+
--overlay: rgba(15, 23, 42, 0.03);
|
| 49 |
+
--overlay-strong: rgba(15, 23, 42, 0.07);
|
| 50 |
+
color-scheme: light;
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
@media (prefers-color-scheme: light) {
|
| 54 |
+
:root:not([data-theme="dark"]) {
|
| 55 |
+
--bg: #f5f6fa;
|
| 56 |
+
--surface: #ffffff;
|
| 57 |
+
--surface-hover: #eef0f6;
|
| 58 |
+
--border: #d4d7e2;
|
| 59 |
+
--accent: #4f46e5;
|
| 60 |
+
--accent-hover: #4338ca;
|
| 61 |
+
--text: #111827;
|
| 62 |
+
--text-dim: #4b5563;
|
| 63 |
+
--success: #15803d;
|
| 64 |
+
--error: #b91c1c;
|
| 65 |
+
--warning: #b45309;
|
| 66 |
+
--gradient: linear-gradient(135deg, #4f46e5 0%, #9333ea 50%, #db2777 100%);
|
| 67 |
+
--overlay: rgba(15, 23, 42, 0.03);
|
| 68 |
+
--overlay-strong: rgba(15, 23, 42, 0.07);
|
| 69 |
+
color-scheme: light;
|
| 70 |
+
}
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
.theme-toggle {
|
| 74 |
+
position: absolute;
|
| 75 |
+
top: 1rem;
|
| 76 |
+
right: 1rem;
|
| 77 |
+
width: 2.25rem;
|
| 78 |
+
height: 2.25rem;
|
| 79 |
+
border-radius: 50%;
|
| 80 |
+
border: 1px solid var(--border);
|
| 81 |
+
background: var(--surface);
|
| 82 |
+
color: var(--text);
|
| 83 |
+
font-size: 1rem;
|
| 84 |
+
cursor: pointer;
|
| 85 |
}
|
| 86 |
|
| 87 |
+
.theme-toggle:hover { border-color: var(--accent); }
|
| 88 |
+
|
| 89 |
* { box-sizing: border-box; margin: 0; padding: 0; }
|
| 90 |
|
| 91 |
body {
|
|
|
|
| 98 |
|
| 99 |
/* Header */
|
| 100 |
.header {
|
| 101 |
+
position: relative;
|
| 102 |
text-align: center;
|
| 103 |
padding: 1.5rem 0;
|
| 104 |
border-bottom: 1px solid var(--border);
|
|
|
|
| 404 |
justify-content: space-between;
|
| 405 |
align-items: center;
|
| 406 |
padding: 0.5rem 0.75rem;
|
| 407 |
+
background: var(--overlay);
|
| 408 |
border-bottom: 1px solid var(--border);
|
| 409 |
font-size: 0.75rem;
|
| 410 |
cursor: pointer;
|
| 411 |
}
|
| 412 |
|
| 413 |
.output-item-header:hover {
|
| 414 |
+
background: var(--overlay-strong);
|
| 415 |
}
|
| 416 |
|
| 417 |
.output-step {
|
|
|
|
| 525 |
color: var(--text-dim);
|
| 526 |
text-transform: uppercase;
|
| 527 |
letter-spacing: 0.05em;
|
| 528 |
+
font-size: 0.6875rem;
|
| 529 |
}
|
| 530 |
|
| 531 |
/* Footer */
|
|
|
|
| 575 |
</head>
|
| 576 |
<body>
|
| 577 |
<div class="header">
|
| 578 |
+
<button class="theme-toggle" id="themeToggle" onclick="cycleTheme()" title="Theme: auto → light → dark">◐</button>
|
| 579 |
<h1>LibraxisAI Responses API Tester</h1>
|
| 580 |
<p>Multi-lane comparison tool for Responses API endpoints with conversation chaining</p>
|
| 581 |
</div>
|
|
|
|
| 703 |
// Parsed step summaries per lane: laneId -> { steps: [...] }
|
| 704 |
const laneRuns = new Map();
|
| 705 |
|
| 706 |
+
const THEME_ICONS = { auto: '◐', light: '☀', dark: '☾' };
|
| 707 |
+
|
| 708 |
+
function applyTheme(theme) {
|
| 709 |
+
if (theme === 'light' || theme === 'dark') document.documentElement.dataset.theme = theme;
|
| 710 |
+
else delete document.documentElement.dataset.theme;
|
| 711 |
+
const toggle = document.getElementById('themeToggle');
|
| 712 |
+
if (toggle) toggle.textContent = THEME_ICONS[theme] || THEME_ICONS.auto;
|
| 713 |
+
}
|
| 714 |
+
|
| 715 |
+
function cycleTheme() {
|
| 716 |
+
const current = document.documentElement.dataset.theme || 'auto';
|
| 717 |
+
const next = { auto: 'light', light: 'dark', dark: 'auto' }[current];
|
| 718 |
+
applyTheme(next);
|
| 719 |
+
try {
|
| 720 |
+
localStorage.setItem('api-tester-theme', next);
|
| 721 |
+
} catch (e) {
|
| 722 |
+
// Storage unavailable: the choice lasts for this page view only.
|
| 723 |
+
}
|
| 724 |
+
}
|
| 725 |
+
|
| 726 |
+
applyTheme(document.documentElement.dataset.theme || 'auto');
|
| 727 |
+
|
| 728 |
function collectResults() {
|
| 729 |
const results = {
|
| 730 |
timestamp: new Date().toISOString(),
|