Spaces:
Runtime error
Runtime error
| <script lang="ts"> | |
| import { createEventDispatcher, onMount } from 'svelte'; | |
| import { MessageType } from '$lib/types'; | |
| export let inputEl: HTMLInputElement; | |
| export let disabled: boolean = true; | |
| const dispatch = createEventDispatcher(); | |
| let textInput: string = ''; | |
| let isDragOver: boolean = false; | |
| function onSubmit(event: Event) { | |
| event.stopPropagation(); | |
| event.preventDefault(); | |
| event.stopImmediatePropagation(); | |
| if (textInput.trim() !== '') { | |
| dispatch('submitMessage', { | |
| type: MessageType.TEXT, | |
| content: textInput | |
| }); | |
| textInput = ''; | |
| } | |
| } | |
| function onDrop(event: DragEvent) { | |
| event.stopPropagation(); | |
| event.preventDefault(); | |
| event.stopImmediatePropagation(); | |
| if (event && event.dataTransfer) { | |
| const files = [...event.dataTransfer.files]; | |
| if (files.length) { | |
| const file = files[0]; | |
| if (file.type.startsWith('image/') && file.size < 1.5e7) { | |
| const reader = new FileReader(); | |
| reader.readAsDataURL(file); | |
| reader.onload = () => { | |
| dispatch('submitMessage', { | |
| type: MessageType.IMAGE, | |
| content: reader.result | |
| }); | |
| }; | |
| } | |
| } | |
| } | |
| isDragOver = false; | |
| } | |
| function onDragover(event: DragEvent) { | |
| event.stopPropagation(); | |
| event.preventDefault(); | |
| if (event && event.dataTransfer) { | |
| event.dataTransfer.dropEffect = 'copy'; | |
| } | |
| isDragOver = true; | |
| } | |
| onMount(() => { | |
| inputEl.focus(); | |
| window.addEventListener('dragover', onDragover, false); | |
| window.addEventListener('drop', onDrop, false); | |
| window.addEventListener('dragleave', () => (isDragOver = false), false); | |
| }); | |
| </script> | |
| <div class="mt-auto {isDragOver ? 'bg-yellow-50' : ''} py-4"> | |
| <form class="flex selection:w-full gap-2 border-t px-3 pt-4 pb-6" on:submit={onSubmit}> | |
| <input | |
| bind:value={textInput} | |
| bind:this={inputEl} | |
| on:click|stopPropagation | |
| {disabled} | |
| type="text" | |
| class="flex h-11 flex-1 items-center rounded-full border bg-gray-100 px-4 text-black disabled:opacity-60 disabled:cursor-progress" | |
| placeholder="Type here" | |
| title="Type here to send a message" | |
| /> | |
| <button | |
| {disabled} | |
| title="Send your message" | |
| type="submit" | |
| class="rounded-full bg-black dark:bg-white dark:text-black px-4 font-semibold text-gray-200 disabled:opacity-60 disabled:cursor-progress" | |
| >Submit</button | |
| > | |
| </form> | |
| <div class="flex items-center px-3 pt-4 pb-6 bg-yellow-50 py-3 rounded"> | |
| <i class="fas fa-image text-2xl text-gray-500 mr-2" /> | |
| <h2 class="text-xl font-bold text-gray-500">Drop your image here to start</h2> | |
| </div> | |
| </div> | |