wip
This commit is contained in:
		@@ -1,5 +1,5 @@
 | 
			
		||||
<script>
 | 
			
		||||
	import { createEventDispatcher, onMount } from "svelte";
 | 
			
		||||
	import { createEventDispatcher, onMount, tick } from "svelte";
 | 
			
		||||
 | 
			
		||||
	// Props
 | 
			
		||||
	export let options = [];
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
	let visibleItems = [];
 | 
			
		||||
	let startIndex = 0;
 | 
			
		||||
	let itemHeight = 40; // Fixed height for each option (in pixels)
 | 
			
		||||
	let visibleCount = 10; // Number of items to render (adjusted based on container height)
 | 
			
		||||
	let visibleCount = 10; // Default number of items to render
 | 
			
		||||
	let focusedIndex = -1; // Track the focused option index (-1 means no focus)
 | 
			
		||||
 | 
			
		||||
	const dispatch = createEventDispatcher();
 | 
			
		||||
@@ -50,8 +50,9 @@
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Calculate visible item count based on container height
 | 
			
		||||
	function updateVisibleCount() {
 | 
			
		||||
	async function updateVisibleCount() {
 | 
			
		||||
		if (container) {
 | 
			
		||||
			await tick(); // Wait for DOM to render
 | 
			
		||||
			visibleCount = Math.ceil(container.clientHeight / itemHeight) + 2; // Buffer of 2 items
 | 
			
		||||
			updateVisibleItems();
 | 
			
		||||
		}
 | 
			
		||||
@@ -67,12 +68,11 @@
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Toggle dropdown
 | 
			
		||||
	function toggleDropdown() {
 | 
			
		||||
	async function toggleDropdown() {
 | 
			
		||||
		isOpen = !isOpen;
 | 
			
		||||
		if (isOpen) {
 | 
			
		||||
			// Update visible count when dropdown opens
 | 
			
		||||
			setTimeout(updateVisibleCount, 0); // Ensure container is rendered
 | 
			
		||||
			focusedIndex = -1; // Reset focus when opening
 | 
			
		||||
			await updateVisibleCount(); // Ensure container is rendered
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -85,8 +85,9 @@
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Handle input focus to open dropdown
 | 
			
		||||
	function handleInputFocus() {
 | 
			
		||||
	async function handleInputFocus() {
 | 
			
		||||
		isOpen = true;
 | 
			
		||||
		await updateVisibleCount(); // Ensure items render on focus
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Handle keyboard navigation
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user