diff --git a/src/lib/Combobox.svelte b/src/lib/Combobox.svelte index d12316b..c0e3cd3 100644 --- a/src/lib/Combobox.svelte +++ b/src/lib/Combobox.svelte @@ -41,8 +41,7 @@ import Label from './Label.svelte'; import StyledRawInput from './StyledRawInput.svelte'; import { InputValidatorEvent, validate, type ValidatorOptions } from '@svelte-toolkit/validate'; - import { onMount, tick, untrack, type Snippet } from 'svelte'; - import { Portal } from '@jsrob/svelte-portal'; + import { untrack, type Snippet } from 'svelte'; import { scale } from 'svelte/transition'; import { generateIdentifier, type IconDef } from './util'; import type { ClassValue, MouseEventHandler } from 'svelte/elements'; @@ -502,54 +501,52 @@ - - {#if open} - -
{ - if (e.key === 'Escape') { - popover.setOpen(false); - searchInput?.focus(); - } - }} - onscroll={(e) => { - if (!onscroll) return; - const target = e.target as HTMLDivElement; - if (!target) return; +{#if open} + +
{ + if (e.key === 'Escape') { + popover.setOpen(false); + searchInput?.focus(); + } + }} + onscroll={(e) => { + if (!onscroll) return; + const target = e.target as HTMLDivElement; + if (!target) return; - const margin = 10; // 10px margin for top & bottom - const atTop = target.scrollTop < margin; - const atBottom = target.scrollTop + target.clientHeight > target.scrollHeight - margin; - onscroll({ event: e, top: atTop, bottom: atBottom, searchInput: searchInput?.value ?? '' }); - }} - tabindex="0" - {@attach minWidth({ options, mode: pickerWidth, matchElem: searchInput })} - {...popover.floating()} - > - {#each filteredItems as opt (opt.value)} - {@render option(opt)} + const margin = 10; // 10px margin for top & bottom + const atTop = target.scrollTop < margin; + const atBottom = target.scrollTop + target.clientHeight > target.scrollHeight - margin; + onscroll({ event: e, top: atTop, bottom: atBottom, searchInput: searchInput?.value ?? '' }); + }} + tabindex="0" + {@attach minWidth({ options, mode: pickerWidth, matchElem: searchInput })} + {...popover.floating()} + > + {#each filteredItems as opt (opt.value)} + {@render option(opt)} + {:else} + + {#if loading} + {@render option(loadingOption, true)} {:else} - - {#if loading} - {@render option(loadingOption, true)} - {:else} - {@render option(notFoundOption, true)} - {/if} - {/each} -
- {/if} - + {@render option(notFoundOption, true)} + {/if} + {/each} +
+{/if}