PageSourceSearch

https://seq23-longcat-video-avatar-1-5-extended.hf.space/assets/index-C5ROpLtg.js

js seq23-longcat-video-avatar-1-5-extended.hf.space collected 2026-10-03 17:22:41 UTC 50,553 bytes, 2,031 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./module-C16d28tm.js","./module-DYU7z__K.js","./module-Bkn9j7N6.js"])))=>i.map(i=>d[i]);
2import { p as prop, i as if_block, k as each, u as index, d as bind_this, b as set_class, f as set_style, h as clsx, a as set_attribute, r as rest_props, g as spread_props } from './i18n-dpAHICcw.js';
3import { R as push, ab as onMount, V as child, Y as reset, t as template_effect, a as append, T as pop, a0 as set_text, a6 as comment, S as first_child, w as get, W as from_html, ak as delegate, u as state, v as proxy, af as onDestroy, y as user_effect, x as set, X as sibling, aN as update, a5 as user_derived, ag as __vitePreload, av as prepare_files, N as tick } from './index-CDZuCcOm.js';
4import { f as format_time, u as uploadToHuggingFace, G as Gradio } from './utils.svelte-CyWLYi-B.js';
5import { S as Static } from './index-DyDpuTN9.js';
6import './StreamingBar.svelte_svelte_type_style_lang-BxBb9ZZb.js';
7import { W as WaveformControls, A as AudioPlayer, S as StaticAudio } from './StaticAudio-Cj1zar-V.js';
8import { s as snippet } from './snippet-DVkMfmSq.js';
9import { U as Upload } from './Upload-BlCAnBIo.js';
10import { M as ModifyUpload } from './ModifyUpload-iCnymq9K.js';
11import { S as SelectSource } from './ScrollFade.svelte_svelte_type_style_lang-DUvCSfRk.js';
12import './MarkdownCode.svelte_svelte_type_style_lang-GeNUGzep.js';
13import { B as BlockLabel } from './BlockLabel-D4yjUUAn.js';
14import { S as ShareButton } from './ShareButton-c5E0ChlI.js';
15import { M as Music } from './Music-BRyrikkq.js';
16import { C as CustomButton } from './IconButtonWrapper-KjCt2Pl8.js';
17import { S as StreamingBar } from './StreamingBar-BnG6Vbta.js';
18import { s as skip_audio, u, p as process_audio } from './MinimalAudioPlayer-CTX1OxKC.js';
19import { o } from './record.esm-BVY9RaAH.js';
20import { P as Pause } from './VolumeLevels-B3gQy5XO.js';
21import { S as Spinner } from './Spinner-CNWYfN22.js';
22import { B as Block } from './Block-DntE23uJ.js';
23import { U as UploadText } from './UploadText-COnoIs3F.js';
24export { default as BaseExample } from './Example-BMH0SM7L.js';
25import './clone-dZfS06Ds.js';
26import './Clear-tvJMRS4J.js';
27import './html-h_YSgefI.js';
28import './DownloadLink-CmpyjDGR.js';
29import './Empty-617iGDfy.js';
30import './Download-bn1Yc3QR.js';
31import './Play-BtgJXiAa.js';
32import './Undo-BTdg4xEQ.js';
33import './actions-BTh6ZJJ8.js';
34import './Edit-CGqSB1Ia.js';
35import './prism-python-C_fanlsZ.js';
36
37var root_1$4 = from_html(`<option> </option>`);
38var root_3$2 = from_html(`<option> </option>`);
39var root$3 = from_html(`<select class="mic-select svelte-ym1wxn" aria-label="Select input device"><!></select>`);
40
41function DeviceSelect($$anchor, $$props) {
42	push($$props, true);
43
44	let micDevices = prop($$props, 'micDevices', 15);
45
46	onMount(() => {
47		if (typeof window !== "undefined" && navigator.mediaDevices) {
48			let tempDevices = [];
49
50			o.getAvailableAudioDevices().then((devices) => {
51				micDevices(devices);
52
53				devices.forEach((device) => {
54					if (device.deviceId) {
55						tempDevices.push(device);
56					}
57				});
58
59				micDevices(tempDevices);
60			}).catch((err) => {
61				if (err instanceof DOMException && err.name == "NotAllowedError") {
62					$$props.onerror?.($$props.i18n("audio.allow_recording_access"));
63				}
64			});
65		}
66	});
67
68	var select = root$3();
69	var node = child(select);
70
71	{
72		var consequent = ($$anchor) => {
73			var option = root_1$4();
74			var text = child(option, true);
75
76			reset(option);
77			option.value = option.__value = '';
78			template_effect(($0) => set_text(text, $0), [() => $$props.i18n("audio.no_microphone")]);
79			append($$anchor, option);
80		};
81
82		var alternate = ($$anchor) => {
83			var fragment = comment();
84			var node_1 = first_child(fragment);
85
86			each(node_1, 17, micDevices, index, ($$anchor, micDevice) => {
87				var option_1 = root_3$2();
88				var text_1 = child(option_1, true);
89
90				reset(option_1);
91
92				var option_1_value = {};
93
94				template_effect(() => {
95					set_text(text_1, get(micDevice).label);
96
97					if (option_1_value !== (option_1_value = get(micDevice).deviceId)) {
98						option_1.value = (option_1.__value = get(micDevice).deviceId) ?? '';
99					}
100				});
101
102				append($$anchor, option_1);
103			});
104
105			append($$anchor, fragment);
106		};
107
108		if_block(node, ($$render) => {
109			if (!micDevices() || micDevices().length === 0) $$render(consequent); else $$render(alternate, false);
110		});
111	}
112
113	reset(select);
114	template_effect(() => select.disabled = !micDevices() || micDevices().length === 0);
115	append($$anchor, select);
116	pop();
117}
118
119var root_1$3 = from_html(`<time class="duration-button duration svelte-1xuh0j1"> </time>`);
120var root$2 = from_html(`<div class="controls svelte-1xuh0j1"><div class="wrapper svelte-1xuh0j1"><button class="record record-button svelte-1xuh0j1"> </button> <button> </button> <button id="stop-paused" class="stop-button-paused svelte-1xuh0j1"> </button>
120 <button aria-label="pause" class="pause-button svelte-1xuh0j1"><!></button> <button class="resume-button svelte-1xuh0j1"> </button> <!></div> <!></div>`);
121
122function WaveformRecordControls($$anchor, $$props) {
123	push($$props, true);
124
125	let recording = prop($$props, 'recording', 3, false),
126		timing = prop($$props, 'timing', 3, false);
127
128	let micDevices = state(proxy([]));
129	let recordButton;
130	let pauseButton;
131	let resumeButton;
132	let stopButton;
133	let stopButtonPaused;
134	let recording_ongoing = state(false);
135
136	const handleRecordStart = () => {
137		recordButton.style.display = "none";
138		stopButton.style.display = "flex";
139		pauseButton.style.display = "block";
140	};
141
142	const handleRecordEnd = () => {
143		if ($$props.record.isPaused()) {
144			$$props.record.resumeRecording();
145			$$props.record.stopRecording();
146		}
147
148		$$props.record.stopMic();
149		recordButton.style.display = "flex";
150		stopButton.style.display = "none";
151		pauseButton.style.display = "none";
152		recordButton.disabled = false;
153	};
154
155	const handleRecordPause = () => {
156		pauseButton.style.display = "none";
157		resumeButton.style.display = "block";
158		stopButton.style.display = "none";
159		stopButtonPaused.style.display = "flex";
160	};
161
162	const handleRecordResume = () => {
163		pauseButton.style.display = "block";
164		resumeButton.style.display = "none";
165		recordButton.style.display = "none";
166		stopButton.style.display = "flex";
167		stopButtonPaused.style.display = "none";
168	};
169
170	onMount(() => {
171		$$props.record.on("record-start", handleRecordStart);
172		$$props.record.on("record-end", handleRecordEnd);
173		$$props.record.on("record-pause", handleRecordPause);
174		$$props.record.on("record-resume", handleRecordResume);
175	});
176
177	onDestroy(() => {
178		$$props.record.un("record-start", handleRecordStart);
179		$$props.record.un("record-end", handleRecordEnd);
180		$$props.record.un("record-pause", handleRecordPause);
181		$$props.record.un("record-resume", handleRecordResume);
182	});
183
184	user_effect(() => {
185		if (recording() && !get(recording_ongoing)) {
186			$$props.record.startMic().then(() => {
187				$$props.record.startRecording();
188				set(recording_ongoing, true);
189			});
190		} else if (!recording() && get(recording_ongoing)) {
191			if ($$props.record.isPaused()) {
192				$$props.record.resumeRecording();
193			}
194
195			$$props.record.stopRecording();
196			set(recording_ongoing, false);
197		}
198	});
199
200	var div = root$2();
201	var div_1 = child(div);
202	var button = child(div_1);
203
204	button.__click = () => $$props.record.startRecording();
205
206	var text = child(button, true);
207
208	reset(button);
209	bind_this(button, ($$value) => recordButton = $$value, () => recordButton);
210
211	var button_1 = sibling(button, 2);
212
213	button_1.__click = () => {
214		if ($$props.record.isPaused()) {
215			$$props.record.resumeRecording();
216			$$props.record.stopRecording();
217		}
218
219		$$props.record.stopRecording();
220	};
221
222	var text_1 = child(button_1, true);
223
224	reset(button_1);
225	bind_this(button_1, ($$value) => stopButton = $$value, () => stopButton);
226
227	var button_2 = sibling(button_1, 2);
228
229	button_2.__click = () => {
230		if ($$props.record.isPaused()) {
231			$$props.record.resumeRecording();
232			$$props.record.stopRecording();
233		}
234
235		$$props.record.stopRecording();
236	};
237
238	var text_2 = child(button_2, true);
239
240	reset(button_2);
241	bind_this(button_2, ($$value) => stopButtonPaused = $$value, () => stopButtonPaused);
242
243	var button_3 = sibling(button_2, 2);
244
245	button_3.__click = () => $$props.record.pauseRecording();
246
247	var node = child(button_3);
248
249	Pause(node);
250	reset(button_3);
251	bind_this(button_3, ($$value) => pauseButton = $$value, () => pauseButton);
252
253	var button_4 = sibling(button_3, 2);
254
255	button_4.__click = () => $$props.record.resumeRecording();
256
257	var text_3 = child(button_4, true);
258
259	reset(button_4);
260	bind_this(button_4, ($$value) => resumeButton = $$value, () => resumeButton);
261
262	var node_1 = sibling(button_4, 2);
263
264	{
265		var consequent = ($$anchor) => {
266			var time = root_1$3();
267			var text_4 = child(time, true);
268
269			reset(time);
270			template_effect(() => set_text(text_4, $$props.record_time));
271			append($$anchor, time);
272		};
273
274		if_block(node_1, ($$render) => {
275			if (timing() && !$$props.show_recording_waveform) $$render(consequent);
276		});
277	}
278
279	reset(div_1);
280
281	var node_2 = sibling(div_1, 2);
282
283	DeviceSelect(node_2, {
284		get i18n() {
285			return $$props.i18n;
286		},
287
288		get micDevices() {
289			return get(micDevices);
290		},
291
292		set micDevices($$value) {
293			set(micDevices, $$value, true);
294		}
295	});
296
297	reset(div);
298
299	template_effect(
300		($0, $1, $2, $3, $4) => {
301			set_text(text, $0);
302			set_class(button_1, 1, `stop-button ${$1 ?? ''}`, 'svelte-1xuh0j1');
303			set_text(text_1, $2);
304			set_text(text_2, $3);
305			set_text(text_3, $4);
306		},
307		[
308			() => $$props.i18n("audio.record"),
309			() => $$props.record.isPaused() ? 'stop-button-paused' : '',
310			() => $$props.i18n("audio.stop"),
311			() => $$props.i18n("audio.stop"),
312			() => $$props.i18n("audio.resume")
313		]
314	);
315
316	append($$anchor, div);
317	pop();
318}
319
320delegate(['click']);
321
322var root_2$2 = from_html(`<time class="trim-duration svelte-j9q3sk"> </time>`);
323var root_3$1 = from_html(`<time class="duration svelte-j9q3sk"> </time>`);
324var root_4$2 = from_html(`<time class="duration svelte-j9q3sk">0:00</time>`);
325var root_1$2 = from_html(`<div class="timestamps svelte-j9q3sk"><time class="time svelte-j9q3sk">0:00</time> <div><!> <!></div></div>`);
326var root$1 = from_html(`<div class="component-wrapper svelte-j9q3sk"><div class="microphone svelte-j9q3sk" data-testid="microphone-waveform"></div> <div data-testid="recording-waveform"></div> <!> <!> <!></div>`);
327
328function AudioRecorder($$anchor, $$props) {
329	push($$props, true);
330
331	let mode = prop($$props, 'mode', 15),
332		waveform_options = prop($$props, 'waveform_options', 19, () => ({ show_recording_waveform: true })),
333		editable = prop($$props, 'editable', 3, true),
334		recording = prop($$props, 'recording', 3, false);
335
336	let micWaveform;
337	let recordingWaveform = state(undefined);
338	let playing = state(false);
339	let recordingContainer;
340	let microphoneContainer;
341	let record = state(undefined);
342	let recordedAudio = state(null);
343
344	// timestamps
345	let timeRef;
346
347	let durationRef;
348	let audio_duration = state(0);
349	let seconds = state(0);
350	let interval;
351	let timing = state(false);
352
353	// trimming
354	let trimDuration = state(0);
355
356	let record_mounted = state(false);
357
358	const start_interval = () => {
359		clearInterval(interval);
360
361		interval = setInterval(
362			() => {
363				update(seconds);
364			},
365			1000
366		);
367	};
368
369	function record_start_callback() {
370		start_interval();
371		set(timing, true);
372		$$props.onstartrecording?.();
373
374		if (waveform_options().show_recording_waveform) {
375			let waveformCanvas = microphoneContainer;
376
377			if (waveformCanvas) waveformCanvas.style.display = "block";
378		}
379	}
380
381	async function record_end_callback(blob) {
382		set(seconds, 0);
383		set(timing, false);
384		clearInterval(interval);
385
386		try {
387			const array_buffer = await blob.arrayBuffer();
388			const context = new AudioContext({ sampleRate: $$props.waveform_settings.sampleRate });
389			const audio_buffer = await context.decodeAudioData(array_buffer);
390
391			if (audio_buffer) await process_audio(audio_buffer).then(async (audio) => {
392				await $$props.dispatch_blob([audio], "change");
393				await $$props.dispatch_blob([audio], "stop_recording");
394			});
395		} catch(e) {
396			console.error(e);
397		}
398	}
399
400	user_effect(() => {
401		get(record)?.on("record-resume", () => {
402			start_interval();
403		});
404	});
405
406	user_effect(() => {
407		get(recordingWaveform)?.on("decode", (duration) => {
408			set(audio_duration, duration, true);
409			durationRef && (durationRef.textContent = format_time(duration));
410		});
411	});
412
413	user_effect(() => {
414		get(recordingWaveform)?.on("timeupdate", (currentTime) => timeRef && (timeRef.textContent = format_time(currentTime)));
415	});
416
417	user_effect(() => {
418		get(recordingWaveform)?.on("pause", () => {
419			$$props.onpause?.();
420			set(playing, false);
421		});
422	});
423
424	user_effect(() => {
425		get(recordingWaveform)?.on("play", () => {
426			$$props.onplay?.();
427			set(playing, true);
428		});
429	});
430
431	user_effect(() => {
432		get(recordingWaveform)?.on("finish", () => {
433			$$props.onstop?.();
434			set(playing, false);
435		});
436	});
437
438	const create_mic_waveform = () => {
439		if (microphoneContainer) microphoneContainer.innerHTML = "";
440		if (micWaveform !== undefined) micWaveform.destroy();
441		if (!microphoneContainer) return;
442
443		micWaveform = u.create({
444			...$$props.waveform_settings,
445			normalize: false,
446			container: microphoneContainer
447		});
448
449		set(record, micWaveform.registerPlugin(o.create()), true);
450		get(record)?.on("record-end", record_end_callback);
451		get(record)?.on("record-start", record_start_callback);
452
453		get(record)?.on("record-pause", () => {
454			$$props.onpauserecording?.();
455			clearInterval(interval);
456		});
457
458		get(record)?.on("record-end", (blob) => {
459			set(recordedAudio, URL.createObjectURL(blob), true);
460
461			const microphone = microphoneContainer;
462			const recording = recordingContainer;
463
464			if (microphone) microphone.style.display = "none";
465
466			if (recording && get(recordedAudio)) {
467				recording.innerHTML = "";
468				create_recording_waveform();
469			}
470		});
471
472		set(record_mounted, true);
473	};
474
475	const create_recording_waveform = () => {
476		let recording = recordingContainer;
477
478		if (!get(recordedAudio) || !recording) return;
479
480		set(
481			recordingWaveform,
482			u.create({
483				container: recording,
484				url: get(recordedAudio),
485				...$$props.waveform_settings
486			}),
487			true
488		);
489	};
490
491	const handle_trim_audio = async (start, end) => {
492		mode("edit");
493
494		const decodedData = get(recordingWaveform)?.getDecodedData();
495
496		if (decodedData) await process_audio(decodedData, start, end).then(async (trimmedAudio) => {
497			await $$props.dispatch_blob([trimmedAudio], "change");
498			await $$props.dispatch_blob([trimmedAudio], "stop_recording");
499			get(recordingWaveform)?.destroy();
500			create_recording_waveform();
501		});
502
503		$$props.onedit?.();
504	};
505
506	onMount(() => {
507		create_mic_waveform();
508
509		window.addEventListener("keydown", (e) => {
510			const is_focused_in_waveform = recordingContainer && recordingContainer.contains(document.activeElement);
511
512			if (!is_focused_in_waveform) return;
513
514			if (e.key === "ArrowRight") {
515				skip_audio(get(recordingWaveform), 0.1);
516			} else if (e.key === "ArrowLeft") {
517				skip_audio(get(recordingWaveform), -0.1);
518			}
519		});
520	});
521
522	var div = root$1();
523	var div_1 = child(div);
524
525	bind_this(div_1, ($$value) => microphoneContainer = $$value, () => microphoneContainer);
526
527	var div_2 = sibling(div_1, 2);
528
529	bind_this(div_2, ($$value) => recordingContainer = $$value, () => recordingContainer);
530
531	var node = sibling(div_2, 2);
532
533	{
534		var consequent_2 = ($$anchor) => {
535			var div_3 = root_1$2();
536			var time = child(div_3);
537
538			bind_this(time, ($$value) => timeRef = $$value, () => timeRef);
539
540			var div_4 = sibling(time, 2);
541			var node_1 = child(div_4);
542
543			{
544				var consequent = ($$anchor) => {
545					var time_1 = root_2$2();
546					var text = child(time_1, true);
547
548					reset(time_1);
549					template_effect(($0) => set_text(text, $0), [() => format_time(get(trimDuration))]);
550					append($$anchor, time_1);
551				};
552
553				if_block(node_1, ($$render) => {
554					if (mode() === "edit" && get(trimDuration) > 0) $$render(consequent);
555				});
556			}
557
558			var node_2 = sibling(node_1, 2);
559
560			{
561				var consequent_1 = ($$anchor) => {
562					var time_2 = root_3$1();
563					var text_1 = child(time_2, true);
564
565					reset(time_2);
566					template_effect(($0) => set_text(text_1, $0), [() => format_time(get(seconds))]);
567					append($$anchor, time_2);
568				};
569
570				var alternate = ($$anchor) => {
571					var time_3 = root_4$2();
572
573					bind_this(time_3, ($$value) => durationRef = $$value, () => durationRef);
574					append($$anchor, time_3);
575				};
576
577				if_block(node_2, ($$render) => {
578					if (get(timing)) $$render(consequent_1); else $$render(alternate, false);
579				});
580			}
581
582			reset(div_4);
583			reset(div_3);
584			append($$anchor, div_3);
585		};
586
587		if_block(node, ($$render) => {
588			if ((get(timing) || get(recordedAudio)) && waveform_options().show_recording_waveform) $$render(consequent_2);
589		});
590	}
591
592	var node_3 = sibling(node, 2);
593
594	{
595		var consequent_3 = ($$anchor) => {
596			{
597				let $0 = user_derived(() => format_time(get(seconds)));
598
599				WaveformRecordControls($$anchor, {
600					get record() {
601						return get(record);
602					},
603
604					get i18n() {
605						return $$props.i18n;
606					},
607
608					get timing() {
609						return get(timing);
610					},
611
612					get recording() {
613						return recording();
614					},
615
616					get show_recording_waveform() {
617						return waveform_options().show_recording_waveform;
618					},
619
620					get record_time() {
621						return get($0);
622					}
623				});
624			}
625		};
626
627		if_block(node_3, ($$render) => {
628			if (get(record_mounted) && !get(recordedAudio)) $$render(consequent_3);
629		});
630	}
631
632	var node_4 = sibling(node_3, 2);
633
634	{
635		var consequent_4 = ($$anchor) => {
636			WaveformControls($$anchor, {
637				get waveform() {
638					return get(recordingWaveform);
639				},
640
641				get container() {
642					return recordingContainer;
643				},
644
645				get playing() {
646					return get(playing);
647				},
648
649				get audio_duration() {
650					return get(audio_duration);
651				},
652
653				get i18n() {
654					return $$props.i18n;
655				},
656
657				get editable() {
658					return editable();
659				},
660				interactive: true,
661				handle_trim_audio,
662				show_redo: true,
663				get handle_reset_value() {
664					return $$props.handle_reset_value;
665				},
666
667				get waveform_options() {
668					return waveform_options();
669				},
670
671				get trimDuration() {
672					return get(trimDuration);
673				},
674
675				set trimDuration($$value) {
676					set(trimDuration, $$value, true);
677				},
678
679				get mode() {
680					return mode();
681				},
682
683				set mode($$value) {
684					mode($$value);
685				}
686			});
687		};
688
689		if_block(node_4, ($$render) => {
690			if (get(recordingWaveform) && get(recordedAudio)) $$render(consequent_4);
691		});
692	}
693
694	reset(div);
695	append($$anchor, div);
696	pop();
697}
698
699var root_1$1 = from_html(`<div class="svelte-m6ymia"></div>`);
700var root_2$1 = from_html(`<button><span class="record-icon svelte-m6ymia"><span class="pinger svelte-m6ymia"></span> <span class="dot svelte-m6ymia"></span></span> </button>`);
701var root_4$1 = from_html(`<button class="spinner-button svelte-m6ymia"><div class="icon svelte-m6ymia"><!></div> </button>`);
702var root_5 = from_html(`<button class="record-button svelte-m6ymia"><span class="record-icon svelte-m6ymia"><span class="dot svelte-m6ymia"></span></span> </button>`);
703var root = from_html(`<div class="mic-wrap svelte-m6ymia"><!> <div class="controls svelte-m6ymia"><!> <!></div></div>`);
704
705function StreamAudio($$anchor, $$props) {
706	push($$props, true);
707
708	let recording = prop($$props, 'recording', 3, false),
709		paused_recording = prop($$props, 'paused_recording', 3, false),
710		waveform_options = prop($$props, 'waveform_options', 19, () => ({ show_recording_waveform: true })),
711		waiting = prop($$props, 'waiting', 3, false);
712
713	let micWaveform;
714	let waveformRecord;
715	let microphoneContainer;
716	let micDevices = state(proxy([]));
717
718	onMount(() => {
719		create_mic_waveform();
720	});
721
722	const create_mic_waveform = () => {
723		if (micWaveform !== undefined) micWaveform.destroy();
724		if (!microphoneContainer) return;
725
726		micWaveform = u.create({
727			...$$props.waveform_settings,
728			normalize: false,
729			container: microphoneContainer
730		});
731
732		waveformRecord = micWaveform.registerPlugin(o.create());
733	};
734
735	var div = root();
736	var node = child(div);
737
738	{
739		var consequent = ($$anchor) => {
740			var div_1 = root_1$1();
741			let styles;
742
743			bind_this(div_1, ($$value) => microphoneContainer = $$value, () => microphoneContainer);
744			template_effect(() => styles = set_style(div_1, '', styles, { display: recording() ? "block" : "none" }));
745			append($$anchor, div_1);
746		};
747
748		if_block(node, ($$render) => {
749			if (waveform_options().show_recording_waveform) $$render(consequent);
750		});
751	}
752
753	var div_2 = sibling(node, 2);
754	var node_1 = child(div_2);
755
756	{
757		var consequent_1 = ($$anchor) => {
758			var button = root_2$1();
759
760			button.__click = () => {
761				waveformRecord?.stopMic();
762				$$props.stop();
763			};
764
765			var text = sibling(child(button));
766
767			reset(button);
768
769			template_effect(
770				($0) => {
771					set_class(button, 1, clsx(paused_recording() ? "stop-button-paused" : "stop-button"), 'svelte-m6ymia');
772					set_text(text, ` ${$0 ?? ''}`);
773				},
774				[
775					() => paused_recording()
776						? $$props.i18n("audio.pause")
777						: $$props.i18n("audio.stop")
778				]
779			);
780
781			append($$anchor, button);
782		};
783
784		var alternate_1 = ($$anchor) => {
785			var fragment = comment();
786			var node_2 = first_child(fragment);
787
788			{
789				var consequent_2 = ($$anchor) => {
790					var button_1 = root_4$1();
791
792					button_1.__click = () => {
793						$$props.stop();
794					};
795
796					var div_3 = child(button_1);
797					var node_3 = child(div_3);
798
799					Spinner(node_3);
800					reset(div_3);
801
802					var text_1 = sibling(div_3);
803
804					reset(button_1);
805					template_effect(($0) => set_text(text_1, ` ${$0 ?? ''}`), [() => $$props.i18n("audio.waiting")]);
806					append($$anchor, button_1);
807				};
808
809				var alternate = ($$anchor) => {
810					var button_2 = root_5();
811
812					button_2.__click = () => {
813						waveformRecord?.startMic();
814						$$props.record();
815					};
816
817					var text_2 = sibling(child(button_2));
818
819					reset(button_2);
820					template_effect(($0) => set_text(text_2, ` ${$0 ?? ''}`), [() => $$props.i18n("audio.record")]);
821					append($$anchor, button_2);
822				};
823
824				if_block(
825					node_2,
826					($$render) => {
827						if (recording() && waiting()) $$render(consequent_2); else $$render(alternate, false);
828					},
829					true
830				);
831			}
832
833			append($$anchor, fragment);
834		};
835
836		if_block(node_1, ($$render) => {
837			if (recording() && !waiting()) $$render(consequent_1); else $$render(alternate_1, false);
838		});
839	}
840
841	var node_4 = sibling(node_1, 2);
842
843	DeviceSelect(node_4, {
844		get i18n() {
845			return $$props.i18n;
846		},
847
848		get micDevices() {
849			return get(micDevices);
850		},
851
852		set micDevices($$value) {
853			set(micDevices, $$value, true);
854		}
855	});
856
857	reset(div_2);
858	reset(div);
859	append($$anchor, div);
860	pop();
861}
862
863delegate(['click']);
864
865let media_recorder;
866async function init_media_recorder() {
867  const { MediaRecorder, register } = await __vitePreload(async () => { const { MediaRecorder, register } = await import('./module-C16d28tm.js');return { MediaRecorder, register }},true              ?__vite__mapDeps([0,1]):void 0,import.meta.url);
868  const { connect } = await __vitePreload(async () => { const { connect } = await import('./module-Bkn9j7N6.js');return { connect }},true              ?__vite__mapDeps([2,1]):void 0,import.meta.url);
869  register(await connect());
870  media_recorder = MediaRecorder;
871  return media_recorder;
872}
873
874var root_3 = from_html(`<!> <!>`, 1);
875var root_10 = from_html(`<!> <!>`, 1);
876var root_1 = from_html(`<!> <div><!> <!> <!></div>`, 1);
877
878function InteractiveAudio($$anchor, $$props) {
879	push($$props, true);
880
881	let value = prop($$props, 'value', 15, null),
882		subtitles = prop($$props, 'subtitles', 3, null),
883		show_label = prop($$props, 'show_label', 3, true),
884		buttons = prop($$props, 'buttons', 19, () => ["download", "share"]),
885		on_custom_button_click = prop($$props, 'on_custom_button_click', 3, null),
886		sources = prop($$props, 'sources', 19, () => ["microphone", "upload"]),
887		pending = prop($$props, 'pending', 3, false),
888		streaming = prop($$props, 'streaming', 3, false),
889		trim_region_settings = prop($$props, 'trim_region_settings', 19, () => ({})),
890		waveform_options = prop($$props, 'waveform_options', 19, () => ({})),
891		dragging = prop($$props, 'dragging', 15, false),
892		active_source = prop($$props, 'active_source', 15, "microphone"),
893		handle_reset_value = prop($$props, 'handle_reset_value', 3, () => {}),
894		editable = prop($$props, 'editable', 3, true),
895		max_file_size = prop($$props, 'max_file_size', 3, null),
896		stream_every = prop($$props, 'stream_every', 3, 0.1),
897		uploading = prop($$props, 'uploading', 15, false),
898		recording = prop($$props, 'recording', 15, false),
899		class_name = prop($$props, 'class_name', 3, ""),
900		upload_promise = prop($$props, 'upload_promise', 15),
901		initial_value = prop($$props, 'initial_value', 15),
902		playback_position = prop($$props, 'playback_position', 15),
903		time_limit = prop($$props, 'time_limit', 3, null),
904		stream_state = prop($$props, 'stream_state', 3, "closed");
905
906	user_effect(() => {
907		$$props.ondrag?.(dragging());
908	});
909
910	// TODO: make use of this
911	// export let type: "normal" | "numpy" = "normal";
912	let recorder;
913
914	let mode = state("");
915	let header = undefined;
916	let pending_stream = [];
917	let submit_pending_stream_on_pending_end = false;
918	let inited = false;
919	let streaming_media_recorder;
920	const NUM_HEADER_BYTES = 44;
921	let audio_chunks = [];
922	const is_browser = typeof window !== "undefined";
923
924	if (is_browser && streaming()) {
925		init_media_recorder().then((a) => {
926			streaming_media_recorder = a;
927		});
928	}
929
930	const to_blob_parts = (parts) => parts.map((part) => {
931		if (part instanceof Blob) return part;
932
933		return part.slice();
934	});
935
936	const dispatch_blob = async (blobs, event) => {
937		let _audio_blob = new File(to_blob_parts(blobs), "audio.wav", { type: "audio/wav" });
938
939		if (_audio_blob.size === 0) {
940			return;
941		}
942
943		const val = await prepare_files([_audio_blob], event === "stream");
944
945		initial_value(value());
946		value((await $$props.upload(val, $$props.root, undefined, max_file_size() || undefined))?.filter(Boolean)[0]);
947
948		if (event === "stream") {
949			$$props.onstream?.(value());
950		} else if (event === "change") {
951			$$props.onchange?.(value());
952		} else if (event === "stop_recording") {
953			$$props.onstop_recording?.();
954		}
955	};
956
957	onDestroy(() => {
958		if (streaming() && recorder && recorder.state !== "inactive") {
959			recorder.stop();
960		}
961	});
962
963	async function prepare_audio() {
964		let stream;
965
966		try {
967			stream = await navigator.mediaDevices.getUserMedia({ audio: true });
968		} catch(err) {
969			if (!navigator.mediaDevices) {
970				$$props.onerror?.($$props.i18n("audio.no_device_support"));
971
972				return;
973			}
974
975			if (err instanceof DOMException && err.name == "NotAllowedError") {
976				$$props.onerror?.($$props.i18n("audio.allow_recording_access"));
977
978				return;
979			}
980
981			throw err;
982		}
983
984		if (stream == null) return;
985
986		if (streaming()) {
987			recorder = new streaming_media_recorder(stream, { mimeType: "audio/wav" });
988			recorder.addEventListener("dataavailable", handle_chunk);
989		} else {
990			recorder = new MediaRecorder(stream);
991
992			recorder.addEventListener("dataavailable", (event) => {
993				audio_chunks.push(event.data);
994			});
995		}
996
997		recorder.addEventListener("stop", async () => {
998			recording(false);
999			recorder.stop();
1000			await dispatch_blob(audio_chunks, "change");
1001			await dispatch_blob(audio_chunks, "stop_recording");
1002			audio_chunks = [];
1003		});
1004
1005		inited = true;
1006	}
1007
1008	async function handle_chunk(event) {
1009		let buffer = await event.data.arrayBuffer();
1010		let payload = new Uint8Array(buffer);
1011
1012		if (!header) {
1013			header = new Uint8Array(buffer.slice(0, NUM_HEADER_BYTES));
1014			payload = new Uint8Array(buffer.slice(NUM_HEADER_BYTES));
1015		}
1016
1017		if (pending()) {
1018			pending_stream.push(payload);
1019		} else {
1020			let blobParts = [header].concat(pending_stream, [payload]);
1021
1022			if (!recording() || stream_state() === "waiting") return;
1023
1024			dispatch_blob(blobParts, "stream");
1025			pending_stream = [];
1026		}
1027	}
1028
1029	user_effect(() => {
1030		if (submit_pending_stream_on_pending_end && pending() === false) {
1031			submit_pending_stream_on_pending_end = false;
1032
1033			if (header && pending_stream) {
1034				let blobParts = [header].concat(pending_stream);
1035
1036				pending_stream = [];
1037				dispatch_blob(blobParts, "stream");
1038			}
1039		}
1040	});
1041
1042	async function record() {
1043		recording(true);
1044		$$props.onstart_recording?.();
1045
1046		if (!inited) await prepare_audio();
1047
1048		header = undefined;
1049
1050		if (streaming() && recorder.state != "recording") {
1051			recorder.start(stream_every() * 1000);
1052		}
1053	}
1054
1055	function clear() {
1056		$$props.onchange?.(null);
1057		$$props.onclear?.();
1058		set(mode, "");
1059		value(null);
1060	}
1061
1062	function handle_load(detail) {
1063		value(detail);
1064		$$props.onchange?.(detail);
1065		$$props.onupload?.(detail);
1066	}
1067
1068	async function stop() {
1069		recording(false);
1070
1071		if (streaming()) {
1072			$$props.onclose_stream?.();
1073			$$props.onstop_recording?.();
1074			recorder.stop();
1075
1076			if (pending()) {
1077				submit_pending_stream_on_pending_end = true;
1078			}
1079
1080			await dispatch_blob(audio_chunks, "stop_recording");
1081			$$props.onclear?.();
1082			set(mode, "");
1083		}
1084	}
1085
1086	user_effect(() => {
1087		if (!recording() && recorder && get(mode) !== "") stop();
1088	});
1089
1090	user_effect(() => {
1091		if (recording() && recorder) record();
1092	});
1093
1094	var fragment = root_1();
1095	var node = first_child(fragment);
1096
1097	{
1098		let $0 = user_derived(() =>
1098 active_source() === "upload" && value() === null);
1099		let $1 = user_derived(() => $$props.label || $$props.i18n("audio.audio"));
1100
1101		BlockLabel(node, {
1102			get show_label() {
1103				return show_label();
1104			},
1105
1106			get Icon() {
1107				return Music;
1108			},
1109
1110			get float() {
1111				return get($0);
1112			},
1113
1114			get label() {
1115				return get($1);
1116			}
1117		});
1118	}
1119
1120	var div = sibling(node, 2);
1121	var node_1 = child(div);
1122
1123	StreamingBar(node_1, {
1124		get time_limit() {
1125			return time_limit();
1126		}
1127	});
1128
1129	var node_2 = sibling(node_1, 2);
1130
1131	{
1132		var consequent_4 = ($$anchor) => {
1133			var fragment_1 = comment();
1134			var node_3 = first_child(fragment_1);
1135
1136			{
1137				var consequent_1 = ($$anchor) => {
1138					var fragment_2 = root_3();
1139					var node_4 = first_child(fragment_2);
1140
1141					ModifyUpload(node_4, {
1142						get i18n() {
1143							return $$props.i18n;
1144						},
1145						onclear: clear
1146					});
1147
1148					var node_5 = sibling(node_4, 2);
1149
1150					{
1151						var consequent = ($$anchor) => {
1152							{
1153								let $0 = user_derived(() => stream_state() === "waiting");
1154
1155								StreamAudio($$anchor, {
1156									record,
1157									get recording() {
1158										return recording();
1159									},
1160									stop,
1161									get i18n() {
1162										return $$props.i18n;
1163									},
1164
1165									get waveform_settings() {
1166										return $$props.waveform_settings;
1167									},
1168
1169									get waveform_options() {
1170										return waveform_options();
1171									},
1172
1173									get waiting() {
1174										return get($0);
1175									}
1176								});
1177							}
1178						};
1179
1180						var alternate = ($$anchor) => {
1181							AudioRecorder($$anchor, {
1182								get i18n() {
1183									return $$props.i18n;
1184								},
1185
1186								get editable() {
1187									return editable();
1188								},
1189
1190								get recording() {
1191									return recording();
1192								},
1193								dispatch_blob,
1194								get waveform_settings() {
1195									return $$props.waveform_settings;
1196								},
1197
1198								get waveform_options() {
1199									return waveform_options();
1200								},
1201
1202								get handle_reset_value() {
1203									return handle_reset_value();
1204								},
1205								onstartrecording: () => $$props.onstart_recording?.(),
1206								onpauserecording: () => $$props.onpause_recording?.(),
1207								onstoprecording: () => $$props.onstop_recording?.(),
1208								get mode() {
1209									return get(mode);
1210								},
1211
1212								set mode($$value) {
1213									set(mode, $$value, true);
1214								}
1215							});
1216						};
1217
1218						if_block(node_5, ($$render) => {
1219							if (streaming()) $$render(consequent); else $$render(alternate, false);
1220						});
1221					}
1222
1223					append($$anchor, fragment_2);
1224				};
1225
1226				var alternate_1 = ($$anchor) => {
1227					var fragment_5 = comment();
1228					var node_6 = first_child(fragment_5);
1229
1230					{
1231						var consequent_3 = ($$anchor) => {
1232							{
1233								let $0 = user_derived(() => $$props.i18n("audio.drop_to_upload"));
1234
1235								Upload($$anchor, {
1236									filetype: 'audio/aac,audio/midi,audio/mpeg,audio/ogg,audio/wav,audio/x-wav,audio/opus,audio/webm,audio/flac,audio/vnd.rn-realaudio,audio/x-ms-wma,audio/x-aiff,audio/amr,audio/*',
1237									onload: handle_load,
1238									onerror: (detail) => $$props.onerror?.(detail),
1239									get root() {
1240										return $$props.root;
1241									},
1242
1243									get max_file_size() {
1244										return max_file_size();
1245									},
1246
1247									get upload() {
1248										return $$props.upload;
1249									},
1250
1251									get stream_handler() {
1252										return $$props.stream_handler;
1253									},
1254
1255									get aria_label() {
1256										return get($0);
1257									},
1258
1259									get upload_promise() {
1260										return upload_promise();
1261									},
1262
1263									set upload_promise($$value) {
1264										upload_promise($$value);
1265									},
1266
1267									get dragging() {
1268										return dragging();
1269									},
1270
1271									set dragging($$value) {
1272										dragging($$value);
1273									},
1274
1275									get uploading() {
1276										return uploading();
1277									},
1278
1279									set uploading($$value) {
1280										uploading($$value);
1281									},
1282
1283									children: ($$anchor, $$slotProps) => {
1284										var fragment_7 = comment();
1285										var node_7 = first_child(fragment_7);
1286
1287										{
1288											var consequent_2 = ($$anchor) => {
1289												var fragment_8 = comment();
1290												var node_8 = first_child(fragment_8);
1291
1292												snippet(node_8, () => $$props.children);
1293												append($$anchor, fragment_8);
1294											};
1295
1296											if_block(node_7, ($$render) => {
1297												if ($$props.children) $$render(consequent_2);
1298											});
1299										}
1300
1301										append($$anchor, fragment_7);
1302									},
1303									$$slots: { default: true }
1304								});
1305							}
1306						};
1307
1308						if_block(
1309							node_6,
1310							($$render) => {
1311								if (active_source() === "upload") $$render(consequent_3);
1312							},
1313							true
1314						);
1315					}
1316
1317					append($$anchor, fragment_5);
1318				};
1319
1320				if_block(node_3, ($$render) => {
1321					if (active_source() === "microphone") $$render(consequent_1); else $$render(alternate_1, false);
1322				});
1323			}
1324
1325			append($$anchor, fragment_1);
1326		};
1327
1328		var alternate_3 = ($$anchor) => {
1329			var fragment_9 = root_10();
1330			var node_9 = first_child(fragment_9);
1331
1332			{
1333				let $0 = user_derived(() => buttons() === null
1334					? value().url
1335					: buttons().some((btn) => typeof btn === "string" && btn === "download") ? value().url : null);
1336
1337				ModifyUpload(node_9, {
1338					get i18n() {
1339						return $$props.i18n;
1340					},
1341					onclear: clear,
1342					onedit: () => {
1343						set(mode, "edit");
1344						$$props.onedit?.();
1345					},
1346
1347					get download() {
1348						return get($0);
1349					},
1350
1351					children: ($$anchor, $$slotProps) => {
1352						var fragment_10 = comment();
1353						var node_10 = first_child(fragment_10);
1354
1355						{
1356							var consequent_7 = ($$anchor) => {
1357								var fragment_11 = comment();
1358								var node_11 = first_child(fragment_11);
1359
1360								each(node_11, 17, buttons, index, ($$anchor, btn) => {
1361									var fragment_12 = comment();
1362									var node_12 = first_child(fragment_12);
1363
1364									{
1365										var consequent_6 = ($$anchor) => {
1366											var fragment_13 = comment();
1367											var node_13 = first_child(fragment_13);
1368
1369											{
1370												var consequent_5 = ($$anchor) => {
1371													ShareButton($$anchor, {
1372														get i18n() {
1373															return $$props.i18n;
1374														},
1375
1376														get onerror() {
1377															return $$props.onerror;
1378														},
1379														onshare: () => {},
1380														formatter: async (fileData) => {
1381															if (!fileData || !fileData.url) return "";
1382
1383															let url = await uploadToHuggingFace(fileData.url);
1384
1385															return `<audio controls src="${url}"></audio>`;
1386														},
1387
1388														get value() {
1389															return value();
1390														}
1391													});
1392												};
1393
1394												if_block(node_13, ($$render) => {
1395													if (get(btn) === "share") $$render(consequent_5);
1396												});
1397											}
1398
1399											append($$anchor, fragment_13);
1400										};
1401
1402										var alternate_2 = ($$anchor) => {
1403											CustomButton($$anchor, {
1404												get button() {
1405													return get(btn);
1406												},
1407
1408												on_click: (id) => {
1409													if (on_custom_button_click()) {
1410														on_custom_button_click()(id);
1411													}
1412												}
1413											});
1414										};
1415
1416										if_block(node_12, ($$render) => {
1417											if (typeof get(btn) === "string") $$render(consequent_6); else $$render(alternate_2, false);
1418										});
1419									}
1420
1421									append($$anchor, fragment_12);
1422								});
1423
1424								append($$anchor, fragment_11);
1425							};
1426
1427							if_block(node_10, ($$render) => {
1428								if (value() !== null && buttons()) $$render(consequent_7);
1429							});
1430						}
1431
1432						append($$anchor, fragment_10);
1433					},
1434					$$slots: { default: true }
1435				});
1436			}
1437
1438			var node_14 = sibling(node_9, 2);
1439
1440			{
1441				let $0 = user_derived(() => Array.isArray(subtitles()) ? subtitles() : subtitles()?.url);
1442
1443				AudioPlayer(node_14, {
1444					get value() {
1445						return value();
1446					},
1447
1448					get subtitles() {
1449						return get($0);
1450					},
1451
1452					get label() {
1453						return $$props.label;
1454					},
1455
1456					get i18n() {
1457						return $$props.i18n;
1458					},
1459					dispatch_blob,
1460					get waveform_settings() {
1461						return $$props.waveform_settings;
1462					},
1463
1464					get waveform_options() {
1465						return waveform_options();
1466					},
1467
1468					get trim_region_settings() {
1469						return trim_region_settings();
1470					},
1471
1472					get handle_reset_value() {
1473						return handle_reset_value();
1474					},
1475
1476					get editable() {
1477						return editable();
1478					},
1479
1480					get loop() {
1481						return $$props.loop;
1482					},
1483					interactive: true,
1484					get onstop() {
1485						return $$props.onstop;
1486					},
1487
1488					get onplay() {
1489						return $$props.onplay;
1490					},
1491
1492					get onpause() {
1493						return $$props.onpause;
1494					},
1495
1496					get onedit() {
1497						return $$props.onedit;
1498					},
1499
1500					get mode() {
1501						return get(mode);
1502					},
1503
1504					set mode($$value) {
1505						set(mode, $$value, true);
1506					},
1507
1508					get playback_position() {
1509						return playback_position();
1510					},
1511
1512					set playback_position($$value) {
1513						playback_position($$value);
1514					}
1515				});
1516			}
1517
1518			append($$anchor, fragment_9);
1519		};
1520
1521		if_block(node_2, ($$render) => {
1522			if (value() == null || streaming()) $$render(consequent_4); else $$render(alternate_3, false);
1523		});
1524	}
1525
1526	var node_15 = sibling(node_2, 2);
1527
1528	SelectSource(node_15, {
1529		get sources() {
1530			return sources();
1531		},
1532		handle_clear: clear,
1533		get active_source() {
1534			return active_source();
1535		},
1536
1537		set active_source($$value) {
1538			active_source($$value);
1539		}
1540	});
1541
1542	reset(div);
1543
1544	template_effect(() => {
1545		set_class(div, 1, `audio-container ${class_name() ?? ''}`, 'svelte-ocxd3m');
1546		set_attribute(div, 'data-testid', $$props.label ? "waveform-" + $$props.label : "unlabelled-audio");
1547	});
1548
1549	append($$anchor, fragment);
1550	pop();
1551}
1552
1553var root_2 = from_html(`<!> <!>`, 1);
1554var root_4 = from_html(`<!> <!>`, 1);
1555
1556function Index($$anchor, $$props) {
1557	push($$props, true);
1558
1559	let props = rest_props($$props, ['$$slots', '$$events', '$$legacy']);
1560	let upload_promise = state(void 0);
1561
1562	$$props.props.stream_every = 0.1; // default to 0.1s stream interval
1563
1564	class AudioGradio extends Gradio {
1565		async get_data() {
1566			if (get(upload_promise)) {
1567				await get(upload_promise);
1568				await tick();
1569			}
1570
1571			const data = await super.get_data();
1572
1573			return data;
1574		}
1575	}
1576
1577	const gradio = new AudioGradio(props);
1578	let label = user_derived(() => gradio.shared.label || gradio.i18n("audio.audio"));
1579	let minimal = user_derived(() => $$props.minimal ?? gradio.props.minimal ?? false);
1580	let active_source = user_derived(() => gradio.props.sources ? gradio.props.sources[0] : null);
1581	let initial_value = state(proxy(gradio.props.value));
1582
1583	const handle_reset_value = () => {
1584		if (get(initial_value) === null || gradio.props.value === get(initial_value)) {
1585			return;
1586		}
1587
1588		gradio.props.value = get(initial_value);
1589	};
1590
1591	let dragging = state(false);
1592	let recording = state(proxy(gradio.props.recording ?? false));
1593
1594	user_effect(() => {
1595		gradio.props.recording = get(recording);
1596	});
1597
1598	let color_accent = "darkorange";
1599
1600	let waveform_settings = proxy({
1601		height: 50,
1602		barWidth: 2,
1603		barGap: 3,
1604		cursorWidth: 2,
1605		cursorColor: "#ddd5e9",
1606		autoplay: gradio.props.autoplay,
1607		barRadius: 10,
1608		dragToSeek: true,
1609		normalize: true,
1610		minPxPerSec: 20,
1611		waveColor: gradio.props.waveform_options.waveform_color || "#9ca3af",
1612		progressColor: gradio.props.waveform_options.waveform_progress_color || color_accent,
1613		mediaControls: gradio.props.waveform_options.show_controls ?? false,
1614		sampleRate: gradio.props.waveform_options.sample_rate || 44100
1615	});
1616
1617	const trim_region_settings = {
1618		color: gradio.props.waveform_options.trim_region_color,
1619		drag: true,
1620		resize: true
1621	};
1622
1623	function set_trim_region_colour() {
1624		document.documentElement.style.setProperty("--trim-region-color", trim_region_settings.color || color_accent);
1625	}
1626
1627	function handle_error(detail) {
1628		const [level, status] = detail.includes("Invalid file type") ? ["warning", "complete"] : ["error", "error"];
1629
1630		if (gradio.shared.loading_status) {
1631			gradio.shared.loading_status.status = status;
1632			gradio.shared.loading_status.message = detail;
1633		}
1634
1635		gradio.dispatch(level, detail);
1636	}
1637
1638	let old_value = state(proxy(gradio.props.value));
1639
1640	user_effect(() => {
1641		if (get(old_value) != gradio.props.value) {
1642			set(old_value, gradio.props.value, true);
1643			gradio.dispatch("change");
1644		}
1645	});
1646
1647	onMount(() => {
1648		set_trim_region_colour();
1649	});
1650
1651	var fragment = comment();
1652	var node = first_child(fragment);
1653
1654	{
1655		var consequent = ($$anchor) => {
1656			{
1657				let $0 = user_derived(() => get(dragging) ? "focus" : "base");
1658
1659				Block($$anchor, {
1660					variant: "solid",
1661					get border_mode() {
1662						return get($0);
1663					},
1664					padding: false,
1665					allow_overflow: false,
1666					get elem_id() {
1667						return gradio.shared.elem_id;
1668					},
1669
1670					get elem_classes() {
1671						return gradio.shared.elem_classes;
1672					},
1673
1674					get visible() {
1675						return gradio.shared.visible;
1676					},
1677
1678					get container() {
1679						return gradio.shared.container;
1680					},
1681
1682					get scale() {
1683						return gradio.shared.scale;
1684					},
1685
1686					get min_width() {
1687						return gradio.shared.min_width;
1688					},
1689
1690					children: ($$anchor, $$slotProps) => {
1691						var fragment_2 = root_2();
1692						var node_1 = first_child(fragment_2);
1693
1694						Static(node_1, spread_props(
1695							{
1696								get autoscroll() {
1697									return gradio.shared.autoscroll;
1698								},
1699
1700								get i18n() {
1701									return gradio.i18n;
1702								}
1703							},
1704							() => gradio.shared.loading_status,
1705							{
1706								on_clear_status: () => gradio.dispatch("clear_status", gradio.shared.loading_status)
1707							}
1708						));
1709
1710						var node_2 = sibling(node_1, 2);
1711
1712						{
1713							let $0 = user_derived(() => gradio.props.buttons ?? ["download", "share"]);
1714
1715							StaticAudio(node_2, {
1716								get i18n() {
1717									return gradio.i18n;
1718								},
1719
1720								get show_label() {
1721									return gradio.shared.show_label;
1722								},
1723
1724								get buttons() {
1725									return get($0);
1726								},
1727
1728								get value() {
1729									return gradio.props.value;
1730								},
1731
1732								get subtitles() {
1733									return gradio.props.subtitles;
1734								},
1735
1736								get label() {
1737									return get(label);
1738								},
1739
1740								get loop() {
1741									return gradio.props.loop;
1742								},
1743
1744								get waveform_settings() {
1745									return waveform_settings;
1746								},
1747
1748								get waveform_options() {
1749									return gradio.props.waveform_options;
1750								},
1751
1752								get editable() {
1753									return gradio.props.editable;
1754								},
1755
1756								get minimal() {
1757									return get(minimal);
1758								},
1759
1760								on_custom_button_click: (id) => {
1761									gradio.dispatch("custom_button_click", { id });
1762								},
1763								onshare: (detail) => gradio.dispatch("share", detail),
1764								onerror: (e) => gradio.dispatch("error", e.detail),
1765								onplay: () => gradio.dispatch("play"),
1766								onpause: () => gradio.dispatch("pause"),
1767								onstop: () => gradio.dispatch("stop"),
1768								get playback_position() {
1769									return gradio.props.playback_position;
1770								},
1771
1772								set playback_position($$value) {
1773									gradio.props.playback_position = $$value;
1774								}
1775							});
1776						}
1777
1778						append($$anchor, fragment_2);
1779					},
1780					$$slots: { default: true }
1781				});
1782			}
1783		};
1784
1785		var alternate = ($$anchor) => {
1786			{
1787				let $0 = user_derived(() => gradio.props.value === null && get(active_source) === "upload" ? "dashed" : "solid");
1788				let $1 = user_derived(() => get(dragging) ? "focus" : "base");
1789
1790				Block($$anchor, {
1791					get variant() {
1792						return get($0);
1793					},
1794
1795					get border_mode() {
1796						return get($1);
1797					},
1798					padding: false,
1799					allow_overflow: false,
1800					get elem_id() {
1801						return gradio.shared.elem_id;
1802					},
1803
1804					get elem_classes() {
1805						return gradio.shared.elem_classes;
1806					},
1807
1808					get visible() {
1809						return gradio.shared.visible;
1810					},
1811
1812					get container() {
1813						return gradio.shared.container;
1814					},
1815
1816					get scale() {
1817						return gradio.shared.scale;
1818					},
1819
1820					get min_width() {
1821						return gradio.shared.min_width;
1822					},
1823
1824					children: ($$anchor, $$slotProps) => {
1825						var fragment_4 = root_4();
1826						var node_3 = first_child(fragment_4);
1827
1828						Static(node_3, spread_props(
1829							{
1830								get autoscroll() {
1831									return gradio.shared.autoscroll;
1832								},
1833
1834								get i18n() {
1835									return gradio.i18n;
1836								}
1837							},
1838							() => gradio.shared.loading_status,
1839							{
1840								on_clear_status: () => gradio.dispatch("clear_status", gradio.shared.loading_status)
1841							}
1842						));
1843
1844						var node_4 = sibling(node_3, 2);
1845
1846						{
1847							let $0 = user_derived(() => gradio.props.buttons ?? []);
1848							let $1 = user_derived(() => get(active_source) || undefined);
1849
1850							InteractiveAudio(node_4, {
1851								get label() {
1852									return get(label);
1853								},
1854
1855								get show_label() {
1856									return gradio.shared.show_label;
1857								},
1858
1859								get buttons() {
1860									return get($0);
1861								},
1862
1863								on_custom_button_click: (id) => {
1864									gradio.dispatch("custom_button_click", { id });
1865								},
1866
1867								get value() {
1868									return gradio.props.value;
1869								},
1870
1871								get subtitles() {
1872									return gradio.props.subtitles;
1873								},
1874								onchange: (detail) => gradio.props.value = detail,
1875								onstream: (detail) => {
1876									gradio.props.value = detail;
1877									gradio.dispatch("stream", gradio.props.value);
1878								},
1879								ondrag: (detail) => set(dragging, detail, true),
1880								get root() {
1881									return gradio.shared.root;
1882								},
1883
1884								get sources() {
1885									return gradio.props.sources;
1886								},
1887
1888								get active_source() {
1889									return get($1);
1890								},
1891
1892								get pending() {
1893									return gradio.shared.loading_status.pending;
1894								},
1895
1896								get streaming() {
1897									return gradio.props.streaming;
1898								},
1899
1900								get loop() {
1901									return gradio.props.loop;
1902								},
1903
1904								get max_file_size() {
1905									return gradio.shared.max_file_size;
1906								},
1907								handle_reset_value,
1908								get editable() {
1909									return gradio.props.editable;
1910								},
1911								onedit: () => gradio.dispatch("edit"),
1912								onplay: () => gradio.dispatch("play"),
1913								onpause: () => gradio.dispatch("pause"),
1914								onstop: () => gradio.dispatch("stop"),
1915								onstart_recording: () => gradio.dispatch("start_recording"),
1916								onpause_recording: () => gradio.dispatch("pause_recording"),
1917								onstop_recording: () => {
1918									gradio.dispatch("stop_recording");
1919									gradio.dispatch("input");
1920								},
1921
1922								onupload: () => {
1923									gradio.dispatch("upload");
1924									gradio.dispatch("input");
1925								},
1926
1927								onclear: () => {
1928									gradio.dispatch("clear");
1929									gradio.dispatch("input");
1930								},
1931								onerror: handle_error,
1932								onclose_stream: () => gradio.dispatch("close_stream", "stream"),
1933								get i18n() {
1934									return gradio.i18n;
1935								},
1936
1937								get waveform_settings() {
1938									return waveform_settings;
1939								},
1940
1941								get waveform_options() {
1942									return gradio.props.waveform_options;
1943								},
1944
1945								get trim_region_settings() {
1946									return trim_region_settings;
1947								},
1948
1949								get stream_every() {
1950									return gradio.props.stream_every;
1951								},
1952
1953								get stream_state() {
1954									return gradio.shared.loading_status.stream_state;
1955								},
1956								upload: (...args) => gradio.shared.client.upload(...args),
1957								stream_handler: (...args) => gradio.shared.client.stream(...args),
1958								get time_limit() {
1959									return gradio.shared.loading_status.time_limit;
1960								},
1961
1962								get upload_promise() {
1963									return get(upload_promise);
1964								},
1965
1966								set upload_promise($$value) {
1967									set(upload_promise, $$value, true);
1968								},
1969
1970								get initial_value() {
1971									return get(initial_value);
1972								},
1973
1974								set initial_value($$value) {
1975									set(initial_value, $$value, true);
1976								},
1977
1978								get recording() {
1979									return get(recording);
1980								},
1981
1982								set recording($$value) {
1983									set(recording, $$value, true);
1984								},
1985
1986								get dragging() {
1987									return get(dragging);
1988								},
1989
1990								set dragging($$value) {
1991									set(dragging, $$value, true);
1992								},
1993
1994								get playback_position() {
1995									return gradio.props.playback_position;
1996								},
1997
1998								set playback_position($$value) {
1999									gradio.props.playback_position = $$value;
2000								},
2001
2002								children: ($$anchor, $$slotProps) => {
2003									UploadText($$anchor, {
2004										get i18n() {
2005											return gradio.i18n;
2006										},
2007										type: 'audio'
2008									});
2009								},
2010								$$slots: { default: true }
2011							});
2012						}
2013
2014						append($$anchor, fragment_4);
2015					},
2016					$$slots: { default: true }
2017				});
2018			}
2019		};
2020
2021		if_block(node, ($$render) => {
2022			if (!gradio.shared.interactive) $$render(consequent); else $$render(alternate, false);
2023		});
2024	}
2025
2026	append($$anchor, fragment);
2027	pop();
2028}
2029
2030export { InteractiveAudio as BaseInteractiveAudio, AudioPlayer as BasePlayer, StaticAudio as BaseStaticAudio, Index as default };
2031//# sourceMappingURL=index-C5ROpLtg.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.