diff --git a/src/lib/components/atoms/Chip.svelte b/src/lib/components/atoms/Chip.svelte new file mode 100644 index 0000000..034defc --- /dev/null +++ b/src/lib/components/atoms/Chip.svelte @@ -0,0 +1,53 @@ + + + + +
setTimeout(onclick, 100))} + class={[ + "inline-flex cursor-pointer items-center gap-x-1 rounded-lg px-3 py-1.5 text-sm font-medium transition active:scale-95", + selected + ? "bg-primary-500 text-white active:bg-primary-400" + : "bg-gray-100 text-gray-700 active:bg-gray-200", + className, + ]} +> + + {@render children()} + + {#if selected && removable} + + {/if} +
diff --git a/src/lib/components/atoms/RowVirtualizer.svelte b/src/lib/components/atoms/RowVirtualizer.svelte index 67a684d..2641806 100644 --- a/src/lib/components/atoms/RowVirtualizer.svelte +++ b/src/lib/components/atoms/RowVirtualizer.svelte @@ -6,13 +6,22 @@ interface Props { class?: ClassValue; count: number; + estimateItemHeight: (index: number) => number; + getItemKey?: (index: number) => string | number; item: Snippet<[index: number]>; - itemHeight: (index: number) => number; itemGap?: number; placeholder?: Snippet; } - let { class: className, count, item, itemHeight, itemGap, placeholder }: Props = $props(); + let { + class: className, + count, + estimateItemHeight, + getItemKey, + item, + itemGap, + placeholder, + }: Props = $props(); let element: HTMLElement | undefined = $state(); let scrollMargin = $state(0); @@ -20,8 +29,9 @@ let virtualizer = $derived( createWindowVirtualizer({ count, - estimateSize: itemHeight, + estimateSize: estimateItemHeight, gap: itemGap, + getItemKey: getItemKey, scrollMargin, }), ); diff --git a/src/lib/components/atoms/buttons/ActionEntryButton.svelte b/src/lib/components/atoms/buttons/ActionEntryButton.svelte index c29fd7f..b257241 100644 --- a/src/lib/components/atoms/buttons/ActionEntryButton.svelte +++ b/src/lib/components/atoms/buttons/ActionEntryButton.svelte @@ -49,7 +49,7 @@ -