chat-ui-energy / src /lib /components /UploadBtn.svelte
nsarrazin's picture
nsarrazin HF Staff
chores(svelte): migration to svelte 5 (#1685)
a1a6daf unverified
raw
history blame contribute delete
954 Bytes
<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>