Spaces:
Running
Running
textarea butonları fazla aşağıda. Yazı üstte butonlar aşağıda. Çok az fark gözüküyor gözle ama dikkatli bakınca çok açık, moral bozuyor :D çöz lütfen. Ayrıca modellere direkt "Deep Research" ekle. Herşey tamamen İngilizce olmalı sitede. Türkçe konuştuğuma bakma. Ayrıca Neural Assistant falan buraları Nixaut Copilot olarak düzenle, yazıları falan. Ayrıca tema siyah beyazdı unutma dropdown yeşil falan kullanmışın mesela.
Browse files- components/sidebar.js +13 -13
- index.html +35 -31
- script.js +15 -21
- style.css +4 -5
components/sidebar.js
CHANGED
|
@@ -234,35 +234,35 @@ class CustomSidebar extends HTMLElement {
|
|
| 234 |
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="2.5">
|
| 235 |
<path d="M12 5v14m-7-7h14"/>
|
| 236 |
</svg>
|
| 237 |
-
|
| 238 |
</button>
|
| 239 |
|
| 240 |
<div class="nav-section">
|
| 241 |
-
<div class="nav-title">
|
| 242 |
-
|
| 243 |
<div class="history-item">
|
| 244 |
<svg class="history-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
| 245 |
<path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/>
|
| 246 |
</svg>
|
| 247 |
-
|
| 248 |
</div>
|
| 249 |
<div class="history-item">
|
| 250 |
<svg class="history-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
| 251 |
<path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/>
|
| 252 |
</svg>
|
| 253 |
-
JavaScript async
|
| 254 |
</div>
|
| 255 |
<div class="history-item">
|
| 256 |
<svg class="history-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
| 257 |
<path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/>
|
| 258 |
</svg>
|
| 259 |
-
CSS Grid vs Flexbox
|
| 260 |
</div>
|
| 261 |
<div class="history-item">
|
| 262 |
<svg class="history-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
| 263 |
<path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/>
|
| 264 |
</svg>
|
| 265 |
-
React
|
| 266 |
</div>
|
| 267 |
<div class="history-item">
|
| 268 |
<svg class="history-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
@@ -270,7 +270,7 @@ class CustomSidebar extends HTMLElement {
|
|
| 270 |
</svg>
|
| 271 |
TypeScript best practices
|
| 272 |
</div>
|
| 273 |
-
|
| 274 |
</div>
|
| 275 |
|
| 276 |
<div class="divider"></div>
|
|
@@ -282,29 +282,29 @@ class CustomSidebar extends HTMLElement {
|
|
| 282 |
<path d="M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2z"/>
|
| 283 |
<path d="M9 22V12h6v10"/>
|
| 284 |
</svg>
|
| 285 |
-
|
| 286 |
</a>
|
| 287 |
<a href="/chat" class="nav-item active">
|
| 288 |
<svg class="nav-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
| 289 |
<path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/>
|
| 290 |
</svg>
|
| 291 |
-
|
| 292 |
</a>
|
| 293 |
<a href="/files" class="nav-item">
|
| 294 |
<svg class="nav-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
| 295 |
<path d="M13 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V9z"/>
|
| 296 |
<path d="M13 2v7h7"/>
|
| 297 |
</svg>
|
| 298 |
-
|
| 299 |
</a>
|
| 300 |
<a href="/settings" class="nav-item">
|
| 301 |
<svg class="nav-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
| 302 |
<circle cx="12" cy="12" r="3"/>
|
| 303 |
<path d="M12 1v6m0 6v6m4.22-13.22l4.24 4.24M1.54 9.96l4.24 4.24m12.44 0l4.24 4.24M1.54 14.04l4.24-4.24"/>
|
| 304 |
</svg>
|
| 305 |
-
|
| 306 |
</a>
|
| 307 |
-
|
| 308 |
|
| 309 |
<div class="divider"></div>
|
| 310 |
|
|
|
|
| 234 |
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="2.5">
|
| 235 |
<path d="M12 5v14m-7-7h14"/>
|
| 236 |
</svg>
|
| 237 |
+
New Chat
|
| 238 |
</button>
|
| 239 |
|
| 240 |
<div class="nav-section">
|
| 241 |
+
<div class="nav-title">Recent Chats</div>
|
| 242 |
+
<div class="chat-history" id="recentChats">
|
| 243 |
<div class="history-item">
|
| 244 |
<svg class="history-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
| 245 |
<path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/>
|
| 246 |
</svg>
|
| 247 |
+
How to create responsive design?
|
| 248 |
</div>
|
| 249 |
<div class="history-item">
|
| 250 |
<svg class="history-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
| 251 |
<path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/>
|
| 252 |
</svg>
|
| 253 |
+
JavaScript async patterns
|
| 254 |
</div>
|
| 255 |
<div class="history-item">
|
| 256 |
<svg class="history-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
| 257 |
<path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/>
|
| 258 |
</svg>
|
| 259 |
+
CSS Grid vs Flexbox comparison
|
| 260 |
</div>
|
| 261 |
<div class="history-item">
|
| 262 |
<svg class="history-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
| 263 |
<path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/>
|
| 264 |
</svg>
|
| 265 |
+
React performance tips
|
| 266 |
</div>
|
| 267 |
<div class="history-item">
|
| 268 |
<svg class="history-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
|
|
| 270 |
</svg>
|
| 271 |
TypeScript best practices
|
| 272 |
</div>
|
| 273 |
+
</div>
|
| 274 |
</div>
|
| 275 |
|
| 276 |
<div class="divider"></div>
|
|
|
|
| 282 |
<path d="M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2z"/>
|
| 283 |
<path d="M9 22V12h6v10"/>
|
| 284 |
</svg>
|
| 285 |
+
Home
|
| 286 |
</a>
|
| 287 |
<a href="/chat" class="nav-item active">
|
| 288 |
<svg class="nav-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
| 289 |
<path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/>
|
| 290 |
</svg>
|
| 291 |
+
Chat
|
| 292 |
</a>
|
| 293 |
<a href="/files" class="nav-item">
|
| 294 |
<svg class="nav-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
| 295 |
<path d="M13 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V9z"/>
|
| 296 |
<path d="M13 2v7h7"/>
|
| 297 |
</svg>
|
| 298 |
+
My Files
|
| 299 |
</a>
|
| 300 |
<a href="/settings" class="nav-item">
|
| 301 |
<svg class="nav-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
| 302 |
<circle cx="12" cy="12" r="3"/>
|
| 303 |
<path d="M12 1v6m0 6v6m4.22-13.22l4.24 4.24M1.54 9.96l4.24 4.24m12.44 0l4.24 4.24M1.54 14.04l4.24-4.24"/>
|
| 304 |
</svg>
|
| 305 |
+
Settings
|
| 306 |
</a>
|
| 307 |
+
</div>
|
| 308 |
|
| 309 |
<div class="divider"></div>
|
| 310 |
|
index.html
CHANGED
|
@@ -76,10 +76,10 @@
|
|
| 76 |
<i data-feather="cpu" class="w-5 h-5 text-zinc-900"></i>
|
| 77 |
</div>
|
| 78 |
<div>
|
| 79 |
-
<h2 class="font-semibold text-white">
|
| 80 |
<p class="text-xs text-zinc-400">Online • Powered by AI</p>
|
| 81 |
</div>
|
| 82 |
-
|
| 83 |
<button onclick="toggleChatMode()" class="p-2 hover:bg-zinc-800 rounded-lg transition-all duration-200 hover:scale-105">
|
| 84 |
<i data-feather="maximize-2" class="w-5 h-5 text-zinc-400"></i>
|
| 85 |
</button>
|
|
@@ -122,7 +122,7 @@
|
|
| 122 |
<!-- Model Selector -->
|
| 123 |
<div id="modelDropdown" class="relative">
|
| 124 |
<button onclick="toggleModelDropdown()" class="flex items-center space-x-2 bg-zinc-800/60 hover:bg-zinc-800/80 border border-zinc-700/50 hover:border-zinc-600/50 rounded-lg px-3 py-2 text-sm text-white transition-all duration-200">
|
| 125 |
-
<div id="modelIndicator" class="w-2 h-2 bg-
|
| 126 |
<span id="selectedModelText" class="font-medium">Max</span>
|
| 127 |
<svg class="w-4 h-4 text-zinc-400 transition-transform" id="modelDropdownArrow" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
| 128 |
<path d="M6 9l6 6 6-6"/>
|
|
@@ -130,30 +130,36 @@
|
|
| 130 |
</button>
|
| 131 |
<div id="modelDropdownMenu" class="hidden absolute bottom-full left-0 mb-2 bg-zinc-900 border border-zinc-700 rounded-lg shadow-2xl z-50 min-w-[200px]">
|
| 132 |
<div onclick="selectModel('Max')" class="px-3 py-2 text-white hover:bg-zinc-800 cursor-pointer transition-colors duration-150 flex items-center space-x-2">
|
| 133 |
-
<div class="w-2 h-2 bg-
|
| 134 |
<div>
|
| 135 |
<div class="font-medium text-sm">Max</div>
|
| 136 |
-
<div class="text-xs text-zinc-400">
|
| 137 |
</div>
|
| 138 |
</div>
|
| 139 |
<div onclick="selectModel('Turbo')" class="px-3 py-2 text-white hover:bg-zinc-800 cursor-pointer transition-colors duration-150 flex items-center space-x-2">
|
| 140 |
-
<div class="w-2 h-2 bg-
|
| 141 |
<div>
|
| 142 |
<div class="font-medium text-sm">Turbo</div>
|
| 143 |
-
<div class="text-xs text-zinc-400">
|
| 144 |
</div>
|
| 145 |
</div>
|
| 146 |
<div onclick="selectModel('Lite')" class="px-3 py-2 text-white hover:bg-zinc-800 cursor-pointer transition-colors duration-150 flex items-center space-x-2">
|
| 147 |
-
<div class="w-2 h-2 bg-
|
| 148 |
<div>
|
| 149 |
<div class="font-medium text-sm">Lite</div>
|
| 150 |
-
<div class="text-xs text-zinc-400">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 151 |
</div>
|
| 152 |
</div>
|
| 153 |
</div>
|
| 154 |
</div>
|
| 155 |
-
|
| 156 |
-
<!-- Web Search Toggle -->
|
| 157 |
<button id="webSearchToggle" onclick="toggleWebSearch()" class="flex items-center space-x-1.5 bg-zinc-800/60 hover:bg-zinc-800/80 border border-zinc-700/50 hover:border-zinc-600/50 rounded-lg px-3 py-2 text-sm text-white transition-all duration-200">
|
| 158 |
<i data-feather="search" class="w-3.5 h-3.5"></i>
|
| 159 |
<span>Web</span>
|
|
@@ -175,22 +181,10 @@
|
|
| 175 |
</div>
|
| 176 |
</div>
|
| 177 |
</div>
|
| 178 |
-
|
| 179 |
<!-- Main Input Container -->
|
| 180 |
<div class="relative bg-zinc-800/40 rounded-2xl border border-zinc-700/50 hover:border-zinc-600/50 transition-all duration-200 focus-within:border-white/50 focus-within:shadow-lg focus-within:shadow-white/5">
|
| 181 |
-
<!-- Textarea -->
|
| 182 |
-
<textarea
|
| 183 |
-
id="messageInput"
|
| 184 |
-
rows="1"
|
| 185 |
-
placeholder="Mesajınızı buraya yazın... (@ ile belge ekle, / komutlar için)"
|
| 186 |
-
class="w-full bg-transparent text-white placeholder-zinc-500 resize-none focus:outline-none px-4 py-3.5 pr-24 text-sm leading-relaxed"
|
| 187 |
-
style="min-height: 52px; max-height: 120px;"
|
| 188 |
-
onkeypress="handleKeyPress(event)"
|
| 189 |
-
oninput="handleInput(this)"
|
| 190 |
-
></textarea>
|
| 191 |
-
|
| 192 |
<!-- Action Buttons -->
|
| 193 |
-
<div class="absolute right-2
|
| 194 |
<button onclick="attachFile()" class="p-2 hover:bg-zinc-700/50 rounded-lg transition-all duration-200 group">
|
| 195 |
<i data-feather="paperclip" class="w-4 h-4 text-zinc-400 group-hover:text-white"></i>
|
| 196 |
</button>
|
|
@@ -208,31 +202,41 @@
|
|
| 208 |
<i data-feather="send" class="w-4 h-4"></i>
|
| 209 |
</button>
|
| 210 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 211 |
</div>
|
| 212 |
-
|
| 213 |
<!-- Bottom Actions Bar -->
|
| 214 |
<div class="mt-3 flex items-center justify-between">
|
| 215 |
<div class="flex items-center space-x-3">
|
| 216 |
<button onclick="clearChat()" class="text-xs text-zinc-500 hover:text-white transition-colors duration-200 flex items-center space-x-1">
|
| 217 |
<i data-feather="trash-2" class="w-3 h-3"></i>
|
| 218 |
-
<span>
|
| 219 |
</button>
|
| 220 |
<button onclick="exportChat()" class="text-xs text-zinc-500 hover:text-white transition-colors duration-200 flex items-center space-x-1">
|
| 221 |
<i data-feather="download" class="w-3 h-3"></i>
|
| 222 |
-
<span>
|
| 223 |
</button>
|
| 224 |
<button onclick="showSettings()" class="text-xs text-zinc-500 hover:text-white transition-colors duration-200 flex items-center space-x-1">
|
| 225 |
<i data-feather="settings" class="w-3 h-3"></i>
|
| 226 |
-
<span>
|
| 227 |
</button>
|
| 228 |
</div>
|
| 229 |
<div class="flex items-center space-x-2 text-xs text-zinc-500">
|
| 230 |
-
<span>Enter
|
| 231 |
<span>•</span>
|
| 232 |
-
<span>Shift+Enter
|
| 233 |
</div>
|
| 234 |
</div>
|
| 235 |
-
|
| 236 |
</main>
|
| 237 |
<script src="components/header.js"></script>
|
| 238 |
<script src="components/sidebar.js"></script>
|
|
|
|
| 76 |
<i data-feather="cpu" class="w-5 h-5 text-zinc-900"></i>
|
| 77 |
</div>
|
| 78 |
<div>
|
| 79 |
+
<h2 class="font-semibold text-white">Nixaut Copilot</h2>
|
| 80 |
<p class="text-xs text-zinc-400">Online • Powered by AI</p>
|
| 81 |
</div>
|
| 82 |
+
</div>
|
| 83 |
<button onclick="toggleChatMode()" class="p-2 hover:bg-zinc-800 rounded-lg transition-all duration-200 hover:scale-105">
|
| 84 |
<i data-feather="maximize-2" class="w-5 h-5 text-zinc-400"></i>
|
| 85 |
</button>
|
|
|
|
| 122 |
<!-- Model Selector -->
|
| 123 |
<div id="modelDropdown" class="relative">
|
| 124 |
<button onclick="toggleModelDropdown()" class="flex items-center space-x-2 bg-zinc-800/60 hover:bg-zinc-800/80 border border-zinc-700/50 hover:border-zinc-600/50 rounded-lg px-3 py-2 text-sm text-white transition-all duration-200">
|
| 125 |
+
<div id="modelIndicator" class="w-2 h-2 bg-white rounded-full"></div>
|
| 126 |
<span id="selectedModelText" class="font-medium">Max</span>
|
| 127 |
<svg class="w-4 h-4 text-zinc-400 transition-transform" id="modelDropdownArrow" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
| 128 |
<path d="M6 9l6 6 6-6"/>
|
|
|
|
| 130 |
</button>
|
| 131 |
<div id="modelDropdownMenu" class="hidden absolute bottom-full left-0 mb-2 bg-zinc-900 border border-zinc-700 rounded-lg shadow-2xl z-50 min-w-[200px]">
|
| 132 |
<div onclick="selectModel('Max')" class="px-3 py-2 text-white hover:bg-zinc-800 cursor-pointer transition-colors duration-150 flex items-center space-x-2">
|
| 133 |
+
<div class="w-2 h-2 bg-white rounded-full"></div>
|
| 134 |
<div>
|
| 135 |
<div class="font-medium text-sm">Max</div>
|
| 136 |
+
<div class="text-xs text-zinc-400">Most capable</div>
|
| 137 |
</div>
|
| 138 |
</div>
|
| 139 |
<div onclick="selectModel('Turbo')" class="px-3 py-2 text-white hover:bg-zinc-800 cursor-pointer transition-colors duration-150 flex items-center space-x-2">
|
| 140 |
+
<div class="w-2 h-2 bg-zinc-400 rounded-full"></div>
|
| 141 |
<div>
|
| 142 |
<div class="font-medium text-sm">Turbo</div>
|
| 143 |
+
<div class="text-xs text-zinc-400">Fast response</div>
|
| 144 |
</div>
|
| 145 |
</div>
|
| 146 |
<div onclick="selectModel('Lite')" class="px-3 py-2 text-white hover:bg-zinc-800 cursor-pointer transition-colors duration-150 flex items-center space-x-2">
|
| 147 |
+
<div class="w-2 h-2 bg-zinc-500 rounded-full"></div>
|
| 148 |
<div>
|
| 149 |
<div class="font-medium text-sm">Lite</div>
|
| 150 |
+
<div class="text-xs text-zinc-400">Economical</div>
|
| 151 |
+
</div>
|
| 152 |
+
</div>
|
| 153 |
+
<div onclick="selectModel('Deep Research')" class="px-3 py-2 text-white hover:bg-zinc-800 cursor-pointer transition-colors duration-150 flex items-center space-x-2">
|
| 154 |
+
<div class="w-2 h-2 bg-zinc-300 rounded-full"></div>
|
| 155 |
+
<div>
|
| 156 |
+
<div class="font-medium text-sm">Deep Research</div>
|
| 157 |
+
<div class="text-xs text-zinc-400">In-depth analysis</div>
|
| 158 |
</div>
|
| 159 |
</div>
|
| 160 |
</div>
|
| 161 |
</div>
|
| 162 |
+
<!-- Web Search Toggle -->
|
|
|
|
| 163 |
<button id="webSearchToggle" onclick="toggleWebSearch()" class="flex items-center space-x-1.5 bg-zinc-800/60 hover:bg-zinc-800/80 border border-zinc-700/50 hover:border-zinc-600/50 rounded-lg px-3 py-2 text-sm text-white transition-all duration-200">
|
| 164 |
<i data-feather="search" class="w-3.5 h-3.5"></i>
|
| 165 |
<span>Web</span>
|
|
|
|
| 181 |
</div>
|
| 182 |
</div>
|
| 183 |
</div>
|
|
|
|
| 184 |
<!-- Main Input Container -->
|
| 185 |
<div class="relative bg-zinc-800/40 rounded-2xl border border-zinc-700/50 hover:border-zinc-600/50 transition-all duration-200 focus-within:border-white/50 focus-within:shadow-lg focus-within:shadow-white/5">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 186 |
<!-- Action Buttons -->
|
| 187 |
+
<div class="absolute right-2 top-2 flex items-center space-x-1.5">
|
| 188 |
<button onclick="attachFile()" class="p-2 hover:bg-zinc-700/50 rounded-lg transition-all duration-200 group">
|
| 189 |
<i data-feather="paperclip" class="w-4 h-4 text-zinc-400 group-hover:text-white"></i>
|
| 190 |
</button>
|
|
|
|
| 202 |
<i data-feather="send" class="w-4 h-4"></i>
|
| 203 |
</button>
|
| 204 |
</div>
|
| 205 |
+
|
| 206 |
+
<!-- Textarea -->
|
| 207 |
+
<textarea
|
| 208 |
+
id="messageInput"
|
| 209 |
+
rows="1"
|
| 210 |
+
placeholder="Type your message here... (@ to attach, / for commands)"
|
| 211 |
+
class="w-full bg-transparent text-white placeholder-zinc-500 resize-none focus:outline-none px-4 pt-3.5 pr-24 pb-6 text-sm leading-relaxed"
|
| 212 |
+
style="min-height: 52px; max-height: 120px;"
|
| 213 |
+
onkeypress="handleKeyPress(event)"
|
| 214 |
+
oninput="handleInput(this)"
|
| 215 |
+
></textarea>
|
| 216 |
</div>
|
|
|
|
| 217 |
<!-- Bottom Actions Bar -->
|
| 218 |
<div class="mt-3 flex items-center justify-between">
|
| 219 |
<div class="flex items-center space-x-3">
|
| 220 |
<button onclick="clearChat()" class="text-xs text-zinc-500 hover:text-white transition-colors duration-200 flex items-center space-x-1">
|
| 221 |
<i data-feather="trash-2" class="w-3 h-3"></i>
|
| 222 |
+
<span>Clear</span>
|
| 223 |
</button>
|
| 224 |
<button onclick="exportChat()" class="text-xs text-zinc-500 hover:text-white transition-colors duration-200 flex items-center space-x-1">
|
| 225 |
<i data-feather="download" class="w-3 h-3"></i>
|
| 226 |
+
<span>Export</span>
|
| 227 |
</button>
|
| 228 |
<button onclick="showSettings()" class="text-xs text-zinc-500 hover:text-white transition-colors duration-200 flex items-center space-x-1">
|
| 229 |
<i data-feather="settings" class="w-3 h-3"></i>
|
| 230 |
+
<span>Settings</span>
|
| 231 |
</button>
|
| 232 |
</div>
|
| 233 |
<div class="flex items-center space-x-2 text-xs text-zinc-500">
|
| 234 |
+
<span>Enter to send</span>
|
| 235 |
<span>•</span>
|
| 236 |
+
<span>Shift+Enter for new line</span>
|
| 237 |
</div>
|
| 238 |
</div>
|
| 239 |
+
</div>
|
| 240 |
</main>
|
| 241 |
<script src="components/header.js"></script>
|
| 242 |
<script src="components/sidebar.js"></script>
|
script.js
CHANGED
|
@@ -193,17 +193,16 @@ function selectModel(model) {
|
|
| 193 |
currentModel = model;
|
| 194 |
const selectedText = document.getElementById('selectedModelText');
|
| 195 |
const indicator = document.getElementById('modelIndicator');
|
| 196 |
-
|
| 197 |
-
|
| 198 |
-
'
|
| 199 |
-
'
|
| 200 |
-
'
|
| 201 |
};
|
| 202 |
|
| 203 |
selectedText.textContent = model;
|
| 204 |
-
indicator.className = `w-2 h-2 bg-${modelConfig[model].color}
|
| 205 |
-
|
| 206 |
-
// Close dropdown
|
| 207 |
document.getElementById('modelDropdownMenu').classList.add('hidden');
|
| 208 |
document.getElementById('modelDropdownArrow').style.transform = 'rotate(0deg)';
|
| 209 |
|
|
@@ -215,14 +214,13 @@ function toggleWebSearch() {
|
|
| 215 |
webSearchEnabled = !webSearchEnabled;
|
| 216 |
const toggleCircle = document.getElementById('webSearchToggleCircle');
|
| 217 |
const toggleButton = document.getElementById('webSearchToggle');
|
| 218 |
-
|
| 219 |
if (webSearchEnabled) {
|
| 220 |
toggleCircle.style.transform = 'translateX(16px)';
|
| 221 |
-
toggleCircle.classList.add('bg-
|
| 222 |
toggleCircle.classList.remove('bg-zinc-500');
|
| 223 |
} else {
|
| 224 |
toggleCircle.style.transform = 'translateX(0)';
|
| 225 |
-
toggleCircle.classList.remove('bg-
|
| 226 |
toggleCircle.classList.add('bg-zinc-500');
|
| 227 |
}
|
| 228 |
}
|
|
@@ -283,29 +281,25 @@ function attachFile() {
|
|
| 283 |
};
|
| 284 |
input.click();
|
| 285 |
}
|
| 286 |
-
|
| 287 |
function showVoiceInput() {
|
| 288 |
-
alert('
|
| 289 |
}
|
| 290 |
-
|
| 291 |
function stopGeneration() {
|
| 292 |
isGenerating = false;
|
| 293 |
hideTypingIndicator();
|
| 294 |
handleInput(document.getElementById('messageInput'));
|
| 295 |
}
|
| 296 |
-
|
| 297 |
function showSettings() {
|
| 298 |
-
alert('
|
| 299 |
}
|
| 300 |
function updateModelStatus(model) {
|
| 301 |
-
|
| 302 |
'Max': '~1.2s',
|
| 303 |
'Turbo': '~0.8s',
|
| 304 |
'Lite': '~0.5s',
|
| 305 |
'Deep Research': '~2.1s'
|
| 306 |
};
|
| 307 |
-
|
| 308 |
-
const responseElements = document.querySelectorAll('.text-green-400');
|
| 309 |
responseElements.forEach(el => {
|
| 310 |
if (el.textContent.includes('~')) {
|
| 311 |
el.textContent = responseTimes[model];
|
|
@@ -364,9 +358,9 @@ function clearChat() {
|
|
| 364 |
</div>
|
| 365 |
<div class="max-w-xl">
|
| 366 |
<div class="bg-zinc-900 rounded-2xl rounded-tl-sm p-4 glow hover:scale-[1.02] transition-all duration-200">
|
| 367 |
-
<p class="text-white leading-relaxed">Welcome to
|
| 368 |
<p class="text-zinc-400 text-sm mt-2">I'm your advanced AI assistant. How can I help you today?</p>
|
| 369 |
-
|
| 370 |
<p class="text-xs text-zinc-500 mt-1">Just now</p>
|
| 371 |
</div>
|
| 372 |
</div>
|
|
|
|
| 193 |
currentModel = model;
|
| 194 |
const selectedText = document.getElementById('selectedModelText');
|
| 195 |
const indicator = document.getElementById('modelIndicator');
|
| 196 |
+
const modelConfig = {
|
| 197 |
+
'Max': { color: 'white' },
|
| 198 |
+
'Turbo': { color: 'zinc-400' },
|
| 199 |
+
'Lite': { color: 'zinc-500' },
|
| 200 |
+
'Deep Research': { color: 'zinc-300' }
|
| 201 |
};
|
| 202 |
|
| 203 |
selectedText.textContent = model;
|
| 204 |
+
indicator.className = `w-2 h-2 bg-${modelConfig[model].color} rounded-full`;
|
| 205 |
+
// Close dropdown
|
|
|
|
| 206 |
document.getElementById('modelDropdownMenu').classList.add('hidden');
|
| 207 |
document.getElementById('modelDropdownArrow').style.transform = 'rotate(0deg)';
|
| 208 |
|
|
|
|
| 214 |
webSearchEnabled = !webSearchEnabled;
|
| 215 |
const toggleCircle = document.getElementById('webSearchToggleCircle');
|
| 216 |
const toggleButton = document.getElementById('webSearchToggle');
|
|
|
|
| 217 |
if (webSearchEnabled) {
|
| 218 |
toggleCircle.style.transform = 'translateX(16px)';
|
| 219 |
+
toggleCircle.classList.add('bg-white');
|
| 220 |
toggleCircle.classList.remove('bg-zinc-500');
|
| 221 |
} else {
|
| 222 |
toggleCircle.style.transform = 'translateX(0)';
|
| 223 |
+
toggleCircle.classList.remove('bg-white');
|
| 224 |
toggleCircle.classList.add('bg-zinc-500');
|
| 225 |
}
|
| 226 |
}
|
|
|
|
| 281 |
};
|
| 282 |
input.click();
|
| 283 |
}
|
|
|
|
| 284 |
function showVoiceInput() {
|
| 285 |
+
alert('Voice input coming soon!');
|
| 286 |
}
|
|
|
|
| 287 |
function stopGeneration() {
|
| 288 |
isGenerating = false;
|
| 289 |
hideTypingIndicator();
|
| 290 |
handleInput(document.getElementById('messageInput'));
|
| 291 |
}
|
|
|
|
| 292 |
function showSettings() {
|
| 293 |
+
alert('Settings page coming soon!');
|
| 294 |
}
|
| 295 |
function updateModelStatus(model) {
|
| 296 |
+
const responseTimes = {
|
| 297 |
'Max': '~1.2s',
|
| 298 |
'Turbo': '~0.8s',
|
| 299 |
'Lite': '~0.5s',
|
| 300 |
'Deep Research': '~2.1s'
|
| 301 |
};
|
| 302 |
+
const responseElements = document.querySelectorAll('.text-green-400');
|
|
|
|
| 303 |
responseElements.forEach(el => {
|
| 304 |
if (el.textContent.includes('~')) {
|
| 305 |
el.textContent = responseTimes[model];
|
|
|
|
| 358 |
</div>
|
| 359 |
<div class="max-w-xl">
|
| 360 |
<div class="bg-zinc-900 rounded-2xl rounded-tl-sm p-4 glow hover:scale-[1.02] transition-all duration-200">
|
| 361 |
+
<p class="text-white leading-relaxed">Welcome to Nixaut Copilot 🚀</p>
|
| 362 |
<p class="text-zinc-400 text-sm mt-2">I'm your advanced AI assistant. How can I help you today?</p>
|
| 363 |
+
</div>
|
| 364 |
<p class="text-xs text-zinc-500 mt-1">Just now</p>
|
| 365 |
</div>
|
| 366 |
</div>
|
style.css
CHANGED
|
@@ -139,11 +139,10 @@ body {
|
|
| 139 |
border-radius: 50%;
|
| 140 |
display: inline-block;
|
| 141 |
}
|
| 142 |
-
|
| 143 |
-
.model-dot.
|
| 144 |
-
.model-dot.
|
| 145 |
-
.model-dot.
|
| 146 |
-
.model-dot.purple { background: #c084fc; }
|
| 147 |
/* Mobile Responsive */
|
| 148 |
@media (max-width: 768px) {
|
| 149 |
.sidebar-mobile {
|
|
|
|
| 139 |
border-radius: 50%;
|
| 140 |
display: inline-block;
|
| 141 |
}
|
| 142 |
+
.model-dot.white { background: #ffffff; }
|
| 143 |
+
.model-dot.zinc-300 { background: #d4d4d8; }
|
| 144 |
+
.model-dot.zinc-400 { background: #a1a1aa; }
|
| 145 |
+
.model-dot.zinc-500 { background: #71717a; }
|
|
|
|
| 146 |
/* Mobile Responsive */
|
| 147 |
@media (max-width: 768px) {
|
| 148 |
.sidebar-mobile {
|