feature/searchbar-enhance #17

Merged
ilia merged 48 commits from feature/searchbar-enhance into main 2026-01-18 14:04:53 +00:00
Showing only changes of commit a85b3cf217 - Show all commits

View File

@@ -10,10 +10,7 @@
<script lang="ts" generics="T"> <script lang="ts" generics="T">
import { createVirtualizer } from '$shared/lib'; import { createVirtualizer } from '$shared/lib';
import { cn } from '$shared/shadcn/utils/shadcn-utils'; import { cn } from '$shared/shadcn/utils/shadcn-utils';
import { import type { Snippet } from 'svelte';
type Snippet,
tick,
} from 'svelte';
interface Props { interface Props {
/** /**
@@ -57,6 +54,7 @@ let { items, itemHeight = 80, overscan = 5, class: className, children }: Props
const virtualizer = createVirtualizer(() => ({ const virtualizer = createVirtualizer(() => ({
count: items.length, count: items.length,
data: items,
estimateSize: typeof itemHeight === 'function' ? itemHeight : () => itemHeight, estimateSize: typeof itemHeight === 'function' ? itemHeight : () => itemHeight,
overscan, overscan,
})); }));
@@ -66,19 +64,22 @@ const virtualizer = createVirtualizer(() => ({
use:virtualizer.container use:virtualizer.container
class={cn( class={cn(
'relative overflow-auto border rounded-md bg-background', 'relative overflow-auto border rounded-md bg-background',
'outline-none focus-visible:ring-2 ring-ring ring-offset-2', 'h-150 w-full',
'h-full w-full',
className, className,
)} )}
role="listbox"
tabindex="0"
> >
<div
style:height="{virtualizer.totalSize}px"
class="w-full pointer-events-none"
>
</div>
{#each virtualizer.items as item (item.key)} {#each virtualizer.items as item (item.key)}
<div <div
use:virtualizer.measureElement use:virtualizer.measureElement
data-index={item.index} data-index={item.index}
class="absolute top-0 left-0 w-full translate-y-[var(--offset)] will-change-transform" class="absolute top-0 left-0 w-full"
style:--offset="{item.start}px" style:transform="translateY({item.start}px)"
> >
{@render children({ item: items[item.index], index: item.index })} {@render children({ item: items[item.index], index: item.index })}
</div> </div>