UNPKG

ink-tree-select

Version:
3 lines 3.71 kB
import ee,{useMemo as te}from"react";import j from"fs";import z from"chalk";import L from"fast-glob";var{globSync:N}=L,_=` `,$=" ",W="\u251C\u2500\u2500 ",k="\u2514\u2500\u2500 ",q="\u2502 ",J=(e,t)=>{if(!j.existsSync(e))throw new Error(`Could not find '${e}'`);if(!j.statSync(e).isDirectory())throw new Error(`'${e}' is not a directory`);let o=e.replace(/\\/g,"/")+"/**/*";return N(o,{onlyFiles:!1,markDirectories:!0,ignore:["node_modules/**",...t]})},P=(e,t={})=>{let{rootAlias:r=".",ignore:o=[]}=t,n=J(e,o),s={name:r,dir:!0,fullPath:e,branches:[]};for(let m of n){let p=m.replace(e,"").split("/").filter(Boolean),u=m.endsWith("/"),d=s.branches;for(let l=0;l<p.length;l++){let a=[".",...p.slice(0,l+1)].join("/"),i=p[l],c=d.find(f=>f.name===i);c||(c={name:i,dir:u,fullPath:a,branches:[]},d.push(c)),d=c.branches}}return s},C=(e,t,r,o,n,s)=>{if(e.length===0)return"";let{multi:m,color:p}=s,u=z[p],d="";for(let l=0;l<e.length;l++){let a=l===e.length-1,i=e[l],c=t===i.fullPath,f=r.includes(i.fullPath),x=m?f?"(*) ":"( ) ":c?"\u25CF ":"",h=c?u(x):x,S=[_,...n.map(T=>T===0?q:$),a?k:W,h,c?u(i.name):i.name,c?u(i.dir?"/":""):i.dir?"/":""].flat().join(""),D=[...n,a?1:0];d+=S,d+=C(i.branches,t,r,o+1,D,s)}return d},M=(e,t,r,o)=>(o.multi=o.multi??!1,o.color=o.color??"blue",e.name+C(e.branches,t,r,0,[],o)),y=e=>[e.fullPath,...e.branches.flatMap(y)];import{Box as X,Text as F,useInput as Y}from"ink";import B,{useMemo as Z,useState as G,useEffect as R}from"react";import w from"react";import{Box as K,Newline as E,Text as Q}from"ink";var U=()=>w.createElement(K,{flexDirection:"column"},w.createElement(Q,{color:"blueBright"},"Instructions:",w.createElement(E,null),"[Enter]: Choose path",w.createElement(E,null),"[\u2191 / \u2193]: Move pointer")),b=U;var I=({tree:e,onChange:t,onSelect:r,options:o={}})=>{let[n,s]=G(0),[m,p]=G(!1),{previewColor:u,indicatorColor:d}=o,l=Z(()=>y(e).slice(1),[e]),a=l[n],i=l.length-1;return R(()=>{t==null||t(a)},[a]),Y((c,f)=>{if(f.return){p(!0),r==null||r(a);return}if(f.upArrow)return s(x=>Math.max(0,--x));if(f.downArrow)return s(x=>Math.min(++x,i))},{isActive:!m}),B.createElement(X,{flexDirection:"column",rowGap:1},B.createElement(b,null),B.createElement(F,null,M(e,a,[],{color:d})),B.createElement(F,{color:u??"blue"},a))};var re=({root:e,onChange:t,onSelect:r,options:o={}})=>{let{ignore:n,rootAlias:s,previewColor:m,indicatorColor:p}=o,u=te(()=>P(e,{rootAlias:s,ignore:n}),[e]);return ee.createElement(I,{tree:u,onChange:t,onSelect:r,options:{previewColor:m,indicatorColor:p}})};import le,{useMemo as ce}from"react";import{Box as oe,Text as H,useInput as ie}from"ink";import v,{useMemo as ne,useState as V,useEffect as se}from"react";var A=({tree:e,onChange:t,onSelect:r,options:o={}})=>{let[n,s]=V(0),[m,p]=V([]),[u,d]=V(!1),{previewColor:l,indicatorColor:a}=o,i=ne(()=>y(e).slice(1),[e]),c=m.map(h=>i[h]),f=i[n],x=i.length-1;return se(()=>{t==null||t(f,c)},[f]),ie((h,S)=>{if(S.return){d(!0),r==null||r(c);return}if(h===" ")return p(T=>{let g=[...T],O=g.indexOf(n);return O===-1?g.push(n):g.splice(O,1),g});if(S.upArrow)return s(T=>Math.max(0,--T));if(S.downArrow)return s(T=>Math.min(++T,x))},{isActive:!u}),v.createElement(oe,{flexDirection:"column",rowGap:1},v.createElement(b,null),v.createElement(H,null,M(e,f,c,{multi:!0,color:a})),v.createElement(H,{color:l??"blue"},f))};var pe=({root:e,onChange:t,onSelect:r,options:o={}})=>{let{ignore:n,rootAlias:s,previewColor:m,indicatorColor:p}=o,u=ce(()=>P(e,{rootAlias:s,ignore:n}),[e]);return le.createElement(A,{tree:u,onChange:t,onSelect:r,options:{previewColor:m,indicatorColor:p}})};export{pe as MultiTreeSelect,A as MultiVirtualTreeSelect,re as TreeSelect,I as VirtualTreeSelect}; //# sourceMappingURL=index.js.map