define [ "base" ], (App) -> inputSuggestionsController = ($scope, $element, $attrs, Keys) -> ctrl = @ ctrl.showHint = false ctrl.hasFocus = false ctrl.handleFocus = () -> ctrl.hasFocus = true ctrl.suggestion = null ctrl.handleBlur = () -> ctrl.showHint = false ctrl.hasFocus = false ctrl.suggestion = null ctrl.onBlur() ctrl.handleKeyDown = ($event) -> if ($event.which == Keys.TAB or $event.which == Keys.ENTER) and ctrl.suggestion? and ctrl.suggestion != "" $event.preventDefault() ctrl.localNgModel += ctrl.suggestion ctrl.suggestion = null ctrl.showHint = false $scope.$watch "$ctrl.localNgModel", (newVal, oldVal) -> if ctrl.hasFocus and newVal != oldVal ctrl.suggestion = null ctrl.showHint = false ctrl.getSuggestion({ userInput: newVal }) .then (suggestion) -> if suggestion? and newVal == ctrl.localNgModel ctrl.showHint = true ctrl.suggestion = suggestion.replace newVal, "" .catch () -> ctrl.suggestion = null return App.component "inputSuggestions", { bindings: localNgModel: "=ngModel" localNgModelOptions: "=?ngModelOptions" getSuggestion: "&" onBlur: "&?" inputId: "@?" inputName: "@?" inputPlaceholder: "@?" inputType: "@?" inputRequired: "=?" controller: inputSuggestionsController template: [ '