1import { p as prop, e as init, i as if_block, d as bind_this, f as set_style, b as set_class, k as each, u as index } from './i18n-CGlVUOvE.js'; 2import { M as push, a8 as onMount, Y as legacy_pre_effect, y as deep_read_state, I as tick, Z as get, _ as legacy_pre_effect_reset, t as template_effect, w as untrack, U as event, a as append, O as pop, a0 as mutable_source, $ as set, P as flushSync, Q as child, S as sibling, R as from_html, T as reset, a3 as comment, N as first_child, aj as remove_textarea_child, X as set_text, a4 as text } from './index-Bq2njFOY.js'; 3import { b as bind_value } from './input-CXpCw23l.js'; 4import './StreamingBar.svelte_svelte_type_style_lang-DWGn5tT_.js'; 5import './ScrollFade.svelte_svelte_type_style_lang-D0JPkGar.js'; 6import './MarkdownCode.svelte_svelte_type_style_lang-B29zDiob.js'; 7import { C as Code } from './Code-DQLc8-1z.js'; 8/* empty css */ 9import { M as Markdown } from './Index.svelte_svelte_type_style_lang-BIr0F_Dm.js'; 10/* empty css */ 11import './html-Bwif0JPw.js'; 12import './snippet-BG7qkY_1.js'; 13import './prism-python-NrKIQnfs.js'; 14import './actions-CgRQ2lHA.js'; 15import './utils.svelte-Bi9ASwv9.js'; 16import './Check-BKMHx_DF.js'; 17import './Copy-BQlJe6-D.js'; 18import './MarkdownCode-BYKuypS7.js'; 19import './IconButtonWrapper-DAsvkfJg.js'; 20 21var root_3 = from_html(`<span class="added svelte-1s2fnws"> </span>`); 22var root_4 = from_html(`<span class="removed svelte-1s2fnws"> </span>`); 23var root_2 = from_html(`<span class="diff-stats svelte-1s2fnws"><!> <!></span>`); 24var root_7 = from_html(`<button class="undo-button svelte-1s2fnws" title="Undo this change">Undo</button>`); 25var root_6 = from_html(`<div><div class="message-content svelte-1s2fnws"><span class="message-text svelte-1s2fnws"><!></span> <!></div></div>`); 26var root_8 = from_html(`<div class="no-messages svelte-1s2fnws">No messages yet</div>`); 27var root_10 = from_html(`<button class="starter-query-button svelte-1s2fnws"> </button>`); 28var root_9 = from_html(`<div class="starter-queries-container svelte-1s2fnws"><div class="starter-queries svelte-1s2fnws"></div></div>`); 29var root_5 = from_html(`<div class="message-history svelte-1s2fnws"><!> <!> <!></div>`); 30var root_12 = from_html(`<div class="code-content svelte-1s2fnws"><div class="code-editor-container svelte-1s2fnws"><!></div> <button><!></button> <button class="deploy-to-spaces-button svelte-1s2fnws"><span class="button-content svelte-1s2fnws">Deploy to <svg class="spaces-logo svelte-1s2fnws" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" preserveAspectRatio="xMidYMid meet" viewBox="0 0 39 40"><path d="M6.3712 2.04427C3.7183 2.04427 1.56771 4.19486 1.56771 6.84776V18.3546V18.6544V32.7341C1.56771 35.3868 3.71818 37.5377 6.3712 37.5377H17.878H20.7507H32.2575C34.9104 37.5377 37.0612 35.387 37.0612 32.7341V21.6204C37.0612 20.177 36.4252 18.8839 35.4189 18.004C36.4576 16.3895 37.0612 14.4666 37.0612 12.4046C37.0612 6.68274 32.4225 2.04427 26.7007 2.04427C24.6388 2.04427 22.7159 2.64776 21.1014 3.68647C20.2214 2.6802 18.9282 2.04427 17.4849 2.04427H6.3712Z" fill="black" class="stroke-white dark:stroke-white/10" stroke-width="3.07552"></path><path d="M9.56855 23.5001C8.8406 23.5001 8.25047 24.0902 8.25047 24.8182V29.5361C8.25047 30.2641 8.8406 30.8542 9.56855 30.8542H14.2864C15.0144 30.8542 15.6045 30.2641 15.6045 29.5361V24.8182C15.6045 24.0902 15.0143 23.5001 14.2864 23.5001H9.56855Z" fill="#FF3270"></path><path d="M24.3409 23.5001C23.613 23.5001 23.0228 24.0902 23.0228 24.8182V29.5361C23.0228 30.2641 23.613 30.8542 24.3409 30.8542H29.0588C29.7868 30.8542 30.3769 30.2641 30.3769 29.5361V24.8182C30.3769 24.0902 29.7868 23.5001 29.0588 23.5001H24.3409Z" fill="#861FFF"></path><path d="M9.56855 8.72815C8.8406 8.72815 8.25047 9.31827 8.25047 10.0462V14.7641C8.25047 15.4921 8.8406 16.0822 9.56855 16.0822H14.2864C15.0144 16.0822 15.6045 15.4921 15.6045 14.7641V10.0462C15.6045 9.31827 15.0143 8.72815 14.2864 8.72815H9.56855Z" fill="#097EFF"></path><path d="M26.6999 8.72815C24.6692 8.72815 23.0228 10.3744 23.0228 12.4052C23.0228 14.4359 24.6692 16.0822 26.6999 16.0822C28.7306 16.0822 30.3769 14.4359 30.3769 12.4052C30.3769 10.3744 28.7306 8.72815 26.6999 8.72815Z" fill="#FFD702"></path></svg> <span style="font-weight: 600;">Spaces</span></span></button></div>`); 31var root_1 = from_html(`<div class="vibe-editor svelte-1s2fnws"><button class="resize-handle svelte-1s2fnws" aria-label="Resize sidebar"></button> <div class="tab-header svelte-1s2fnws"><button>
31Chat</button> <button>Code <!></button></div> <div class="tab-content svelte-1s2fnws"><!></div> <div class="input-section svelte-1s2fnws"><div class="powered-by svelte-1s2fnws">Powered by: <code>gpt-oss</code></div> <textarea placeholder="What can I add or change?" class="prompt-input svelte-1s2fnws"></textarea> <button class="submit-button svelte-1s2fnws">Send</button></div></div>`); 32 33function Index($$anchor, $$props) { 34 push($$props, false); 35 36 let app = prop($$props, 'app', 12); 37 let root = prop($$props, 'root', 12); 38 let prompt = mutable_source(""); 39 let editorWidth = mutable_source(350); 40 let isResizing = false; 41 let editorElement = mutable_source(); 42 let activeTab = mutable_source("chat"); 43 let codeValue = mutable_source(""); 44 let diffStats = mutable_source(null); 45 let message_history = mutable_source([]); 46 let history_elem = mutable_source(); 47 48 const scroll_to_bottom = (behavior = "smooth") => { 49 if (!get(history_elem)) return; 50 51 get(history_elem).scrollTo({ top: get(history_elem).scrollHeight, behavior }); 52 }; 53 54 let starterQueries = mutable_source([]); 55 56 const fetchStarterQueries = async () => { 57 const post = app().post_data(`${root()}/gradio_api/vibe-starter-queries/`, {}); 58 59 post.then(async ([response, status_code]) => { 60 if (status_code !== 200) { 61 throw new Error(`Error: ${status_code}`); 62 } 63 64 const responseData = response; 65 66 set(starterQueries, responseData.starter_queries); 67 }).catch(async (error) => { 68 console.error("Failed to fetch starter queries:", error); 69 }); 70 }; 71 72 fetchStarterQueries(); 73 74 const submit = async (queryText) => { 75 const textToSubmit = queryText || get(prompt); 76 77 if (textToSubmit.trim() === "") return; 78 79 // Clear diff stats when submitting new prompt 80 set(diffStats, null); 81 82 const userMessageIndex = get(message_history).length; 83 84 set(message_history, [ 85 ...get(message_history), 86 { text: textToSubmit, isBot: false } 87 ]); 88 89 const botMessageIndex = get(message_history).length; 90 91 set(message_history, [ 92 ...get(message_history), 93 { text: "Working...", isBot: true, isPending: true } 94 ]); 95 96 await tick(); 97 scroll_to_bottom(); 98 99 const userPrompt = textToSubmit; 100 101 if (!queryText) { 102 set(prompt, ""); 103 } 104 105 const post = app().post_data(`${root()}/gradio_api/vibe-edit/`, { prompt: userPrompt }); 106 107 post.then(async ([response, status_code]) => { 108 if (status_code !== 200) { 109 throw new Error(`Error: ${status_code}`); 110 } 111 112 const responseData = response; 113 114 // Update diff stats from response 115 set(diffStats, responseData.diff_stats); 116 117 set(message_history, get(message_history).map((msg, index) => { 118 return index === userMessageIndex ? { ...msg, hash: responseData.hash } : msg; 119 })); 120 121 set(message_history, get(message_history).map((msg, index) => index === botMessageIndex 122 ? { 123 text: responseData.reasoning ? responseData.reasoning : "Done.", 124 isBot: true, 125 isPending: false 126 } 127 : msg)); 128 129 await tick(); 130 scroll_to_bottom(); 131 }).catch(async (error) => { 132 set(message_history, get(message_history).map((msg, index) => index === botMessageIndex 133 ? { text: "Error occurred.", isBot: true, isPending: false } 134 : msg)); 135 136 await tick(); 137 scroll_to_bottom(); 138 }); 139 }; 140 141 const handleStarterQuery = async (query) => { 142 await submit(query); 143 }; 144 145 const undoMessage = async (hash, messageIndex) => { 146 try { 147 await app().post_data(`${root()}/gradio_api/undo-vibe-edit/`, { hash }); 148 149 // Clear diff stats when undoing 150 set(diffStats, null); 151 152 const messageToUndo = get(message_history)[messageIndex]; 153 154 set(prompt, messageToUndo.text); 155 set(message_history, get(message_history).slice(0, messageIndex)); 156 } catch(error) { 157 console.error("Failed to undo:", error); 158 } 159 }; 160 161 const handleResizeStart = (e) => { 162 e.preventDefault(); 163 isResizing = true; 164 document.addEventListener("mousemove", handleResizeMove); 165 document.addEventListener("mouseup", handleResizeEnd); 166 document.body.style.cursor = "col-resize"; 167 document.body.style.userSelect = "none"; 168 }; 169 170 const handleResizeMove = (e) => { 171 if (!isResizing) return; 172 173 const minWidth = 250; 174 const maxWidth = Math.min(800, window.innerWidth * 0.5); 175 const newWidth = window.innerWidth - e.clientX; 176 177 set(editorWidth, Math.max(minWidth, Math.min(maxWidth, newWidth))); 178 179 // Dispatch custom event to update the main content margin 180 window.dispatchEvent(new CustomEvent("vibeEditorResize", { detail: { width: get(editorWidth) } })); 181 }; 182 183 const handleResizeEnd = () => { 184 isResizing = false;
185 document.removeEventListener("mousemove", handleResizeMove); 186 document.removeEventListener("mouseup", handleResizeEnd); 187 document.body.style.cursor = ""; 188 document.body.style.userSelect = ""; 189 }; 190 191 const fetchCode = async () => { 192 try { 193 const response = await fetch(`${root()}/gradio_api/vibe-code/`, { 194 method: "GET", 195 headers: { "Content-Type": "application/json" } 196 }); 197 198 if (response.ok) { 199 const data = await response.json(); 200 201 set(codeValue, data.code); 202 } 203 } catch(error) { 204 console.error("Failed to fetch code:", error); 205 } 206 }; 207 208 let code_updated = mutable_source(false); 209 210 const updateCode = async () => { 211 try { 212 await app().post_data(`${root()}/gradio_api/vibe-code/`, { code: get(codeValue) }); 213 set(code_updated, true); 214 215 setTimeout( 216 () => { 217 set(code_updated, false); 218 }, 219 1000 220 ); 221 } catch(error) { 222 console.error("Failed to update code:", error); 223 } 224 }; 225 226 function create_spaces_url() { 227 const base_URL = "https://huggingface.co/new-space"; 228 const params = new URLSearchParams({ name: "new-space", sdk: "gradio" }); 229 const encoded_content = get(codeValue).trimStart(); 230 231 params.append("files[0][path]", "app.py"); 232 params.append("files[0][content]", encoded_content); 233 window.open(`${base_URL}?${params.toString()}`, "_blank")?.focus(); 234 } 235 236 onMount(() => { 237 return () => { 238 document.removeEventListener("mousemove", handleResizeMove); 239 document.removeEventListener("mouseup", handleResizeEnd); 240 }; 241 }); 242 243 legacy_pre_effect(() => (deep_read_state(app())), () => { 244 (app(), fetchCode()); 245 }); 246 247 legacy_pre_effect(() => (get(activeTab), tick), () => { 248 if (get(activeTab) === "chat") { 249 tick().then(() => scroll_to_bottom("auto")); 250 } 251 }); 252 253 legacy_pre_effect(() => (get(code_updated)), () => { 254 get(code_updated); 255 }); 256 257 legacy_pre_effect(() => (get(starterQueries)), () => { 258 get(starterQueries); 259 }); 260 261 legacy_pre_effect_reset(); 262 263 var $$exports = { 264 get app() { 265 return app(); 266 }, 267 268 set app($$value) { 269 app($$value); 270 flushSync(); 271 }, 272 273 get root() { 274 return root(); 275 }, 276 277 set root($$value) { 278 root($$value); 279 flushSync(); 280 } 281 }; 282 283 init(); 284 285 var div = root_1(); 286 var button = child(div); 287 var div_1 = sibling(button, 2); 288 var button_1 = child(div_1); 289 let classes; 290 var button_2 = sibling(button_1, 2); 291 let classes_1; 292 var node = sibling(child(button_2)); 293 294 { 295 var consequent_2 = ($$anchor) => { 296 var span = root_2(); 297 var node_1 = child(span); 298 299 { 300 var consequent = ($$anchor) => { 301 var span_1 = root_3(); 302 var text = child(span_1); 303 304 reset(span_1); 305 306 template_effect(() => set_text(text, `+${( 307 get(diffStats), 308 untrack(() => get(diffStats).lines_added) 309 ) ?? ''}`)); 310 311 append($$anchor, span_1); 312 }; 313 314 if_block(node_1, ($$render) => { 315 if (( 316 get(diffStats), 317 untrack(() => get(diffStats).lines_added > 0) 318 )) $$render(consequent); 319 }); 320 } 321 322 var node_2 = sibling(node_1, 2); 323 324 { 325 var consequent_1 = ($$anchor) => { 326 var span_2 = root_4(); 327 var text_1 = child(span_2); 328 329 reset(span_2); 330 331 template_effect(() => set_text(text_1, `-${( 332 get(diffStats), 333 untrack(() => get(diffStats).lines_removed) 334 ) ?? ''}`)); 335 336 append($$anchor, span_2); 337 }; 338 339 if_block(node_2, ($$render) => { 340 if (( 341 get(diffStats), 342 untrack(() => get(diffStats).lines_removed > 0) 343 )) $$render(consequent_1); 344 }); 345 } 346 347 reset(span); 348 append($$anchor, span); 349 }; 350 351 if_block(node, ($$render) => { 352 if (( 353 get(diffStats), 354 untrack(() => get(diffStats) && (get(diffStats).lines_added > 0 || get(diffStats).lines_removed > 0)) 355 )) $$render(consequent_2); 356 }); 357 } 358 359 reset(button_2); 360 reset(div_1); 361 362 var div_2 = sibling(div_1, 2); 363 var node_3 = child(div_2); 364 365 { 366 var consequent_6 = ($$anchor) => { 367 var div_3 = root_5(); 368 var node_4 = child(div_3); 369 370 each(node_4, 1, () => get(message_history), index, ($$anchor, message, index) => { 371 var div_4 = root_6(); 372 let classes_2; 373 var div_5 = child(div_4); 374 var span_3 = child(div_5); 375 var node_5 = child(span_3); 376 377 Markdown(node_5, { 378 get value() { 379 return (get(message), untrack(() => get(message).text)); 380 }, 381 latex_delimiters: [],
382 theme_mode: 'system' 383 }); 384 385 reset(span_3); 386 387 var node_6 = sibling(span_3, 2); 388 389 { 390 var consequent_3 = ($$anchor) => { 391 var button_3 = root_7(); 392 393 event('click', button_3, () => undoMessage(get(message).hash || "", index)); 394 append($$anchor, button_3); 395 }; 396 397 if_block(node_6, ($$render) => { 398 if (( 399 get(message), 400 untrack(() => !get(message).isBot && get(message).hash && !get(message).isPending) 401 )) $$render(consequent_3); 402 }); 403 } 404 405 reset(div_5); 406 reset(div_4); 407 408 template_effect(() => classes_2 = set_class(div_4, 1, 'message-item svelte-1s2fnws', null, classes_2, { 409 'bot-message': get(message).isBot, 410 'user-message': !get(message).isBot 411 })); 412 413 append($$anchor, div_4); 414 }); 415 416 var node_7 = sibling(node_4, 2); 417 418 { 419 var consequent_4 = ($$anchor) => { 420 var div_6 = root_8(); 421 422 append($$anchor, div_6); 423 }; 424 425 if_block(node_7, ($$render) => { 426 if (( 427 get(message_history), 428 untrack(() => get(message_history).length === 0) 429 )) $$render(consequent_4); 430 }); 431 } 432 433 var node_8 = sibling(node_7, 2); 434 435 { 436 var consequent_5 = ($$anchor) => { 437 var div_7 = root_9(); 438 var div_8 = child(div_7); 439 440 each(div_8, 5, () => get(starterQueries), index, ($$anchor, query) => { 441 var button_4 = root_10(); 442 var text_2 = child(button_4, true); 443 444 reset(button_4); 445 template_effect(() => set_text(text_2, get(query))); 446 event('click', button_4, () => handleStarterQuery(get(query))); 447 append($$anchor, button_4); 448 }); 449 450 reset(div_8); 451 reset(div_7); 452 append($$anchor, div_7); 453 }; 454 455 if_block(node_8, ($$render) => { 456 if (( 457 get(message_history), 458 untrack(() => get(message_history).length === 0) 459 )) $$render(consequent_5); 460 }); 461 } 462 463 reset(div_3); 464 bind_this(div_3, ($$value) => set(history_elem, $$value), () => get(history_elem)); 465 append($$anchor, div_3); 466 }; 467 468 var alternate_1 = ($$anchor) => { 469 var fragment = comment(); 470 var node_9 = first_child(fragment); 471 472 { 473 var consequent_8 = ($$anchor) => { 474 var div_9 = root_12(); 475 var div_10 = child(div_9);
476 var node_10 = child(div_10); 477 478 Code(node_10, { 479 language: 'python', 480 lines: 10, 481 dark_mode: false, 482 basic: true, 483 readonly: false, 484 placeholder: 'Enter your code here...', 485 wrap_lines: true, 486 get value() { 487 return get(codeValue); 488 }, 489 490 set value($$value) { 491 set(codeValue, $$value); 492 }, 493 $$legacy: true 494 }); 495 496 reset(div_10); 497 498 var button_5 = sibling(div_10, 2); 499 let classes_3; 500 var node_11 = child(button_5); 501 502 { 503 var consequent_7 = ($$anchor) => { 504 var text_3 = text('Updated!'); 505 506 append($$anchor, text_3); 507 }; 508 509 var alternate = ($$anchor) => { 510 var text_4 = text('Update Code'); 511 512 append($$anchor, text_4); 513 }; 514 515 if_block(node_11, ($$render) => { 516 if (get(code_updated)) $$render(consequent_7); else $$render(alternate, false); 517 }); 518 } 519 520 reset(button_5); 521 522 var button_6 = sibling(button_5, 2); 523 524 reset(div_9); 525 template_effect(() => classes_3 = set_class(button_5, 1, 'update-code-button svelte-1s2fnws', null, classes_3, { updating: get(code_updated) })); 526 event('click', button_5, updateCode); 527 event('click', button_6, () => create_spaces_url()); 528 append($$anchor, div_9); 529 }; 530 531 if_block( 532 node_9, 533 ($$render) => { 534 if (get(activeTab) === "code") $$render(consequent_8); 535 }, 536 true 537 ); 538 } 539 540 append($$anchor, fragment); 541 }; 542 543 if_block(node_3, ($$render) => { 544 if (get(activeTab) === "chat") $$render(consequent_6); else $$render(alternate_1, false); 545 }); 546 } 547 548 reset(div_2); 549 550 var div_11 = sibling(div_2, 2); 551 var textarea = sibling(child(div_11), 2); 552 553 remove_textarea_child(textarea); 554 555 var button_7 = sibling(textarea, 2); 556 557 reset(div_11); 558 reset(div); 559 bind_this(div, ($$value) => set(editorElement, $$value), () => get(editorElement)); 560 561 template_effect( 562 ($0) => { 563 set_style(div, `width: ${get(editorWidth) ?? ''}px;`); 564 classes = set_class(button_1, 1, 'tab-button svelte-1s2fnws', null, classes, { active: get(activeTab) === "chat" }); 565 classes_1 = set_class(button_2, 1, 'tab-button svelte-1s2fnws', null, classes_1, { active: get(activeTab) === "code" }); 566 button_7.disabled = $0; 567 }, 568 [ 569 () => (get(prompt), untrack(() => get(prompt).trim() === "")) 570 ] 571 ); 572 573 event('mousedown', button, handleResizeStart); 574 event('click', button_1, () => set(activeTab, "chat")); 575 event('click', button_2, () => set(activeTab, "code")); 576 577 event('keydown', textarea, (e) => { 578 if (e.key === "Enter" && !e.shiftKey) { 579 e.preventDefault(); 580 submit(); 581 } 582 }); 583 584 bind_value(textarea, () => get(prompt), ($$value) => set(prompt, $$value)); 585 event('click', button_7, () => submit()); 586 append($$anchor, div); 587 588 return pop($$exports); 589} 590 591export { Index as default }; 592//# sourceMappingURL=Index-BZjnJz9D.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.