UNPKG

anl

Version:
2 lines (1 loc) 3.24 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("yoctocolors-cjs"),s=require("../../../figures/dist/esm/index.mjs.js"),r=require("ansi-escapes"),t=require("../../../core/dist/esm/lib/create-prompt.mjs.js"),i=require("../../../core/dist/esm/lib/use-ref.mjs.js"),o=require("../../../core/dist/esm/lib/make-theme.mjs.js"),a=require("../../../core/dist/esm/lib/use-prefix.mjs.js"),n=require("../../../core/dist/esm/lib/use-state.mjs.js"),l=require("../../../core/dist/esm/lib/use-memo.mjs.js"),u=require("../../../core/dist/esm/lib/use-keypress.mjs.js"),c=require("../../../core/dist/esm/lib/Separator.mjs.js"),d=require("../../../core/dist/esm/lib/use-effect.mjs.js"),m=require("../../../core/dist/esm/lib/pagination/use-pagination.mjs.js"),p=require("../../../core/dist/esm/lib/errors.mjs.js"),f=require("../../../core/dist/esm/lib/key.mjs.js");function j(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var y=j(e),b=j(r);const h={icon:{cursor:s.default.pointer},style:{disabled:e=>y.default.dim(`- ${e}`),description:e=>y.default.cyan(e)},helpMode:"auto"};function g(e){return!c.Separator.isSeparator(e)&&!e.disabled}var S=t.createPrompt(((e,s)=>{const{choices:r,loop:t=!0,pageSize:j=7}=e,y=i.useRef(!0),S=o.makeTheme(h,e.theme),$=a.usePrefix({theme:S}),[q,v]=n.useState("pending"),w=i.useRef(),x=l.useMemo((()=>{const e=r.findIndex(g),s=r.findLastIndex(g);if(e<0)throw new p.ValidationError("[select prompt] No selectable choices. All choices are disabled.");return{first:e,last:s}}),[r]),K=l.useMemo((()=>"default"in e?r.findIndex((s=>g(s)&&s.value===e.default)):-1),[e.default,r]),[k,L]=n.useState(-1===K?x.first:K),M=r[k];u.useKeypress(((e,i)=>{if(clearTimeout(w.current),f.isEnterKey(e))v("done"),s(M.value);else if(f.isUpKey(e)||f.isDownKey(e)){if(i.clearLine(0),t||f.isUpKey(e)&&k!==x.first||f.isDownKey(e)&&k!==x.last){const s=f.isUpKey(e)?-1:1;let t=k;do{t=(t+s+r.length)%r.length}while(!g(r[t]));L(t)}}else if(f.isNumberKey(e)){i.clearLine(0);const s=Number(e.name)-1,t=r[s];null!=t&&g(t)&&L(s)}else if(f.isBackspaceKey(e))i.clearLine(0);else{const e=i.line.toLowerCase(),s=r.findIndex((s=>!(c.Separator.isSeparator(s)||!g(s))&&String(s.name||s.value).toLowerCase().startsWith(e)));s>=0&&L(s),w.current=setTimeout((()=>{i.clearLine(0)}),700)}})),d.useEffect((()=>()=>{clearTimeout(w.current)}),[]);const I=S.style.message(e.message);let U="",P="";("always"===S.helpMode||"auto"===S.helpMode&&y.current)&&(y.current=!1,r.length>j?P=`\n${S.style.help("(Use arrow keys to reveal more choices)")}`:U=S.style.help("(Use arrow keys)"));const T=m.usePagination({items:r,active:k,renderItem({item:e,isActive:s}){if(c.Separator.isSeparator(e))return` ${e.separator}`;const r=String(e.name||e.value);if(e.disabled){const s="string"==typeof e.disabled?e.disabled:"(disabled)";return S.style.disabled(`${r} ${s}`)}return(s?S.style.highlight:e=>e)(`${s?S.icon.cursor:" "} ${r}`)},pageSize:j,loop:t});if("done"===q){const e=M.short??M.name??String(M.value);return`${$} ${I} ${S.style.answer(e)}`}const E=M.description?`\n${S.style.description(M.description)}`:"";return`${[$,I,U].filter(Boolean).join(" ")}\n${T}${P}${E}${b.default.cursorHide}`}));exports.Separator=c.Separator,exports.default=S;