collet 0.1.1

Relentless agentic coding orchestrator with zero-drop agent loops
Documentation
<script lang="ts" module>
	export interface AutocompleteItem {
		label: string;
		description?: string;
		icon?: string;
	}
</script>

<script lang="ts">
	let {
		items,
		visible,
		selectedIndex = 0,
		onselect
	}: {
		items: AutocompleteItem[];
		visible: boolean;
		selectedIndex?: number;
		onselect: (item: AutocompleteItem) => void;
	} = $props();
</script>

{#if visible && items.length > 0}
	<div class="autocomplete-popup" role="listbox" aria-label="Suggestions">
		{#each items as item, i}
			<div
				class="autocomplete-item"
				class:selected={i === selectedIndex}
				onclick={() => onselect(item)}
				onkeydown={(e) => { if (e.key === 'Enter' || e.key === ' ') onselect(item); }}
				role="option"
				aria-selected={i === selectedIndex}
				tabindex="-1"
			>
				{#if item.icon}<span class="item-icon">{item.icon}</span>{/if}
				<span class="item-label">{item.label}</span>
				{#if item.description}<span class="item-desc">{item.description}</span>{/if}
			</div>
		{/each}
	</div>
{/if}

<style>
	.autocomplete-popup {
		position: absolute;
		bottom: 100%;
		left: 0;
		right: 0;
		background: var(--bg-elevated);
		border: 1px solid var(--border);
		max-height: 300px;
		overflow-y: auto;
		z-index: 50;
		font-family: var(--font-mono);
		font-size: 0.875rem;
	}

	.autocomplete-item {
		display: flex;
		align-items: center;
		gap: 0.5rem;
		padding: 0.375rem 0.75rem;
		cursor: pointer;
		color: var(--fg);
	}

	.autocomplete-item:hover,
	.autocomplete-item.selected {
		background: var(--accent);
		color: var(--bg);
	}

	.item-icon {
		flex-shrink: 0;
	}

	.item-label {
		flex: 1;
	}

	.item-desc {
		color: var(--fg-dim);
		font-size: 0.75rem;
	}

	.autocomplete-item.selected .item-desc,
	.autocomplete-item:hover .item-desc {
		color: inherit;
		opacity: 0.7;
	}
</style>