blob: 67107cd3b83a00e0dac9cc0d326ec897dbd91f16 [file] [log] [blame]
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Sketch Timeline Manual Test</title>
<link rel="stylesheet" href="/dist/tailwind.css" />
<style>
body {
font-family:
system-ui,
-apple-system,
sans-serif;
margin: 0;
padding: 20px;
}
.test-container {
max-width: 800px;
margin: 0 auto;
}
.test-section {
margin: 40px 0;
padding: 20px;
border: 1px solid #e1e5e9;
border-radius: 8px;
}
.test-section h3 {
margin: 0 0 15px 0;
color: #24292f;
}
.timeline-wrapper {
height: 400px;
border: 1px solid #ccc;
border-radius: 6px;
margin: 15px 0;
}
</style>
</head>
<body>
<div class="test-container">
<h1>Sketch Timeline Component Test</h1>
<p>
This page tests the converted SketchTimeline component using Tailwind
CSS.
</p>
<div class="test-section">
<h3>Empty Timeline (Welcome State)</h3>
<div class="timeline-wrapper">
<sketch-timeline id="empty-timeline"></sketch-timeline>
</div>
</div>
<div class="test-section">
<h3>Timeline with Messages</h3>
<div class="timeline-wrapper">
<sketch-timeline id="messages-timeline"></sketch-timeline>
</div>
</div>
<div class="test-section">
<h3>Timeline with Thinking State</h3>
<div class="timeline-wrapper">
<sketch-timeline id="thinking-timeline"></sketch-timeline>
</div>
</div>
<div class="test-section">
<h3>Controls</h3>
<button id="add-message">Add Message</button>
<button id="toggle-thinking">Toggle Thinking</button>
<button id="clear-messages">Clear Messages</button>
</div>
</div>
<script type="module">
// Import the timeline component
import "../sketch-timeline.js";
// Mock messages
function createMockMessage(props = {}) {
return {
idx: props.idx || 0,
type: props.type || "agent",
content: props.content || "Hello world",
timestamp: props.timestamp || "2023-05-15T12:00:00Z",
elapsed: props.elapsed || 1500000000,
end_of_turn: props.end_of_turn || false,
conversation_id: props.conversation_id || "conv123",
tool_calls: props.tool_calls || [],
commits: props.commits || [],
usage: props.usage,
hide_output: props.hide_output || false,
...props,
};
}
// Get timeline elements
const emptyTimeline = document.getElementById("empty-timeline");
const messagesTimeline = document.getElementById("messages-timeline");
const thinkingTimeline = document.getElementById("thinking-timeline");
// Set up messages timeline
const messages = [
createMockMessage({
idx: 0,
content: "Hello! I'm a user message.",
type: "user",
timestamp: "2023-05-15T12:00:00Z",
}),
createMockMessage({
idx: 1,
content: "And I'm an agent response with some details.",
type: "agent",
timestamp: "2023-05-15T12:01:00Z",
usage: {
input_tokens: 15,
output_tokens: 42,
cost_usd: 0.001234,
},
}),
createMockMessage({
idx: 2,
content: "Here's a message with tool calls.",
type: "agent",
timestamp: "2023-05-15T12:02:00Z",
tool_calls: [
{
name: "bash",
input: "echo 'Hello World'",
tool_call_id: "call_123",
args: '{"command": "echo \'Hello World\'"}',
result: "Hello World",
},
],
}),
];
messagesTimeline.messages = messages;
thinkingTimeline.messages = messages.slice(0, 2);
// Set initial load complete
setTimeout(() => {
messagesTimeline.isInitialLoadComplete = true;
thinkingTimeline.isInitialLoadComplete = true;
messagesTimeline.requestUpdate();
thinkingTimeline.requestUpdate();
}, 100);
// Set thinking state
thinkingTimeline.llmCalls = 1;
thinkingTimeline.toolCalls = ["bash"];
// Control buttons
let messageCount = messages.length;
document.getElementById("add-message").addEventListener("click", () => {
const newMessage = createMockMessage({
idx: messageCount++,
content: `New message added at ${new Date().toLocaleTimeString()}`,
type: messageCount % 2 === 0 ? "user" : "agent",
timestamp: new Date().toISOString(),
});
messages.push(newMessage);
messagesTimeline.messages = [...messages];
});
document
.getElementById("toggle-thinking")
.addEventListener("click", () => {
if (thinkingTimeline.llmCalls > 0) {
thinkingTimeline.llmCalls = 0;
thinkingTimeline.toolCalls = [];
} else {
thinkingTimeline.llmCalls = 1;
thinkingTimeline.toolCalls = ["bash"];
}
});
document
.getElementById("clear-messages")
.addEventListener("click", () => {
messages.length = 0;
messagesTimeline.messages = [];
messageCount = 0;
});
</script>
</body>
</html>