Textarea.svelte 782 B

12345678910111213141516171819202122232425262728293031323334353637
  1. <script lang="ts">
  2. import { onMount, tick } from 'svelte';
  3. export let value = '';
  4. export let placeholder = '';
  5. export let className =
  6. 'w-full rounded-lg px-3 py-2 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-none resize-none h-full';
  7. let textareaElement;
  8. onMount(async () => {
  9. await tick();
  10. if (textareaElement) {
  11. setInterval(adjustHeight, 0);
  12. }
  13. });
  14. const adjustHeight = () => {
  15. if (textareaElement) {
  16. textareaElement.style.height = '';
  17. textareaElement.style.height = `${textareaElement.scrollHeight}px`;
  18. }
  19. };
  20. </script>
  21. <textarea
  22. bind:this={textareaElement}
  23. bind:value
  24. {placeholder}
  25. class={className}
  26. on:input={(e) => {
  27. e.target.style.height = '';
  28. e.target.style.height = `${e.target.scrollHeight}px`;
  29. }}
  30. rows="1"
  31. />