@@ -106,16 +106,22 @@ const codeEndpoint = `<span class="c-cmt">// POST /api/chat — unified AI endpo
106106 </form >
107107 </div >
108108
109- <!-- Right: code/config panel -->
110- <div class =" code-panel" >
111- <div class =" code-header" >
112- <button class =" code-tab active" data-tab =" prompt" >system prompt</button >
113- <button class =" code-tab" data-tab =" config" >wrangler.toml</button >
114- <button class =" code-tab" data-tab =" endpoint" >endpoint</button >
109+ <!-- Right: code/config panel — collapsed by default -->
110+ <div class =" code-panel" id =" code-panel" >
111+ <button class =" code-toggle" id =" code-toggle" >
112+ <span class =" code-toggle-icon" id =" code-toggle-icon" >‹ </span >
113+ <span class =" code-toggle-label" >View source</span >
114+ </button >
115+ <div class =" code-inner" id =" code-inner" style =" display:none" >
116+ <div class =" code-header" >
117+ <button class =" code-tab active" data-tab =" prompt" >system prompt</button >
118+ <button class =" code-tab" data-tab =" config" >wrangler.toml</button >
119+ <button class =" code-tab" data-tab =" endpoint" >endpoint</button >
120+ </div >
121+ <pre id =" tab-prompt" class =" code-block" set:html ={ codePrompt } />
122+ <pre id =" tab-config" class =" code-block" style =" display:none" set:html ={ codeConfig } />
123+ <pre id =" tab-endpoint" class =" code-block" style =" display:none" set:html ={ codeEndpoint } />
115124 </div >
116- <pre id =" tab-prompt" class =" code-block" set:html ={ codePrompt } />
117- <pre id =" tab-config" class =" code-block" style =" display:none" set:html ={ codeConfig } />
118- <pre id =" tab-endpoint" class =" code-block" style =" display:none" set:html ={ codeEndpoint } />
119125 </div >
120126 </div >
121127
@@ -133,6 +139,20 @@ const codeEndpoint = `<span class="c-cmt">// POST /api/chat — unified AI endpo
133139
134140 const history: { role: string; content: string }[] = [];
135141 let isStreaming = false;
142+ let codeOpen = false;
143+
144+ // Code panel toggle
145+ const codeToggle = document.getElementById('code-toggle')!;
146+ const codeInner = document.getElementById('code-inner')!;
147+ const codePanel = document.getElementById('code-panel')!;
148+ const codeToggleIcon = document.getElementById('code-toggle-icon')!;
149+
150+ codeToggle.addEventListener('click', () => {
151+ codeOpen = !codeOpen;
152+ codeInner.style.display = codeOpen ? 'flex' : 'none';
153+ codePanel.classList.toggle('expanded', codeOpen);
154+ codeToggleIcon.textContent = codeOpen ? '\u203A' : '\u2039';
155+ });
136156
137157 // Tab switching — toggle visibility of pre-rendered blocks
138158 const tabs = document.querySelectorAll('.code-tab');
@@ -229,8 +249,8 @@ const codeEndpoint = `<span class="c-cmt">// POST /api/chat — unified AI endpo
229249 margin: 0 auto;
230250 padding: 0 1.5rem;
231251 display: grid;
232- grid-template-columns: 1fr 1fr ;
233- gap: 1.5rem ;
252+ grid-template-columns: 1fr auto ;
253+ gap: 0 ;
234254 height: calc(100vh - 10rem);
235255 min-height: 30rem;
236256 }
@@ -342,14 +362,62 @@ const codeEndpoint = `<span class="c-cmt">// POST /api/chat — unified AI endpo
342362
343363 #chat-send:hover { color: var(--color-accent-hover); }
344364
345- /* Code panel */
365+ /* Code panel — collapsed by default */
346366 .code-panel {
367+ display: flex;
368+ flex-direction: row;
369+ width: 2.5rem;
370+ transition: width 0.3s ease;
371+ position: relative;
372+ }
373+
374+ .code-panel.expanded {
375+ width: 28rem;
376+ gap: 0;
377+ }
378+
379+ .code-toggle {
347380 display: flex;
348381 flex-direction: column;
382+ align-items: center;
383+ justify-content: center;
384+ gap: 0.5rem;
385+ width: 2.5rem;
386+ flex-shrink: 0;
349387 background: var(--color-surface);
350388 border: 1px solid var(--color-border);
351- border-radius: 8px;
389+ border-radius: 8px 0 0 8px;
390+ cursor: pointer;
391+ color: var(--color-text-muted);
392+ font-family: var(--font-mono);
393+ padding: 0;
394+ transition: color 0.2s;
395+ }
396+
397+ .code-toggle:hover { color: var(--color-accent); }
398+
399+ .code-toggle-icon {
400+ font-size: 1.2rem;
401+ line-height: 1;
402+ }
403+
404+ .code-toggle-label {
405+ writing-mode: vertical-rl;
406+ text-orientation: mixed;
407+ font-size: 0.6rem;
408+ letter-spacing: 0.08em;
409+ text-transform: uppercase;
410+ }
411+
412+ .code-inner {
413+ flex: 1;
414+ flex-direction: column;
415+ background: var(--color-surface);
416+ border: 1px solid var(--color-border);
417+ border-left: none;
418+ border-radius: 0 8px 8px 0;
352419 overflow: hidden;
420+ min-width: 0;
353421 }
354422
355423 .code-header {
@@ -420,7 +488,7 @@ const codeEndpoint = `<span class="c-cmt">// POST /api/chat — unified AI endpo
420488 height: auto;
421489 }
422490
423- .chat-panel { height: 60vh ; min-height: 20rem; }
424- .code-panel { height: 20rem ; }
491+ .chat-panel { height: 75vh ; min-height: 20rem; }
492+ .code-panel { display: none ; }
425493 }
426494</style >
0 commit comments