{
if (richMenu) menuDismissed = false;
}}
on:focus
on:blur
on:keydown
on:keydown={(event) => {
if (richMenu) {
handleRichKeydown(event);
return;
}
switch (event.key) {
case "Enter":
selectResult();
break;
case "ArrowDown":
event.preventDefault();
if (selectedResultIndex === results.length - 1) {
selectedResultIndex = 0;
} else {
selectedResultIndex += 1;
}
break;
case "ArrowUp":
event.preventDefault();
if (selectedResultIndex === 0) {
selectedResultIndex = results.length - 1;
} else {
selectedResultIndex -= 1;
}
break;
case "Escape":
if (value === "") {
// If the search bar is empty, deactivate the input.
active = false;
dispatch("close", { trigger: "escape-key" });
}
// Reset the search query but keep the search bar active.
// Do not dispatch "clear" event as that should fire only on the "x" button.
value = "";
selectedResultIndex = 0;
break;
}
}}
on:paste
>
{#if active}
{/if}
{#if richMenu && active}
{#if loading}
{#each skeletonWidths as width, i (i)}
{/each}
{:else}
{#if showNoResults}
{/if}
{/if}
{:else if active && results.length > 0}
{#each results as result, index (result.id ?? index)}