1import { p as prop, t as remove_input_defaults, b as set_class, k as each, u as index, i as if_block, a as set_attribute, g as spread_props, r as rest_props } from './i18n-CGlVUOvE.js'; 2import { a as append, f as from_svg, ai as delegate, M as push, t as template_effect, O as pop, R as from_html, ab as state, ac as proxy, $ as set, Z as get, ad as user_effect, S as sibling, X as set_text, a2 as user_derived, Q as child, a3 as comment, N as first_child, T as reset } from './index-Bq2njFOY.js'; 3import { k as key } from './key-CQEYzg1f.js'; 4import { G as Gradio } from './utils.svelte-Bi9ASwv9.js'; 5import './ScrollFade.svelte_svelte_type_style_lang-D0JPkGar.js'; 6import { F as File } from './File-BiXBtg1a.js'; 7import { B as Block } from './Block-DNK-JdLJ.js'; 8import './MarkdownCode.svelte_svelte_type_style_lang-B29zDiob.js'; 9import { B as BlockLabel } from './BlockLabel-VpI11pHf.js'; 10import { I as IconButtonWrapper } from './IconButtonWrapper-DAsvkfJg.js'; 11import { a as bind_checked } from './input-CXpCw23l.js'; 12import { S as Static } from './index-1GCmrSlD.js'; 13import './StreamingBar.svelte_svelte_type_style_lang-DWGn5tT_.js'; 14import './snippet-BG7qkY_1.js'; 15import './prism-python-NrKIQnfs.js'; 16import './Clear-C8Tfa7QP.js'; 17import './html-Bwif0JPw.js'; 18 19var root$3 = from_svg(`<svg width="100%" height="100%" viewBox="0 0 14 17" version="1.1" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><g transform="matrix(1,0,0,1,-10.6667,-7.73588)"><path d="M12.7,24.033C12.256,24.322 11.806,24.339 11.351,24.084C10.896,23.829 10.668,23.434 10.667,22.9L10.667,9.1C10.667,8.567 10.895,8.172 11.351,7.916C11.807,7.66 12.256,7.677 12.7,7.967L23.567,14.867C23.967,15.133 24.167,15.511 24.167,16C24.167,16.489 23.967,16.867 23.567,17.133L12.7,24.033Z" style="fill:currentColor;fill-rule:nonzero;"></path></g></svg>`); 20 21function ArrowIcon($$anchor) { 22 var svg = root$3(); 23 24 append($$anchor, svg); 25} 26 27var root$2 = from_html(`<input type="checkbox"/>`); 28 29function Checkbox($$anchor, $$props) { 30 push($$props, true); 31 32 let value = prop($$props, 'value', 15); 33 var input = root$2(); 34 35 remove_input_defaults(input); 36 input.__input = () => $$props.onchange?.(!value()); 37 38 let classes; 39 40 template_effect(() => { 41 input.disabled = $$props.disabled; 42 classes = set_class(input, 1, 'svelte-3g0mcl', null, classes, { disabled: $$props.disabled && !value() }); 43 }); 44 45 bind_checked(input, value); 46 append($$anchor, input); 47 pop(); 48} 49 50delegate(['input']); 51 52const FileIcon = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='32'%20height='32'%20viewBox='0%200%2024%2024'%3e%3cpath%20fill='%23888888'%20d='M6%202c-1.1%200-1.99.9-1.99%202L4%2020c0%201.1.89%202%201.99%202H18c1.1%200%202-.9%202-2V8l-6-6H6zm7%207V3.5L18.5%209H13z'/%3e%3c/svg%3e"; 53 54const FolderIcon = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3csvg%20viewBox='0%200%2032%2032'%20version='1.1'%20id='svg7'%20sodipodi:docname='light-folder-new.svg'%20inkscape:version='1.3.2%20(091e20e,%202023-11-25)'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:svg='http://www.w3.org/2000/svg'%3e%3csodipodi:namedview%20id='namedview7'%20pagecolor='%23ffffff'%20bordercolor='%23000000'%20borderopacity='0.25'%20inkscape:showpageshadow='2'%20inkscape:pageopacity='0.0'%20inkscape:pagecheckerboard='0'%20inkscape:deskcolor='%23d1d1d1'%20inkscape:zoom='7.375'%20inkscape:cx='15.932203'%20inkscape:cy='16'%20inkscape:window-width='1312'%20inkscape:window-height='529'%20inkscape:window-x='0'%20inkscape:window-y='38'%20inkscape:window-maximized='0'%20inkscape:current-layer='svg7'
54%20/%3e%3cdefs%20id='defs6'%3e%3cclipPath%20id='clipPath1'%3e%3cpath%20d='m69.63%2012.145h-.052c-22.727-.292-46.47%204.077-46.709%204.122-2.424.451-4.946%202.974-5.397%205.397-.044.237-4.414%2023.983-4.122%2046.71-.292%2022.777%204.078%2046.523%204.122%2046.761.451%202.423%202.974%204.945%205.398%205.398.237.044%2023.982%204.413%2046.709%204.121%2022.779.292%2046.524-4.077%2046.761-4.121%202.423-.452%204.946-2.976%205.398-5.399.044-.236%204.413-23.981%204.121-46.709.292-22.777-4.077-46.523-4.121-46.761-.453-2.423-2.976-4.946-5.398-5.397-.238-.045-23.984-4.414-46.71-4.122'%20id='path1'%20/%3e%3c/clipPath%3e%3clinearGradient%20gradientUnits='userSpaceOnUse'%20y2='352.98'%20x2='-601.15'%20y1='663.95'%20x1='-591.02'%20id='2'%3e%3cstop%20stop-color='%23a0a0a0'%20id='stop1'%20/%3e%3cstop%20offset='1'%20stop-color='%23aaa'%20id='stop2'%20/%3e%3c/linearGradient%3e%3clinearGradient%20gradientUnits='userSpaceOnUse'%20y2='354.29'%20x2='-704.05'%20y1='647.77'%20x1='-701.19'%20id='1'%3e%3cstop%20stop-color='%23acabab'%20id='stop3'%20/%3e%3cstop%20offset='1'%20stop-color='%23d4d4d4'%20id='stop4'%20/%3e%3c/linearGradient%3e%3clinearGradient%20id='0'%20x1='59.12'%20y1='-19.888'%20x2='59.15'%20y2='-37.783'%20gradientUnits='userSpaceOnUse'%20gradientTransform='matrix(4.17478%200%200%204.16765-1069.7%20447.73)'%3e%3cstop%20stop-color='%23a0a0a0'%20id='stop5'%20/%3e%3cstop%20offset='1'%20stop-color='%23bdbdbd'%20id='stop6'%20/%3e%3c/linearGradient%3e%3c/defs%3e%3cg%20transform='matrix(.07089%200%200%20.07017%2023.295-40.67)'%20fill='%2360aae5'%20id='g7'%20style='fill:%23888888;fill-opacity:1'%3e%3cpath%20transform='matrix(.7872%200%200%20.79524%20415.34%20430.11)'%20d='m-884.1%20294.78c-4.626%200-8.349%203.718-8.349%208.335v161.41l468.19%201v-121.2c0-4.618-3.724-8.335-8.35-8.335h-272.65c-8.51.751-9.607-.377-13.812-5.981-5.964-7.968-14.969-21.443-20.84-29.21-4.712-6.805-5.477-6.02-13.292-6.02z'%20fill='url(%230)'%20color='%23000'%20id='path6'%20style='fill:%23888888;fill-opacity:1'%20/%3e%3crect%20transform='matrix(.7872%200%200%20.79524%20415.34%20430.11)'%20y='356.85'%20x='-890.28'%20height='295.13'%20width='463.85'%20fill='url(%231)'%20stroke='url(%231)'%20stroke-width='2.378'%20rx='9.63'%20id='rect6'%20style='fill:%23888888;fill-opacity:1'%20/%3e%3crect%20width='463.85'%20height='295.13'%20x='-890.28'%20y='356.85'%20transform='matrix(.7872%200%200%20.79524%20415.34%20430.11)'%20fill='none'%20stroke='url(%232)'%20stroke-linejoin='round'%20stroke-linecap='round'%20stroke-width='5.376'%20rx='9.63'%20id='rect7'%20style='fill:%23888888;fill-opacity:1'%20/%3e%3c/g%3e%3c/svg%3e"; 55 56var root_3 = from_html(`<span class="no-checkbox svelte-6im0c4" aria-hidden="true"></span>`); 57var root_5 = from_html(`<span role="button" aria-label="expand directory" tabindex="0"><!></span>`); 58var root_6 = from_html(`<span class="file-icon svelte-6im0c4"><img alt="file icon" class="svelte-6im0c4"/></span>`); 59var root_1$1 = from_html(`<li class="svelte-6im0c4"><span><!> <!> <span class="item-name svelte-6im0c4"> </span></span> <!></li>`); 60var root$1 = from_html(`<ul></ul>`); 61 62function FileTree($$anchor, $$props) { 63 push($$props, true); 64 65 let path = prop($$props, 'path', 19, () => []), 66 index_path = prop($$props, 'index_path', 19, () => []), 67 selected_files = prop($$props, 'selected_files', 19, () => []), 68 selected_folders = prop($$props, 'selected_folders', 19, () => []), 69 is_selected_entirely = prop($$props, 'is_selected_entirely', 3, false), 70 selectable = prop($$props, 'selectable', 3, false), 71 file_count = prop($$props, 'file_count', 3, "multiple"); 72 73 let content = state(proxy([])); 74 let opened_folders = state(proxy([])); 75 76 const toggle_open_folder = (i) => { 77 if (get(opened_folders).includes(i)) { 78 set(opened_folders, get(opened_folders).filter((x) => x !== i), true); 79 } else { 80 set(opened_folders, [...get(opened_folders), i], true); 81 } 82 }; 83 84 const open_folder = (i) => { 85 if (!get(opened_folders).includes(i)) { 86 set(opened_folders, [...get(opened_folders), i], true); 87 } 88 }; 89 90 (async () => { 91 set(content, await $$props.ls_fn(path()), true); 92 93 if ($$props.valid_for_selection) { 94 set(content, [{ name: ".", type: "file" }, ...get(content)], true); 95 } 96 97 set(opened_folders, get(content).map((x, i) => x.type === "folder" && (is_selected_entirely() || selected_files().some((y) => y[0] === x.name)) ? i : null).filter((x) => x !== null), true); 98 })(); 99 100 user_effect(() => { 101 if (is_selected_entirely()) { 102 get(content).forEach((x) => { 103 $$props.oncheck?.({ path: [...path(), x.name], checked: true, type: x.type }); 104 }); 105 } 106 }); 107 108 function handle_select(full_index_path, item_path, _type) { 109 $$props.onselect?.({ 110 index: full_index_path, 111 value: item_path.join("/"),
112 selected: true 113 }); 114 } 115 116 var ul = root$1(); 117 let classes; 118 119 each(ul, 21, () => get(content), index, ($$anchor, $$item, i) => { 120 let type = () => get($$item).type; 121 let name = () => get($$item).name; 122 let valid = () => get($$item).valid; 123 const is_selected = user_derived(() => (type() === "file" ? selected_files() : selected_folders()).some((x) => x[0] === name() && x.length === 1)); 124 var li = root_1$1(); 125 var span = child(li); 126 let classes_1; 127 128 span.__click = (e) => { 129 e.stopPropagation(); 130 131 if (selectable()) { 132 handle_select([...index_path(), i], [...path(), name()], type()); 133 } 134 }; 135 136 span.__keydown = (e) => { 137 if (selectable() && (e.key === " " || e.key === "Enter")) { 138 handle_select([...index_path(), i], [...path(), name()], type()); 139 } 140 }; 141 142 var node = child(span); 143 144 { 145 var consequent_1 = ($$anchor) => { 146 var fragment = comment(); 147 var node_1 = first_child(fragment); 148 149 { 150 var consequent = ($$anchor) => { 151 var span_1 = root_3(); 152 153 append($$anchor, span_1); 154 }; 155 156 var alternate = ($$anchor) => { 157 Checkbox($$anchor, { 158 disabled: false, 159 get value() { 160 return get(is_selected); 161 }, 162 163 onchange: (checked) => { 164 $$props.oncheck?.({ path: [...path(), name()], checked, type: type() }); 165 166 if (selectable()) { 167 handle_select([...index_path(), i], [...path(), name()], type()); 168 } 169 170 if (type() === "folder" && checked) { 171 open_folder(i); 172 } 173 } 174 }); 175 }; 176 177 if_block(node_1, ($$render) => { 178 if (type() === "folder" && file_count() === "single") $$render(consequent); else $$render(alternate, false); 179 }); 180 } 181 182 append($$anchor, fragment); 183 }; 184 185 if_block(node, ($$render) => { 186 if ($$props.interactive) $$render(consequent_1); 187 }); 188 } 189 190 var node_2 = sibling(node, 2); 191 192 { 193 var consequent_2 = ($$anchor) => { 194 var span_2 = root_5(); 195 let classes_2; 196 197 span_2.__click = (e) => { 198 e.stopPropagation(); 199 toggle_open_folder(i); 200 }; 201 202 span_2.__keydown = (e) => { 203 if (e.key === " " || e.key === "Enter") { 204 toggle_open_folder(i); 205 } 206 }; 207 208 var node_3 = child(span_2); 209 210 ArrowIcon(node_3); 211 reset(span_2); 212 template_effect(($0) => classes_2 = set_class(span_2, 1, 'icon svelte-6im0c4', null, classes_2, $0), [() => ({ hidden: !get(opened_folders).includes(i) })]); 213 append($$anchor, span_2); 214 }; 215 216 var alternate_1 = ($$anchor) => { 217 var span_3 = root_6(); 218 var img = child(span_3); 219 220 reset(span_3); 221 template_effect(() => set_attribute(img, 'src', name() === "." ? FolderIcon : FileIcon)); 222 append($$anchor, span_3); 223 }; 224 225 if_block(node_2, ($$render) => { 226 if (type() === "folder") $$render(consequent_2); else $$render(alternate_1, false); 227 }); 228 } 229 230 var span_4 = sibling(node_2, 2); 231 var text = child(span_4, true); 232 233 reset(span_4); 234 reset(span); 235 236 var node_4 = sibling(span, 2); 237 238 { 239 var consequent_3 = ($$anchor) => { 240 { 241 let $0 = user_derived(() => [...path(), name()]); 242 let $1 = user_derived(() => [...index_path(), i]); 243 let $2 = user_derived(() => selected_files().filter((x) => x[0] === name()).map((x) => x.slice(1))); 244 let $3 = user_derived(() => selected_folders().filter((x) => x[0] === name()).map((x) => x.slice(1))); 245 let $4 = user_derived(() => selected_folders().some((x) => x[0] === name() && x.length === 1)); 246 let $5 = user_derived(() => valid() ?? false); 247 248 FileTree($$anchor, { 249 get path() { 250 return get($0); 251 }, 252 253 get index_path() { 254 return get($1); 255 }, 256 257 get selected_files() { 258 return get($2); 259 }, 260 261 get selected_folders() { 262 return get($3); 263 }, 264 265 get is_selected_entirely() { 266 return get($4); 267 }, 268 269 get interactive() { 270 return $$props.interactive; 271 }, 272 273 get selectable() { 274 return selectable(); 275 }, 276 277 get ls_fn() { 278 return $$props.ls_fn; 279 }, 280 281 get file_count() { 282 return file_count(); 283 }, 284 285 get valid_for_selection() { 286 return get($5); 287 }, 288 289 get oncheck() { 290 return $$props.oncheck; 291 }, 292 293 get onselect() { 294 return $$props.onselect; 295 } 296 }); 297 } 298 }; 299 300 if_block(node_4, ($$render) => { 301 if (type() === "folder" && get(opened_folders).includes(i)) $$render(consequent_3); 302 }); 303 } 304 305 reset(li); 306 307 template_effect(() => { 308 classes_1 = set_class(span, 1, 'wrap svelte-6im0c4', null, classes_1, { 309 selected: !$$props.interactive && get(is_selected), 310 selectable: selectable() 311 }); 312 313 set_attribute(span, 'role', selectable() ? "button" : undefined); 314 set_attribute(span, 'tabindex', selectable() ? 0 : undefined); 315 set_text(text, name()); 316 }); 317 318 append($$anchor, li); 319 }); 320 321 reset(ul); 322 323 template_effect(() => classes = set_class(ul, 1, 'svelte-6im0c4', null, classes, { 324 'no-checkboxes': !$$props.interactive, 325 root: path().length === 0 326 })); 327 328 append($$anchor, ul); 329 pop(); 330} 331 332delegate(['click', 'keydown']); 333 334var root = from_html(`<div class="file-wrap svelte-1gs1iku"><!></div>`); 335 336function DirectoryExplorer($$anchor, $$props) { 337 push($$props, true); 338 339 let file_count = prop($$props, 'file_count', 3, "multiple"), 340 value = prop($$props, 'value', 15), 341 selectable = prop($$props, 'selectable', 3, false); 342 343 let selected_folders = state(proxy([])); 344 345 const paths_equal = (path, path_2) => { 346 return path.join("/") === path_2.join("/"); 347 }; 348 349 const path_in_set = (path, set) => { 350 return set.some((x) => paths_equal(x, path)); 351 }; 352 353 const path_inside = (path, path_2) => { 354 return path.join("/").startsWith(path_2.join("/")); 355 }; 356 357 var div = root(); 358 var node = child(div); 359 360 FileTree(node, { 361 path: [], 362 get selected_files() { 363 return value(); 364 }, 365 366 get selected_folders() { 367 return get(selected_folders); 368 }, 369 370 get interactive() { 371 return $$props.interactive; 372 }, 373 374 get selectable() { 375 return selectable(); 376 }, 377 378 get ls_fn() { 379 return $$props.ls_fn; 380 }, 381 382 get file_count() { 383 return file_count(); 384 }, 385 valid_for_selection: false,
386 oncheck: (detail) => { 387 const { path, checked, type } = detail; 388 389 if (checked) { 390 if (file_count() === "single") { 391 value([path]); 392 } else if (type === "folder") { 393 if (!path_in_set(path, get(selected_folders))) { 394 set(selected_folders, [...get(selected_folders), path], true); 395 } 396 } else { 397 if (!path_in_set(path, value())) { 398 value([...value(), path]); 399 } 400 } 401 } else { 402 set( 403 selected_folders, 404 get(selected_folders).filter((folder) => !path_inside(path, folder)), // deselect all parent folders 405 true 406 ); 407 408 if (type === "folder") { 409 set( 410 selected_folders, 411 get(selected_folders).filter((folder) => !path_inside(folder, path)), // deselect all children folders 412 true 413 ); 414 415 value(value().filter((file) => !path_inside(file, path)) // deselect all children files 416 ); 417 } else { 418 value(value().filter((x) => !paths_equal(x, path))); 419 } 420 } 421 422 $$props.oninput?.(); 423 }, 424 425 get onselect() { 426 return $$props.onselect; 427 } 428 }); 429 430 reset(div); 431 append($$anchor, div); 432 pop(); 433} 434 435var root_1 = from_html(`<!> <!> <!> <!>`, 1); 436 437function Index($$anchor, $$props) { 438 push($$props, true); 439 440 const props = rest_props($$props, ['$$slots', '$$events', '$$legacy']); 441 const gradio = new Gradio(props, { value: [] }); 442 let old_value = state(proxy(gradio.props.value)); 443 444 let rerender_key = user_derived(() => [ 445 gradio.props.root_dir, 446 gradio.props.glob, 447 gradio.props.ignore_glob 448 ]); 449 450 // Reset value when rerender_key changes 451 // svelte-ignore state_referenced_locally 452 let old_rerender_key = state(proxy(get(rerender_key))); 453 454 user_effect(() => { 455 if (JSON.stringify(get(old_rerender_key)) != JSON.stringify(get(rerender_key)) && get(old_value) == gradio.props.value) { 456 set(old_rerender_key, get(rerender_key), true); 457 gradio.props.value = []; 458 } 459 }); 460 461 user_effect(() => { 462 if (get(old_value) != gradio.props.value) { 463 set(old_value, gradio.props.value, true); 464 gradio.dispatch("change"); 465 } 466 }); 467 468 { 469 let $0 = user_derived(() => gradio.props.value === null ? "dashed" : "solid"); 470 471 Block($$anchor, { 472 get visible() { 473 return gradio.shared.visible; 474 }, 475 476 get variant() { 477 return get($0); 478 }, 479 border_mode: "base", 480 padding: false, 481 get elem_id() { 482 return gradio.shared.elem_id; 483 }, 484 485 get elem_classes() { 486 return gradio.shared.elem_classes; 487 }, 488 489 get container() { 490 return gradio.shared.container; 491 }, 492 493 get scale() { 494 return gradio.shared.scale; 495 }, 496 497 get min_width() { 498 return gradio.shared.min_width; 499 }, 500 allow_overflow: true, 501 overflow_behavior: 'auto', 502 get height() { 503 return gradio.props.height; 504 }, 505 506 get max_height() { 507 return gradio.props.max_height; 508 }, 509 510 get min_height() { 511 return gradio.props.min_height; 512 }, 513 514 children: ($$anchor, $$slotProps) => { 515 var fragment_1 = root_1(); 516 var node = first_child(fragment_1); 517 518 Static(node, spread_props(() => gradio.shared.loading_status, { 519 get autoscroll() { 520 return gradio.shared.autoscroll; 521 }, 522 523 get i18n() { 524 return gradio.i18n; 525 }, 526 on_clear_status: () => gradio.dispatch("clear_status", gradio.shared.loading_status) 527 })); 528
529 var node_1 = sibling(node, 2); 530 531 { 532 var consequent = ($$anchor) => { 533 IconButtonWrapper($$anchor, { 534 get buttons() { 535 return gradio.props.buttons; 536 }, 537 538 on_custom_button_click: (id) => { 539 gradio.dispatch("custom_button_click", { id }); 540 } 541 }); 542 }; 543 544 if_block(node_1, ($$render) => { 545 if (gradio.shared.show_label && gradio.props.buttons && gradio.props.buttons.length > 0) $$render(consequent); 546 }); 547 } 548 549 var node_2 = sibling(node_1, 2); 550 551 { 552 let $0 = user_derived(() => gradio.shared.label || "FileExplorer"); 553 554 BlockLabel(node_2, { 555 get show_label() { 556 return gradio.shared.show_label; 557 }, 558 559 get Icon() { 560 return File; 561 }, 562 563 get label() { 564 return get($0); 565 }, 566 float: false 567 }); 568 } 569 570 var node_3 = sibling(node_2, 2); 571 572 key(node_3, () => get(rerender_key), ($$anchor) => { 573 DirectoryExplorer($$anchor, { 574 get file_count() { 575 return gradio.props.file_count; 576 }, 577 578 get interactive() { 579 return gradio.shared.interactive; 580 }, 581 582 get selectable() { 583 return gradio.props._selectable; 584 }, 585 586 get ls_fn() { 587 return gradio.shared.server.ls; 588 }, 589 oninput: () => gradio.dispatch("input"), 590 onselect: (detail) => gradio.dispatch("select", detail), 591 get value() { 592 return gradio.props.value; 593 }, 594 595 set value($$value) { 596 gradio.props.value = $$value; 597 } 598 }); 599 }); 600 601 append($$anchor, fragment_1); 602 }, 603 $$slots: { default: true } 604 }); 605 } 606 607 pop(); 608} 609 610export { Index as default }; 611//# sourceMappingURL=Index-BXduP1J1.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.