1+ <!DOCTYPE html>
2+ < html lang ="en ">
3+ < head >
4+ < meta charset ="UTF-8 ">
5+ < meta name ="viewport " content ="width=device-width, initial-scale=1.0 ">
6+ < title > ChatGPT UI Client</ title >
7+ < link rel ="stylesheet " href ="css/style.css ">
8+ < script id ="MathJax-script " async src ="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js "> </ script >
9+ < script >
10+ window . MathJax = {
11+ tex : {
12+ inlineMath : [ [ '$' , '$' ] , [ '\\(' , '\\)' ] ] ,
13+ displayMath : [ [ '$$' , '$$' ] , [ '\\[' , '\\]' ] ] ,
14+ processEscapes : true ,
15+ processEnvironments : true
16+ } ,
17+ options : {
18+ skipHtmlTags : [ 'script' , 'noscript' , 'style' , 'textarea' , 'pre' , 'code' , 'a' ]
19+ }
20+ } ;
21+ </ script >
22+ </ head >
23+ < body >
24+ < div class ="app-container " id ="appContainer ">
25+
26+ <!-- Sidebar -->
27+ < div class ="sidebar " id ="sidebar ">
28+ < div class ="sidebar-header ">
29+ < h2 > 💬 ChatGPT UI</ h2 >
30+ < button class ="new-chat-btn " id ="newChatBtn ">
31+ < span > +</ span > New Chat
32+ </ button >
33+ </ div >
34+
35+ < div class ="sessions-section ">
36+ < h3 > Chats</ h3 >
37+ < div class ="sessions-list " id ="sessionsList "> </ div >
38+ </ div >
39+
40+ < div class ="sidebar-footer ">
41+ < div class ="session-controls ">
42+ < input type ="text " id ="sessionNameInput " class ="session-name-input " placeholder ="Name this chat... ">
43+ < div id ="autoSaveIndicator " class ="auto-save-indicator ">
44+ < span > ✔</ span > Saved
45+ </ div >
46+ </ div >
47+ < div class ="sidebar-actions ">
48+ < button class ="sidebar-action-btn " id ="importAllBtn "> Import</ button >
49+ < button class ="sidebar-action-btn " id ="exportAllBtn "> Export</ button >
50+ < button class ="sidebar-action-btn delete " id ="deleteAllBtn "> Delete All</ button >
51+ < input type ="file " id ="importFileInput " style ="display: none; " accept =".json ">
52+ </ div >
53+ </ div >
54+ </ div >
55+
56+ <!-- Sidebar Resizer -->
57+ < div class ="sidebar-resizer " id ="sidebarResizer "> </ div >
58+
59+ <!-- Main Content -->
60+ < div class ="main-content " id ="mainContent ">
61+ < div class ="chat-container ">
62+ <!-- Configuration Section -->
63+ < div class ="config-section " id ="configSection ">
64+ < div class ="header-controls ">
65+ < button class ="mobile-menu-toggle " id ="mobileMenuToggle ">
66+ < span > </ span >
67+ < span > </ span >
68+ < span > </ span >
69+ </ button >
70+
71+ < div class ="main-config-area ">
72+ < input type ="password " class ="api-key-input " placeholder ="Enter your OpenAI API Key here... " id ="apiKeyInput ">
73+
74+ < div class ="main-controls " id ="mainControls ">
75+ < select class ="model-select " id ="modelSelect ">
76+ < option value =""> Loading models...</ option >
77+ </ select >
78+
79+ < div class ="action-buttons-group ">
80+ < button class ="top-btn " id ="refreshModelsBtn " title ="Refresh Models "> 🔄</ button >
81+ < div class ="streaming-toggle ">
82+ < input type ="checkbox " id ="streamingCheckbox " class ="checkbox " checked >
83+ < label for ="streamingCheckbox "> Stream</ label >
84+ </ div >
85+ < button class ="top-btn " id ="exportSessionBtn " title ="Export Chat "> 📄</ button >
86+ </ div >
87+ </ div >
88+ </ div >
89+ </ div >
90+ < div id ="modelInfo " class ="model-info "> Select a model to see information</ div >
91+ </ div >
92+
93+ <!-- Chat Messages -->
94+ < div class ="chat-messages " id ="chatMessages "> </ div >
95+
96+ <!-- Typing Indicator -->
97+ < div class ="typing-indicator " id ="typingIndicator ">
98+ < div class ="typing-dots "> AI is thinking</ div >
99+ </ div >
100+
101+ <!-- Input Section -->
102+ < div class ="input-section ">
103+ < div class ="input-container ">
104+ < div class ="file-upload-container ">
105+ < div class ="uploaded-files " id ="uploadedFiles "> </ div >
106+ < input type ="file " class ="file-input " id ="fileInput " multiple >
107+ < button class ="icon-btn " id ="fileUploadBtn " title ="Attach Files "> 📎</ button >
108+ < button class ="icon-btn " id ="imageUploadBtn " title ="Attach Images "> 🖼️</ button >
109+ </ div >
110+
111+ < textarea class ="message-input " id ="messageInput " placeholder ="Type your message... " rows ="1 "> </ textarea >
112+
113+ < div class ="action-buttons ">
114+ < button class ="icon-btn " id ="clearButton " title ="Clear Chat ">
115+ < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 24 24 " fill ="currentColor " width ="20 " height ="20 ">
116+ < path d ="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z "/>
117+ </ svg >
118+ </ button >
119+ < button class ="send-button " id ="sendButton " title ="Send Message ">
120+ < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 24 24 " fill ="currentColor " width ="20 " height ="20 "> < path d ="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z "/> </ svg >
121+ </ button >
122+ </ div >
123+ </ div >
124+ </ div >
125+ </ div >
126+ </ div >
127+
128+ <!-- Sidebar Overlay for mobile -->
129+ < div class ="sidebar-overlay " id ="sidebarOverlay "> </ div >
130+ </ div >
131+
132+ < script src ="js/script.js "> </ script >
133+ </ body >
134+ </ html >
0 commit comments