PageSourceSearch

https://magicians7-korean-medicine-ai.hf.space/assets/index-hf62j3_c.js

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