diff --git a/website/src/repl/FileUpload.jsx b/website/src/repl/FileUpload.jsx
new file mode 100644
index 00000000..ab606657
--- /dev/null
+++ b/website/src/repl/FileUpload.jsx
@@ -0,0 +1,35 @@
+import React from 'react';
+
+export default function FileUpload({ onUpload }) {
+ let fileUploadRef = React.createRef();
+ function mapFiles(soundFiles) {
+ const files = Array.from(soundFiles).map((soundFile) => {
+ const file = { name: soundFile.name, path: URL.createObjectURL(soundFile) };
+ return file;
+ });
+ onUpload(files);
+ }
+ return (
+ <>
+ {
+ mapFiles(fileUploadRef.current.files);
+ }}
+ />
+ fileUploadRef.current.click()}
+ />
+ >
+ );
+}
diff --git a/website/src/repl/Footer.jsx b/website/src/repl/Footer.jsx
index b03f62d0..833a7a75 100644
--- a/website/src/repl/Footer.jsx
+++ b/website/src/repl/Footer.jsx
@@ -10,6 +10,7 @@ import { useSettings, settingsMap, setActiveFooter, defaultSettings } from '../s
import { getAudioContext, soundMap } from '@strudel.cycles/webaudio';
import { useStore } from '@nanostores/react';
import { FilesTab } from './FilesTab';
+import FileUpload from './FileUpload';
const TAURI = window.__TAURI__;
@@ -424,6 +425,7 @@ function SettingsTab({ scheduler }) {
onChange={(fontFamily) => settingsMap.setKey('fontFamily', fontFamily)}
/>
+ console.log(files)} />