eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
2 lines • 2.76 kB
JavaScript
import{filterOptions,orderedSelection,reduceSelect,selectValueAtCursor,submitRowIndex}from"#setup/cli/select-state.js";function setupSelectionIntent(e,t={}){if(t.textNavigation&&e.type===`text`&&e.framing===`unframed`){if(e.value===`k`)return{kind:`move`,direction:`up`};if(e.value===`j`)return{kind:`move`,direction:`down`}}switch(e.type){case`ctrl-c`:case`escape`:return{kind:`cancel`};case`up`:case`ctrl-p`:return{kind:`move`,direction:`up`};case`down`:case`ctrl-n`:return{kind:`move`,direction:`down`};case`ctrl-r`:return{kind:`repaint`};case`enter`:return{kind:`submit`};default:return}}function isMultiSelect(e){return e.kind===`multi`||e.kind===`searchable-multi`}function isSearchableSelect(e){return e.kind===`search`||e.kind===`searchable-multi`}function updatedSelect(e,t){return{kind:`update`,select:reduceSelect(e.select,t,{options:e.options,searchAction:e.searchAction,submitRow:isMultiSelect(e)&&e.plannerNavigation!==!0})}}function submitSetupSelect(e){let t=isSearchableSelect(e)?filterOptions(e.options,e.select.filter,e.searchAction):[...e.options];if(isMultiSelect(e))return e.plannerNavigation===!0||e.select.cursor!==submitRowIndex(t)?updatedSelect(e,{type:`toggle`}):e.required&&e.select.selected.size===0?{kind:`error`,message:`Select at least one option, then submit.`}:{kind:`submit`,values:orderedSelection(e.options,e.select.selected)};let n=selectValueAtCursor(t,e.select.cursor);return n===void 0?t[e.select.cursor]?.completed?{kind:`ignore`}:{kind:`error`,message:`Type to match an option, then press enter.`}:{kind:`submit`,values:[n]}}function editSetupSelect(e){switch(e.key.type){case`backspace`:return isSearchableSelect(e)?updatedSelect(e,{type:`backspace`}):{kind:`ignore`};case`alt-backspace`:return isSearchableSelect(e)?updatedSelect(e,{type:`delete-word-backward`}):{kind:`ignore`};case`text`:{if(e.key.framing===`unframed`&&isMultiSelect(e)&&e.key.value===` `)return updatedSelect(e,{type:`toggle`});if(!isSearchableSelect(e))return{kind:`ignore`};let t=e.select,n={options:e.options,searchAction:e.searchAction,submitRow:isMultiSelect(e)&&e.plannerNavigation!==!0};for(let r of e.key.value.replaceAll(`
`,` `))r>=` `&&r!==``&&(t=reduceSelect(t,{type:`char`,char:r},n));return{kind:`update`,select:t}}default:return{kind:`ignore`}}}function reduceSetupSelectInput(e){let t=setupSelectionIntent(e.key,{textNavigation:!isSearchableSelect(e)});switch(t?.kind){case`cancel`:return e.key.type===`escape`&&isSearchableSelect(e)&&e.select.filter.length>0?updatedSelect(e,{type:`clear`}):{kind:`cancel`};case`repaint`:return{kind:`repaint`};case`move`:return updatedSelect(e,{type:t.direction});case`submit`:return submitSetupSelect(e);case void 0:return editSetupSelect(e)}}export{reduceSetupSelectInput,setupSelectionIntent};