interstellar_ai/app/page.tsx

158 lines
4.9 KiB
TypeScript
Raw Normal View History

2024-09-18 09:47:23 +02:00
"use client"; // Add this at the top to mark this file as a Client Component
import React, { useState, useEffect, useRef } from 'react';
import './styles.css'; // Make sure this matches your CSS file path
const App = () => {
const [showDivs, setShowDivs] = useState(true); // Default to true to show divs on load
const conversationRef = useRef<HTMLDivElement>(null);
useEffect(() => {
// Scroll to bottom when the component mounts or updates
const scrollToBottom = () => {
const conversation = conversationRef.current;
if (conversation) {
conversation.scrollTop = conversation.scrollHeight;
}
};
scrollToBottom(); // Scroll to the bottom when the page loads
// Use MutationObserver to efficiently observe changes in the conversation element
const observer = new MutationObserver(scrollToBottom);
if (conversationRef.current) {
observer.observe(conversationRef.current, {
childList: true,
subtree: true,
});
}
return () => {
if (conversationRef.current) {
observer.disconnect();
}
};
}, []);
const toggleDivs = () => {
setShowDivs(prevState => !prevState);
};
return (
<div className="App">
<header>
<div className="header-menu">
<ul>
<li>
<a href="/">
<img src="/img/logo.png" alt="logo" />
</a>
</li>
<li>
<a href="/documentation">Documentation</a>
</li>
<li>
<a href="/faq">FAQ</a>
</li>
<li>
<button onClick={toggleDivs}>{showDivs ? "Hide Divs" : "Show Divs"}</button>
</li>
</ul>
</div>
</header>
<div className="container">
{showDivs && (
<div className="history-background">
<div className="history">
<ul>
<li>
<a href="#">history1</a>
</li>
{/* Add more history items here */}
</ul>
</div>
</div>
)}
{showDivs && (
<div className="model-background">
<div className="models">
<div className="titel">
<h1>Different AI models</h1>
</div>
<form action="">
<div className="grid">
<button className="code-model model-box">
<div className="overlay">
<h3>Code</h3>
<img src="/img/wifi.svg" alt="Wi-Fi" />
</div>
</button>
<button className="math-model model-box">
<div className="overlay">
<h3>Math</h3>
<img src="/img/nowifi.svg" alt="No Wi-Fi" />
</div>
</button>
<button className="language-model model-box">
<div className="overlay">
<h3>Language</h3>
</div>
</button>
<button className="default-model model-box">
<div className="overlay">
<h3>Default</h3>
</div>
</button>
<button className="default-model model-box">
<div className="overlay">
<h3>Default</h3>
</div>
</button>
<button className="default-model model-box">
<div className="overlay">
<h3>Default</h3>
</div>
</button>
<button className="default-model model-box">
<div className="overlay">
<h3>Default</h3>
</div>
</button>
</div>
</form>
</div>
</div>
)}
<div className="output">
<div className="conversation resize" ref={conversationRef}>
{/* Render messages here */}
{/* Replace the following example with dynamic rendering */}
<div className="user-message">User: Example message</div>
<div className="ai-message">AI: Example response</div>
</div>
</div>
<form className="input" method="POST" action="" id="inputForm">
<input
type="text"
name="user_message"
placeholder="Type your message here..."
/>
<button type="submit" name="option" value="chat">
<img src="/img/send.svg" alt="send" />
</button>
<button type="submit" name="option" value="voice">
<img src="/img/microphone.svg" alt="microphone" />
</button>
</form>
</div>
</div>
);
};
export default App;