import { Callable, Callable1, LineEdit, Variant } from 'godot' import { export_, onready } from 'godot.annotations' export default class AutocompleteLine extends LineEdit { @export_(Variant.Type.TYPE_BOOL) private auto_suggest: boolean = true @onready("SuggestionLine") private suggestion!: LineEdit autocomplete_list: string[] = [] last_autocomplete: number = -1 _on_text_changed!: Callable1<string> _ready(): void { this._on_text_changed = Callable.create(this, this.suggest) if (this.auto_suggest) { this.text_changed.connect(this._on_text_changed) } } suggest(value: string): boolean { const item = this.fuzzy_find(value) if (item > -1) { this.suggestion.text = this.autocomplete_list[item] return true } return false } autocomplete(value?: string) { this.text = value || this.suggestion.text this.suggestion.clear() } fuzzy_find(value: string): number { return this.autocomplete_list.findIndex(text => text.startsWith(value)) } }