Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
<script lang="ts"> | |
import CarbonUpload from "~icons/carbon/upload"; | |
interface Props { | |
classNames?: string; | |
files: File[]; | |
mimeTypes: string[]; | |
} | |
let { classNames = "", files = $bindable(), mimeTypes }: Props = $props(); | |
/** | |
* Due to a bug with Svelte, we cannot use bind:files with multiple | |
* So we use this workaround | |
**/ | |
const onFileChange = (e: Event) => { | |
if (!e.target) return; | |
const target = e.target as HTMLInputElement; | |
files = [...files, ...(target.files ?? [])]; | |
}; | |
</script> | |
<button | |
class="btn relative h-8 rounded-lg border bg-white px-3 py-1 text-sm text-gray-500 shadow-sm hover:bg-gray-100 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600 {classNames}" | |
> | |
<input | |
class="absolute w-full cursor-pointer opacity-0" | |
aria-label="Upload file" | |
type="file" | |
onchange={onFileChange} | |
accept={mimeTypes.join(",")} | |
/> | |
<CarbonUpload class="mr-2 text-xxs" /> Upload file | |
</button> | |